diff --git a/cmd/server.go b/cmd/server.go index 2a7006b63a..4250abb3bb 100644 --- a/cmd/server.go +++ b/cmd/server.go @@ -64,7 +64,7 @@ const ( GitlabWebhookSecretFlag = "gitlab-webhook-secret" // nolint: gosec HidePrevPlanComments = "hide-prev-plan-comments" LogLevelFlag = "log-level" - PlanDrafts = "plan-drafts" + EnableDraftPRs = "enable-draft-prs" PortFlag = "port" RepoConfigFlag = "repo-config" RepoConfigJSONFlag = "repo-config-json" @@ -259,7 +259,7 @@ var boolFlags = map[string]boolFlag{ "VCS support is limited to: GitHub.", defaultValue: false, }, - PlanDrafts: { + EnableDraftPRs: { description: "Enable autoplan for Github Draft Pull Requests", defaultValue: false, }, diff --git a/cmd/server_test.go b/cmd/server_test.go index d9e9fc1d46..e37bc85770 100644 --- a/cmd/server_test.go +++ b/cmd/server_test.go @@ -75,7 +75,7 @@ var testFlags = map[string]interface{}{ GitlabUserFlag: "gitlab-user", GitlabWebhookSecretFlag: "gitlab-secret", LogLevelFlag: "debug", - PlanDrafts: true, + EnableDraftPRs: true, PortFlag: 8181, RepoWhitelistFlag: "github.com/runatlantis/atlantis", RequireApprovalFlag: true, diff --git a/server/events/event_parser.go b/server/events/event_parser.go index c61f228ebb..ff55019947 100644 --- a/server/events/event_parser.go +++ b/server/events/event_parser.go @@ -266,6 +266,7 @@ type EventParser struct { GithubToken string GitlabUser string GitlabToken string + EnableDraftPRs bool BitbucketUser string BitbucketToken string BitbucketServerURL string @@ -418,11 +419,11 @@ func (e *EventParser) ParseGithubPullEvent(pullEvent *github.PullRequestEvent) ( } if pullEvent.GetPullRequest().GetDraft() { - // if the PR is in draft state we do not initiate actions proactively however, - // we must still clean up locks in the event of a user initiated plan + // Even if the PR is in draft state users can manually run plan or may + // be using the -allow-draft-prs flag. If so then we need to ensure locks are cleaned up. if pullEvent.GetAction() == "closed" { pullEventType = models.ClosedPullEvent - } else { + } else if !e.EnableDraftPRs { pullEventType = models.OtherPullEvent } } else { diff --git a/server/events/event_parser_test.go b/server/events/event_parser_test.go index 969e36269a..0c3d31eff7 100644 --- a/server/events/event_parser_test.go +++ b/server/events/event_parser_test.go @@ -36,6 +36,7 @@ var parser = events.EventParser{ GithubToken: "github-token", GitlabUser: "gitlab-user", GitlabToken: "gitlab-token", + EnableDraftPRs: false, BitbucketUser: "bitbucket-user", BitbucketToken: "bitbucket-token", BitbucketServerURL: "http://mycorp.com:7490", @@ -160,6 +161,21 @@ func TestParseGithubPullEvent(t *testing.T) { Equals(t, models.User{Username: "user"}, actUser) } +func TestParseGithubPullEventFromDraft(t *testing.T) { + // verify that draft PRs are treated as 'other' events by default + testEvent := deepcopy.Copy(PullEvent).(github.PullRequestEvent) + draftPR := true + testEvent.PullRequest.Draft = &draftPR + _, evType, _, _, _, err := parser.ParseGithubPullEvent(&testEvent) + Ok(t, err) + Equals(t, models.OtherPullEvent, evType) + // verify that drafts are planned if requested + parser.EnableDraftPRs = true + _, evType, _, _, _, err = parser.ParseGithubPullEvent(&testEvent) + Ok(t, err) + Equals(t, models.OpenedPullEvent, evType) +} + func TestParseGithubPullEvent_EventType(t *testing.T) { cases := []struct { action string diff --git a/server/server.go b/server/server.go index 50a9a834e5..20c599036a 100644 --- a/server/server.go +++ b/server/server.go @@ -290,7 +290,7 @@ func NewServer(userConfig UserConfig, config Config) (*Server, error) { GithubToken: userConfig.GithubToken, GitlabUser: userConfig.GitlabUser, GitlabToken: userConfig.GitlabToken, - PlanDrafts: userConfig.PlanDrafts, + EnableDraftPRs: userConfig.PlanDrafts, BitbucketUser: userConfig.BitbucketUser, BitbucketToken: userConfig.BitbucketToken, BitbucketServerURL: userConfig.BitbucketBaseURL, diff --git a/server/user_config.go b/server/user_config.go index 958400e54b..1fd3d8bc54 100644 --- a/server/user_config.go +++ b/server/user_config.go @@ -34,7 +34,7 @@ type UserConfig struct { GitlabWebhookSecret string `mapstructure:"gitlab-webhook-secret"` HidePrevPlanComments bool `mapstructure:"hide-prev-plan-comments"` LogLevel string `mapstructure:"log-level"` - PlanDrafts bool `mapstructure:"plan-drafts"` + PlanDrafts bool `mapstructure:"enable-draft-prs"` Port int `mapstructure:"port"` RepoConfig string `mapstructure:"repo-config"` RepoConfigJSON string `mapstructure:"repo-config-json"`