From b2cac60c2e65498df0f43cc23b0bb46a51efe7a9 Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 19 Dec 2021 16:44:32 +0900 Subject: [PATCH 1/4] Add a new status queued --- go.mod | 5 +++++ go.sum | 4 ++++ model/ent/deployment/deployment.go | 3 ++- model/ent/migrate/schema.go | 2 +- model/ent/schema/deployment.go | 1 + openapi/v1.yaml | 1 + 6 files changed, 14 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index b0ef0de6..855be6e4 100644 --- a/go.mod +++ b/go.mod @@ -33,6 +33,8 @@ require ( require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cespare/xxhash/v2 v2.1.1 // indirect + github.com/go-bindata/go-bindata v1.0.1-0.20190711162640-ee3c2418e368 // indirect + github.com/go-openapi/inflect v0.19.0 // indirect github.com/go-playground/locales v0.13.0 // indirect github.com/go-playground/universal-translator v0.17.0 // indirect github.com/go-playground/validator/v10 v10.6.1 // indirect @@ -63,9 +65,12 @@ require ( go.uber.org/atomic v1.7.0 // indirect go.uber.org/multierr v1.6.0 // indirect golang.org/x/crypto v0.0.0-20210711020723-a769d52b0f97 // indirect + golang.org/x/mod v0.4.2 // indirect golang.org/x/net v0.0.0-20210525063256-abc453219eb5 // indirect golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1 // indirect golang.org/x/text v0.3.6 // indirect + golang.org/x/tools v0.1.5 // indirect + golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect google.golang.org/appengine v1.6.6 // indirect google.golang.org/protobuf v1.26.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect diff --git a/go.sum b/go.sum index b60ac90d..e545943d 100644 --- a/go.sum +++ b/go.sum @@ -104,6 +104,7 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.5.0/go.mod h1:Nd6IXA8m5kNZdNEHMBd93KT+mdY3+bewLgRvmCsR2Do= github.com/gin-gonic/gin v1.7.7 h1:3DoBmSbJbZAWqXJC3SLjAPfutPJJRN1U5pALB7EeTTs= github.com/gin-gonic/gin v1.7.7/go.mod h1:axIBovoeJpVj8S3BwE0uPMTeReE4+AfFtqpqaZ1qq1U= +github.com/go-bindata/go-bindata v1.0.1-0.20190711162640-ee3c2418e368 h1:WNHfSP1q2vuAa9vF54RrhCl4nqxCjVcXhlbsRXbGOSY= github.com/go-bindata/go-bindata v1.0.1-0.20190711162640-ee3c2418e368/go.mod h1:7xCgX1lzlrXPHkfvn3EhumqHkmSlzt8at9q7v0ax19c= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -114,6 +115,7 @@ github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vb github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= +github.com/go-openapi/inflect v0.19.0 h1:9jCH9scKIbHeV9m12SmPilScz6krDxKRasNNSNPXu/4= github.com/go-openapi/inflect v0.19.0/go.mod h1:lHpZVlpIQqLyKwJ4N+YSc9hchQy/i12fJykb83CRBH4= github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= @@ -518,6 +520,7 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.4.2 h1:Gz96sIWK3OalVv/I/qNygP42zyoKp3xptRVCWRFEBvo= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -685,6 +688,7 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= +golang.org/x/tools v0.1.5 h1:ouewzE6p+/VEB31YYnTbEJdi8pFqKp4P4n85vwo3DHA= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/xerrors v0.0.0-20190410155217-1f06c39b4373/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20190513163551-3ee3066db522/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= diff --git a/model/ent/deployment/deployment.go b/model/ent/deployment/deployment.go index 6770d658..094708f1 100644 --- a/model/ent/deployment/deployment.go +++ b/model/ent/deployment/deployment.go @@ -176,6 +176,7 @@ const DefaultStatus = StatusWaiting const ( StatusWaiting Status = "waiting" StatusCreated Status = "created" + StatusQueued Status = "queued" StatusRunning Status = "running" StatusSuccess Status = "success" StatusFailure Status = "failure" @@ -189,7 +190,7 @@ func (s Status) String() string { // StatusValidator is a validator for the "status" field enum values. It is called by the builders before save. func StatusValidator(s Status) error { switch s { - case StatusWaiting, StatusCreated, StatusRunning, StatusSuccess, StatusFailure, StatusCanceled: + case StatusWaiting, StatusCreated, StatusQueued, StatusRunning, StatusSuccess, StatusFailure, StatusCanceled: return nil default: return fmt.Errorf("deployment: invalid enum value for status field: %q", s) diff --git a/model/ent/migrate/schema.go b/model/ent/migrate/schema.go index cce3caf4..29066870 100644 --- a/model/ent/migrate/schema.go +++ b/model/ent/migrate/schema.go @@ -63,7 +63,7 @@ var ( {Name: "type", Type: field.TypeEnum, Enums: []string{"commit", "branch", "tag"}, Default: "commit"}, {Name: "env", Type: field.TypeString}, {Name: "ref", Type: field.TypeString}, - {Name: "status", Type: field.TypeEnum, Enums: []string{"waiting", "created", "running", "success", "failure", "canceled"}, Default: "waiting"}, + {Name: "status", Type: field.TypeEnum, Enums: []string{"waiting", "created", "queued", "running", "success", "failure", "canceled"}, Default: "waiting"}, {Name: "uid", Type: field.TypeInt64, Nullable: true}, {Name: "sha", Type: field.TypeString, Nullable: true}, {Name: "html_url", Type: field.TypeString, Nullable: true, Size: 2000}, diff --git a/model/ent/schema/deployment.go b/model/ent/schema/deployment.go index e8c08b65..7dc81eb2 100644 --- a/model/ent/schema/deployment.go +++ b/model/ent/schema/deployment.go @@ -30,6 +30,7 @@ func (Deployment) Fields() []ent.Field { Values( "waiting", "created", + "queued", "running", "success", "failure", diff --git a/openapi/v1.yaml b/openapi/v1.yaml index dcdc775b..fa9aa080 100644 --- a/openapi/v1.yaml +++ b/openapi/v1.yaml @@ -1616,6 +1616,7 @@ components: enum: - waiting - created + - queued - running - success - failure From 6902e52e8f674d8ab11d3758cd25c90771c09a8d Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 19 Dec 2021 16:59:48 +0900 Subject: [PATCH 2/4] Add to handle the 'queued' status in the hooks --- internal/server/hooks/hook.go | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/internal/server/hooks/hook.go b/internal/server/hooks/hook.go index d958257c..62756d9e 100644 --- a/internal/server/hooks/hook.go +++ b/internal/server/hooks/hook.go @@ -257,10 +257,14 @@ func mapGithubDeploymentStatus(e *github.DeploymentStatusEvent) *ent.DeploymentS // "success" to "success", and "failure" to "failure". func mapGithubState(state string) deployment.Status { switch state { + case "queued": + return deployment.StatusQueued case "success": return deployment.StatusSuccess case "failure": return deployment.StatusFailure + case "error": + return deployment.StatusFailure default: return deployment.StatusRunning } From 66ad91e75cad8ddffcf224c04c93dee2d1e16b46 Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 19 Dec 2021 17:00:26 +0900 Subject: [PATCH 3/4] Fix to handle queued in the Slack --- internal/server/slack/notification.go | 2 ++ 1 file changed, 2 insertions(+) diff --git a/internal/server/slack/notification.go b/internal/server/slack/notification.go index 87b9b8a2..8e9bed99 100644 --- a/internal/server/slack/notification.go +++ b/internal/server/slack/notification.go @@ -157,6 +157,8 @@ func mapDeploymentStatusToColor(status deployment.Status) string { return colorGray case deployment.StatusCreated: return colorPurple + case deployment.StatusQueued: + return colorPurple case deployment.StatusRunning: return colorPurple case deployment.StatusSuccess: From 613712bc9eb1cf8337c3c4c9f233424ba49794f0 Mon Sep 17 00:00:00 2001 From: noah Date: Sun, 19 Dec 2021 17:00:50 +0900 Subject: [PATCH 4/4] Fix to handle the 'queued' status in UI --- ui/src/apis/deployment.ts | 4 +++ ui/src/components/ActivityLogs.tsx | 38 ++++++++++++--------- ui/src/components/DeploymentStatusBadge.tsx | 2 ++ ui/src/models/Deployment.ts | 1 + ui/src/redux/main.ts | 2 ++ 5 files changed, 31 insertions(+), 16 deletions(-) diff --git a/ui/src/apis/deployment.ts b/ui/src/apis/deployment.ts index 14ab2343..adc15a0a 100644 --- a/ui/src/apis/deployment.ts +++ b/ui/src/apis/deployment.ts @@ -102,6 +102,8 @@ function mapDeploymentStatusEnum(s: string) { return DeploymentStatusEnum.Waiting case "created": return DeploymentStatusEnum.Created + case "queued": + return DeploymentStatusEnum.Queued case "running": return DeploymentStatusEnum.Running case "success": @@ -132,6 +134,8 @@ function mapDeploymentStatusToString(status: DeploymentStatusEnum): string { return "waiting" case DeploymentStatusEnum.Created: return "created" + case DeploymentStatusEnum.Queued: + return "queued" case DeploymentStatusEnum.Running: return "running" case DeploymentStatusEnum.Success: diff --git a/ui/src/components/ActivityLogs.tsx b/ui/src/components/ActivityLogs.tsx index 8c3c6711..5e6f1b50 100644 --- a/ui/src/components/ActivityLogs.tsx +++ b/ui/src/components/ActivityLogs.tsx @@ -14,23 +14,27 @@ interface ActivityLogsProps { } export default function ActivityLogs(props: ActivityLogsProps): JSX.Element { - return - {props.deployments.map((d, idx) => { - const dot = (d.status === DeploymentStatusEnum.Running)? - : - null - const avatar = + return ( + + {props.deployments.map((d, idx) => { + const dot = (d.status === DeploymentStatusEnum.Running)? + : + null + const avatar = - return -

- {d.env} • View detail #{d.number} -

-

- Deployed by {avatar} {moment(d.createdAt).fromNow()} -

-
- })} -
+ return ( + +

+ {d.env} • View detail #{d.number} +

+

+ Deployed by {avatar} {moment(d.createdAt).fromNow()} +

+
+ ) + })} +
+ ) } // https://ant.design/components/timeline/#Timeline.Item @@ -40,6 +44,8 @@ const getStatusColor = (status: DeploymentStatusEnum) => { return "gray" case DeploymentStatusEnum.Created: return "purple" + case DeploymentStatusEnum.Queued: + return "purple" case DeploymentStatusEnum.Running: return "purple" case DeploymentStatusEnum.Success: diff --git a/ui/src/components/DeploymentStatusBadge.tsx b/ui/src/components/DeploymentStatusBadge.tsx index 8e83e799..f2f85cfa 100644 --- a/ui/src/components/DeploymentStatusBadge.tsx +++ b/ui/src/components/DeploymentStatusBadge.tsx @@ -20,6 +20,8 @@ const getStatusColor = (status: DeploymentStatusEnum) => { return "gray" case DeploymentStatusEnum.Created: return "purple" + case DeploymentStatusEnum.Queued: + return "purple" case DeploymentStatusEnum.Running: return "purple" case DeploymentStatusEnum.Success: diff --git a/ui/src/models/Deployment.ts b/ui/src/models/Deployment.ts index e7caab8a..969c4cac 100644 --- a/ui/src/models/Deployment.ts +++ b/ui/src/models/Deployment.ts @@ -27,6 +27,7 @@ export enum DeploymentType { export enum DeploymentStatusEnum { Waiting = "waiting", Created = "created", + Queued = "queued", Running = "running", Success = "success", Failure = "failure", diff --git a/ui/src/redux/main.ts b/ui/src/redux/main.ts index 004dadbf..464bdcce 100644 --- a/ui/src/redux/main.ts +++ b/ui/src/redux/main.ts @@ -85,6 +85,7 @@ export const searchDeployments = createAsyncThunk