name: Build Binaries

on:
  pull_request:
    branches:
      - '*'
    paths-ignore:
      - 'docs/**'
      - '**.md'
      - 'script/gcg/**'

env:
  CGO_ENABLED: 0

jobs:

  build-webui:
    uses: ./.github/workflows/template-webui.yaml

  build:
    runs-on: ubuntu-latest
    timeout-minutes: 20

    strategy:
      matrix:
        os: [ darwin, freebsd, linux, openbsd, windows ]
        arch: [ amd64, arm64 ]
        include:
          - os: freebsd
            arch: 386
          - os: linux
            arch: 386
          - os: linux
            arch: arm
            goarm: 6
          - os: linux
            arch: arm
            goarm: 7
          - os: linux
            arch: ppc64le
          - os: linux
            arch: riscv64
          - os: linux
            arch: s390x
          - os: openbsd
            arch: 386
          - os: windows
            arch: 386
    needs:
      - build-webui

    steps:
      - name: Check out code
        uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6.0.1
        with:
          fetch-depth: 0

      - name: Set up Go
        uses: actions/setup-go@7a3fe6cf4cb3a834922a1244abfce67bcef6a0c5 # v6.2.0
        env:
          ImageOS: ${{ matrix.os }}-${{ matrix.arch }}-${{ matrix.goarm }}
        with:
          go-version-file: '.go-version'
          check-latest: true

      - name: Artifact webui
        uses: actions/download-artifact@37930b1c2abaa49bbe596cd826c3c89aef350131 # v7.0.0
        with:
          name: webui.tar.gz

      - name: Untar webui
        run: |
          tar xvf webui.tar.gz
          rm webui.tar.gz

      - name: Build
        env:
          GOOS: ${{ matrix.os }}
          GOARCH: ${{ matrix.arch }}
          GOARM: ${{ matrix.goarm }}
        run: make binary
