mirror of
https://git.vectorsigma.ru/public/atlantis.git
synced 2026-07-30 06:38:45 +00:00
53 lines
1.6 KiB
Go
53 lines
1.6 KiB
Go
package runtime
|
|
|
|
import (
|
|
"fmt"
|
|
"os"
|
|
"os/exec"
|
|
|
|
"github.com/runatlantis/atlantis/server/events/models"
|
|
)
|
|
|
|
//go:generate pegomock generate -m --use-experimental-model-gen --package mocks -o mocks/mock_pre_workflows_hook_runner.go PreWorkflowHookRunner
|
|
type PreWorkflowHookRunner interface {
|
|
Run(ctx models.PreWorkflowHookCommandContext, command string, path string) (string, error)
|
|
}
|
|
|
|
type DefaultPreWorkflowHookRunner struct{}
|
|
|
|
func (wh DefaultPreWorkflowHookRunner) Run(ctx models.PreWorkflowHookCommandContext, command string, path string) (string, error) {
|
|
cmd := exec.Command("sh", "-c", command) // #nosec
|
|
cmd.Dir = path
|
|
|
|
baseEnvVars := os.Environ()
|
|
customEnvVars := map[string]string{
|
|
"BASE_BRANCH_NAME": ctx.Pull.BaseBranch,
|
|
"BASE_REPO_NAME": ctx.BaseRepo.Name,
|
|
"BASE_REPO_OWNER": ctx.BaseRepo.Owner,
|
|
"DIR": path,
|
|
"HEAD_BRANCH_NAME": ctx.Pull.HeadBranch,
|
|
"HEAD_COMMIT": ctx.Pull.HeadCommit,
|
|
"HEAD_REPO_NAME": ctx.HeadRepo.Name,
|
|
"HEAD_REPO_OWNER": ctx.HeadRepo.Owner,
|
|
"PULL_AUTHOR": ctx.Pull.Author,
|
|
"PULL_NUM": fmt.Sprintf("%d", ctx.Pull.Num),
|
|
"USER_NAME": ctx.User.Username,
|
|
}
|
|
|
|
finalEnvVars := baseEnvVars
|
|
for key, val := range customEnvVars {
|
|
finalEnvVars = append(finalEnvVars, fmt.Sprintf("%s=%s", key, val))
|
|
}
|
|
|
|
cmd.Env = finalEnvVars
|
|
out, err := cmd.CombinedOutput()
|
|
|
|
if err != nil {
|
|
err = fmt.Errorf("%s: running %q in %q: \n%s", err, command, path, out)
|
|
ctx.Log.Debug("error: %s", err)
|
|
return "", err
|
|
}
|
|
ctx.Log.Info("successfully ran %q in %q", command, path)
|
|
return string(out), nil
|
|
}
|