Skip to content

Commit

Permalink
Allow FileTriggersEnabled to be set to false when Git tags are present (
Browse files Browse the repository at this point in the history
#468)

* Allow FileTriggersEnabled to be set to `false` when Git tags are present

* Bring tags-regex feature out of beta

* add commit author to changelog

* add TagsRegex defined helper

Co-authored-by: Michael Yocca <michael.yocca@hashicorp.com>
  • Loading branch information
hashimoon and mjyocca committed Aug 10, 2022
1 parent d261282 commit f8bcba2
Show file tree
Hide file tree
Showing 3 changed files with 45 additions and 11 deletions.
1 change: 1 addition & 0 deletions CHANGELOG.md
Expand Up @@ -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 by @hashimoon [#468](https://github.com/hashicorp/go-tfe/pull/468)

# v1.6.0

Expand Down
22 changes: 16 additions & 6 deletions workspace.go
Expand Up @@ -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 &&
if tagRegexDefined(o.VCSRepo) &&
o.FileTriggersEnabled != nil && *o.FileTriggersEnabled {
return ErrUnsupportedBothTagsRegexAndFileTriggersEnabled
}
Expand All @@ -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 &&
if tagRegexDefined(o.VCSRepo) &&
o.FileTriggersEnabled != nil && *o.FileTriggersEnabled {
return ErrUnsupportedBothTagsRegexAndFileTriggersEnabled
}
Expand Down Expand Up @@ -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
}
33 changes: 28 additions & 5 deletions workspace_integration_test.go
Expand Up @@ -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()
Expand Down Expand Up @@ -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{
Expand Down Expand Up @@ -832,11 +844,10 @@ func TestWorkspacesUpdate(t *testing.T) {
}
})

t.Run("when options include VCSRepo tags-regex (behind a feature flag)", func(t *testing.T) {
skipIfBeta(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()
Expand Down Expand Up @@ -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"),
Expand Down

0 comments on commit f8bcba2

Please sign in to comment.