name: CI
on:
  push:
    branches: [main]
  pull_request:

concurrency:
  group: release-${{ github.sha }}
jobs:
  flatpak:
    name: Flatpak
    runs-on: ubuntu-latest
    container:
      image: bilelmoussaoui/flatpak-github-actions:gnome-47
      options: --privileged
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Flatpak Builder
        uses: flatpak/flatpak-github-actions/flatpak-builder@v6.5
        with:
          bundle: page.kramo.Cartridges.Devel.flatpak
          manifest-path: build-aux/flatpak/page.kramo.Cartridges.Devel.json

  windows:
    name: Windows
    runs-on: windows-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Setup MSYS2
        uses: msys2/setup-msys2@v2
        with:
          msystem: UCRT64
          update: true
          install: mingw-w64-ucrt-x86_64-gtk4 mingw-w64-ucrt-x86_64-libadwaita mingw-w64-ucrt-x86_64-python-gobject mingw-w64-ucrt-x86_64-python-yaml mingw-w64-ucrt-x86_64-python-requests mingw-w64-ucrt-x86_64-python-pillow mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-ca-certificates mingw-w64-ucrt-x86_64-meson git

      - name: Compile
        shell: msys2 {0}
        run: |
          meson setup _build
          ninja -C _build install
          pacman --noconfirm -Rs mingw-w64-ucrt-x86_64-desktop-file-utils mingw-w64-ucrt-x86_64-meson git

      - name: Test
        shell: msys2 {0}
        run: |
          set +e
          timeout 2 cartridges; [ "$?" -eq "124" ]

      - name: Inno Setup
        run: iscc ".\_build\build-aux\windows\Cartridges.iss"

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          name: Windows Installer
          path: _build/build-aux/windows/Output/Cartridges Windows.exe

  macos:
    name: macOS
    runs-on: macos-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4

      - name: Set up Homebrew
        id: set-up-homebrew
        uses: Homebrew/actions/setup-homebrew@master

      - name: Install Dependencies
        run: |
          brew install meson pygobject3 libadwaita adwaita-icon-theme desktop-file-utils pyinstaller pillow
          pip3 install --break-system-packages requests PyYAML pyobjc

      - name: Meson Build
        run: |
          meson setup _build -Dtiff_compression=jpeg
          ninja install -C _build

      - name: PyInstaller
        env:
          PYTHONPATH: /opt/homebrew/opt/homebrew/lib/python3.12/site-packages
        run: |
          cd build-aux/macos
          pyinstaller ./cartridges.spec

      - name: Zip
        run: |
          cd build-aux/macos/dist
          zip -yr Cartridges\ macOS.zip Cartridges.app

      - name: Upload Artifact
        uses: actions/upload-artifact@v4
        with:
          path: build-aux/macos/dist/Cartridges macOS.zip
          name: macOS Application
