Skip to content

Commit 389a7cd

Browse files
authored
feat: add use_step_key_as_commit_status provider setting (#1146)
1 parent f9d6cd6 commit 389a7cd

3 files changed

Lines changed: 64 additions & 0 deletions

File tree

buildkite/resource_pipeline.go

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ type providerSettingsModel struct {
124124
PublishCommitStatus types.Bool `tfsdk:"publish_commit_status"`
125125
PublishBlockedAsPending types.Bool `tfsdk:"publish_blocked_as_pending"`
126126
PublishCommitStatusPerStep types.Bool `tfsdk:"publish_commit_status_per_step"`
127+
UseStepKeyAsCommitStatus types.Bool `tfsdk:"use_step_key_as_commit_status"`
127128
SeparatePullRequestStatuses types.Bool `tfsdk:"separate_pull_request_statuses"`
128129
IgnoreDefaultBranchPullRequests types.Bool `tfsdk:"ignore_default_branch_pull_requests"`
129130
BuildMergeGroupChecksRequested types.Bool `tfsdk:"build_merge_group_checks_requested"`
@@ -949,6 +950,14 @@ func (*pipelineResource) Schema(ctx context.Context, req resource.SchemaRequest,
949950
boolplanmodifier.UseNonNullStateForUnknown(),
950951
},
951952
},
953+
"use_step_key_as_commit_status": schema.BoolAttribute{
954+
Computed: true,
955+
Optional: true,
956+
MarkdownDescription: "Whether to use step keys as commit status names for per-step commit statuses. Requires `publish_commit_status` and `publish_commit_status_per_step` to also be enabled. Defaults to false.",
957+
PlanModifiers: []planmodifier.Bool{
958+
boolplanmodifier.UseNonNullStateForUnknown(),
959+
},
960+
},
952961
"separate_pull_request_statuses": schema.BoolAttribute{
953962
Computed: true,
954963
Optional: true,
@@ -1375,6 +1384,7 @@ type PipelineExtraSettings struct {
13751384
PublishCommitStatus *bool `json:"publish_commit_status,omitempty"`
13761385
PublishBlockedAsPending *bool `json:"publish_blocked_as_pending,omitempty"`
13771386
PublishCommitStatusPerStep *bool `json:"publish_commit_status_per_step,omitempty"`
1387+
UseStepKeyAsCommitStatus *bool `json:"use_step_key_as_commit_status,omitempty"`
13781388
SeparatePullRequestStatuses *bool `json:"separate_pull_request_statuses,omitempty"`
13791389
IgnoreDefaultBranchPullRequests *bool `json:"ignore_default_branch_pull_requests,omitempty"`
13801390
BuildMergeGroupChecksRequested *bool `json:"build_merge_group_checks_requested,omitempty"`
@@ -1441,6 +1451,7 @@ func updatePipelineExtraInfo(ctx context.Context, slug string, settings *provide
14411451
PublishCommitStatus: settings.PublishCommitStatus.ValueBoolPointer(),
14421452
PublishBlockedAsPending: settings.PublishBlockedAsPending.ValueBoolPointer(),
14431453
PublishCommitStatusPerStep: settings.PublishCommitStatusPerStep.ValueBoolPointer(),
1454+
UseStepKeyAsCommitStatus: settings.UseStepKeyAsCommitStatus.ValueBoolPointer(),
14441455
SeparatePullRequestStatuses: settings.SeparatePullRequestStatuses.ValueBoolPointer(),
14451456
IgnoreDefaultBranchPullRequests: settings.IgnoreDefaultBranchPullRequests.ValueBoolPointer(),
14461457
BuildMergeGroupChecksRequested: settings.BuildMergeGroupChecksRequested.ValueBoolPointer(),
@@ -1498,6 +1509,7 @@ func updatePipelineResourceExtraInfo(state *pipelineResourceModel, pipeline *Pip
14981509
PublishCommitStatus: types.BoolPointerValue(s.PublishCommitStatus),
14991510
PublishBlockedAsPending: types.BoolPointerValue(s.PublishBlockedAsPending),
15001511
PublishCommitStatusPerStep: types.BoolPointerValue(s.PublishCommitStatusPerStep),
1512+
UseStepKeyAsCommitStatus: types.BoolPointerValue(s.UseStepKeyAsCommitStatus),
15011513
SeparatePullRequestStatuses: types.BoolPointerValue(s.SeparatePullRequestStatuses),
15021514
IgnoreDefaultBranchPullRequests: types.BoolPointerValue(s.IgnoreDefaultBranchPullRequests),
15031515
BuildMergeGroupChecksRequested: types.BoolPointerValue(s.BuildMergeGroupChecksRequested),
@@ -1750,6 +1762,10 @@ func pipelineSchemaV0() schema.Schema {
17501762
Computed: true,
17511763
Optional: true,
17521764
},
1765+
"use_step_key_as_commit_status": schema.BoolAttribute{
1766+
Computed: true,
1767+
Optional: true,
1768+
},
17531769
"separate_pull_request_statuses": schema.BoolAttribute{
17541770
Computed: true,
17551771
Optional: true,

buildkite/resource_pipeline_test.go

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package buildkite
22

33
import (
44
"context"
5+
"encoding/json"
56
"errors"
67
"fmt"
78
"log"
@@ -63,6 +64,47 @@ func testAccCheckPipelineDestroy(s *terraform.State) error {
6364
return nil
6465
}
6566

67+
func TestPipelineExtraSettingsUseStepKeyAsCommitStatusJSON(t *testing.T) {
68+
enabled := true
69+
70+
payload, err := json.Marshal(PipelineExtraSettings{
71+
UseStepKeyAsCommitStatus: &enabled,
72+
})
73+
if err != nil {
74+
t.Fatalf("failed to marshal provider settings: %v", err)
75+
}
76+
77+
if !strings.Contains(string(payload), `"use_step_key_as_commit_status":true`) {
78+
t.Fatalf("expected use_step_key_as_commit_status in payload, got %s", payload)
79+
}
80+
81+
payload, err = json.Marshal(PipelineExtraSettings{})
82+
if err != nil {
83+
t.Fatalf("failed to marshal empty provider settings: %v", err)
84+
}
85+
86+
if strings.Contains(string(payload), "use_step_key_as_commit_status") {
87+
t.Fatalf("expected use_step_key_as_commit_status to be omitted from empty payload, got %s", payload)
88+
}
89+
}
90+
91+
func TestUpdatePipelineResourceExtraInfoUseStepKeyAsCommitStatus(t *testing.T) {
92+
enabled := true
93+
extraInfo := PipelineExtraInfo{}
94+
extraInfo.Provider.Settings.UseStepKeyAsCommitStatus = &enabled
95+
96+
state := pipelineResourceModel{}
97+
updatePipelineResourceExtraInfo(&state, &extraInfo)
98+
99+
if state.ProviderSettings == nil {
100+
t.Fatal("expected provider settings to be set")
101+
}
102+
103+
if !state.ProviderSettings.UseStepKeyAsCommitStatus.ValueBool() {
104+
t.Fatal("expected use_step_key_as_commit_status to be true")
105+
}
106+
}
107+
66108
func testAccCheckPipelineDestroyFunc(s *terraform.State) error {
67109
return testAccCheckPipelineDestroy(s)
68110
}
@@ -566,6 +608,7 @@ func TestAccBuildkitePipelineResource(t *testing.T) {
566608
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.skip_pull_request_builds_for_existing_commits", "false"),
567609
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.build_branches", "false"),
568610
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.publish_commit_status", "false"),
611+
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.use_step_key_as_commit_status", "false"),
569612
),
570613
},
571614
},
@@ -610,6 +653,7 @@ func TestAccBuildkitePipelineResource(t *testing.T) {
610653
publish_commit_status = true
611654
publish_blocked_as_pending = true
612655
publish_commit_status_per_step = true
656+
use_step_key_as_commit_status = true
613657
separate_pull_request_statuses = true
614658
build_merge_group_checks_requested = true
615659
cancel_when_merge_group_destroyed = true
@@ -657,6 +701,7 @@ func TestAccBuildkitePipelineResource(t *testing.T) {
657701
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.publish_commit_status", "true"),
658702
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.publish_blocked_as_pending", "true"),
659703
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.publish_commit_status_per_step", "true"),
704+
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.use_step_key_as_commit_status", "true"),
660705
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.separate_pull_request_statuses", "true"),
661706
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.build_merge_group_checks_requested", "true"),
662707
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.cancel_when_merge_group_destroyed", "true"),
@@ -731,6 +776,7 @@ func TestAccBuildkitePipelineResource(t *testing.T) {
731776
publish_commit_status = true
732777
publish_blocked_as_pending = true
733778
publish_commit_status_per_step = true
779+
use_step_key_as_commit_status = true
734780
separate_pull_request_statuses = true
735781
ignore_default_branch_pull_requests = true
736782
build_merge_group_checks_requested = true
@@ -757,6 +803,7 @@ func TestAccBuildkitePipelineResource(t *testing.T) {
757803
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.build_pull_request_merge_commits", "true"),
758804
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.build_pull_request_labels_changed", "true"),
759805
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.build_pull_request_base_branch_changed", "true"),
806+
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.use_step_key_as_commit_status", "true"),
760807
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.build_merge_group_checks_requested", "true"),
761808
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.cancel_when_merge_group_destroyed", "true"),
762809
resource.TestCheckResourceAttr("buildkite_pipeline.pipeline", "provider_settings.use_merge_group_base_commit_for_git_diff_base", "true"),

docs/resources/pipeline.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -237,6 +237,7 @@ Optional:
237237
-> `trigger_mode` is only valid if the pipeline uses a GitHub repository.
238238
-> If not set, the default value is `code` and other provider settings defaults are applied.
239239
- `use_merge_group_base_commit_for_git_diff_base` (Boolean) When enabled, agents performing a git diff to determine steps to upload based on [`if_changed`](https://buildkite.com/docs/pipelines/configure/step-types/command-step#agent-applied-attributes)comparisons will use the base commit that points to the previous merge group rather than the base branch
240+
- `use_step_key_as_commit_status` (Boolean) Whether to use step keys as commit status names for per-step commit statuses. Requires `publish_commit_status` and `publish_commit_status_per_step` to also be enabled. Defaults to false.
240241

241242
## Import
242243

0 commit comments

Comments
 (0)