Skip to content

Commit 1984d7a

Browse files
authored
support variables in next (#1646)
* split out next path and perform checkout
1 parent ba870d2 commit 1984d7a

36 files changed

+2153
-611
lines changed

.github/workflows/next_deploy.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
1-
name: Fly Deploy
1+
name: Next Deploy
22
on:
33
push:
44
branches:
55
- develop # change to main if needed
6-
- feat/next4
6+
- next-tfvars
77

88
jobs:
99
deploy:
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
name: Next Deploy Staging
2+
on:
3+
push:
4+
branches:
5+
- develop # change to main if needed
6+
- next-tfvars
7+
8+
jobs:
9+
deploy:
10+
name: Deploy app
11+
runs-on: ubuntu-latest
12+
concurrency: deploy-group # optional: ensure only one action runs at a time
13+
steps:
14+
- uses: actions/checkout@v4
15+
- uses: superfly/flyctl-actions/setup-flyctl@master
16+
- run: flyctl deploy --config fly-staging.toml --remote-only
17+
env:
18+
FLY_API_TOKEN: ${{ secrets.FLYIO_STAGING_TOKEN }}

action.yml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,9 @@ inputs:
109109
digger-filename:
110110
description: Alternative Digger configuration file name
111111
required: false
112+
digger-private-key:
113+
description: Digger private key (for digger team and next only)
114+
required: false
112115
digger-token:
113116
description: Digger token
114117
required: false
@@ -338,6 +341,7 @@ runs:
338341
AWS_S3_BUCKET: ${{ inputs.upload-plan-destination-s3-bucket }}
339342
ACTIVATE_VENV: ${{ inputs.setup-checkov == 'true' }}
340343
DISABLE_LOCKING: ${{ inputs.disable-locking == 'true' }}
344+
DIGGER_PRIVATE_KEY: ${{ inputs.digger-private-key }}
341345
DIGGER_TOKEN: ${{ inputs.digger-token }}
342346
DIGGER_ORGANISATION: ${{ inputs.digger-organisation }}
343347
DIGGER_HOSTNAME: ${{ inputs.digger-hostname }}
@@ -376,6 +380,7 @@ runs:
376380
AWS_S3_BUCKET: ${{ inputs.upload-plan-destination-s3-bucket }}
377381
ACTIVATE_VENV: ${{ inputs.setup-checkov == 'true' }}
378382
DISABLE_LOCKING: ${{ inputs.disable-locking == 'true' }}
383+
DIGGER_PRIVATE_KEY: ${{ inputs.digger-private-key }}
379384
DIGGER_TOKEN: ${{ inputs.digger-token }}
380385
DIGGER_ORGANISATION: ${{ inputs.digger-organisation }}
381386
DIGGER_HOSTNAME: ${{ inputs.digger-hostname }}

backend/services/spec.go

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

7070
spec := spec.Spec{
71-
SpecType: spec.SpecTypePullRequestJob,
71+
SpecType: spec.SpecTypeApplyBeforeMergeJob,
7272
JobId: job.DiggerJobID,
7373
CommentId: strconv.FormatInt(*batch.CommentId, 10),
7474
Job: jobSpec,

cli/cmd/digger/default.go

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -29,17 +29,37 @@ var defaultCmd = &cobra.Command{
2929
if err != nil {
3030
usage.ReportErrorAndExit("", fmt.Sprintf("could not load spec json: %v", err), 1)
3131
}
32-
err = spec2.RunSpec(
33-
spec,
34-
lib_spec.VCSProviderBasic{},
35-
lib_spec.JobSpecProvider{},
36-
lib_spec.LockProvider{},
37-
lib_spec.ReporterProvider{},
38-
lib_spec.BackendApiProvider{},
39-
lib_spec.BasicPolicyProvider{},
40-
lib_spec.PlanStorageProvider{},
41-
comment_updater.CommentUpdaterProviderBasic{},
42-
)
32+
33+
var spec_err error
34+
if spec.SpecType == lib_spec.SpecTypeNextJob {
35+
spec_err = spec2.RunSpecNext(
36+
spec,
37+
lib_spec.VCSProviderBasic{},
38+
lib_spec.JobSpecProvider{},
39+
lib_spec.LockProvider{},
40+
lib_spec.ReporterProvider{},
41+
lib_spec.BackendApiProvider{},
42+
lib_spec.BasicPolicyProvider{},
43+
lib_spec.PlanStorageProvider{},
44+
lib_spec.VariablesProvider{},
45+
comment_updater.CommentUpdaterProviderBasic{},
46+
)
47+
} else {
48+
spec_err = spec2.RunSpec(
49+
spec,
50+
lib_spec.VCSProviderBasic{},
51+
lib_spec.JobSpecProvider{},
52+
lib_spec.LockProvider{},
53+
lib_spec.ReporterProvider{},
54+
lib_spec.BackendApiProvider{},
55+
lib_spec.BasicPolicyProvider{},
56+
lib_spec.PlanStorageProvider{},
57+
comment_updater.CommentUpdaterProviderBasic{},
58+
)
59+
}
60+
if spec_err != nil {
61+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("error while running spec: %v", err), 1)
62+
}
4363
usage.ReportErrorAndExit(spec.VCS.Actor, "Successfully ran spec", 0)
4464
}
4565

cli/pkg/spec/manual.go

Lines changed: 148 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,148 @@
1+
package spec
2+
3+
import (
4+
"fmt"
5+
"github.com/diggerhq/digger/cli/pkg/digger"
6+
"github.com/diggerhq/digger/cli/pkg/usage"
7+
"github.com/diggerhq/digger/cli/pkg/utils"
8+
"github.com/diggerhq/digger/libs/backendapi"
9+
"github.com/diggerhq/digger/libs/ci"
10+
"github.com/diggerhq/digger/libs/comment_utils/reporting"
11+
comment_summary "github.com/diggerhq/digger/libs/comment_utils/summary"
12+
"github.com/diggerhq/digger/libs/scheduler"
13+
"github.com/diggerhq/digger/libs/spec"
14+
"github.com/diggerhq/digger/libs/storage"
15+
"log"
16+
"os"
17+
"os/exec"
18+
)
19+
20+
func RunSpecManualCommand(
21+
spec spec.Spec,
22+
vcsProvider spec.VCSProvider,
23+
jobProvider spec.JobSpecProvider,
24+
lockProvider spec.LockProvider,
25+
reporterProvider spec.ReporterProvider,
26+
backedProvider spec.BackendApiProvider,
27+
policyProvider spec.SpecPolicyProvider,
28+
PlanStorageProvider spec.PlanStorageProvider,
29+
commentUpdaterProvider comment_summary.CommentUpdaterProvider,
30+
) error {
31+
32+
job, err := jobProvider.GetJob(spec.Job)
33+
if err != nil {
34+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
35+
}
36+
37+
lock, err := lockProvider.GetLock(spec.Lock)
38+
if err != nil {
39+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
40+
41+
}
42+
43+
//prService, err := vcsProvider.GetPrService(spec.VCS)
44+
//if err != nil {
45+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get prservice: %v", err), 1)
46+
//}
47+
48+
var prService ci.PullRequestService = ci.MockPullRequestManager{}
49+
//orgService, err := vcsProvider.GetOrgService(spec.VCS)
50+
//if err != nil {
51+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get orgservice: %v", err), 1)
52+
//}
53+
var orgService ci.OrgService = ci.MockPullRequestManager{}
54+
55+
//reporter, err := reporterProvider.GetReporter(spec.Reporter, prService, *spec.Job.PullRequestNumber)
56+
//if err != nil {
57+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get reporter: %v", err), 1)
58+
//}
59+
reporter := reporting.StdOutReporter{}
60+
61+
backendApi, err := backedProvider.GetBackendApi(spec.Backend)
62+
if err != nil {
63+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get backend api: %v", err), 1)
64+
}
65+
66+
// download zip artefact, git init and prepare for job execution
67+
tempDir, err := os.MkdirTemp("", "downloaded-zip-")
68+
if err != nil {
69+
log.Printf("failed to create temp dir: %v", err)
70+
os.Exit(1)
71+
}
72+
73+
// downloading artefact zip , extracting, git init and then chdir to that directory for job execution
74+
absoluteFileName, err := backendApi.DownloadJobArtefact(tempDir)
75+
if err != nil {
76+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not download job artefact: %v", err), 1)
77+
}
78+
zipPath := *absoluteFileName
79+
err = utils.ExtractZip(zipPath, tempDir)
80+
if err != nil {
81+
log.Printf("ExtractZip err: %v", err)
82+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("artefact zip extraction err: %v", err), 1)
83+
84+
}
85+
86+
// remove the zipPath
87+
err = os.Remove(zipPath)
88+
if err != nil {
89+
log.Printf("os.Remove err: %v", err)
90+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("zip path removal err: %v", err), 1)
91+
}
92+
93+
// Navigating to our diractory
94+
err = os.Chdir(tempDir)
95+
if err != nil {
96+
log.Printf("Chdir err: %v", err)
97+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Chdir err: %v", err), 1)
98+
}
99+
100+
cmd := exec.Command("git", "init")
101+
cmd.Stdout = os.Stdout
102+
cmd.Stderr = os.Stderr
103+
cmd.Run()
104+
105+
policyChecker, err := policyProvider.GetPolicyProvider(spec.Policy, spec.Backend.BackendHostname, spec.Backend.BackendOrganisationName, spec.Backend.BackendJobToken)
106+
if err != nil {
107+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get policy provider: %v", err), 1)
108+
}
109+
110+
//planStorage, err := PlanStorageProvider.GetPlanStorage(spec.VCS.RepoOwner, spec.VCS.RepoName, *spec.Job.PullRequestNumber)
111+
//if err != nil {
112+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get plan storage: %v", err), 8)
113+
//}
114+
planStorage := storage.MockPlanStorage{}
115+
116+
jobs := []scheduler.Job{job}
117+
118+
//fullRepoName := fmt.Sprintf("%v-%v", spec.VCS.RepoOwner, spec.VCS.RepoName)
119+
//_, err = backendApi.ReportProjectJobStatus(fullRepoName, spec.Job.ProjectName, spec.JobId, "started", time.Now(), nil, "", "")
120+
//if err != nil {
121+
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to report jobSpec status to backend. Exiting. %v", err), 4)
122+
//}
123+
124+
noopBackendApi := backendapi.NoopApi{}
125+
126+
commentId := spec.CommentId
127+
if err != nil {
128+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("failed to get comment ID: %v", err), 4)
129+
}
130+
131+
currentDir, err := os.Getwd()
132+
if err != nil {
133+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
134+
}
135+
136+
commentUpdater := comment_summary.NoopCommentUpdater{}
137+
// do not change these placeholders as they are parsed by dgctl to stream logs
138+
log.Printf("<========= DIGGER RUNNING IN MANUAL MODE =========>")
139+
allAppliesSuccess, _, err := digger.RunJobs(jobs, prService, orgService, lock, reporter, planStorage, policyChecker, commentUpdater, noopBackendApi, spec.JobId, false, false, commentId, currentDir)
140+
log.Printf("<========= DIGGER COMPLETED =========>")
141+
if err != nil || allAppliesSuccess == false {
142+
usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Terraform execution failed", 1)
143+
}
144+
145+
usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Digger finished successfully", 0)
146+
147+
return nil
148+
}

0 commit comments

Comments
 (0)