name: Build Releases

on:
  workflow_dispatch:
  push:
    'tags':
      - 'v*'

env:
  GITHUB_REF: ${{ github.ref }}
  GO_VERSION: '1.21.6'

jobs:
  build-common:
    runs-on: ubuntu-latest

    steps:
      - name: Checkout Main Repo
        uses: actions/checkout@v4
        with:
          repository: gregtwallace/apc-p15-tool
          ref: ${{ env.GITHUB_REF }}
          fetch-depth: 0

      - name: Save README
        uses: actions/upload-artifact@v4
        with:
          name: README.md
          path: ./README.md

      - name: Save LICENSE
        uses: actions/upload-artifact@v4
        with:
          name: LICENSE.md
          path: ./LICENSE.md

      - name: Save CHANGELOG
        uses: actions/upload-artifact@v4
        with:
          name: CHANGELOG.md
          path: ./CHANGELOG.md

  build-linux-arm64:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Repo
        uses: actions/checkout@v4
        with:
          repository: gregtwallace/apc-p15-tool
          ref: ${{ env.GITHUB_REF }}
          fetch-depth: 0

      - name: Update apt
        run: sudo apt update

      - name: Install cross-compiler for linux/arm64
        run: sudo apt-get -y install gcc-aarch64-linux-gnu

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '${{ env.GO_VERSION }}'

      - name: Build Tool
        run: go build -o ./apc-p15-tool -v ./cmd/tool
        env:
          GOOS: linux
          GOARCH: arm64
          CC: aarch64-linux-gnu-gcc
          CGO_ENABLED: 0

      - name: Save Compiled Binary
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-tool-linux-arm64
          path: ./apc-p15-tool

      - name: Build Install Only
        run: go build -o ./apc-p15-install -v ./cmd/install_only
        env:
          GOOS: linux
          GOARCH: arm64
          CC: aarch64-linux-gnu-gcc
          CGO_ENABLED: 0

      - name: Save Compiled Binary
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-install-linux-arm64
          path: ./apc-p15-install

  build-linux-amd64:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout Backend Repo
        uses: actions/checkout@v4
        with:
          repository: gregtwallace/apc-p15-tool
          ref: ${{ env.GITHUB_REF }}
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '${{ env.GO_VERSION }}'

      - name: Build Tool
        run: go build -o ./apc-p15-tool -v ./cmd/tool
        env:
          GOOS: linux
          GOARCH: amd64
          CGO_ENABLED: 0

      - name: Save Compiled Binary
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-tool-linux-amd64
          path: ./apc-p15-tool

      - name: Build Install Only
        run: go build -o ./apc-p15-install -v ./cmd/install_only
        env:
          GOOS: linux
          GOARCH: amd64
          CGO_ENABLED: 0

      - name: Save Compiled Binary
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-install-linux-amd64
          path: ./apc-p15-install

  build-windows-amd64:
    runs-on: windows-latest
    steps:
      - name: Checkout Backend Repo
        uses: actions/checkout@v4
        with:
          repository: gregtwallace/apc-p15-tool
          ref: ${{ env.GITHUB_REF }}
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@v5
        with:
          go-version: '${{ env.GO_VERSION }}'

      - name: Build Tool
        run: go build -o ./apc-p15-tool.exe -v ./cmd/tool
        env:
          GOOS: windows
          GOARCH: amd64
          CGO_ENABLED: 0

      - name: Save Compiled Binary
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-tool-windows-amd64
          path: ./apc-p15-tool.exe

      - name: Build Install Only
        run: go build -o ./apc-p15-install.exe -v ./cmd/install_only
        env:
          GOOS: windows
          GOARCH: amd64
          CGO_ENABLED: 0

      - name: Save Compiled Binary
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-install-windows-amd64
          path: ./apc-p15-install.exe

  release-file-linux-arm64:
    needs: [build-common, build-linux-arm64]
    runs-on: ubuntu-latest

    steps:
      - name: Make release directory
        run: mkdir ./release

      - name: Download Tool Binary
        uses: actions/download-artifact@v4
        with:
          name: apc-p15-tool-linux-arm64
          path: ./release

      - name: Download Install Binary
        uses: actions/download-artifact@v4
        with:
          name: apc-p15-install-linux-arm64
          path: ./release

      - name: Download README
        uses: actions/download-artifact@v4
        with:
          name: README.md
          path: ./release

      - name: Download LICENSE
        uses: actions/download-artifact@v4
        with:
          name: LICENSE.md
          path: ./release

      - name: Download CHANGELOG
        uses: actions/download-artifact@v4
        with:
          name: CHANGELOG.md
          path: ./release

      - name: Save Release
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-tool_linux_arm64
          path: ./release

  release-file-linux-amd64:
    needs: [build-common, build-linux-amd64]
    runs-on: ubuntu-latest

    steps:
      - name: Make release directory
        run: mkdir ./release

      - name: Download Tool Binary
        uses: actions/download-artifact@v4
        with:
          name: apc-p15-tool-linux-amd64
          path: ./release

      - name: Download Install Binary
        uses: actions/download-artifact@v4
        with:
          name: apc-p15-install-linux-amd64
          path: ./release

      - name: Download README
        uses: actions/download-artifact@v4
        with:
          name: README.md
          path: ./release

      - name: Download LICENSE
        uses: actions/download-artifact@v4
        with:
          name: LICENSE.md
          path: ./release

      - name: Download CHANGELOG
        uses: actions/download-artifact@v4
        with:
          name: CHANGELOG.md
          path: ./release

      - name: Save Release
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-tool_linux_amd64
          path: ./release

  release-file-windows-amd64:
    needs: [build-common, build-windows-amd64]
    runs-on: ubuntu-latest

    steps:
      - name: Make release directory
        run: mkdir ./release

      - name: Download Tool Binary
        uses: actions/download-artifact@v4
        with:
          name: apc-p15-tool-windows-amd64
          path: ./release

      - name: Download Install Binary
        uses: actions/download-artifact@v4
        with:
          name: apc-p15-install-windows-amd64
          path: ./release

      - name: Download README
        uses: actions/download-artifact@v4
        with:
          name: README.md
          path: ./release

      - name: Download LICENSE
        uses: actions/download-artifact@v4
        with:
          name: LICENSE.md
          path: ./release

      - name: Download CHANGELOG
        uses: actions/download-artifact@v4
        with:
          name: CHANGELOG.md
          path: ./release

      - name: Save Release
        uses: actions/upload-artifact@v4
        with:
          name: apc-p15-tool_windows_amd64
          path: ./release