Skip to content

Commit 0838ca3

Browse files
authored
Merge pull request #867 from timofurrer/bugfix/issue-770
resource/gitlab_project: fix backwards-compatibility with 14.1 regarding the `squash_option`. Closes #770
2 parents 8f2d1a0 + e826a32 commit 0838ca3

File tree

3 files changed

+22
-9
lines changed

3 files changed

+22
-9
lines changed

docs/resources/project.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -78,7 +78,7 @@ resource "gitlab_project" "example-two" {
7878
- **request_access_enabled** (Boolean) Allow users to request member access.
7979
- **shared_runners_enabled** (Boolean) Enable shared runners for this project.
8080
- **snippets_enabled** (Boolean) Enable snippets for the project.
81-
- **squash_option** (String) Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`.
81+
- **squash_option** (String) Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]
8282
- **tags** (Set of String) Tags (topics) of the project.
8383
- **template_name** (String) When used without use_custom_template, name of a built-in project template. When used with use_custom_template, name of a custom project template. This option is mutually exclusive with `template_project_id`.
8484
- **template_project_id** (Number) When used with use_custom_template, project ID of a custom project template. This is preferable to using template_name since template_name may be ambiguous (enterprise edition). This option is mutually exclusive with `template_name`.

internal/provider/resource_gitlab_project.go

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@ var resourceGitLabProjectSchema = map[string]*schema.Schema{
192192
Optional: true,
193193
},
194194
"squash_option": {
195-
Description: "Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`.",
195+
Description: "Squash commits when merge request. Valid values are `never`, `always`, `default_on`, or `default_off`. The default value is `default_off`. [GitLab >= 14.1]",
196196
Type: schema.TypeString,
197197
Optional: true,
198198
Default: "default_off",
@@ -385,7 +385,7 @@ var _ = registerResource("gitlab_project", func() *schema.Resource {
385385
}
386386
})
387387

388-
func resourceGitlabProjectSetToState(d *schema.ResourceData, project *gitlab.Project) error {
388+
func resourceGitlabProjectSetToState(client *gitlab.Client, d *schema.ResourceData, project *gitlab.Project) error {
389389
d.SetId(fmt.Sprintf("%d", project.ID))
390390
d.Set("name", project.Name)
391391
d.Set("path", project.Path)
@@ -416,7 +416,11 @@ func resourceGitlabProjectSetToState(d *schema.ResourceData, project *gitlab.Pro
416416
return err
417417
}
418418
d.Set("archived", project.Archived)
419-
d.Set("squash_option", project.SquashOption)
419+
if supportsSquashOption, err := isGitLabVersionAtLeast(client, "14.1")(); err != nil {
420+
return err
421+
} else if supportsSquashOption {
422+
d.Set("squash_option", project.SquashOption)
423+
}
420424
d.Set("remove_source_branch_after_merge", project.RemoveSourceBranchAfterMerge)
421425
d.Set("packages_enabled", project.PackagesEnabled)
422426
d.Set("pages_access_level", string(project.PagesAccessLevel))
@@ -452,7 +456,6 @@ func resourceGitlabProjectCreate(ctx context.Context, d *schema.ResourceData, me
452456
OnlyAllowMergeIfAllDiscussionsAreResolved: gitlab.Bool(d.Get("only_allow_merge_if_all_discussions_are_resolved").(bool)),
453457
AllowMergeOnSkippedPipeline: gitlab.Bool(d.Get("allow_merge_on_skipped_pipeline").(bool)),
454458
SharedRunnersEnabled: gitlab.Bool(d.Get("shared_runners_enabled").(bool)),
455-
SquashOption: stringToSquashOptionValue(d.Get("squash_option").(string)),
456459
RemoveSourceBranchAfterMerge: gitlab.Bool(d.Get("remove_source_branch_after_merge").(bool)),
457460
PackagesEnabled: gitlab.Bool(d.Get("packages_enabled").(bool)),
458461
Mirror: gitlab.Bool(d.Get("mirror").(bool)),
@@ -514,6 +517,14 @@ func resourceGitlabProjectCreate(ctx context.Context, d *schema.ResourceData, me
514517
options.CIConfigPath = gitlab.String(v.(string))
515518
}
516519

520+
if supportsSquashOption, err := isGitLabVersionAtLeast(client, "14.1")(); err != nil {
521+
return diag.FromErr(err)
522+
} else if supportsSquashOption {
523+
if v, ok := d.GetOk("squash_option"); ok {
524+
options.SquashOption = stringToSquashOptionValue(v.(string))
525+
}
526+
}
527+
517528
log.Printf("[DEBUG] create gitlab project %q", *options.Name)
518529

519530
project, _, err := client.Projects.CreateProject(options, gitlab.WithContext(ctx))
@@ -699,7 +710,7 @@ func resourceGitlabProjectRead(ctx context.Context, d *schema.ResourceData, meta
699710
return nil
700711
}
701712

702-
if err := resourceGitlabProjectSetToState(d, project); err != nil {
713+
if err := resourceGitlabProjectSetToState(client, d, project); err != nil {
703714
return diag.FromErr(err)
704715
}
705716

@@ -808,7 +819,9 @@ func resourceGitlabProjectUpdate(ctx context.Context, d *schema.ResourceData, me
808819
options.LFSEnabled = gitlab.Bool(d.Get("lfs_enabled").(bool))
809820
}
810821

811-
if d.HasChange("squash_option") {
822+
if supportsSquashOption, err := isGitLabVersionAtLeast(client, "14.1")(); err != nil {
823+
return diag.FromErr(err)
824+
} else if supportsSquashOption && d.HasChange("squash_option") {
812825
options.SquashOption = stringToSquashOptionValue(d.Get("squash_option").(string))
813826
}
814827

internal/provider/resource_gitlab_project_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -964,11 +964,11 @@ func testAccCheckAggregateGitlabProject(expected, received *gitlab.Project) reso
964964
}
965965
}
966966

967-
if err := resourceGitlabProjectSetToState(expectedData, expected); err != nil {
967+
if err := resourceGitlabProjectSetToState(testGitlabClient, expectedData, expected); err != nil {
968968
return err
969969
}
970970

971-
if err := resourceGitlabProjectSetToState(receivedData, received); err != nil {
971+
if err := resourceGitlabProjectSetToState(testGitlabClient, receivedData, received); err != nil {
972972
return err
973973
}
974974

0 commit comments

Comments
 (0)