Files
atlantis/server/events/version_command_runner.go
oysteingraendsen 4e867fc36e feat: when using order group, abort plan/apply if any fail (#3323)
* feat: when using order group, abort plan/apply if any fail

* feat: add 'abort_on_execution_order_fail' flag on repo level

* feat: use runProjectCmdsParallelGroups in version_command_runner

* chore: add plan tests

---------

Co-authored-by: nitrocode <7775707+nitrocode@users.noreply.github.com>
2023-05-12 13:24:33 -04:00

61 lines
1.7 KiB
Go

package events
import (
"github.com/runatlantis/atlantis/server/events/command"
)
func NewVersionCommandRunner(
pullUpdater *PullUpdater,
prjCmdBuilder ProjectVersionCommandBuilder,
prjCmdRunner ProjectVersionCommandRunner,
parallelPoolSize int,
silenceVCSStatusNoProjects bool,
) *VersionCommandRunner {
return &VersionCommandRunner{
pullUpdater: pullUpdater,
prjCmdBuilder: prjCmdBuilder,
prjCmdRunner: prjCmdRunner,
parallelPoolSize: parallelPoolSize,
silenceVCSStatusNoProjects: silenceVCSStatusNoProjects,
}
}
type VersionCommandRunner struct {
pullUpdater *PullUpdater
prjCmdBuilder ProjectVersionCommandBuilder
prjCmdRunner ProjectVersionCommandRunner
parallelPoolSize int
// SilenceVCSStatusNoProjects is whether any plan should set commit status if no projects
// are found
silenceVCSStatusNoProjects bool
}
func (v *VersionCommandRunner) Run(ctx *command.Context, cmd *CommentCommand) {
var err error
var projectCmds []command.ProjectContext
projectCmds, err = v.prjCmdBuilder.BuildVersionCommands(ctx, cmd)
if err != nil {
ctx.Log.Warn("Error %s", err)
}
if len(projectCmds) == 0 {
ctx.Log.Info("no projects to run version in")
return
}
// Only run commands in parallel if enabled
var result command.Result
if v.isParallelEnabled(projectCmds) {
ctx.Log.Info("Running version in parallel")
result = runProjectCmdsParallelGroups(ctx, projectCmds, v.prjCmdRunner.Version, v.parallelPoolSize)
} else {
result = runProjectCmds(projectCmds, v.prjCmdRunner.Version)
}
v.pullUpdater.updatePull(ctx, cmd, result)
}
func (v *VersionCommandRunner) isParallelEnabled(cmds []command.ProjectContext) bool {
return len(cmds) > 0 && cmds[0].ParallelPolicyCheckEnabled
}