mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-29 21:48:00 +00:00
* Expand --silence-no-projects to targeted commands * Cover other commands, test+docs * Add more tests, refactor doc * fix tests * fix dangling pending VCS statuses * fix: codeql yaml * fix: lint
70 lines
2.5 KiB
Go
70 lines
2.5 KiB
Go
package events
|
|
|
|
import (
|
|
"github.com/runatlantis/atlantis/server/events/command"
|
|
"github.com/runatlantis/atlantis/server/events/vcs"
|
|
)
|
|
|
|
func NewImportCommandRunner(
|
|
pullUpdater *PullUpdater,
|
|
pullReqStatusFetcher vcs.PullReqStatusFetcher,
|
|
prjCmdBuilder ProjectImportCommandBuilder,
|
|
prjCmdRunner ProjectImportCommandRunner,
|
|
SilenceNoProjects bool,
|
|
) *ImportCommandRunner {
|
|
return &ImportCommandRunner{
|
|
pullUpdater: pullUpdater,
|
|
pullReqStatusFetcher: pullReqStatusFetcher,
|
|
prjCmdBuilder: prjCmdBuilder,
|
|
prjCmdRunner: prjCmdRunner,
|
|
SilenceNoProjects: SilenceNoProjects,
|
|
}
|
|
}
|
|
|
|
type ImportCommandRunner struct {
|
|
pullUpdater *PullUpdater
|
|
pullReqStatusFetcher vcs.PullReqStatusFetcher
|
|
prjCmdBuilder ProjectImportCommandBuilder
|
|
prjCmdRunner ProjectImportCommandRunner
|
|
SilenceNoProjects bool
|
|
}
|
|
|
|
func (v *ImportCommandRunner) Run(ctx *command.Context, cmd *CommentCommand) {
|
|
var err error
|
|
// Get the mergeable status before we set any build statuses of our own.
|
|
// We do this here because when we set a "Pending" status, if users have
|
|
// required the Atlantis status checks to pass, then we've now changed
|
|
// the mergeability status of the pull request.
|
|
// This sets the approved, mergeable, and sqlocked status in the context.
|
|
ctx.PullRequestStatus, err = v.pullReqStatusFetcher.FetchPullStatus(ctx.Pull)
|
|
if err != nil {
|
|
// On error we continue the request with mergeable assumed false.
|
|
// We want to continue because not all import will need this status,
|
|
// only if they rely on the mergeability requirement.
|
|
// All PullRequestStatus fields are set to false by default when error.
|
|
ctx.Log.Warn("unable to get pull request status: %s. Continuing with mergeable and approved assumed false", err)
|
|
}
|
|
|
|
var projectCmds []command.ProjectContext
|
|
projectCmds, err = v.prjCmdBuilder.BuildImportCommands(ctx, cmd)
|
|
if err != nil {
|
|
ctx.Log.Warn("Error %s", err)
|
|
}
|
|
|
|
if len(projectCmds) == 0 && v.SilenceNoProjects {
|
|
ctx.Log.Info("determined there was no project to run import in.")
|
|
return
|
|
}
|
|
var result command.Result
|
|
if len(projectCmds) > 1 {
|
|
// There is no usecase to kick terraform import into multiple projects.
|
|
// To avoid incorrect import, suppress to execute terraform import in multiple projects.
|
|
result = command.Result{
|
|
Failure: "import cannot run on multiple projects. please specify one project.",
|
|
}
|
|
} else {
|
|
result = runProjectCmds(projectCmds, v.prjCmdRunner.Import)
|
|
}
|
|
v.pullUpdater.updatePull(ctx, cmd, result)
|
|
}
|