Skip to content
This repository was archived by the owner on May 30, 2024. It is now read-only.

Commit 74046d4

Browse files
author
noah
committed
Add the verfication for a frozen window
1 parent d3b016c commit 74046d4

File tree

3 files changed

+23
-10
lines changed

3 files changed

+23
-10
lines changed

internal/interactor/deployment.go

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ func (i *Interactor) IsApproved(ctx context.Context, d *ent.Deployment) bool {
3333
}
3434

3535
func (i *Interactor) Deploy(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, env *extent.Env) (*ent.Deployment, error) {
36-
if ok, err := i.isDeployable(ctx, u, r, d, env); !ok {
36+
if err := i.isDeployable(ctx, u, r, d, env); err != nil {
3737
return nil, err
3838
}
3939

@@ -124,7 +124,7 @@ func (i *Interactor) DeployToRemote(ctx context.Context, u *ent.User, r *ent.Rep
124124
)
125125
}
126126

127-
if ok, err := i.isDeployable(ctx, u, r, d, env); !ok {
127+
if err := i.isDeployable(ctx, u, r, d, env); err != nil {
128128
return nil, err
129129
}
130130

@@ -171,21 +171,30 @@ func (i *Interactor) createRemoteDeployment(ctx context.Context, u *ent.User, r
171171
return i.SCM.CreateRemoteDeployment(ctx, u, r, d, env)
172172
}
173173

174-
func (i *Interactor) isDeployable(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, env *extent.Env) (bool, error) {
175-
if ok, err := env.IsDeployableRef(d.Ref); err != nil {
176-
return false, err
177-
} else if !ok {
178-
return false, e.NewErrorWithMessage(e.ErrorCodeEntityUnprocessable, "The ref is not matched with 'deployable_ref'.", nil)
174+
func (i *Interactor) isDeployable(ctx context.Context, u *ent.User, r *ent.Repo, d *ent.Deployment, env *extent.Env) error {
175+
// Skip verifications for roll back.
176+
if !d.IsRollback {
177+
if ok, err := env.IsDeployableRef(d.Ref); !ok {
178+
return e.NewErrorWithMessage(e.ErrorCodeEntityUnprocessable, "The ref is not matched with 'deployable_ref'.", nil)
179+
} else if err != nil {
180+
return err
181+
}
179182
}
180183

181184
// Check that the environment is locked.
182185
if locked, err := i.Store.HasLockOfRepoForEnv(ctx, r, d.Env); locked {
183-
return false, e.NewError(e.ErrorCodeDeploymentLocked, err)
186+
return e.NewError(e.ErrorCodeDeploymentLocked, err)
187+
} else if err != nil {
188+
return err
189+
}
190+
191+
if freezed, err := env.IsFreezed(time.Now().UTC()); freezed {
192+
return e.NewError(e.ErrorCodeDeploymentFreezed, err)
184193
} else if err != nil {
185-
return false, e.NewError(e.ErrorCodeInternalError, err)
194+
return err
186195
}
187196

188-
return true, nil
197+
return nil
189198
}
190199

191200
func (i *Interactor) runClosingInactiveDeployment(stop <-chan struct{}) {

pkg/e/code.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ const (
1717
ErrorCodeDeploymentInvalid ErrorCode = "deployment_invalid"
1818
// ErrorCodeDeploymentLocked is when the environment is locked.
1919
ErrorCodeDeploymentLocked ErrorCode = "deployment_locked"
20+
// ErrorCodeDeploymentFreezed is when the time in in the freeze window.
21+
ErrorCodeDeploymentFreezed ErrorCode = "deployment_freezed"
2022
// ErrorCodeDeploymentUnapproved is when the deployment is not approved.
2123
ErrorCodeDeploymentNotApproved ErrorCode = "deployment_not_approved"
2224
// ErrorCodeDeploymentStatusNotWaiting is the status must be 'waiting' to create a remote deployment.

pkg/e/trans.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ var messages = map[ErrorCode]string{
88
ErrorCodeDeploymentConflict: "The conflict occurs, please retry.",
99
ErrorCodeDeploymentInvalid: "The validation has failed.",
1010
ErrorCodeDeploymentLocked: "The environment is locked.",
11+
ErrorCodeDeploymentFreezed: "It is in the deploy frozen window.",
1112
ErrorCodeDeploymentNotApproved: "The deployment is not approved",
1213
ErrorCodeDeploymentStatusInvalid: "The deployment status is invalid",
1314
ErrorCodeEntityNotFound: "It is not found.",
@@ -35,6 +36,7 @@ var httpCodes = map[ErrorCode]int{
3536
ErrorCodeDeploymentConflict: http.StatusUnprocessableEntity,
3637
ErrorCodeDeploymentInvalid: http.StatusUnprocessableEntity,
3738
ErrorCodeDeploymentLocked: http.StatusUnprocessableEntity,
39+
ErrorCodeDeploymentFreezed: http.StatusUnprocessableEntity,
3840
ErrorCodeDeploymentNotApproved: http.StatusUnprocessableEntity,
3941
ErrorCodeDeploymentStatusInvalid: http.StatusUnprocessableEntity,
4042
ErrorCodeEntityNotFound: http.StatusNotFound,

0 commit comments

Comments
 (0)