---
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
        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@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
      - uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
        with:
          go-version: ${{ inputs.go-version }}
      - 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@b9e2cfba3013adccdc112b01cba922d83c78fac5 # v1.1.1
        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: |-
            go build -ldflags "${{ inputs.ld-flags }}" -o "$BIN_PATH" -trimpath -buildvcs=false
            cp LICENSE "$TARGET_DIR/LICENSE.txt"
      - name: Copy license file to config_dir
        if: ${{ inputs.goos == 'linux' }}
        env:
          LICENSE_DIR: ".release/linux/package/usr/share/doc/${{ inputs.package-name }}"
        run: |
          mkdir -p "$LICENSE_DIR" && cp LICENSE "$LICENSE_DIR/LICENSE.txt"
      - if: ${{ inputs.goos == 'linux' }}
        uses: hashicorp/actions-packaging-linux@129994a18b8e7dc106937edf859fddd97af66365 # v1.10
        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"
          config_dir: ".release/linux/package/"
      - 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@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ${{ env.RPM_PACKAGE }}
          path: out/${{ env.RPM_PACKAGE }}
          if-no-files-found: error
      - if: ${{ inputs.goos == 'linux' }}
        uses: actions/upload-artifact@ea165f8d65b6e75b540449e92b4886f43607fa02 # v4.6.2
        with:
          name: ${{ env.DEB_PACKAGE }}
          path: out/${{ env.DEB_PACKAGE }}
          if-no-files-found: error
