Skip to content

Commit 501fd7e

Browse files
authored
Move the release process to CRT (#2717)
1 parent e1f7cfd commit 501fd7e

File tree

8 files changed

+264
-121
lines changed

8 files changed

+264
-121
lines changed

.github/workflows/build.yml

Lines changed: 153 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,153 @@
1+
name: build
2+
3+
on:
4+
push:
5+
branches:
6+
- main
7+
- release/**
8+
workflow_dispatch:
9+
10+
env:
11+
PKG_NAME: "terraform-provider-kubernetes"
12+
13+
jobs:
14+
get-go-version:
15+
name: "Detect Go toolchain version"
16+
runs-on: ubuntu-latest
17+
outputs:
18+
go-version: ${{ steps.get-go-version.outputs.go-version }}
19+
steps:
20+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
21+
- uses: actions/setup-go@f111f3307d8850f501ac008e886eec1fd1932a34 # v5.3.0
22+
with:
23+
go-version-file: 'go.mod'
24+
- name: Detect Go version
25+
id: get-go-version
26+
run: |
27+
version="$(go list -f {{.GoVersion}} -m)"
28+
echo "go-version=$version" >> "$GITHUB_OUTPUT"
29+
30+
set-product-version:
31+
name: "Parse version file"
32+
runs-on: ubuntu-latest
33+
outputs:
34+
product-version: ${{ steps.set-product-version.outputs.product-version }}
35+
product-base-version: ${{ steps.set-product-version.outputs.base-product-version }}
36+
product-prerelease-version: ${{ steps.set-product-version.outputs.prerelease-product-version }}
37+
product-minor-version: ${{ steps.set-product-version.outputs.minor-product-version }}
38+
steps:
39+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
40+
- name: Set variables
41+
id: set-product-version
42+
uses: hashicorp/actions-set-product-version@v2
43+
44+
generate-metadata-file:
45+
needs: set-product-version
46+
runs-on: ubuntu-latest
47+
outputs:
48+
filepath: ${{ steps.generate-metadata-file.outputs.filepath }}
49+
steps:
50+
- name: "Checkout directory"
51+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
52+
- name: Generate metadata file
53+
id: generate-metadata-file
54+
uses: hashicorp/actions-generate-metadata@v1
55+
with:
56+
version: ${{ needs.set-product-version.outputs.product-version }}
57+
product: ${{ env.PKG_NAME }}
58+
repositoryOwner: "hashicorp"
59+
- uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
60+
with:
61+
name: metadata.json
62+
path: ${{ steps.generate-metadata-file.outputs.filepath }}
63+
64+
upload-terraform-registry-manifest-artifact:
65+
needs: set-product-version
66+
runs-on: ubuntu-latest
67+
steps:
68+
- name: "Checkout directory"
69+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
70+
with:
71+
path: ${{ env.PKG_NAME }}
72+
- name: "Copy manifest from checkout directory to a file with the desired name"
73+
id: terraform-registry-manifest
74+
run: |
75+
name="${{ env.PKG_NAME }}"
76+
version="${{ needs.set-product-version.outputs.product-version }}"
77+
78+
source="${name}/terraform-registry-manifest.json"
79+
destination="${name}_${version}_manifest.json"
80+
81+
cp "$source" "$destination"
82+
echo "filename=$destination" >> "$GITHUB_OUTPUT"
83+
- uses: actions/upload-artifact@4cec3d8aa04e39d1a68397de0c4cd6fb9dce8ec1 # v4.6.1
84+
with:
85+
name: terraform-registry-manifest.json
86+
path: ${{ steps.terraform-registry-manifest.outputs.filename }}
87+
if-no-files-found: error
88+
89+
build:
90+
needs:
91+
- get-go-version
92+
- set-product-version
93+
runs-on: ubuntu-latest
94+
strategy:
95+
fail-fast: true
96+
matrix:
97+
goos: [freebsd, windows, linux, darwin]
98+
goarch: ["386", "amd64", "arm", "arm64"]
99+
exclude:
100+
- goos: freebsd
101+
goarch: arm64
102+
- goos: windows
103+
goarch: arm64
104+
- goos: windows
105+
goarch: arm
106+
- goos: darwin
107+
goarch: 386
108+
- goos: darwin
109+
goarch: arm
110+
111+
name: Go ${{ needs.get-go-version.outputs.go-version }} ${{ matrix.goos }} ${{ matrix.goarch }} build
112+
steps:
113+
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
114+
- uses: hashicorp/actions-go-build@v1
115+
env:
116+
CGO_ENABLED: 0
117+
BASE_VERSION: ${{ needs.set-product-version.outputs.product-base-version }}
118+
PRERELEASE_VERSION: ${{ needs.set-product-version.outputs.product-prerelease-version}}
119+
METADATA_VERSION: ${{ env.METADATA }}
120+
with:
121+
bin_name: "${{ env.PKG_NAME }}_v${{ needs.set-product-version.outputs.product-version }}_x5"
122+
product_name: ${{ env.PKG_NAME }}
123+
product_version: ${{ needs.set-product-version.outputs.product-version }}
124+
go_version: ${{ needs.get-go-version.outputs.go-version }}
125+
os: ${{ matrix.goos }}
126+
arch: ${{ matrix.goarch }}
127+
reproducible: report
128+
instructions: |
129+
go build \
130+
-o "$BIN_PATH" \
131+
-trimpath \
132+
-buildvcs=false \
133+
-ldflags "-s -w -X 'main.Version=${{ needs.set-product-version.outputs.product-version }}'"
134+
cp LICENSE "$TARGET_DIR/LICENSE.txt"
135+
136+
whats-next:
137+
needs:
138+
- build
139+
- generate-metadata-file
140+
- upload-terraform-registry-manifest-artifact
141+
runs-on: ubuntu-latest
142+
name: "What's next?"
143+
steps:
144+
- name: "Write a helpful summary"
145+
run: |
146+
github_dot_com="${{ github.server_url }}"
147+
owner_with_name="${{ github.repository }}"
148+
ref="${{ github.ref }}"
149+
150+
echo "### What's next?" >> "$GITHUB_STEP_SUMMARY"
151+
echo "#### For a release branch (see \`.release/ci.hcl\`)" >> $GITHUB_STEP_SUMMARY
152+
echo "After this \`build\` workflow run completes succesfully, you can expect the CRT \`prepare\` workflow to begin momentarily." >> "$GITHUB_STEP_SUMMARY"
153+
echo "To find the \`prepare\` workflow run, [view the checks for this commit]($github_dot_com/$owner_with_name/commits/$ref)" >> "$GITHUB_STEP_SUMMARY"

.github/workflows/release.yaml

Lines changed: 0 additions & 43 deletions
This file was deleted.

.goreleaser.yml

Lines changed: 0 additions & 76 deletions
This file was deleted.

.release/ci.hcl

Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
schema = "2"
2+
3+
project "terraform-provider-kubernetes" {
4+
team = "terraform"
5+
6+
slack {
7+
notification_channel = "C051FAAHL8M" // #feed-terraform-ecosystem-kubernetes-releases
8+
}
9+
10+
github {
11+
organization = "hashicorp"
12+
repository = "terraform-provider-kubernetes"
13+
release_branches = ["main", "release/**"]
14+
}
15+
}
16+
17+
event "merge" {
18+
}
19+
20+
event "build" {
21+
action "build" {
22+
depends = ["merge"]
23+
24+
organization = "hashicorp"
25+
repository = "terraform-provider-kubernetes"
26+
workflow = "build"
27+
}
28+
}
29+
30+
event "prepare" {
31+
depends = ["build"]
32+
33+
action "prepare" {
34+
organization = "hashicorp"
35+
repository = "crt-workflows-common"
36+
workflow = "prepare"
37+
depends = ["build"]
38+
}
39+
40+
notification {
41+
on = "fail"
42+
}
43+
}
44+
45+
event "trigger-staging" {
46+
}
47+
48+
event "promote-staging" {
49+
action "promote-staging" {
50+
organization = "hashicorp"
51+
repository = "crt-workflows-common"
52+
workflow = "promote-staging"
53+
depends = null
54+
config = "release-metadata.hcl"
55+
}
56+
57+
depends = ["trigger-staging"]
58+
59+
notification {
60+
on = "always"
61+
}
62+
}
63+
64+
event "trigger-production" {
65+
}
66+
67+
event "promote-production" {
68+
action "promote-production" {
69+
organization = "hashicorp"
70+
repository = "crt-workflows-common"
71+
workflow = "promote-production"
72+
depends = null
73+
config = ""
74+
}
75+
76+
depends = ["trigger-production"]
77+
78+
notification {
79+
on = "always"
80+
}
81+
}

.release/release-metadata.hcl

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,4 @@
1-
url_source_repository = "https://github.com/hashicorp/terraform-provider-kubernetes"
2-
url_license = "https://github.com/hashicorp/terraform-provider-kubernetes/blob/main/LICENSE"
1+
url_source_repository = "https://github.com/hashicorp/terraform-provider-kubernetes"
2+
url_project_website = "https://registry.terraform.io/providers/hashicorp/kubernetes"
3+
url_license = "https://github.com/hashicorp/terraform-provider-kubernetes/blob/main/LICENSE"
4+
url_release_notes = "https://github.com/hashicorp/terraform-provider-kubernetes/blob/main/CHANGELOG.md"

.release/security-scan.hcl

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
binary {
2+
secrets {
3+
all = true
4+
}
5+
go_modules = true
6+
osv = true
7+
oss_index = false
8+
nvd = false
9+
}
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
schema = 1
2+
artifacts {
3+
zip = [
4+
"terraform-provider-kubernetes_${version}_darwin_amd64.zip",
5+
"terraform-provider-kubernetes_${version}_darwin_arm64.zip",
6+
"terraform-provider-kubernetes_${version}_freebsd_386.zip",
7+
"terraform-provider-kubernetes_${version}_freebsd_amd64.zip",
8+
"terraform-provider-kubernetes_${version}_freebsd_arm.zip",
9+
"terraform-provider-kubernetes_${version}_linux_386.zip",
10+
"terraform-provider-kubernetes_${version}_linux_amd64.zip",
11+
"terraform-provider-kubernetes_${version}_linux_arm.zip",
12+
"terraform-provider-kubernetes_${version}_linux_arm64.zip",
13+
"terraform-provider-kubernetes_${version}_windows_386.zip",
14+
"terraform-provider-kubernetes_${version}_windows_amd64.zip",
15+
]
16+
}

version/VERSION

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
2.36.0

0 commit comments

Comments
 (0)