@@ -104,25 +104,23 @@ func RunCommandsPerProject(commandsPerProject []ProjectCommand, repoOwner string
104104 case "digger plan" :
105105 utils .SendUsageRecord (repoOwner , eventName , "plan" )
106106 ciService .SetStatus (prNumber , "pending" , projectCommands .ProjectName + "/plan" )
107- err := diggerExecutor .Plan (prNumber )
107+ planPerformed , err := diggerExecutor .Plan (prNumber )
108108 if err != nil {
109109 log .Printf ("Failed to run digger plan command. %v" , err )
110110 ciService .SetStatus (prNumber , "failure" , projectCommands .ProjectName + "/plan" )
111-
112111 return false , fmt .Errorf ("failed to run digger plan command. %v" , err )
113- } else {
112+ } else if planPerformed {
114113 ciService .SetStatus (prNumber , "success" , projectCommands .ProjectName + "/plan" )
115114 }
116115 case "digger apply" :
117116 utils .SendUsageRecord (repoName , eventName , "apply" )
118117 ciService .SetStatus (prNumber , "pending" , projectCommands .ProjectName + "/apply" )
119- err := diggerExecutor .Apply (prNumber )
118+ applyPerformed , err := diggerExecutor .Apply (prNumber )
120119 if err != nil {
121120 log .Printf ("Failed to run digger apply command. %v" , err )
122121 ciService .SetStatus (prNumber , "failure" , projectCommands .ProjectName + "/apply" )
123-
124122 return false , fmt .Errorf ("failed to run digger apply command. %v" , err )
125- } else {
123+ } else if applyPerformed {
126124 ciService .SetStatus (prNumber , "success" , projectCommands .ProjectName + "/apply" )
127125 appliesPerProject [projectCommands .ProjectName ] = true
128126 }
@@ -430,13 +428,13 @@ func (d DiggerExecutor) storedPlanFilePath() string {
430428 return path .Join (d .RepoOwner , d .planFileName ())
431429}
432430
433- func (d DiggerExecutor ) Plan (prNumber int ) error {
434- res , err := d .ProjectLock .Lock (prNumber )
431+ func (d DiggerExecutor ) Plan (prNumber int ) ( bool , error ) {
432+ locked , err := d .ProjectLock .Lock (prNumber )
435433 if err != nil {
436- return fmt .Errorf ("error locking project: %v" , err )
434+ return false , fmt .Errorf ("error locking project: %v" , err )
437435 }
438- log .Printf ("Lock result: %t\n " , res )
439- if res {
436+ log .Printf ("Lock result: %t\n " , locked )
437+ if locked {
440438 var planSteps []configuration.Step
441439
442440 if d .PlanStage != nil {
@@ -455,32 +453,32 @@ func (d DiggerExecutor) Plan(prNumber int) error {
455453 if step .Action == "init" {
456454 _ , _ , err := d .TerraformExecutor .Init (step .ExtraArgs , d .StateEnvVars )
457455 if err != nil {
458- return fmt .Errorf ("error running init: %v" , err )
456+ return false , fmt .Errorf ("error running init: %v" , err )
459457 }
460458 }
461459 if step .Action == "plan" {
462460 planArgs := []string {"-out" , d .planFileName ()}
463461 planArgs = append (planArgs , step .ExtraArgs ... )
464462 isNonEmptyPlan , stdout , stderr , err := d .TerraformExecutor .Plan (planArgs , d .CommandEnvVars )
465463 if err != nil {
466- return fmt .Errorf ("error executing plan: %v" , err )
464+ return false , fmt .Errorf ("error executing plan: %v" , err )
467465 }
468466 if d .PlanStorage != nil {
469467 planExists , err := d .PlanStorage .PlanExists (d .storedPlanFilePath ())
470468 if err != nil {
471- return fmt .Errorf ("error checking if plan exists: %v" , err )
469+ return false , fmt .Errorf ("error checking if plan exists: %v" , err )
472470 }
473471
474472 if planExists {
475473 err = d .PlanStorage .DeleteStoredPlan (d .storedPlanFilePath ())
476474 if err != nil {
477- return fmt .Errorf ("error deleting plan: %v" , err )
475+ return false , fmt .Errorf ("error deleting plan: %v" , err )
478476 }
479477 }
480478
481479 err = d .PlanStorage .StorePlan (d .localPlanFilePath (), d .storedPlanFilePath ())
482480 if err != nil {
483- return fmt .Errorf ("error storing plan: %v" , err )
481+ return false , fmt .Errorf ("error storing plan: %v" , err )
484482 }
485483 }
486484 plan := cleanupTerraformPlan (isNonEmptyPlan , err , stdout , stderr )
@@ -496,34 +494,41 @@ func (d DiggerExecutor) Plan(prNumber int) error {
496494 log .Printf ("Running %v for **%v**\n " , step .Value , d .ProjectLock .LockId ())
497495 _ , _ , err := d .CommandRunner .Run (d .ProjectPath , step .Shell , commands )
498496 if err != nil {
499- return fmt .Errorf ("error running command: %v" , err )
497+ return false , fmt .Errorf ("error running command: %v" , err )
500498 }
501499 }
502500 }
501+ return true , nil
503502 }
504- return nil
503+ return false , nil
505504}
506505
507- func (d DiggerExecutor ) Apply (prNumber int ) error {
506+ func (d DiggerExecutor ) Apply (prNumber int ) ( bool , error ) {
508507 var plansFilename * string
509508 if d .PlanStorage != nil {
510509 var err error
511510 plansFilename , err = d .PlanStorage .RetrievePlan (d .localPlanFilePath (), d .storedPlanFilePath ())
512511 if err != nil {
513- return fmt .Errorf ("error retrieving plan: %v" , err )
512+ return false , fmt .Errorf ("error retrieving plan: %v" , err )
514513 }
515514 }
516515
517516 isMergeable , err := d .CIService .IsMergeable (prNumber )
518517 if err != nil {
519- return fmt .Errorf ("error validating is PR is mergeable: %v" , err )
518+ return false , fmt .Errorf ("error validating is PR is mergeable: %v" , err )
520519 }
521520 if ! isMergeable {
522521 comment := "Cannot perform Apply since the PR is not currently mergeable."
523522 d .CIService .PublishComment (prNumber , comment )
523+ return false , nil
524524 } else {
525+ locked , err := d .ProjectLock .Lock (prNumber )
526+
527+ if err != nil {
528+ return false , fmt .Errorf ("error locking project: %v" , err )
529+ }
525530
526- if res , _ := d . ProjectLock . Lock ( prNumber ); res {
531+ if locked {
527532 var applySteps []configuration.Step
528533
529534 if d .ApplyStage != nil {
@@ -543,7 +548,7 @@ func (d DiggerExecutor) Apply(prNumber int) error {
543548 if step .Action == "init" {
544549 _ , _ , err := d .TerraformExecutor .Init (step .ExtraArgs , d .StateEnvVars )
545550 if err != nil {
546- return fmt .Errorf ("error running init: %v" , err )
551+ return false , fmt .Errorf ("error running init: %v" , err )
547552 }
548553 }
549554 if step .Action == "apply" {
@@ -553,7 +558,7 @@ func (d DiggerExecutor) Apply(prNumber int) error {
553558 d .CIService .PublishComment (prNumber , comment )
554559 if err != nil {
555560 d .CIService .PublishComment (prNumber , "Error during applying." )
556- return fmt .Errorf ("error executing apply: %v" , err )
561+ return false , fmt .Errorf ("error executing apply: %v" , err )
557562 }
558563 }
559564 if step .Action == "run" {
@@ -565,13 +570,15 @@ func (d DiggerExecutor) Apply(prNumber int) error {
565570 log .Printf ("Running %v for **%v**\n " , step .Value , d .ProjectLock .LockId ())
566571 _ , _ , err := d .CommandRunner .Run (d .ProjectPath , step .Shell , commands )
567572 if err != nil {
568- return fmt .Errorf ("error running command: %v" , err )
573+ return false , fmt .Errorf ("error running command: %v" , err )
569574 }
570575 }
571576 }
577+ return true , nil
578+ } else {
579+ return false , nil
572580 }
573581 }
574- return nil
575582}
576583
577584func (d DiggerExecutor ) Unlock (prNumber int ) error {
0 commit comments