From f380588d7ffcf9a6d23268f0792c091713b211a8 Mon Sep 17 00:00:00 2001 From: uno4ki Date: Tue, 17 Nov 2020 13:13:46 +0300 Subject: [PATCH] Add merge_method option --- README.md | 3 ++- codeowners/provider.go | 21 +++++++++++++++++++++ codeowners/provider_test.go | 6 ++++++ codeowners/resource_file.go | 9 +++++---- 4 files changed, 34 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index df937ca1..5762c118 100644 --- a/README.md +++ b/README.md @@ -22,6 +22,7 @@ The following provider block variables are available for configuration: - `email` Email to use in commits - this must match the email in your GPG key if you are signing commits (read from env var `$GITHUB_EMAIL`) - `gpg_secret_key` The private GPG key to use to sign commits (optional) (read from env var `$GPG_SECRET_KEY`) - `gpg_passphrase` The passphrase associated with the aforementioned GPG key (optional) (read from env var `$GPG_PASSPHRASE`) +- `merge_method` Pull request merge method, default to `merge` available (`merge`, `squash`, `rebase`) (read from env var `$GITHUB_MERGE_METHOD`) ### Authentication @@ -72,6 +73,6 @@ The above would result in the following content being committed to `.github/CODE ``` # automatically generated by terraform - please do not edit here -* @expert +* @expert *.java @java-expert @my-org/experts ``` diff --git a/codeowners/provider.go b/codeowners/provider.go index 44defeb5..daf3254e 100644 --- a/codeowners/provider.go +++ b/codeowners/provider.go @@ -53,6 +53,13 @@ func Provider() *schema.Provider { DefaultFunc: schema.EnvDefaultFunc("GITHUB_USERNAME", nil), Sensitive: true, }, + "merge_method": { + Type: schema.TypeString, + Required: true, + Description: "PullRequest merge method. Default: merge, available: merge, squash, rebase", + DefaultFunc: schema.EnvDefaultFunc("GITHUB_MERGE_METHOD", nil), + Sensitive: true, + }, }, ResourcesMap: map[string]*schema.Resource{ "codeowners_file": resourceFile(), @@ -68,6 +75,19 @@ type providerConfiguration struct { ghEmail string gpgKey string gpgPassphrase string + mergeMethod string +} + +func mergeMethod(mm string) string { + mergeMethods := []string{"merge", "squash", "rebase"} + + for _, v := range mergeMethods { + if mm == v { + return mm + } + } + + return "merge" } func providerConfigure(d *schema.ResourceData) (interface{}, error) { @@ -85,5 +105,6 @@ func providerConfigure(d *schema.ResourceData) (interface{}, error) { ghUsername: d.Get("username").(string), gpgKey: d.Get("gpg_secret_key").(string), gpgPassphrase: d.Get("gpg_passphrase").(string), + mergeMethod: mergeMethod(d.Get("merge_method").(string)), }, nil } diff --git a/codeowners/provider_test.go b/codeowners/provider_test.go index 5fd4ca5f..b3bb2c99 100644 --- a/codeowners/provider_test.go +++ b/codeowners/provider_test.go @@ -32,6 +32,12 @@ func testAccPreCheck(t *testing.T) { } } +func TestDefaultMergeMethod(t *testing.T) { + if mergeMethod("wat?") != "merge" { + t.Fatal("Unexpected default value for mergeMethod") + } +} + func init() { testAccProvider = Provider() testAccProviders = map[string]terraform.ResourceProvider{ diff --git a/codeowners/resource_file.go b/codeowners/resource_file.go index 7585ab64..58bd3612 100644 --- a/codeowners/resource_file.go +++ b/codeowners/resource_file.go @@ -3,12 +3,12 @@ package codeowners import ( "context" "fmt" - "github.com/form3tech-oss/go-github-utils/pkg/branch" "net/http" "sort" "strings" "time" + "github.com/form3tech-oss/go-github-utils/pkg/branch" githubcommitutils "github.com/form3tech-oss/go-github-utils/pkg/commit" githubfileutils "github.com/form3tech-oss/go-github-utils/pkg/file" "github.com/google/go-github/v28/github" @@ -114,7 +114,7 @@ func resourceFileRead(d *schema.ResourceData, m interface{}) error { } func resourceFileCreate(d *schema.ResourceData, m interface{}) error { - return resourceFileCreateOrUpdate("Adding CODEOWNERS file", d, m ) + return resourceFileCreateOrUpdate("Adding CODEOWNERS file", d, m) } func resourceFileCreateOrUpdate(s string, d *schema.ResourceData, m interface{}) error { @@ -154,6 +154,7 @@ func resourceFileCreateOrUpdate(s string, d *schema.ResourceData, m interface{}) RetryBackoff: 5 * time.Second, PullRequestSourceBranchName: fmt.Sprintf("terraform-provider-codeowners-%d", time.Now().UnixNano()), PullRequestBody: "", + MergeMethod: config.mergeMethod, }); err != nil { return err } @@ -161,9 +162,8 @@ func resourceFileCreateOrUpdate(s string, d *schema.ResourceData, m interface{}) return resourceFileRead(d, m) } - func resourceFileUpdate(d *schema.ResourceData, m interface{}) error { - return resourceFileCreateOrUpdate("Updating CODEOWNERS file", d, m ) + return resourceFileCreateOrUpdate("Updating CODEOWNERS file", d, m) } func resourceFileDelete(d *schema.ResourceData, m interface{}) error { @@ -215,6 +215,7 @@ func resourceFileDelete(d *schema.ResourceData, m interface{}) error { RetryBackoff: 5 * time.Second, PullRequestSourceBranchName: fmt.Sprintf("terraform-provider-codeowners-%d", time.Now().UnixNano()), PullRequestBody: "", + MergeMethod: config.mergeMethod, }); err != nil { return err }