From cfdc0ea9f141061ced5db6d871f24b7f6175f670 Mon Sep 17 00:00:00 2001 From: hashimoon <98980386+hashimoon@users.noreply.github.com> Date: Fri, 15 Jul 2022 19:08:00 -0700 Subject: [PATCH 1/4] Allow FileTriggersEnabled to be set to `false` when Git tags are present --- CHANGELOG.md | 1 + workspace.go | 4 ++-- workspace_integration_test.go | 25 ++++++++++++++++++++++++- 3 files changed, 27 insertions(+), 3 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9999308e8..494e0ed6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,7 @@ * Adds additional Task Stage and Run Statuses for Pre-plan run tasks by @glennsarti [#469](https://github.com/hashicorp/go-tfe/pull/469) * Adds `stage` field to the create and update methods for Workspace Run Tasks by @glennsarti [#469](https://github.com/hashicorp/go-tfe/pull/469) * Adds `ResourcesProcessed`, `StateVersion`, `TerraformVersion`, `Modules`, `Providers`, and `Resources` fields to the State Version struct by @laurenolivia [#484](https://github.com/hashicorp/go-tfe/pull/484) +* Add support for disabled file trigger runs when setting Git tags [#468](https://github.com/hashicorp/go-tfe/pull/468) # v1.6.0 diff --git a/workspace.go b/workspace.go index cc8ace07a..dd163454d 100644 --- a/workspace.go +++ b/workspace.go @@ -1080,7 +1080,7 @@ func (o WorkspaceCreateOptions) valid() error { o.TriggerPrefixes != nil && len(o.TriggerPrefixes) > 0 { return ErrUnsupportedBothTagsRegexAndTriggerPrefixes } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && + if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && *o.VCSRepo.TagsRegex != "" && o.FileTriggersEnabled != nil && *o.FileTriggersEnabled { return ErrUnsupportedBothTagsRegexAndFileTriggersEnabled } @@ -1111,7 +1111,7 @@ func (o WorkspaceUpdateOptions) valid() error { o.TriggerPrefixes != nil && len(o.TriggerPrefixes) > 0 { return ErrUnsupportedBothTagsRegexAndTriggerPrefixes } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && + if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && *o.VCSRepo.TagsRegex != "" && o.FileTriggersEnabled != nil && *o.FileTriggersEnabled { return ErrUnsupportedBothTagsRegexAndFileTriggersEnabled } diff --git a/workspace_integration_test.go b/workspace_integration_test.go index 58a1b806a..f66534aac 100644 --- a/workspace_integration_test.go +++ b/workspace_integration_test.go @@ -413,6 +413,18 @@ func TestWorkspacesCreate(t *testing.T) { assert.EqualError(t, err, ErrUnsupportedBothTagsRegexAndFileTriggersEnabled.Error()) }) + t.Run("when options include both non-empty tags-regex and file-triggers-enabled as false an error is not returned", func(t *testing.T) { + options := WorkspaceCreateOptions{ + Name: String("foobar"), + FileTriggersEnabled: Bool(false), + VCSRepo: &VCSRepoOptions{TagsRegex: String("foobar")}, + } + w, err := client.Workspaces.Create(ctx, orgTest.Name, options) + + require.NotNil(t, w) + require.NoError(t, err) + }) + t.Run("when options include trigger-patterns populated and empty trigger-paths workspace is created", func(t *testing.T) { // Remove the below organization creation and use the one from the outer scope once the feature flag is removed orgTest, orgTestCleanup := createOrganizationWithOptions(t, client, OrganizationCreateOptions{ @@ -833,7 +845,6 @@ func TestWorkspacesUpdate(t *testing.T) { }) t.Run("when options include VCSRepo tags-regex (behind a feature flag)", func(t *testing.T) { - skipIfBeta(t) // Remove the below organization and workspace creation and use the one from the outer scope once the feature flag is removed orgTest, orgTestCleanup := createOrganizationWithOptions(t, client, OrganizationCreateOptions{ Name: String("tst-" + randomString(t)[0:20] + "-git-tag-ff-on"), @@ -889,6 +900,18 @@ func TestWorkspacesUpdate(t *testing.T) { assert.EqualError(t, err, ErrUnsupportedBothTagsRegexAndFileTriggersEnabled.Error()) }) + t.Run("when options include both non-empty tags-regex and file-triggers-enabled an error is returned", func(t *testing.T) { + options := WorkspaceUpdateOptions{ + Name: String("foobar"), + FileTriggersEnabled: Bool(true), + VCSRepo: &VCSRepoOptions{TagsRegex: String("foobar")}, + } + w, err := client.Workspaces.Update(ctx, orgTest.Name, wTest.Name, options) + + assert.Nil(t, w) + assert.EqualError(t, err, ErrUnsupportedBothTagsRegexAndFileTriggersEnabled.Error()) + }) + t.Run("when options include both tags-regex and trigger-prefixes an error is returned", func(t *testing.T) { options := WorkspaceUpdateOptions{ Name: String("foobar"), From 09fe6a706d7835b5967c568162a067ebdc67d9b8 Mon Sep 17 00:00:00 2001 From: hashimoon <98980386+hashimoon@users.noreply.github.com> Date: Tue, 19 Jul 2022 12:27:11 -0700 Subject: [PATCH 2/4] Bring tags-regex feature out of beta --- workspace_integration_test.go | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/workspace_integration_test.go b/workspace_integration_test.go index f66534aac..61ac313b6 100644 --- a/workspace_integration_test.go +++ b/workspace_integration_test.go @@ -344,10 +344,10 @@ func TestWorkspacesCreate(t *testing.T) { assert.EqualError(t, err, ErrUnsupportedBothTriggerPatternsAndPrefixes.Error()) }) - t.Run("when options include tags-regex(behind a feature flag)", func(t *testing.T) { + t.Run("when options include tags-regex", func(t *testing.T) { // Remove the below organization creation and use the one from the outer scope once the feature flag is removed orgTest, orgTestCleanup := createOrganizationWithOptions(t, client, OrganizationCreateOptions{ - Name: String("tst-" + randomString(t)[0:20] + "-git-tag-ff-on"), + Name: String("tst-" + randomString(t)[0:20]), Email: String(fmt.Sprintf("%s@tfe.local", randomString(t))), }) defer orgTestCleanup() @@ -844,10 +844,10 @@ func TestWorkspacesUpdate(t *testing.T) { } }) - t.Run("when options include VCSRepo tags-regex (behind a feature flag)", func(t *testing.T) { + t.Run("when options include VCSRepo tags-regex", func(t *testing.T) { // Remove the below organization and workspace creation and use the one from the outer scope once the feature flag is removed orgTest, orgTestCleanup := createOrganizationWithOptions(t, client, OrganizationCreateOptions{ - Name: String("tst-" + randomString(t)[0:20] + "-git-tag-ff-on"), + Name: String("tst-" + randomString(t)[0:20]), Email: String(fmt.Sprintf("%s@tfe.local", randomString(t))), }) defer orgTestCleanup() From 9f796df4066e690be0bed3ae0ded4bc61eab8f9a Mon Sep 17 00:00:00 2001 From: Michael Yocca Date: Tue, 9 Aug 2022 13:53:29 -0700 Subject: [PATCH 3/4] add commit author to changelog --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 494e0ed6a..ec477c146 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,7 +6,7 @@ * Adds additional Task Stage and Run Statuses for Pre-plan run tasks by @glennsarti [#469](https://github.com/hashicorp/go-tfe/pull/469) * Adds `stage` field to the create and update methods for Workspace Run Tasks by @glennsarti [#469](https://github.com/hashicorp/go-tfe/pull/469) * Adds `ResourcesProcessed`, `StateVersion`, `TerraformVersion`, `Modules`, `Providers`, and `Resources` fields to the State Version struct by @laurenolivia [#484](https://github.com/hashicorp/go-tfe/pull/484) -* Add support for disabled file trigger runs when setting Git tags [#468](https://github.com/hashicorp/go-tfe/pull/468) +* Add support for disabled file trigger runs when setting Git tags by @hashimoon [#468](https://github.com/hashicorp/go-tfe/pull/468) # v1.6.0 From 6e9d327a278e989d84d594bb2056b8a617d85076 Mon Sep 17 00:00:00 2001 From: Michael Yocca Date: Tue, 9 Aug 2022 18:45:29 -0700 Subject: [PATCH 4/4] add TagsRegex defined helper --- workspace.go | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/workspace.go b/workspace.go index dd163454d..d5fe03611 100644 --- a/workspace.go +++ b/workspace.go @@ -1072,15 +1072,15 @@ func (o WorkspaceCreateOptions) valid() error { o.TriggerPatterns != nil && len(o.TriggerPatterns) > 0 { return ErrUnsupportedBothTriggerPatternsAndPrefixes } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && + if tagRegexDefined(o.VCSRepo) && o.TriggerPatterns != nil && len(o.TriggerPatterns) > 0 { return ErrUnsupportedBothTagsRegexAndTriggerPatterns } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && + if tagRegexDefined(o.VCSRepo) && o.TriggerPrefixes != nil && len(o.TriggerPrefixes) > 0 { return ErrUnsupportedBothTagsRegexAndTriggerPrefixes } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && *o.VCSRepo.TagsRegex != "" && + if tagRegexDefined(o.VCSRepo) && o.FileTriggersEnabled != nil && *o.FileTriggersEnabled { return ErrUnsupportedBothTagsRegexAndFileTriggersEnabled } @@ -1103,15 +1103,15 @@ func (o WorkspaceUpdateOptions) valid() error { return ErrUnsupportedBothTriggerPatternsAndPrefixes } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && + if tagRegexDefined(o.VCSRepo) && o.TriggerPatterns != nil && len(o.TriggerPatterns) > 0 { return ErrUnsupportedBothTagsRegexAndTriggerPatterns } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && + if tagRegexDefined(o.VCSRepo) && o.TriggerPrefixes != nil && len(o.TriggerPrefixes) > 0 { return ErrUnsupportedBothTagsRegexAndTriggerPrefixes } - if o.VCSRepo != nil && o.VCSRepo.TagsRegex != nil && *o.VCSRepo.TagsRegex != "" && + if tagRegexDefined(o.VCSRepo) && o.FileTriggersEnabled != nil && *o.FileTriggersEnabled { return ErrUnsupportedBothTagsRegexAndFileTriggersEnabled } @@ -1221,3 +1221,13 @@ func validateWorkspaceIncludeParams(params []WSIncludeOpt) error { return nil } + +func tagRegexDefined(options *VCSRepoOptions) bool { + if options == nil { + return false + } + if options.TagsRegex != nil && *options.TagsRegex != "" { + return true + } + return false +}