Skip to content

Commit faced4d

Browse files
authored
Add AllowDraftPRs flag, disabled by default (#1329)
1 parent 885e170 commit faced4d

File tree

8 files changed

+48
-2
lines changed

8 files changed

+48
-2
lines changed

backend/controllers/github.go

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -424,6 +424,8 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
424424
repoFullName := *payload.Repo.FullName
425425
cloneURL := *payload.Repo.CloneURL
426426
prNumber := *payload.PullRequest.Number
427+
isDraft := payload.PullRequest.GetDraft()
428+
427429
link, err := models.DB.GetGithubAppInstallationLink(installationId)
428430
if err != nil {
429431
log.Printf("Error getting GetGithubAppInstallationLink: %v", err)
@@ -437,6 +439,11 @@ func handlePullRequestEvent(gh utils.GithubClientProvider, payload *github.PullR
437439
return fmt.Errorf("error getting digger config")
438440
}
439441

442+
if !config.AllowDraftPRs && isDraft {
443+
log.Printf("Draft PRs are disabled, skipping PR: %v", prNumber)
444+
return nil
445+
}
446+
440447
impactedProjects, _, err := dg_github.ProcessGitHubPullRequestEvent(payload, config, projectsGraph, ghService)
441448
if err != nil {
442449
log.Printf("Error processing event: %v", err)
@@ -596,6 +603,7 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
596603
repoFullName := *payload.Repo.FullName
597604
cloneURL := *payload.Repo.CloneURL
598605
issueNumber := *payload.Issue.Number
606+
isDraft := payload.Issue.GetDraft()
599607

600608
link, err := models.DB.GetGithubAppInstallationLink(installationId)
601609
if err != nil {
@@ -620,6 +628,11 @@ func handleIssueCommentEvent(gh utils.GithubClientProvider, payload *github.Issu
620628
return fmt.Errorf("error getting digger config")
621629
}
622630

631+
if !config.AllowDraftPRs && isDraft {
632+
log.Printf("AllowDraftPRs is enabled, skipping PR: %v", issueNumber)
633+
return nil
634+
}
635+
623636
commentReporter, err := utils.InitCommentReporter(ghService, issueNumber, ":construction_worker: Digger starting....")
624637
if err != nil {
625638
log.Printf("Error initializing comment reporter: %v", err)

backend/controllers/github_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,13 @@ package controllers
22

33
import (
44
"encoding/json"
5-
orchestrator_scheduler "github.com/diggerhq/digger/libs/orchestrator/scheduler"
65
"log"
76
"os"
87
"strings"
98
"testing"
109

10+
orchestrator_scheduler "github.com/diggerhq/digger/libs/orchestrator/scheduler"
11+
1112
"github.com/diggerhq/digger/backend/models"
1213
"github.com/diggerhq/digger/backend/utils"
1314
configuration "github.com/diggerhq/digger/libs/digger_config"

cli/pkg/digger/digger.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,14 @@ package digger
33
import (
44
"errors"
55
"fmt"
6-
"github.com/diggerhq/digger/cli/pkg/comment_updater"
76
"log"
87
"os"
98
"path"
109
"strings"
1110
"time"
1211

12+
"github.com/diggerhq/digger/cli/pkg/comment_updater"
13+
1314
"github.com/diggerhq/digger/cli/pkg/core/backend"
1415
core_drift "github.com/diggerhq/digger/cli/pkg/core/drift"
1516
"github.com/diggerhq/digger/cli/pkg/core/execution"

libs/digger_config/config.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package digger_config
22

33
type DiggerConfig struct {
44
ApplyAfterMerge bool
5+
AllowDraftPRs bool
56
DependencyConfiguration DependencyConfiguration
67
Projects []Project
78
AutoMerge bool

libs/digger_config/converters.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,12 @@ func ConvertDiggerYamlToConfig(diggerYaml *DiggerConfigYaml) (*DiggerConfig, gra
181181
diggerConfig.TraverseToNestedProjects = false
182182
}
183183

184+
if diggerYaml.AllowDraftPRs != nil {
185+
diggerConfig.AllowDraftPRs = *diggerYaml.AllowDraftPRs
186+
} else {
187+
diggerConfig.AllowDraftPRs = false
188+
}
189+
184190
// if workflow block is not specified in yaml we create a default one, and add it to every project
185191
if diggerYaml.Workflows != nil {
186192
workflows := copyWorkflows(diggerYaml.Workflows)

libs/digger_config/digger_config.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -420,6 +420,9 @@ func AutoDetectDiggerConfig(workingDir string) (*DiggerConfigYaml, error) {
420420
TraverseToNestedProjects := false
421421
configYaml.TraverseToNestedProjects = &TraverseToNestedProjects
422422

423+
AllowDraftPRs := false
424+
configYaml.AllowDraftPRs = &AllowDraftPRs
425+
423426
terragruntDirWalker := &FileSystemTerragruntDirWalker{}
424427
terraformDirWalker := &FileSystemTopLevelTerraformDirWalker{}
425428
moduleDirWalker := &FileSystemModuleDirWalker{}

libs/digger_config/digger_config_test.go

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1145,6 +1145,7 @@ func TestDiggerTraverseToNestedProjects(t *testing.T) {
11451145
defer teardown()
11461146

11471147
diggerCfg := `
1148+
allow_draft_prs: true
11481149
traverse_to_nested_projects: true
11491150
generate_projects:
11501151
blocks:
@@ -1178,4 +1179,23 @@ generate_projects:
11781179
assert.Equal(t, "dev/test1", dg.Projects[2].Dir)
11791180
assert.Equal(t, "dev_test2", dg.Projects[3].Name)
11801181
assert.Equal(t, "dev/test2", dg.Projects[3].Dir)
1182+
assert.Equal(t, true, dg.AllowDraftPRs)
1183+
}
1184+
1185+
// TestDiggerAllowDraftPRs tests if allow_draft_prs is set to true, digger will allow draft PRs. Defaults to false
1186+
func TestDiggerAllowDraftPRs(t *testing.T) {
1187+
tempDir, teardown := setUp()
1188+
defer teardown()
1189+
1190+
diggerCfg := `
1191+
projects:
1192+
- name: dev
1193+
dir: .
1194+
`
1195+
defer createFile(path.Join(tempDir, "digger.yml"), diggerCfg)()
1196+
defer createFile(path.Join(tempDir, "main.tf"), "resource \"null_resource\" \"test4\" {}")()
1197+
1198+
dg, _, _, err := LoadDiggerConfig(tempDir)
1199+
assert.NoError(t, err)
1200+
assert.Equal(t, false, dg.AllowDraftPRs)
11811201
}

libs/digger_config/yaml.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import (
88

99
type DiggerConfigYaml struct {
1010
ApplyAfterMerge *bool `yaml:"apply_after_merge"`
11+
AllowDraftPRs *bool `yaml:"allow_draft_prs"`
1112
DependencyConfiguration *DependencyConfigurationYaml `yaml:"dependency_configuration"`
1213
Projects []*ProjectYaml `yaml:"projects"`
1314
AutoMerge *bool `yaml:"auto_merge"`

0 commit comments

Comments
 (0)