Skip to content

Commit b4bf779

Browse files
authored
Merge pull request #900 from jtymes/feature/merge-results-pipelines-623
project: Add `merge_pipelines_enabled` and `merge_trains_enabled`. Closes #623
2 parents da0f7ec + 8337e9e commit b4bf779

File tree

7 files changed

+147
-0
lines changed

7 files changed

+147
-0
lines changed

docs/data-sources/project.md

+2
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ data "gitlab_project" "example" {
3838
- **http_url_to_repo** (String) URL that can be provided to `git clone` to clone the
3939
- **issues_enabled** (Boolean) Enable issue tracking for the project.
4040
- **lfs_enabled** (Boolean) Enable LFS for the project.
41+
- **merge_pipelines_enabled** (Boolean) Enable or disable merge pipelines.
4142
- **merge_requests_enabled** (Boolean) Enable merge requests for the project.
43+
- **merge_trains_enabled** (Boolean) Enable or disable merge trains.
4244
- **name** (String) The name of the project.
4345
- **namespace_id** (Number) The namespace (group or user) of the project. Defaults to your user.
4446
- **path** (String) The path of the repository.

docs/data-sources/projects.md

+2
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,9 @@ Read-Only:
100100
- **last_activity_at** (String)
101101
- **lfs_enabled** (Boolean)
102102
- **merge_method** (String)
103+
- **merge_pipelines_enabled** (Boolean)
103104
- **merge_requests_enabled** (Boolean)
105+
- **merge_trains_enabled** (Boolean)
104106
- **mirror** (Boolean)
105107
- **mirror_overwrites_diverged_branches** (Boolean)
106108
- **mirror_trigger_builds** (Boolean)

docs/resources/project.md

+2
Original file line numberDiff line numberDiff line change
@@ -60,8 +60,10 @@ resource "gitlab_project" "example-two" {
6060
- **issues_template** (String) Sets the template for new issues in the project.
6161
- **lfs_enabled** (Boolean) Enable LFS for the project.
6262
- **merge_method** (String) Set to `ff` to create fast-forward merges
63+
- **merge_pipelines_enabled** (Boolean) Enable or disable merge pipelines.
6364
- **merge_requests_enabled** (Boolean) Enable merge requests for the project.
6465
- **merge_requests_template** (String) Sets the template for new merge requests in the project.
66+
- **merge_trains_enabled** (Boolean) Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.
6567
- **mirror** (Boolean) Enable project pull mirror.
6668
- **mirror_overwrites_diverged_branches** (Boolean) Enable overwrite diverged branches for a mirrored project.
6769
- **mirror_trigger_builds** (Boolean) Enable trigger builds on pushes for a mirrored project.

internal/provider/data_source_gitlab_project.go

+12
Original file line numberDiff line numberDiff line change
@@ -139,6 +139,16 @@ var _ = registerDataSource("gitlab_project", func() *schema.Resource {
139139
Type: schema.TypeBool,
140140
Computed: true,
141141
},
142+
"merge_pipelines_enabled": {
143+
Description: "Enable or disable merge pipelines.",
144+
Type: schema.TypeBool,
145+
Computed: true,
146+
},
147+
"merge_trains_enabled": {
148+
Description: "Enable or disable merge trains.",
149+
Type: schema.TypeBool,
150+
Computed: true,
151+
},
142152
// lintignore: S031 // TODO: Resolve this tfproviderlint issue
143153
"push_rules": {
144154
Description: "Push rules for the project.",
@@ -247,6 +257,8 @@ func dataSourceGitlabProjectRead(ctx context.Context, d *schema.ResourceData, me
247257
d.Set("runners_token", found.RunnersToken)
248258
d.Set("archived", found.Archived)
249259
d.Set("remove_source_branch_after_merge", found.RemoveSourceBranchAfterMerge)
260+
d.Set("merge_pipelines_enabled", found.MergePipelinesEnabled)
261+
d.Set("merge_trains_enabled", found.MergeTrainsEnabled)
250262

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

internal/provider/data_source_gitlab_projects.go

+12
Original file line numberDiff line numberDiff line change
@@ -165,6 +165,8 @@ func flattenProjects(projects []*gitlab.Project) (values []map[string]interface{
165165
"packages_enabled": project.PackagesEnabled,
166166
"build_coverage_regex": project.BuildCoverageRegex,
167167
"ci_forward_deployment_enabled": project.CIForwardDeploymentEnabled,
168+
"merge_pipelines_enabled": project.MergePipelinesEnabled,
169+
"merge_trains_enabled": project.MergeTrainsEnabled,
168170
}
169171
values = append(values, v)
170172
}
@@ -777,6 +779,16 @@ var _ = registerDataSource("gitlab_projects", func() *schema.Resource {
777779
Type: schema.TypeBool,
778780
Computed: true,
779781
},
782+
"merge_pipelines_enabled": {
783+
Description: "Enable or disable merge pipelines.",
784+
Type: schema.TypeBool,
785+
Computed: true,
786+
},
787+
"merge_trains_enabled": {
788+
Description: "Enable or disable merge trains.",
789+
Type: schema.TypeBool,
790+
Computed: true,
791+
},
780792
},
781793
},
782794
},

internal/provider/resource_gitlab_project.go

+30
Original file line numberDiff line numberDiff line change
@@ -375,6 +375,18 @@ var resourceGitLabProjectSchema = map[string]*schema.Schema{
375375
Optional: true,
376376
Default: true,
377377
},
378+
"merge_pipelines_enabled": {
379+
Description: "Enable or disable merge pipelines.",
380+
Type: schema.TypeBool,
381+
Optional: true,
382+
Default: false,
383+
},
384+
"merge_trains_enabled": {
385+
Description: "Enable or disable merge trains. Requires `merge_pipelines_enabled` to be set to `true` to take effect.",
386+
Type: schema.TypeBool,
387+
Optional: true,
388+
Default: false,
389+
},
378390
}
379391

380392
var _ = registerResource("gitlab_project", func() *schema.Resource {
@@ -447,6 +459,8 @@ func resourceGitlabProjectSetToState(client *gitlab.Client, d *schema.ResourceDa
447459
d.Set("merge_requests_template", project.MergeRequestsTemplate)
448460
d.Set("ci_config_path", project.CIConfigPath)
449461
d.Set("ci_forward_deployment_enabled", project.CIForwardDeploymentEnabled)
462+
d.Set("merge_pipelines_enabled", project.MergePipelinesEnabled)
463+
d.Set("merge_trains_enabled", project.MergeTrainsEnabled)
450464
return nil
451465
}
452466

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

719+
if v, ok := d.GetOk("merge_pipelines_enabled"); ok {
720+
editProjectOptions.MergePipelinesEnabled = gitlab.Bool(v.(bool))
721+
}
722+
723+
if v, ok := d.GetOk("merge_trains_enabled"); ok {
724+
editProjectOptions.MergeTrainsEnabled = gitlab.Bool(v.(bool))
725+
}
726+
705727
if (editProjectOptions != gitlab.EditProjectOptions{}) {
706728
if _, _, err := client.Projects.EditProject(d.Id(), &editProjectOptions, gitlab.WithContext(ctx)); err != nil {
707729
return diag.Errorf("Could not update project %q: %s", d.Id(), err)
@@ -896,6 +918,14 @@ func resourceGitlabProjectUpdate(ctx context.Context, d *schema.ResourceData, me
896918
options.CIForwardDeploymentEnabled = gitlab.Bool(d.Get("ci_forward_deployment_enabled").(bool))
897919
}
898920

921+
if d.HasChange("merge_pipelines_enabled") {
922+
options.MergePipelinesEnabled = gitlab.Bool(d.Get("merge_pipelines_enabled").(bool))
923+
}
924+
925+
if d.HasChange("merge_trains_enabled") {
926+
options.MergeTrainsEnabled = gitlab.Bool(d.Get("merge_trains_enabled").(bool))
927+
}
928+
899929
if *options != (gitlab.EditProjectOptions{}) {
900930
log.Printf("[DEBUG] update gitlab project %s", d.Id())
901931
_, _, err := client.Projects.EditProject(d.Id(), options, gitlab.WithContext(ctx))

internal/provider/resource_gitlab_project_test.go

+87
Original file line numberDiff line numberDiff line change
@@ -463,6 +463,60 @@ func TestAccGitlabProject_IssueMergeRequestTemplates(t *testing.T) {
463463
})
464464
}
465465

466+
func TestAccGitlabProject_MergePipelines(t *testing.T) {
467+
var project gitlab.Project
468+
rInt := acctest.RandInt()
469+
470+
resource.Test(t, resource.TestCase{
471+
PreCheck: func() { testAccPreCheck(t) },
472+
ProviderFactories: providerFactories,
473+
CheckDestroy: testAccCheckGitlabProjectDestroy,
474+
Steps: []resource.TestStep{
475+
{
476+
SkipFunc: isRunningInCE,
477+
Config: testAccGitLabProjectMergePipelinesEnabled(rInt),
478+
Check: resource.ComposeTestCheckFunc(
479+
testAccCheckGitlabProjectExists("gitlab_project.foo", &project),
480+
func(s *terraform.State) error {
481+
if project.MergePipelinesEnabled != true {
482+
return fmt.Errorf("expected merge pipelines to be enabled")
483+
}
484+
485+
return nil
486+
},
487+
),
488+
},
489+
},
490+
})
491+
}
492+
493+
func TestAccGitlabProject_MergeTrains(t *testing.T) {
494+
var project gitlab.Project
495+
rInt := acctest.RandInt()
496+
497+
resource.Test(t, resource.TestCase{
498+
PreCheck: func() { testAccPreCheck(t) },
499+
ProviderFactories: providerFactories,
500+
CheckDestroy: testAccCheckGitlabProjectDestroy,
501+
Steps: []resource.TestStep{
502+
{
503+
SkipFunc: isRunningInCE,
504+
Config: testAccGitLabProjectMergeTrainsEnabled(rInt),
505+
Check: resource.ComposeTestCheckFunc(
506+
testAccCheckGitlabProjectExists("gitlab_project.foo", &project),
507+
func(s *terraform.State) error {
508+
if project.MergeTrainsEnabled != true {
509+
return fmt.Errorf("expected merge trains to be enabled")
510+
}
511+
512+
return nil
513+
},
514+
),
515+
},
516+
},
517+
})
518+
}
519+
466520
func TestAccGitlabProject_willError(t *testing.T) {
467521
var received, defaults gitlab.Project
468522
rInt := acctest.RandInt()
@@ -1283,6 +1337,8 @@ resource "gitlab_project" "foo" {
12831337
pages_access_level = "disabled"
12841338
build_coverage_regex = "bar"
12851339
ci_forward_deployment_enabled = false
1340+
merge_pipelines_enabled = false
1341+
merge_trains_enabled = false
12861342
}
12871343
`, rInt, rInt)
12881344
}
@@ -1507,3 +1563,34 @@ resource "gitlab_project" "foo" {
15071563
}
15081564
`, rInt, rInt)
15091565
}
1566+
1567+
func testAccGitLabProjectMergePipelinesEnabled(rInt int) string {
1568+
return fmt.Sprintf(`
1569+
resource "gitlab_project" "foo" {
1570+
name = "foo-%d"
1571+
path = "foo.%d"
1572+
description = "Terraform acceptance tests"
1573+
merge_pipelines_enabled = true
1574+
1575+
# So that acceptance tests can be run in a gitlab organization
1576+
# with no billing
1577+
visibility_level = "public"
1578+
}
1579+
`, rInt, rInt)
1580+
}
1581+
1582+
func testAccGitLabProjectMergeTrainsEnabled(rInt int) string {
1583+
return fmt.Sprintf(`
1584+
resource "gitlab_project" "foo" {
1585+
name = "foo-%d"
1586+
path = "foo.%d"
1587+
description = "Terraform acceptance tests"
1588+
merge_pipelines_enabled = true
1589+
merge_trains_enabled = true
1590+
1591+
# So that acceptance tests can be run in a gitlab organization
1592+
# with no billing
1593+
visibility_level = "public"
1594+
}
1595+
`, rInt, rInt)
1596+
}

0 commit comments

Comments
 (0)