Skip to content

Commit

Permalink
Merge pull request #900 from jtymes/feature/merge-results-pipelines-623
Browse files Browse the repository at this point in the history
project: Add `merge_pipelines_enabled` and `merge_trains_enabled`. Closes #623
  • Loading branch information
timofurrer authored Feb 28, 2022
2 parents da0f7ec + 8337e9e commit b4bf779
Show file tree
Hide file tree
Showing 7 changed files with 147 additions and 0 deletions.
2 changes: 2 additions & 0 deletions docs/data-sources/project.md
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,9 @@ data "gitlab_project" "example" {
- **http_url_to_repo** (String) URL that can be provided to `git clone` to clone the
- **issues_enabled** (Boolean) Enable issue tracking for the project.
- **lfs_enabled** (Boolean) Enable LFS for the project.
- **merge_pipelines_enabled** (Boolean) Enable or disable merge pipelines.
- **merge_requests_enabled** (Boolean) Enable merge requests for the project.
- **merge_trains_enabled** (Boolean) Enable or disable merge trains.
- **name** (String) The name of the project.
- **namespace_id** (Number) The namespace (group or user) of the project. Defaults to your user.
- **path** (String) The path of the repository.
Expand Down
2 changes: 2 additions & 0 deletions docs/data-sources/projects.md
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ Read-Only:
- **last_activity_at** (String)
- **lfs_enabled** (Boolean)
- **merge_method** (String)
- **merge_pipelines_enabled** (Boolean)
- **merge_requests_enabled** (Boolean)
- **merge_trains_enabled** (Boolean)
- **mirror** (Boolean)
- **mirror_overwrites_diverged_branches** (Boolean)
- **mirror_trigger_builds** (Boolean)
Expand Down
2 changes: 2 additions & 0 deletions docs/resources/project.md
Original file line number Diff line number Diff line change
Expand Up @@ -60,8 +60,10 @@ resource "gitlab_project" "example-two" {
- **issues_template** (String) Sets the template for new issues in the project.
- **lfs_enabled** (Boolean) Enable LFS for the project.
- **merge_method** (String) Set to `ff` to create fast-forward merges
- **merge_pipelines_enabled** (Boolean) Enable or disable merge pipelines.
- **merge_requests_enabled** (Boolean) Enable merge requests for the project.
- **merge_requests_template** (String) Sets the template for new merge requests in the project.
- **merge_trains_enabled** (Boolean) Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
- **mirror** (Boolean) Enable project pull mirror.
- **mirror_overwrites_diverged_branches** (Boolean) Enable overwrite diverged branches for a mirrored project.
- **mirror_trigger_builds** (Boolean) Enable trigger builds on pushes for a mirrored project.
Expand Down
12 changes: 12 additions & 0 deletions internal/provider/data_source_gitlab_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,16 @@ var _ = registerDataSource("gitlab_project", func() *schema.Resource {
Type: schema.TypeBool,
Computed: true,
},
"merge_pipelines_enabled": {
Description: "Enable or disable merge pipelines.",
Type: schema.TypeBool,
Computed: true,
},
"merge_trains_enabled": {
Description: "Enable or disable merge trains.",
Type: schema.TypeBool,
Computed: true,
},
// lintignore: S031 // TODO: Resolve this tfproviderlint issue
"push_rules": {
Description: "Push rules for the project.",
Expand Down Expand Up @@ -247,6 +257,8 @@ func dataSourceGitlabProjectRead(ctx context.Context, d *schema.ResourceData, me
d.Set("runners_token", found.RunnersToken)
d.Set("archived", found.Archived)
d.Set("remove_source_branch_after_merge", found.RemoveSourceBranchAfterMerge)
d.Set("merge_pipelines_enabled", found.MergePipelinesEnabled)
d.Set("merge_trains_enabled", found.MergeTrainsEnabled)

log.Printf("[DEBUG] Reading Gitlab project %q push rules", d.Id())

Expand Down
12 changes: 12 additions & 0 deletions internal/provider/data_source_gitlab_projects.go
Original file line number Diff line number Diff line change
Expand Up @@ -165,6 +165,8 @@ func flattenProjects(projects []*gitlab.Project) (values []map[string]interface{
"packages_enabled": project.PackagesEnabled,
"build_coverage_regex": project.BuildCoverageRegex,
"ci_forward_deployment_enabled": project.CIForwardDeploymentEnabled,
"merge_pipelines_enabled": project.MergePipelinesEnabled,
"merge_trains_enabled": project.MergeTrainsEnabled,
}
values = append(values, v)
}
Expand Down Expand Up @@ -777,6 +779,16 @@ var _ = registerDataSource("gitlab_projects", func() *schema.Resource {
Type: schema.TypeBool,
Computed: true,
},
"merge_pipelines_enabled": {
Description: "Enable or disable merge pipelines.",
Type: schema.TypeBool,
Computed: true,
},
"merge_trains_enabled": {
Description: "Enable or disable merge trains.",
Type: schema.TypeBool,
Computed: true,
},
},
},
},
Expand Down
30 changes: 30 additions & 0 deletions internal/provider/resource_gitlab_project.go
Original file line number Diff line number Diff line change
Expand Up @@ -375,6 +375,18 @@ var resourceGitLabProjectSchema = map[string]*schema.Schema{
Optional: true,
Default: true,
},
"merge_pipelines_enabled": {
Description: "Enable or disable merge pipelines.",
Type: schema.TypeBool,
Optional: true,
Default: false,
},
"merge_trains_enabled": {
Description: "Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.",
Type: schema.TypeBool,
Optional: true,
Default: false,
},
}

var _ = registerResource("gitlab_project", func() *schema.Resource {
Expand Down Expand Up @@ -447,6 +459,8 @@ func resourceGitlabProjectSetToState(client *gitlab.Client, d *schema.ResourceDa
d.Set("merge_requests_template", project.MergeRequestsTemplate)
d.Set("ci_config_path", project.CIConfigPath)
d.Set("ci_forward_deployment_enabled", project.CIForwardDeploymentEnabled)
d.Set("merge_pipelines_enabled", project.MergePipelinesEnabled)
d.Set("merge_trains_enabled", project.MergeTrainsEnabled)
return nil
}

Expand Down Expand Up @@ -702,6 +716,14 @@ func resourceGitlabProjectCreate(ctx context.Context, d *schema.ResourceData, me
editProjectOptions.MergeRequestsTemplate = gitlab.String(v.(string))
}

if v, ok := d.GetOk("merge_pipelines_enabled"); ok {
editProjectOptions.MergePipelinesEnabled = gitlab.Bool(v.(bool))
}

if v, ok := d.GetOk("merge_trains_enabled"); ok {
editProjectOptions.MergeTrainsEnabled = gitlab.Bool(v.(bool))
}

if (editProjectOptions != gitlab.EditProjectOptions{}) {
if _, _, err := client.Projects.EditProject(d.Id(), &editProjectOptions, gitlab.WithContext(ctx)); err != nil {
return diag.Errorf("Could not update project %q: %s", d.Id(), err)
Expand Down Expand Up @@ -896,6 +918,14 @@ func resourceGitlabProjectUpdate(ctx context.Context, d *schema.ResourceData, me
options.CIForwardDeploymentEnabled = gitlab.Bool(d.Get("ci_forward_deployment_enabled").(bool))
}

if d.HasChange("merge_pipelines_enabled") {
options.MergePipelinesEnabled = gitlab.Bool(d.Get("merge_pipelines_enabled").(bool))
}

if d.HasChange("merge_trains_enabled") {
options.MergeTrainsEnabled = gitlab.Bool(d.Get("merge_trains_enabled").(bool))
}

if *options != (gitlab.EditProjectOptions{}) {
log.Printf("[DEBUG] update gitlab project %s", d.Id())
_, _, err := client.Projects.EditProject(d.Id(), options, gitlab.WithContext(ctx))
Expand Down
87 changes: 87 additions & 0 deletions internal/provider/resource_gitlab_project_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -463,6 +463,60 @@ func TestAccGitlabProject_IssueMergeRequestTemplates(t *testing.T) {
})
}

func TestAccGitlabProject_MergePipelines(t *testing.T) {
var project gitlab.Project
rInt := acctest.RandInt()

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: providerFactories,
CheckDestroy: testAccCheckGitlabProjectDestroy,
Steps: []resource.TestStep{
{
SkipFunc: isRunningInCE,
Config: testAccGitLabProjectMergePipelinesEnabled(rInt),
Check: resource.ComposeTestCheckFunc(
testAccCheckGitlabProjectExists("gitlab_project.foo", &project),
func(s *terraform.State) error {
if project.MergePipelinesEnabled != true {
return fmt.Errorf("expected merge pipelines to be enabled")
}

return nil
},
),
},
},
})
}

func TestAccGitlabProject_MergeTrains(t *testing.T) {
var project gitlab.Project
rInt := acctest.RandInt()

resource.Test(t, resource.TestCase{
PreCheck: func() { testAccPreCheck(t) },
ProviderFactories: providerFactories,
CheckDestroy: testAccCheckGitlabProjectDestroy,
Steps: []resource.TestStep{
{
SkipFunc: isRunningInCE,
Config: testAccGitLabProjectMergeTrainsEnabled(rInt),
Check: resource.ComposeTestCheckFunc(
testAccCheckGitlabProjectExists("gitlab_project.foo", &project),
func(s *terraform.State) error {
if project.MergeTrainsEnabled != true {
return fmt.Errorf("expected merge trains to be enabled")
}

return nil
},
),
},
},
})
}

func TestAccGitlabProject_willError(t *testing.T) {
var received, defaults gitlab.Project
rInt := acctest.RandInt()
Expand Down Expand Up @@ -1283,6 +1337,8 @@ resource "gitlab_project" "foo" {
pages_access_level = "disabled"
build_coverage_regex = "bar"
ci_forward_deployment_enabled = false
merge_pipelines_enabled = false
merge_trains_enabled = false
}
`, rInt, rInt)
}
Expand Down Expand Up @@ -1507,3 +1563,34 @@ resource "gitlab_project" "foo" {
}
`, rInt, rInt)
}

func testAccGitLabProjectMergePipelinesEnabled(rInt int) string {
return fmt.Sprintf(`
resource "gitlab_project" "foo" {
name = "foo-%d"
path = "foo.%d"
description = "Terraform acceptance tests"
merge_pipelines_enabled = true
# So that acceptance tests can be run in a gitlab organization
# with no billing
visibility_level = "public"
}
`, rInt, rInt)
}

func testAccGitLabProjectMergeTrainsEnabled(rInt int) string {
return fmt.Sprintf(`
resource "gitlab_project" "foo" {
name = "foo-%d"
path = "foo.%d"
description = "Terraform acceptance tests"
merge_pipelines_enabled = true
merge_trains_enabled = true
# So that acceptance tests can be run in a gitlab organization
# with no billing
visibility_level = "public"
}
`, rInt, rInt)
}

0 comments on commit b4bf779

Please sign in to comment.