--- 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@c85c95e3d7251135ab7dc9ce3241c5835cc595a9 # v3.5.3 - uses: actions/setup-go@fac708d6674e30b6ba41289acaab6d4b75aa0753 # v4.0.1 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: nope 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@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 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 a 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: "BUSL-1.1" 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@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 with: name: ${{ env.RPM_PACKAGE }} path: out/${{ env.RPM_PACKAGE }} if-no-files-found: error - if: ${{ inputs.goos == 'linux' }} uses: actions/upload-artifact@0b7f8abb1508181956e8e162db84b466c27e18ce # v3.1.2 with: name: ${{ env.DEB_PACKAGE }} path: out/${{ env.DEB_PACKAGE }} if-no-files-found: error