Skip to content

Commit

Permalink
support variables in next (#1646)
Browse files Browse the repository at this point in the history
* split out next path and perform checkout
  • Loading branch information
motatoes authored Aug 5, 2024
1 parent ba870d2 commit 1984d7a
Show file tree
Hide file tree
Showing 36 changed files with 2,153 additions and 611 deletions.
4 changes: 2 additions & 2 deletions .github/workflows/next_deploy.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
name: Fly Deploy
name: Next Deploy
on:
push:
branches:
- develop # change to main if needed
- feat/next4
- next-tfvars

jobs:
deploy:
Expand Down
18 changes: 18 additions & 0 deletions .github/workflows/next_deploy_staging.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: Next Deploy Staging
on:
push:
branches:
- develop # change to main if needed
- next-tfvars

jobs:
deploy:
name: Deploy app
runs-on: ubuntu-latest
concurrency: deploy-group # optional: ensure only one action runs at a time
steps:
- uses: actions/checkout@v4
- uses: superfly/flyctl-actions/setup-flyctl@master
- run: flyctl deploy --config fly-staging.toml --remote-only
env:
FLY_API_TOKEN: ${{ secrets.FLYIO_STAGING_TOKEN }}
5 changes: 5 additions & 0 deletions action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,9 @@ inputs:
digger-filename:
description: Alternative Digger configuration file name
required: false
digger-private-key:
description: Digger private key (for digger team and next only)
required: false
digger-token:
description: Digger token
required: false
Expand Down Expand Up @@ -338,6 +341,7 @@ runs:
AWS_S3_BUCKET: ${{ inputs.upload-plan-destination-s3-bucket }}
ACTIVATE_VENV: ${{ inputs.setup-checkov == 'true' }}
DISABLE_LOCKING: ${{ inputs.disable-locking == 'true' }}
DIGGER_PRIVATE_KEY: ${{ inputs.digger-private-key }}
DIGGER_TOKEN: ${{ inputs.digger-token }}
DIGGER_ORGANISATION: ${{ inputs.digger-organisation }}
DIGGER_HOSTNAME: ${{ inputs.digger-hostname }}
Expand Down Expand Up @@ -376,6 +380,7 @@ runs:
AWS_S3_BUCKET: ${{ inputs.upload-plan-destination-s3-bucket }}
ACTIVATE_VENV: ${{ inputs.setup-checkov == 'true' }}
DISABLE_LOCKING: ${{ inputs.disable-locking == 'true' }}
DIGGER_PRIVATE_KEY: ${{ inputs.digger-private-key }}
DIGGER_TOKEN: ${{ inputs.digger-token }}
DIGGER_ORGANISATION: ${{ inputs.digger-organisation }}
DIGGER_HOSTNAME: ${{ inputs.digger-hostname }}
Expand Down
2 changes: 1 addition & 1 deletion backend/services/spec.go
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ func GetSpecFromJob(job models.DiggerJob) (*spec.Spec, error) {
batch := job.Batch

spec := spec.Spec{
SpecType: spec.SpecTypePullRequestJob,
SpecType: spec.SpecTypeApplyBeforeMergeJob,
JobId: job.DiggerJobID,
CommentId: strconv.FormatInt(*batch.CommentId, 10),
Job: jobSpec,
Expand Down
42 changes: 31 additions & 11 deletions cli/cmd/digger/default.go
Original file line number Diff line number Diff line change
Expand Up @@ -29,17 +29,37 @@ var defaultCmd = &cobra.Command{
if err != nil {
usage.ReportErrorAndExit("", fmt.Sprintf("could not load spec json: %v", err), 1)
}
err = spec2.RunSpec(
spec,
lib_spec.VCSProviderBasic{},
lib_spec.JobSpecProvider{},
lib_spec.LockProvider{},
lib_spec.ReporterProvider{},
lib_spec.BackendApiProvider{},
lib_spec.BasicPolicyProvider{},
lib_spec.PlanStorageProvider{},
comment_updater.CommentUpdaterProviderBasic{},
)

var spec_err error
if spec.SpecType == lib_spec.SpecTypeNextJob {
spec_err = spec2.RunSpecNext(
spec,
lib_spec.VCSProviderBasic{},
lib_spec.JobSpecProvider{},
lib_spec.LockProvider{},
lib_spec.ReporterProvider{},
lib_spec.BackendApiProvider{},
lib_spec.BasicPolicyProvider{},
lib_spec.PlanStorageProvider{},
lib_spec.VariablesProvider{},
comment_updater.CommentUpdaterProviderBasic{},
)
} else {
spec_err = spec2.RunSpec(
spec,
lib_spec.VCSProviderBasic{},
lib_spec.JobSpecProvider{},
lib_spec.LockProvider{},
lib_spec.ReporterProvider{},
lib_spec.BackendApiProvider{},
lib_spec.BasicPolicyProvider{},
lib_spec.PlanStorageProvider{},
comment_updater.CommentUpdaterProviderBasic{},
)
}
if spec_err != nil {
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("error while running spec: %v", err), 1)
}
usage.ReportErrorAndExit(spec.VCS.Actor, "Successfully ran spec", 0)
}

Expand Down
148 changes: 148 additions & 0 deletions cli/pkg/spec/manual.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
package spec

import (
"fmt"
"github.com/diggerhq/digger/cli/pkg/digger"
"github.com/diggerhq/digger/cli/pkg/usage"
"github.com/diggerhq/digger/cli/pkg/utils"
"github.com/diggerhq/digger/libs/backendapi"
"github.com/diggerhq/digger/libs/ci"
"github.com/diggerhq/digger/libs/comment_utils/reporting"
comment_summary "github.com/diggerhq/digger/libs/comment_utils/summary"
"github.com/diggerhq/digger/libs/scheduler"
"github.com/diggerhq/digger/libs/spec"
"github.com/diggerhq/digger/libs/storage"
"log"
"os"
"os/exec"
)

func RunSpecManualCommand(
spec spec.Spec,
vcsProvider spec.VCSProvider,
jobProvider spec.JobSpecProvider,
lockProvider spec.LockProvider,
reporterProvider spec.ReporterProvider,
backedProvider spec.BackendApiProvider,
policyProvider spec.SpecPolicyProvider,
PlanStorageProvider spec.PlanStorageProvider,
commentUpdaterProvider comment_summary.CommentUpdaterProvider,
) error {

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)
//}

var prService ci.PullRequestService = ci.MockPullRequestManager{}
//orgService, err := vcsProvider.GetOrgService(spec.VCS)
//if err != nil {
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get orgservice: %v", err), 1)
//}
var orgService ci.OrgService = ci.MockPullRequestManager{}

//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)
//}
reporter := reporting.StdOutReporter{}

backendApi, err := backedProvider.GetBackendApi(spec.Backend)
if err != nil {
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get backend api: %v", err), 1)
}

// download zip artefact, git init and prepare for job execution
tempDir, err := os.MkdirTemp("", "downloaded-zip-")
if err != nil {
log.Printf("failed to create temp dir: %v", err)
os.Exit(1)
}

// downloading artefact zip , extracting, git init and then chdir to that directory for job execution
absoluteFileName, err := backendApi.DownloadJobArtefact(tempDir)
if err != nil {
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not download job artefact: %v", err), 1)
}
zipPath := *absoluteFileName
err = utils.ExtractZip(zipPath, tempDir)
if err != nil {
log.Printf("ExtractZip err: %v", err)
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("artefact zip extraction err: %v", err), 1)

}

// remove the zipPath
err = os.Remove(zipPath)
if err != nil {
log.Printf("os.Remove err: %v", err)
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("zip path removal err: %v", err), 1)
}

// Navigating to our diractory
err = os.Chdir(tempDir)
if err != nil {
log.Printf("Chdir err: %v", err)
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Chdir err: %v", err), 1)
}

cmd := exec.Command("git", "init")
cmd.Stdout = os.Stdout
cmd.Stderr = os.Stderr
cmd.Run()

policyChecker, err := policyProvider.GetPolicyProvider(spec.Policy, spec.Backend.BackendHostname, spec.Backend.BackendOrganisationName, spec.Backend.BackendJobToken)
if err != nil {
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get policy provider: %v", err), 1)
}

//planStorage, err := PlanStorageProvider.GetPlanStorage(spec.VCS.RepoOwner, spec.VCS.RepoName, *spec.Job.PullRequestNumber)
//if err != nil {
// usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get plan storage: %v", err), 8)
//}
planStorage := storage.MockPlanStorage{}

jobs := []scheduler.Job{job}

//fullRepoName := fmt.Sprintf("%v-%v", spec.VCS.RepoOwner, spec.VCS.RepoName)
//_, 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)
//}

noopBackendApi := backendapi.NoopApi{}

commentId := spec.CommentId
if err != nil {
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("failed to get comment ID: %v", err), 4)
}

currentDir, err := os.Getwd()
if err != nil {
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
}

commentUpdater := comment_summary.NoopCommentUpdater{}
// do not change these placeholders as they are parsed by dgctl to stream logs
log.Printf("<========= DIGGER RUNNING IN MANUAL MODE =========>")
allAppliesSuccess, _, err := digger.RunJobs(jobs, prService, orgService, lock, reporter, planStorage, policyChecker, commentUpdater, noopBackendApi, spec.JobId, false, false, commentId, currentDir)
log.Printf("<========= DIGGER COMPLETED =========>")
if err != nil || allAppliesSuccess == false {
usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Terraform execution failed", 1)
}

usage.ReportErrorAndExit(spec.VCS.RepoOwner, "Digger finished successfully", 0)

return nil
}
Loading

0 comments on commit 1984d7a

Please sign in to comment.