Skip to content

Commit 6c69422

Browse files
authored
adjust (#2141)
1 parent 2b3dbc7 commit 6c69422

File tree

3 files changed

+29
-3
lines changed

3 files changed

+29
-3
lines changed

backend/controllers/github_comment.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -376,7 +376,7 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
376376

377377
// Check for apply requirements
378378
if *diggerCommand == scheduler.DiggerCommandApply {
379-
err = apply_requirements.CheckApplyRequirements(ghService, impactedProjectsForComment, issueNumber, *prSourceBranch, targetBranch)
379+
err = apply_requirements.CheckApplyRequirements(ghService, impactedProjectsForComment, jobs, issueNumber, *prSourceBranch, targetBranch)
380380
if err != nil {
381381
commentReporterManager.UpdateComment(fmt.Sprintf(":x: Could not proceed with apply since apply requirements checks have failed: %v", err))
382382
return nil

libs/apply_requirements/apply_requirements.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,10 +4,21 @@ import (
44
"fmt"
55
"github.com/diggerhq/digger/libs/ci"
66
"github.com/diggerhq/digger/libs/digger_config"
7+
"github.com/diggerhq/digger/libs/scheduler"
78
"log/slog"
89
)
910

10-
func CheckApplyRequirements(ghService ci.PullRequestService, impactedProjects []digger_config.Project, prNumber int, sourceBranch string, targetBranch string) error {
11+
// IgnoreMergeabilityForProject will strip out the 'mergeability' requirement if
12+
// the project's workflow has specified skip_merge_check: true
13+
func IgnoreMergeabilityForProject(project digger_config.Project, jobs []scheduler.Job) bool {
14+
job, err := scheduler.JobForProjectName(jobs, project.Name)
15+
if err != nil {
16+
slog.Warn("could not find job for mergeability ignore check, skipping this check and returning false")
17+
return false
18+
}
19+
return job.SkipMergeCheck
20+
}
21+
func CheckApplyRequirements(ghService ci.PullRequestService, impactedProjects []digger_config.Project, jobs []scheduler.Job, prNumber int, sourceBranch string, targetBranch string) error {
1122
isMergeable, err := ghService.IsMergeable(prNumber)
1223
if err != nil {
1324
slog.Error("Error checking if PR is mergeable", "prNumber", prNumber)
@@ -26,11 +37,12 @@ func CheckApplyRequirements(ghService ci.PullRequestService, impactedProjects []
2637
}
2738
for _, proj := range impactedProjects {
2839
for _, req := range proj.ApplyRequirements {
40+
ignoreMergeability := IgnoreMergeabilityForProject(proj, jobs)
2941
if req == digger_config.ApplyRequirementsApproved && isApproved == false {
3042
return fmt.Errorf("PR fails apply requirements for project %v, Expected PR to be approved, a minimum of one approval is required before proceeding", proj.Name)
3143
} else if req == digger_config.ApplyRequirementsUndiverged && isDiverged == true {
3244
return fmt.Errorf("PR fails apply requirements for project %v, Expected PR to be undiverged from target branch. Merge main into the PR branch or rebase the PR branch on top of main", proj.Name)
33-
} else if req == digger_config.ApplyRequirementsMergeable && isMergeable == false {
45+
} else if req == digger_config.ApplyRequirementsMergeable && isMergeable == false && !ignoreMergeability {
3446
return fmt.Errorf("PR fails apply requirements for project %v, Expected PR to be mergable. Ensure all status checks are successful in order to proceed", proj.Name)
3547
} else {
3648
slog.Warn("unknown apply requirements found", "project", proj.Name, "requirement", req)

libs/scheduler/jobs.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package scheduler
22

33
import (
4+
"fmt"
45
"github.com/samber/lo"
56
"slices"
67

@@ -84,6 +85,19 @@ func (j *Job) GetProjectAlias() string {
8485
return j.ProjectName
8586
}
8687

88+
func JobForProjectName(jobs []Job, projectName string) (*Job, error) {
89+
filteredJobs := lo.Filter(jobs, func(item Job, index int) bool {
90+
return item.ProjectName == projectName
91+
})
92+
if len(filteredJobs) == 0 {
93+
return nil, fmt.Errorf("job not found for project name %v", projectName)
94+
}
95+
if len(filteredJobs) > 1 {
96+
return nil, fmt.Errorf("more than one job found for project name, duplicate? %v", projectName)
97+
}
98+
return &filteredJobs[0], nil
99+
}
100+
87101
func (j *Job) IsPlan() bool {
88102
return slices.Contains(j.Commands, "digger plan")
89103
}

0 commit comments

Comments
 (0)