name: Update Docker CI image

on:
  workflow_dispatch:
  schedule:
    - cron: "0 0 * * 0"

permissions:
  packages: write

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

    steps:
      - uses: docker/login-action@v4
        with:
          registry: ghcr.io
          username: ${{ github.actor }}
          password: ${{ secrets.GITHUB_TOKEN }}

      - name: Write Dockerfile
        run: |
          cat > /tmp/Dockerfile <<EOF
          FROM archlinux:latest
          # TEMPORARY (remove once the upstream qmlformat regression is fixed): pin to the
          # 2026-05-13 Arch archive snapshot to hold qmlformat at qt6-declarative 6.11.0.
          # qt6-declarative 6.11.1 silently crashes qmlformat (exit 1, empty output) on QML files
          # that declare a property named 'id'. To unpin: delete the mirrorlist line below and
          # change 'pacman -Syyuu' back to 'pacman -Syu'.
          RUN echo 'Server = https://archive.archlinux.org/repos/2026/05/13/\$repo/os/\$arch' > /etc/pacman.d/mirrorlist && \
              pacman -Syyuu --needed --noconfirm sudo base-devel cmake ninja fish git clazy qt6-declarative qt6-shadertools python libpipewire aubio libqalculate && \
              useradd -m builder && \
              echo 'builder ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers && \
              sudo -u builder git clone https://aur.archlinux.org/yay-bin.git /home/builder/yay-bin && \
              cd /home/builder/yay-bin && \
              sudo -u builder makepkg -si --noconfirm && \
              sudo -u builder yay -S --noconfirm quickshell-git libcava && \
              sudo -u builder yay -Yc --noconfirm && \
              pacman -Rns --noconfirm yay-bin && \
              sed -i '/builder ALL=(ALL) NOPASSWD:ALL/d' /etc/sudoers && \
              userdel -r builder && \
              pacman -Scc --noconfirm
          EOF

      - name: Build and push
        uses: docker/build-push-action@v7
        with:
          context: .
          file: /tmp/Dockerfile
          push: true
          tags: ghcr.io/${{ github.repository_owner }}/shell-arch-env:latest
