-
Notifications
You must be signed in to change notification settings - Fork 178
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* runspec objects
- Loading branch information
Showing
8 changed files
with
476 additions
and
15 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
package main | ||
|
||
import ( | ||
"encoding/json" | ||
"fmt" | ||
"github.com/diggerhq/digger/cli/pkg/usage" | ||
"github.com/diggerhq/digger/libs/spec" | ||
"github.com/spf13/cobra" | ||
"github.com/spf13/pflag" | ||
"github.com/spf13/viper" | ||
"strings" | ||
) | ||
|
||
var viperRunSpec *viper.Viper | ||
|
||
type RunSpecConfig struct { | ||
Spec string `mapstructure:"spec"` | ||
} | ||
|
||
var runSpecCmd = &cobra.Command{ | ||
Use: "run_spec [flags]", | ||
Short: "run a spec", | ||
Long: `run a spec`, | ||
Run: func(cmd *cobra.Command, args []string) { | ||
var runSpecConfig RunSpecConfig | ||
vipApply.Unmarshal(&runSpecConfig) | ||
var spec spec.Spec | ||
err := json.Unmarshal([]byte(runSpecConfig.Spec), &spec) | ||
if err != nil { | ||
usage.ReportErrorAndExit("", fmt.Sprintf("could not load spec json: %v", err), 1) | ||
} | ||
|
||
}, | ||
} | ||
|
||
func init() { | ||
flags := []pflag.Flag{ | ||
{Name: "spec", Usage: "string representing the json of a run spec"}, | ||
} | ||
|
||
viperRunSpec = viper.New() | ||
viperRunSpec.SetEnvPrefix("DIGGER") | ||
viperRunSpec.SetEnvKeyReplacer(strings.NewReplacer("-", "_")) | ||
viperRunSpec.AutomaticEnv() | ||
|
||
for _, flag := range flags { | ||
runSpecCmd.Flags().String(flag.Name, "", flag.Usage) | ||
vipApply.BindPFlag(flag.Name, runSpecCmd.Flags().Lookup(flag.Name)) | ||
} | ||
|
||
rootCmd.AddCommand(runSpecCmd) | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
package spec | ||
|
||
import ( | ||
"fmt" | ||
"github.com/diggerhq/digger/cli/pkg/digger" | ||
storage2 "github.com/diggerhq/digger/cli/pkg/storage" | ||
"github.com/diggerhq/digger/cli/pkg/usage" | ||
comment_summary "github.com/diggerhq/digger/libs/comment_utils/summary" | ||
"github.com/diggerhq/digger/libs/digger_config" | ||
"github.com/diggerhq/digger/libs/orchestrator" | ||
orchestrator_github "github.com/diggerhq/digger/libs/orchestrator/github" | ||
"github.com/diggerhq/digger/libs/spec" | ||
"log" | ||
"strconv" | ||
"time" | ||
) | ||
|
||
func RunSpec( | ||
spec spec.Spec, | ||
vcsProvider spec.VCSProvider, | ||
jobProvider spec.JobSpecProvider, | ||
lockProvider spec.LockProvider, | ||
reporterProvider spec.ReporterProvider, | ||
backedProvider spec.BackendApiProvider, | ||
policyProvider spec.PolicyProvider, | ||
commentUpdaterProvider comment_summary.CommentUpdaterProvider, | ||
) error { | ||
|
||
diggerConfig, _, _, err := digger_config.LoadDiggerConfig("./", true) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to read Digger digger_config. %s", err), 4) | ||
} | ||
log.Printf("Digger digger_config read successfully\n") | ||
|
||
job, err := jobProvider.GetJob(spec.Job) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1) | ||
} | ||
|
||
lock, err := lockProvider.GetLock(spec.Lock) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1) | ||
|
||
} | ||
|
||
prService, err := vcsProvider.GetPrService(spec.VCS) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get prservice: %v", err), 1) | ||
} | ||
|
||
reporter, err := reporterProvider.GetReporter(spec.Reporter, prService, *spec.Job.PullRequestNumber) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get reporter: %v", err), 1) | ||
} | ||
|
||
backendApi, err := backedProvider.GetBackendApi(spec.Backend) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get backend api: %v", err), 1) | ||
} | ||
|
||
policyChecker, err := policyProvider.GetPolicyProvider(spec.Policy, spec.Backend.BackendHostname, spec.Backend.BackendOrganisationName, spec.Backend.BackendJobToken) | ||
|
||
commentUpdater, err := commentUpdaterProvider.Get(*diggerConfig) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get comment updater: %v", err), 8) | ||
} | ||
|
||
planStorage := storage2.NewPlanStorage("", "", "", "", nil) | ||
|
||
jobs := []orchestrator.Job{job} | ||
|
||
fullRepoName := fmt.Sprintf("%v/%v", spec.VCS.RepoOwner, spec.VCS.RepoName) | ||
serializedBatch, err := backendApi.ReportProjectJobStatus(fullRepoName, spec.Job.ProjectName, spec.JobId, "started", time.Now(), nil, "", "") | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to report jobSpec status to backend. Exiting. %v", err), 4) | ||
} | ||
|
||
commentId64, err := strconv.ParseInt(spec.CommentId, 10, 64) | ||
if err != nil { | ||
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("failed to get comment ID: %v", err), 4) | ||
} | ||
|
||
// TODO: do not require conversion to gh service | ||
ghService := prService.(orchestrator_github.GithubService) | ||
allAppliesSuccess, _, err := digger.RunJobs(jobs, prService, ghService, lock, reporter, planStorage, policyChecker, commentUpdater, backendApi, serializedBatch.ID, true, false, commentId64, "") | ||
if !allAppliesSuccess || err != nil { | ||
serializedBatch, reportingError := backendApi.ReportProjectJobStatus(spec.VCS.RepoName, spec.Job.ProjectName, spec.JobId, "failed", time.Now(), nil, "", "") | ||
if reportingError != nil { | ||
usage.ReportErrorAndExit(spec.VCS.RepoOwner, fmt.Sprintf("Failed run commands. %s", err), 5) | ||
} | ||
commentUpdater.UpdateComment(serializedBatch.Jobs, serializedBatch.PrNumber, prService, commentId64) | ||
digger.UpdateAggregateStatus(serializedBatch, prService) | ||
usage.ReportErrorAndExit(spec.VCS.RepoOwner, fmt.Sprintf("Failed to run commands. %s", err), 5) | ||
} | ||
usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Digger finished successfully", 0) | ||
|
||
return nil | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,45 @@ | ||
package spec | ||
|
||
import "github.com/diggerhq/digger/libs/orchestrator" | ||
|
||
type ReporterSpec struct { | ||
ReporterType string `json:"reporter_type"` | ||
ReportingStrategy string `json:"reporting_strategy"` | ||
} | ||
|
||
type LockSpec struct { | ||
LockType string `json:"lock_type"` | ||
LockProvider string `json:"lock_provider"` | ||
} | ||
|
||
type BackendSpec struct { | ||
BackendType string `json:"backend_type"` | ||
BackendHostname string `json:"backend_hostname"` | ||
BackendOrganisationName string `json:"backend_organisation_hostname"` | ||
BackendJobToken string `json:"backend_job_token"` | ||
} | ||
|
||
type VcsSpec struct { | ||
Actor string `json:"actor"` | ||
RepoName string `json:"repo_name"` | ||
RepoOwner string `json:"repo_owner"` | ||
VcsType string `json:"vcs_type"` | ||
} | ||
|
||
type PolicySpec struct { | ||
PolicyType string `json:"policy_type"` | ||
} | ||
|
||
type Spec struct { | ||
// TODO: replace these three to be nested into one of the other specs | ||
JobId string `json:"job_id"` | ||
CommentId string `json:"comment_id"` | ||
RunName string `json:"run_name"` | ||
|
||
Job orchestrator.JobJson `json:"job"` | ||
Reporter ReporterSpec `json:"reporter"` | ||
Lock LockSpec `json:"lock"` | ||
Backend BackendSpec `json:"backend"` | ||
VCS VcsSpec `json:"vcs"` | ||
Policy PolicySpec `json:"policy_provider"` | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
package spec | ||
|
||
const stubTest = ` | ||
{ | ||
"job_id": "asdf2321", | ||
"comment_id": "123", | ||
"run_name": "asdf", | ||
"job": { | ||
"job_type": "plan", | ||
"projectName": "abc", | ||
"projectDir": "asd", | ||
"projectWorkspace": "", | ||
"terragrunt": false, | ||
"opentofu": false, | ||
"commands": [ | ||
"digger plan" | ||
], | ||
"applyStage": { | ||
"steps": [ | ||
{ | ||
"action": "init", | ||
"extra_args": [] | ||
}, | ||
{ | ||
"action": "apply", | ||
"extra_args": [] | ||
} | ||
] | ||
}, | ||
"planStage": { | ||
"steps": [ | ||
{ | ||
"action": "init", | ||
"extra_args": [] | ||
}, | ||
{ | ||
"action": "plan", | ||
"extra_args": [] | ||
} | ||
] | ||
}, | ||
"commit": "shasha", | ||
"branch": "", | ||
"eventName": "pull_request", | ||
"requestedBy": "motatoes", | ||
"namespace": "friendly", | ||
"runEnvVars": {}, | ||
"stateEnvVars": {}, | ||
"commandEnvVars": {}, | ||
"aws_role_region": "us-east-1", | ||
"state_role_name": "", | ||
"command_role_name": "", | ||
"backend_hostname": "", | ||
"backend_organisation_hostname": "", | ||
"backend_token": "" | ||
}, | ||
"reporter": {}, | ||
"lock": {}, | ||
"backend": {}, | ||
"vcs": {}, | ||
"policy_provider": {} | ||
} | ||
` |
Oops, something went wrong.