Skip to content

Commit 313ff2c

Browse files
authored
feat/get spec endpoint (#1615)
* add getspec endpoint and ability to perform remote execution
1 parent 2a42f54 commit 313ff2c

File tree

14 files changed

+590
-29
lines changed

14 files changed

+590
-29
lines changed

backend/services/spec.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ func GetSpecFromJob(job models.DiggerJob) (*spec.Spec, error) {
6868
batch := job.Batch
6969

7070
spec := spec.Spec{
71+
SpecType: spec.SpecTypePullRequestJob,
7172
JobId: job.DiggerJobID,
7273
CommentId: strconv.FormatInt(*batch.CommentId, 10),
7374
Job: jobSpec,

cli/pkg/spec/spec.go

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,13 @@ import (
44
"fmt"
55
"github.com/diggerhq/digger/cli/pkg/digger"
66
"github.com/diggerhq/digger/cli/pkg/usage"
7+
"github.com/diggerhq/digger/libs/ci"
8+
"github.com/diggerhq/digger/libs/comment_utils/reporting"
79
comment_summary "github.com/diggerhq/digger/libs/comment_utils/summary"
810
"github.com/diggerhq/digger/libs/digger_config"
911
"github.com/diggerhq/digger/libs/scheduler"
1012
"github.com/diggerhq/digger/libs/spec"
13+
"github.com/diggerhq/digger/libs/storage"
1114
"log"
1215
"os"
1316
"time"
@@ -113,3 +116,90 @@ func RunSpec(
113116

114117
return nil
115118
}
119+
120+
func RunSpecManualCommand(
121+
spec spec.Spec,
122+
vcsProvider spec.VCSProvider,
123+
jobProvider spec.JobSpecProvider,
124+
lockProvider spec.LockProvider,
125+
reporterProvider spec.ReporterProvider,
126+
backedProvider spec.BackendApiProvider,
127+
policyProvider spec.SpecPolicyProvider,
128+
PlanStorageProvider spec.PlanStorageProvider,
129+
commentUpdaterProvider comment_summary.CommentUpdaterProvider,
130+
) error {
131+
132+
job, err := jobProvider.GetJob(spec.Job)
133+
if err != nil {
134+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
135+
}
136+
137+
lock, err := lockProvider.GetLock(spec.Lock)
138+
if err != nil {
139+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
140+
141+
}
142+
143+
//prService, err := vcsProvider.GetPrService(spec.VCS)
144+
//if err != nil {
145+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get prservice: %v", err), 1)
146+
//}
147+
148+
var prService ci.PullRequestService = ci.MockPullRequestManager{}
149+
//orgService, err := vcsProvider.GetOrgService(spec.VCS)
150+
//if err != nil {
151+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get orgservice: %v", err), 1)
152+
//}
153+
var orgService ci.OrgService = ci.MockPullRequestManager{}
154+
155+
//reporter, err := reporterProvider.GetReporter(spec.Reporter, prService, *spec.Job.PullRequestNumber)
156+
//if err != nil {
157+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get reporter: %v", err), 1)
158+
//}
159+
reporter := reporting.StdOutReporter{}
160+
161+
backendApi, err := backedProvider.GetBackendApi(spec.Backend)
162+
if err != nil {
163+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get backend api: %v", err), 1)
164+
}
165+
166+
policyChecker, err := policyProvider.GetPolicyProvider(spec.Policy, spec.Backend.BackendHostname, spec.Backend.BackendOrganisationName, spec.Backend.BackendJobToken)
167+
if err != nil {
168+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get policy provider: %v", err), 1)
169+
}
170+
171+
//planStorage, err := PlanStorageProvider.GetPlanStorage(spec.VCS.RepoOwner, spec.VCS.RepoName, *spec.Job.PullRequestNumber)
172+
//if err != nil {
173+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get plan storage: %v", err), 8)
174+
//}
175+
planStorage := storage.MockPlanStorage{}
176+
177+
jobs := []scheduler.Job{job}
178+
179+
fullRepoName := fmt.Sprintf("%v-%v", spec.VCS.RepoOwner, spec.VCS.RepoName)
180+
_, err = backendApi.ReportProjectJobStatus(fullRepoName, spec.Job.ProjectName, spec.JobId, "started", time.Now(), nil, "", "")
181+
if err != nil {
182+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to report jobSpec status to backend. Exiting. %v", err), 4)
183+
}
184+
185+
commentId := spec.CommentId
186+
if err != nil {
187+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("failed to get comment ID: %v", err), 4)
188+
}
189+
190+
currentDir, err := os.Getwd()
191+
if err != nil {
192+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
193+
}
194+
195+
commentUpdater := comment_summary.NoopCommentUpdater{}
196+
// TODO: do not require conversion to gh service
197+
allAppliesSuccess, _, err := digger.RunJobs(jobs, prService, orgService, lock, reporter, planStorage, policyChecker, commentUpdater, backendApi, spec.JobId, false, false, commentId, currentDir)
198+
if err != nil || allAppliesSuccess == false {
199+
usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Terraform execution failed", 1)
200+
}
201+
202+
usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Digger finished successfully", 0)
203+
204+
return nil
205+
}

dgctl/.gitignore

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
.archive
22
generated/
33
dgctl.generated.json
4-
.dgctl
4+
.dgctl
5+
dgctl

0 commit comments

Comments
 (0)