-
Notifications
You must be signed in to change notification settings - Fork 9.7k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Releng/migrate common release tooling (#32797)
* Migrate set-output to GITHUB_OUTPUT Signed-off-by: Scott Macfarlane <smacfarlane@hashicorp.com> * Migrate terraform to CRT * Update ci branches & ci notification channel * Use version/VERSION file to parse version * Remove fetch raw version script and update pipeline to run on current branch * PR feedback: cgo-enabled now required flag, updated comments & include promotion steps in ci.hcl * Update version for main --------- Signed-off-by: Scott Macfarlane <smacfarlane@hashicorp.com> Co-authored-by: Scott Macfarlane <smacfarlane@hashicorp.com> Co-authored-by: emilymianeil <eneil@hashicorp.com>
- Loading branch information
1 parent
c06db2a
commit 880b87a
Showing
7 changed files
with
450 additions
and
326 deletions.
There are no files selected for viewing
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,15 @@ | ||
#!/usr/bin/env bash | ||
set -uo pipefail | ||
|
||
if [[ $arch == 'arm' || $arch == 'arm64' ]] | ||
then | ||
export DIR=$(mktemp -d) | ||
unzip -d $DIR "${e2e_cache_path}/terraform-e2etest_${os}_${arch}.zip" | ||
unzip -d $DIR "./terraform_${version}_${os}_${arch}.zip" | ||
sudo chmod +x $DIR/e2etest | ||
docker run --platform=linux/arm64 -v $DIR:/src -w /src arm64v8/alpine ./e2etest -test.v | ||
else | ||
unzip "${e2e_cache_path}/terraform-e2etest_${os}_${arch}.zip" | ||
unzip "./terraform_${version}_${os}_${arch}.zip" | ||
TF_ACC=1 ./e2etest -test.v | ||
fi |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,39 @@ | ||
#!/usr/bin/env bash | ||
set -uo pipefail | ||
|
||
# Trim the "v" prefix, if any. | ||
VERSION="${RAW_VERSION#v}" | ||
|
||
# Split off the build metadata part, if any | ||
# (we won't actually include it in our final version, and handle it only for | ||
# compleness against semver syntax.) | ||
IFS='+' read -ra VERSION BUILD_META <<< "$VERSION" | ||
|
||
# Separate out the prerelease part, if any | ||
# (version.go expects it to be in a separate variable) | ||
IFS='-' read -r BASE_VERSION PRERELEASE <<< "$VERSION" | ||
|
||
EXPERIMENTS_ENABLED=0 | ||
if [[ "$PRERELEASE" == alpha* ]]; then | ||
EXPERIMENTS_ENABLED=1 | ||
fi | ||
if [[ "$PRERELEASE" == dev* ]]; then | ||
EXPERIMENTS_ENABLED=1 | ||
fi | ||
|
||
LDFLAGS="-w -s" | ||
if [[ "$EXPERIMENTS_ENABLED" == 1 ]]; then | ||
LDFLAGS="${LDFLAGS} -X 'main.experimentsAllowed=yes'" | ||
fi | ||
LDFLAGS="${LDFLAGS} -X 'github.com/hashicorp/terraform/version.Version=${BASE_VERSION}'" | ||
LDFLAGS="${LDFLAGS} -X 'github.com/hashicorp/terraform/version.Prerelease=${PRERELEASE}'" | ||
|
||
echo "Building Terraform CLI ${VERSION}" | ||
if [[ "$EXPERIMENTS_ENABLED" == 1 ]]; then | ||
echo "This build allows use of experimental features" | ||
fi | ||
echo "product-version=${VERSION}" | tee -a "${GITHUB_OUTPUT}" | ||
echo "product-version-base=${BASE_VERSION}" | tee -a "${GITHUB_OUTPUT}" | ||
echo "product-version-pre=${PRERELEASE}" | tee -a "${GITHUB_OUTPUT}" | ||
echo "experiments=${EXPERIMENTS_ENABLED}" | tee -a "${GITHUB_OUTPUT}" | ||
echo "go-ldflags=${LDFLAGS}" | tee -a "${GITHUB_OUTPUT}" |
This file contains 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
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,101 @@ | ||
--- | ||
name: build_terraform | ||
|
||
# This workflow is intended to be called by the build workflow. The crt make | ||
# targets that are utilized automatically determine build metadata and | ||
# handle building and packing Terraform. | ||
|
||
on: | ||
workflow_call: | ||
inputs: | ||
cgo-enabled: | ||
type: string | ||
default: 0 | ||
required: true | ||
goos: | ||
required: true | ||
type: string | ||
goarch: | ||
required: true | ||
type: string | ||
go-version: | ||
type: string | ||
package-name: | ||
type: string | ||
default: terraform | ||
product-version: | ||
type: string | ||
required: true | ||
ld-flags: | ||
type: string | ||
required: true | ||
runson: | ||
type: string | ||
required: true | ||
|
||
jobs: | ||
build: | ||
runs-on: ${{ inputs.runson }} | ||
name: Terraform ${{ inputs.goos }} ${{ inputs.goarch }} v${{ inputs.product-version }} | ||
steps: | ||
- uses: actions/checkout@v3 | ||
- uses: actions/setup-go@v3 | ||
with: | ||
go-version: ${{ inputs.go-version }} | ||
- name: Determine artifact basename | ||
run: echo "ARTIFACT_BASENAME=${{ inputs.package-name }}_${{ inputs.product-version }}_${{ inputs.goos }}_${{ inputs.goarch }}.zip" >> $GITHUB_ENV | ||
- name: Build Terraform | ||
env: | ||
GOOS: ${{ inputs.goos }} | ||
GOARCH: ${{ inputs.goarch }} | ||
GO_LDFLAGS: ${{ inputs.ld-flags }} | ||
ACTIONSOS: ${{ inputs.runson }} | ||
CGO_ENABLED: ${{ inputs.cgo-enabled }} | ||
uses: hashicorp/actions-go-build@v0.1.7 | ||
with: | ||
product_name: ${{ inputs.package-name }} | ||
product_version: ${{ inputs.product-version }} | ||
go_version: ${{ inputs.go-version }} | ||
os: ${{ inputs.goos }} | ||
arch: ${{ inputs.goarch }} | ||
reproducible: report | ||
instructions: |- | ||
mkdir dist out | ||
set -x | ||
go build -ldflags "${{ inputs.ld-flags }}" -o dist/ . | ||
zip -r -j out/${{ env.ARTIFACT_BASENAME }} dist/ | ||
- uses: actions/upload-artifact@v3 | ||
with: | ||
name: ${{ env.ARTIFACT_BASENAME }} | ||
path: out/${{ env.ARTIFACT_BASENAME }} | ||
if-no-files-found: error | ||
- if: ${{ inputs.goos == 'linux' }} | ||
uses: hashicorp/actions-packaging-linux@v1 | ||
with: | ||
name: "terraform" | ||
description: "Terraform enables you to safely and predictably create, change, and improve infrastructure. It is an open source tool that codifies APIs into declarative configuration files that can be shared amongst team members, treated as code, edited, reviewed, and versioned." | ||
arch: ${{ inputs.goarch }} | ||
version: ${{ inputs.product-version }} | ||
maintainer: "HashiCorp" | ||
homepage: "https://terraform.io/" | ||
license: "MPL-2.0" | ||
binary: "dist/terraform" | ||
deb_depends: "git" | ||
rpm_depends: "git" | ||
- if: ${{ inputs.goos == 'linux' }} | ||
name: Determine package file names | ||
run: | | ||
echo "RPM_PACKAGE=$(basename out/*.rpm)" >> $GITHUB_ENV | ||
echo "DEB_PACKAGE=$(basename out/*.deb)" >> $GITHUB_ENV | ||
- if: ${{ inputs.goos == 'linux' }} | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: ${{ env.RPM_PACKAGE }} | ||
path: out/${{ env.RPM_PACKAGE }} | ||
if-no-files-found: error | ||
- if: ${{ inputs.goos == 'linux' }} | ||
uses: actions/upload-artifact@v3 | ||
with: | ||
name: ${{ env.DEB_PACKAGE }} | ||
path: out/${{ env.DEB_PACKAGE }} | ||
if-no-files-found: error |
Oops, something went wrong.