@@ -33,7 +33,7 @@ func (i *Interactor) IsApproved(ctx context.Context, d *ent.Deployment) bool {
3333}
3434
3535func (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
191200func (i * Interactor ) runClosingInactiveDeployment (stop <- chan struct {}) {
0 commit comments