Merge pull request #2344 from hashicorp/update-post-promote-production #133
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# This workflow builds the product for all supported platforms and uploads the resulting | |
# binaries as Actions artifacts. The workflow also uploads a build metadata file | |
# (metadata.json) -- and a Terraform Registry manifest file (terraform-registry-manifest.json). | |
name: build | |
# We default to running this workflow on every push to every branch. | |
# This provides fast feedback when build issues occur, so they can be | |
# fixed prior to being merged to the main branch. | |
# | |
# If you want to opt out of this, and only run the build on certain branches | |
# please refer to the documentation on branch filtering here: | |
# | |
# https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#onpushbranchestagsbranches-ignoretags-ignore | |
# | |
on: [workflow_dispatch, push] | |
env: | |
PKG_NAME: "terraform-provider-awscc" | |
jobs: | |
# Detects the Go toolchain version to use for product builds. | |
# | |
# The implementation is inspired by envconsul -- https://go.hashi.co/get-go-version-example | |
get-go-version: | |
name: "Detect Go toolchain version" | |
runs-on: ubuntu-latest | |
outputs: | |
go-version: ${{ steps.get-go-version.outputs.go-version }} | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0 | |
with: | |
go-version-file: 'go.mod' | |
- name: Detect Go version | |
id: get-go-version | |
run: | | |
version="$(go list -f {{.GoVersion}} -m)" | |
echo "go-version=$version" >> "$GITHUB_OUTPUT" | |
# Parses the version/VERSION file. Reference: https://github.com/hashicorp/actions-set-product-version/blob/main/README.md | |
# | |
# > This action should be implemented in product repo `build.yml` files. The action is intended to grab the version | |
# > from the version file at the beginning of the build, then passes those versions (along with metadata, where | |
# > necessary) to any workflow jobs that need version information. | |
set-product-version: | |
name: "Parse version file" | |
runs-on: ubuntu-latest | |
outputs: | |
product-version: ${{ steps.set-product-version.outputs.product-version }} | |
product-base-version: ${{ steps.set-product-version.outputs.base-product-version }} | |
product-prerelease-version: ${{ steps.set-product-version.outputs.prerelease-product-version }} | |
product-minor-version: ${{ steps.set-product-version.outputs.minor-product-version }} | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Set variables | |
id: set-product-version | |
uses: hashicorp/actions-set-product-version@v2 | |
# Creates metadata.json file containing build metadata for consumption by CRT workflows. | |
# | |
# Reference: https://github.com/hashicorp/actions-generate-metadata/blob/main/README.md | |
generate-metadata-file: | |
needs: set-product-version | |
runs-on: ubuntu-latest | |
outputs: | |
filepath: ${{ steps.generate-metadata-file.outputs.filepath }} | |
steps: | |
- name: "Checkout directory" | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- name: Generate metadata file | |
id: generate-metadata-file | |
uses: hashicorp/actions-generate-metadata@v1 | |
with: | |
version: ${{ needs.set-product-version.outputs.product-version }} | |
product: ${{ env.PKG_NAME }} | |
repositoryOwner: "hashicorp" | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: metadata.json | |
path: ${{ steps.generate-metadata-file.outputs.filepath }} | |
upload-terraform-registry-manifest-artifact: | |
needs: set-product-version | |
runs-on: ubuntu-latest | |
steps: | |
- name: "Checkout directory" | |
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
with: | |
path: ${{ env.PKG_NAME }} | |
- name: "Copy manifest from checkout directory to a file with the desired name" | |
id: terraform-registry-manifest | |
run: | | |
name="${{ env.PKG_NAME }}" | |
version="${{ needs.set-product-version.outputs.product-version }}" | |
source="${name}/terraform-registry-manifest.json" | |
destination="${name}_${version}_manifest.json" | |
cp "$source" "$destination" | |
echo "filename=$destination" >> "$GITHUB_OUTPUT" | |
- uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2 | |
with: | |
name: terraform-registry-manifest.json | |
path: ${{ steps.terraform-registry-manifest.outputs.filename }} | |
if-no-files-found: error | |
# Builds the product for all platforms except macOS. | |
# | |
# With `reproducible: report`, this job also reports whether the build is reproducible, | |
# but does not enforce it. | |
# | |
# Reference: https://github.com/hashicorp/actions-go-build/blob/main/README.md | |
build: | |
needs: | |
- get-go-version | |
- set-product-version | |
runs-on: ubuntu-latest | |
strategy: | |
fail-fast: true | |
matrix: | |
goos: [freebsd, windows, linux, darwin, openbsd] | |
goarch: ["386", "amd64", "arm", "arm64"] | |
exclude: | |
- goos: freebsd | |
goarch: arm64 | |
- goos: windows | |
goarch: arm64 | |
- goos: windows | |
goarch: arm | |
- goos: darwin | |
goarch: 386 | |
- goos: darwin | |
goarch: arm | |
- goos: openbsd | |
goarch: arm64 | |
name: Go ${{ needs.get-go-version.outputs.go-version }} ${{ matrix.goos }} ${{ matrix.goarch }} build | |
steps: | |
- uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 | |
- uses: hashicorp/actions-go-build@v1 | |
env: | |
CGO_ENABLED: 0 | |
BASE_VERSION: ${{ needs.set-product-version.outputs.product-base-version }} | |
PRERELEASE_VERSION: ${{ needs.set-product-version.outputs.product-prerelease-version}} | |
METADATA_VERSION: ${{ env.METADATA }} | |
with: | |
# Protocol v6 providers should omit the `_x5` suffix. | |
bin_name: "${{ env.PKG_NAME }}_v${{ needs.set-product-version.outputs.product-version }}" | |
product_name: ${{ env.PKG_NAME }} | |
product_version: ${{ needs.set-product-version.outputs.product-version }} | |
go_version: ${{ needs.get-go-version.outputs.go-version }} | |
os: ${{ matrix.goos }} | |
arch: ${{ matrix.goarch }} | |
reproducible: report | |
instructions: | | |
go build \ | |
-o "$BIN_PATH" \ | |
-trimpath \ | |
-buildvcs=false \ | |
-ldflags "-s -w -X 'github.com/hashicorp/terraform-provider-awscc/internal/provider.Version=${{ needs.set-product-version.outputs.product-version }}'" | |
cp LICENSE "$TARGET_DIR/LICENSE.txt" | |
whats-next: | |
needs: | |
- build | |
- generate-metadata-file | |
- upload-terraform-registry-manifest-artifact | |
runs-on: ubuntu-latest | |
name: "What's next?" | |
steps: | |
- name: "Write a helpful summary" | |
run: | | |
github_dot_com="${{ github.server_url }}" | |
owner_with_name="${{ github.repository }}" | |
ref="${{ github.ref }}" | |
echo "### What's next?" >> "$GITHUB_STEP_SUMMARY" | |
echo "#### For a release branch (see \`.release/ci.hcl\`)" >> $GITHUB_STEP_SUMMARY | |
echo "After this \`build\` workflow run completes successfully, you can expect the CRT \`prepare\` workflow to begin momentarily." >> "$GITHUB_STEP_SUMMARY" | |
echo "To find the \`prepare\` workflow run, [view the checks for this commit]($github_dot_com/$owner_with_name/commits/$ref)" >> "$GITHUB_STEP_SUMMARY" |