name: Generic zig build
on:
  workflow_dispatch:
  push:
    branches:
      - '*'
env:
  BUILD_TARGET: x86_64-linux-musl
  BUILD_OPTIMIZATION: ReleaseSafe
  BINARY_NAME: zfin
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Check out repository code
        uses: actions/checkout@v4
      - name: Setup Zig
        uses: https://codeberg.org/mlugg/setup-zig@v2.2.1
      - name: Build project
        run: zig build --summary all
      - name: Run tests
        run: zig build test --summary all
      - name: Package
        run: zig build -Dtarget="$BUILD_TARGET" -Doptimize="$BUILD_OPTIMIZATION"
      - name: Upload
        uses: actions/upload-artifact@v3
        with:
          name: ${{ env.BINARY_NAME }}
          path: zig-out/bin/${{ env.BINARY_NAME }}
      - name: Notify
        uses: https://git.lerch.org/lobo/action-notify-ntfy@v2
        if: always() && env.GITEA_ACTIONS == 'true'
        with:
          host: ${{ secrets.NTFY_HOST }}
          topic: ${{ secrets.NTFY_TOPIC }}
          status: ${{ job.status }}
          user: ${{ secrets.NTFY_USER }}
          password: ${{ secrets.NTFY_PASSWORD }}
  deploy:
    runs-on: ubuntu-latest
    container:
      image: ghcr.io/catthehacker/ubuntu:act-22.04
    needs: build
    steps:
      - name: Check out repository code
        uses: actions/checkout@v4
      - name: Download Artifact
        uses: actions/download-artifact@v3
        with:
          name: ${{ env.BINARY_NAME }}
      - name: "Make executable actually executable"
        run: chmod 755 ${{ env.BINARY_NAME }} && mv ${{ env.BINARY_NAME }} docker
      - name: Get short ref
        id: vars
        run: echo "shortsha=$(git rev-parse --short HEAD)" >> $GITHUB_OUTPUT
      -
        name: Login to Gitea
        uses: docker/login-action@v2
        with:
          registry: git.lerch.org
          username: ${{ github.actor }}
          password: ${{ secrets.PACKAGE_PUSH }}
      -
        name: Build and push
        uses: docker/build-push-action@v6
        with:
          context: docker
          push: true
          tags: |
            git.lerch.org/${{ github.repository }}:${{ steps.vars.outputs.shortsha }}
            git.lerch.org/${{ github.repository }}:latest
      - name: Notify
        uses: https://git.lerch.org/lobo/action-notify-ntfy@v2
        if: always()
        with:
          host: ${{ secrets.NTFY_HOST }}
          topic: ${{ secrets.NTFY_TOPIC }}
          user: ${{ secrets.NTFY_USER }}
          password: ${{ secrets.NTFY_PASSWORD }}
