# yaml-language-server: $schema=https://json.schemastore.org/github-workflow.json
# docs: https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions

name: 🚀 Release

on:
  release: # Docs: <https://git.io/JeBz1#release-event-release>
    types: [published]

jobs:
  build:
    name: Build for ${{ matrix.os }} (${{ matrix.arch }})
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        os: [linux, darwin, windows] # freebsd
        arch: [amd64, arm64] # 386
    steps:
      - uses: actions/checkout@v4
      - {uses: actions/setup-go@v5, with: {go-version-file: go.mod}}
      - {uses: gacts/github-slug@v1, id: slug}
      - id: values
        run: echo "binary-name=error-pages-${{ matrix.os }}-${{ matrix.arch }}`[ ${{ matrix.os }} = 'windows' ] && echo '.exe'`" >> $GITHUB_OUTPUT
      - env:
          GOOS: ${{ matrix.os }}
          GOARCH: ${{ matrix.arch }}
          CGO_ENABLED: 0
          LDFLAGS: -s -w -X gh.tarampamp.am/error-pages/internal/version.version=${{ steps.slug.outputs.version }}
        run: go build -trimpath -ldflags "$LDFLAGS" -o "./${{ steps.values.outputs.binary-name }}" ./cmd/error-pages/
      - uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: ${{ steps.values.outputs.binary-name }}
          asset_name: ${{ steps.values.outputs.binary-name }}
          tag: ${{ github.ref }}

      - if: matrix.os == 'linux' && matrix.arch == 'amd64'
        run: mkdir ./out && ./${{ steps.values.outputs.binary-name }} build --index --disable-minification --target-dir ./out
      - if: matrix.os == 'linux' && matrix.arch == 'amd64'
        uses: actions/upload-artifact@v4
        with:
          name: error-pages-static
          path: out/
          if-no-files-found: error
          retention-days: 1
      - if: matrix.os == 'linux' && matrix.arch == 'amd64'
        working-directory: ./out
        run: zip -r ./../templates.zip .
      - if: matrix.os == 'linux' && matrix.arch == 'amd64'
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: templates.zip
          asset_name: error-pages-static.zip
          tag: ${{ github.ref }}

  demo:
    name: Update the demo (GitHub Pages)
    runs-on: ubuntu-latest
    needs: [build]
    steps:
      - uses: actions/download-artifact@v4
        with:
          name: error-pages-static
          path: .artifact
      - uses: peaceiris/actions-gh-pages@v4
        with:
          github_token: ${{ secrets.GITHUB_TOKEN }}
          publish_dir: ./.artifact

  docker-image:
    name: Build the docker image
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - {uses: gacts/github-slug@v1, id: slug}
      - uses: docker/setup-qemu-action@v3
      - uses: docker/setup-buildx-action@v3
      - uses: docker/login-action@v3
        with:
          username: ${{ secrets.DOCKER_LOGIN }}
          password: ${{ secrets.DOCKER_PASSWORD }}
      - uses: docker/login-action@v3
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}
      - uses: docker/build-push-action@v6
        with:
          context: .
          file: Dockerfile
          push: true
          platforms: linux/amd64,linux/arm/v7,linux/arm64/v8
          build-args: "APP_VERSION=${{ steps.slug.outputs.version }}"
          tags: |
            tarampampam/error-pages:latest
            tarampampam/error-pages:${{ steps.slug.outputs.version }}
            tarampampam/error-pages:${{ steps.slug.outputs.version-major }}.${{ steps.slug.outputs.version-minor }}
            tarampampam/error-pages:${{ steps.slug.outputs.version-major }}
            ghcr.io/${{ github.actor }}/${{ github.event.repository.name }}:latest
            ghcr.io/${{ github.actor }}/${{ github.event.repository.name }}:${{ steps.slug.outputs.version }}
            ghcr.io/${{ github.actor }}/${{ github.event.repository.name }}:${{ steps.slug.outputs.version-major }}.${{ steps.slug.outputs.version-minor }}
            ghcr.io/${{ github.actor }}/${{ github.event.repository.name }}:${{ steps.slug.outputs.version-major }}
