Skip to content

Commit bb75f13

Browse files
authored
add logic for post merge queuing (#1640)
* add logic for post merge queuing
1 parent abb8db1 commit bb75f13

File tree

21 files changed

+512
-335
lines changed

21 files changed

+512
-335
lines changed

.github/workflows/next_deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ on:
33
push:
44
branches:
55
- develop # change to main if needed
6-
- feat/next3
6+
- feat/next4
77

88
jobs:
99
deploy:

cli/pkg/spec/spec.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import (
1414
"github.com/samber/lo"
1515
"log"
1616
"os"
17+
"os/exec"
1718
"time"
1819
)
1920

@@ -29,6 +30,17 @@ func RunSpec(
2930
commentUpdaterProvider comment_summary.CommentUpdaterProvider,
3031
) error {
3132

33+
// checking out to the commit ID
34+
log.Printf("checking out to commit ID %v", spec.Job.Commit)
35+
cmd := exec.Command("git", "checkout", spec.Job.Commit)
36+
cmd.Stdout = os.Stdout
37+
cmd.Stderr = os.Stderr
38+
err := cmd.Run()
39+
if err != nil {
40+
log.Printf("error while checking out to commit SHA: %v", err)
41+
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("error while checking out to commit sha: %v", err), 1)
42+
}
43+
3244
job, err := jobProvider.GetJob(spec.Job)
3345
if err != nil {
3446
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("could not get job: %v", err), 1)
@@ -107,8 +119,8 @@ func RunSpec(
107119
usage.ReportErrorAndExit(spec.VCS.Actor, fmt.Sprintf("Failed to get current dir. %s", err), 4)
108120
}
109121

110-
// TODO: do not require conversion to gh service
111-
allAppliesSuccess, _, err := digger.RunJobs(jobs, prService, orgService, lock, reporter, planStorage, policyChecker, commentUpdater, backendApi, spec.JobId, true, false, commentId, currentDir)
122+
reportTerraformOutput := spec.Reporter.ReportTerraformOutput
123+
allAppliesSuccess, _, err := digger.RunJobs(jobs, prService, orgService, lock, reporter, planStorage, policyChecker, commentUpdater, backendApi, spec.JobId, true, reportTerraformOutput, commentId, currentDir)
112124
if !allAppliesSuccess || err != nil {
113125
serializedBatch, reportingError := backendApi.ReportProjectJobStatus(spec.VCS.RepoName, spec.Job.ProjectName, spec.JobId, "failed", time.Now(), nil, "", "")
114126
if reportingError != nil {

libs/spec/models.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@ import (
55
)
66

77
type ReporterSpec struct {
8-
ReporterType string `json:"reporter_type"`
9-
ReportingStrategy string `json:"reporting_strategy"`
8+
ReporterType string `json:"reporter_type"`
9+
ReportingStrategy string `json:"reporting_strategy"`
10+
ReportTerraformOutput bool `json:"report_terraform_output"`
1011
}
1112

1213
type LockSpec struct {

next/controllers/github.go

Lines changed: 6 additions & 56 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,12 @@ func (d DiggerController) GithubAppWebHook(c *gin.Context) {
106106
}
107107
case *github.PushEvent:
108108
log.Printf("Got push event for %d", event.Repo.URL)
109+
handlePushEventApplyAfterMerge(gh, event)
110+
if err != nil {
111+
log.Printf("handlePushEvent error: %v", err)
112+
c.String(http.StatusInternalServerError, err.Error())
113+
return
114+
}
109115
default:
110116
log.Printf("Unhandled event, event type %v", reflect.TypeOf(event))
111117
}
@@ -384,62 +390,6 @@ func handleInstallationDeletedEvent(installation *github.InstallationEvent) erro
384390
return nil
385391
}
386392

387-
func handlePushEvent(gh next_utils.GithubClientProvider, payload *github.PushEvent) error {
388-
installationId := *payload.Installation.ID
389-
repoName := *payload.Repo.Name
390-
repoFullName := *payload.Repo.FullName
391-
repoOwner := *payload.Repo.Owner.Login
392-
cloneURL := *payload.Repo.CloneURL
393-
ref := *payload.Ref
394-
defaultBranch := *payload.Repo.DefaultBranch
395-
396-
link, err := dbmodels.DB.GetGithubAppInstallationLink(installationId)
397-
if err != nil {
398-
log.Printf("Error getting GetGithubAppInstallationLink: %v", err)
399-
return fmt.Errorf("error getting github app link")
400-
}
401-
402-
orgId := link.OrganizationID
403-
diggerRepoName := strings.ReplaceAll(repoFullName, "/", "-")
404-
repo, err := dbmodels.DB.GetRepo(orgId, diggerRepoName)
405-
if err != nil {
406-
log.Printf("Error getting Repo: %v", err)
407-
return fmt.Errorf("error getting github app link")
408-
}
409-
if repo == nil {
410-
log.Printf("Repo not found: Org: %v | repo: %v", orgId, diggerRepoName)
411-
return fmt.Errorf("Repo not found: Org: %v | repo: %v", orgId, diggerRepoName)
412-
}
413-
414-
_, token, err := next_utils.GetGithubService(gh, installationId, repoFullName, repoOwner, repoName)
415-
if err != nil {
416-
log.Printf("Error getting github service: %v", err)
417-
return fmt.Errorf("error getting github service")
418-
}
419-
420-
var isMainBranch bool
421-
if strings.HasSuffix(ref, defaultBranch) {
422-
isMainBranch = true
423-
} else {
424-
isMainBranch = false
425-
}
426-
427-
err = utils.CloneGitRepoAndDoAction(cloneURL, defaultBranch, *token, func(dir string) error {
428-
config, err := dg_configuration.LoadDiggerConfigYaml(dir, true, nil)
429-
if err != nil {
430-
log.Printf("ERROR load digger.yml: %v", err)
431-
return fmt.Errorf("error loading digger.yml %v", err)
432-
}
433-
dbmodels.DB.UpdateRepoDiggerConfig(link.OrganizationID, *config, repo, isMainBranch)
434-
return nil
435-
})
436-
if err != nil {
437-
return fmt.Errorf("error while cloning repo: %v", err)
438-
}
439-
440-
return nil
441-
}
442-
443393
func handlePullRequestEvent(gh next_utils.GithubClientProvider, payload *github.PullRequestEvent, ciBackendProvider ci_backends.CiBackendProvider) error {
444394
installationId := *payload.Installation.ID
445395
repoName := *payload.Repo.Name

0 commit comments

Comments
 (0)