name: Build and publish package

on:
  push:
    tags: ['v*']

jobs:
  package:
    runs-on: [self-hosted, hestia]
    container:
      image: archlinux:latest
    steps:
      # Note: no actions/checkout — the archlinux image has no Node, which JS
      # actions require. Everything runs as shell steps and clones manually.
      - name: Build and publish
        env:
          PUBLISH_TOKEN: ${{ secrets.REGISTRY_TOKEN }}
        run: |
          set -euo pipefail
          VERSION="${GITHUB_REF_NAME#v}"
          pacman -Syu --noconfirm base-devel git rust cargo gtk4 glib2
          useradd -m builder
          git config --global --add safe.directory '*'
          git clone --branch "${GITHUB_REF_NAME}" --depth 1 \
            "https://git.breadway.dev/${GITHUB_REPOSITORY}.git" /home/builder/src
          cd /home/builder/src
          git archive --format=tar.gz --prefix="bos-settings-${VERSION}/" HEAD \
            > packaging/arch/bos-settings-${VERSION}.tar.gz
          SHA=$(sha256sum packaging/arch/bos-settings-${VERSION}.tar.gz | awk '{print $1}')
          sed -i "s/^pkgver=.*/pkgver=${VERSION}/" packaging/arch/PKGBUILD
          sed -i "s/^sha256sums=.*/sha256sums=('${SHA}')/" packaging/arch/PKGBUILD
          chown -R builder:builder /home/builder/src
          # --nocheck: packaging builds the artifact; tests belong in a CI job.
          su builder -c "cd /home/builder/src/packaging/arch && makepkg -f --noconfirm --nocheck"
          PKG=$(find /home/builder/src/packaging/arch -name '*.pkg.tar.zst' | head -1)
          curl -fsS -X PUT \
            -H "Authorization: token ${PUBLISH_TOKEN}" \
            -H "Content-Type: application/octet-stream" \
            --data-binary "@${PKG}" \
            "https://git.breadway.dev/api/packages/Breadway/arch/os"
