name: Build Quickgui 🏗️

on:
  pull_request:
    branches:
      - main
    paths:
      - pubspec.yaml
      - assets/**
      - lib/**
      - linux/**
  push:
    branches:
      - main
    paths:
      - pubspec.yaml
      - assets/**
      - lib/**
      - linux/**
  workflow_dispatch:

# TODO: arm64 runner
# https://github.blog/changelog/2024-06-03-actions-arm-based-linux-and-windows-runners-are-now-in-public-beta/

jobs:
  test-build-linux-x64:
    runs-on: ubuntu-22.04
    steps:
      - name: "Checkout 🥡"
        uses: actions/checkout@v4
      - name: "Install Flutter 🦋"
        uses: subosito/flutter-action@v2
        with:
          channel: stable
          architecture: x64
          flutter-version-file: pubspec.yaml
      - name: "Install dependencies 💾"
        run: |
          sudo apt-get -y install clang cmake libblkid1 liblzma5 libgtk-3-0 libgtk-3-dev ninja-build pkg-config
      - name: Install Flutter dependencies 🦋
        run: flutter pub get
      - name: Enable Linux Desktop 🐧
        run: flutter config --enable-linux-desktop
      - name: Build artifacts 🏗️
        run: flutter build linux --release
      - name: Show artifacts 👀
        run: tree build/linux/x64/release/bundle
      - name: Upload artifacts ⤴️
        uses: actions/upload-artifact@v4
        with:
          name: Quickgui-${{github.run_number}}-linux-x64
          path: build/linux/x64/release/bundle
          overwrite: true

  test-build-ppa-x64:
    runs-on: ubuntu-22.04
    steps:
      - name: "Checkout 🥡"
        uses: actions/checkout@v4
      - name: "Install Flutter 🦋"
        uses: subosito/flutter-action@v2
        with:
          channel: stable
          architecture: x64
          flutter-version-file: pubspec.yaml
      - name: "Install dependencies 💾"
        run: |
          sudo apt-get -y install clang cmake libblkid1 liblzma5 libgtk-3-0 libgtk-3-dev ninja-build pkg-config
          sudo apt-get -y install debhelper-compat distro-info dput devscripts rsync
      - name: Install Flutter dependencies 🦋
        run: flutter pub get
      - name: Enable Linux Desktop 🐧
        run: flutter config --enable-linux-desktop
      - name: Build artifacts 🏗️
        run: flutter build linux --release
      - name: "Import gpg key 🔑"
        uses: crazy-max/ghaction-import-gpg@v6
        with:
          gpg_private_key: ${{ secrets.PPA_GPG_PRIVATE_KEY }}
          passphrase: ${{ secrets.PPA_GPG_PASSPHRASE }}
      - name: "Upload to PPA ⤴️"
        env:
          DEBEMAIL: ${{ secrets.DEBEMAIL }}
          DEBFULLNAME: ${{ secrets.DEBFULLNAME }}
        run: |
          # Version variables
          DEB_VER=$(grep "^version" pubspec.yaml | cut -d' ' -f2 | sed 's/+/-/')
          TAR_VER=$(grep "^version" pubspec.yaml | cut -d' ' -f2 | sed 's/+.*//')
          STAMP=$(date +%y%j.%H%M)
          # Create a "fake" orig.tar.xz
          mkdir -p ubuntu/build
          cp -a build/linux/x64/release/bundle/* ubuntu/build/
          cp -a assets/resources/quickgui.desktop ubuntu/build/
          for SIZE in 16 32 48 64 128 256 512; do
            mkdir -p ubuntu/build/icons/hicolor/${SIZE}x${SIZE}/apps/
            cp -av assets/resources/quickgui_${SIZE}.png ubuntu/build/icons/hicolor/${SIZE}x${SIZE}/apps/quickgui.png
          done
          tar cvf "ubuntu/quickgui_${TAR_VER}.orig.tar" --directory ubuntu/build .
          xz -vv -fz "ubuntu/quickgui_${TAR_VER}.orig.tar"
          # Make a debian "source" package
          mkdir -p ubuntu/build/debian
          cp -a linux/packaging/debian/* ubuntu/build/debian/
          sed -i 's/Architecture: any/Architecture: amd64/g' ubuntu/build/debian/control
          cd ubuntu/build
          for CODENAME in $(distro-info --supported); do
            rm debian/changelog
            dch --package quickgui --newversion="${DEB_VER}~${CODENAME}${STAMP}" --distribution=${CODENAME} "New upstream release." --create
            dpkg-buildpackage -d -S -sa
            #dput ppa:flexiondotorg/rubbish ../quickgui_${DEB_VER}~${CODENAME}${STAMP}_source.changes
          done
      - name: Show artifacts 👀
        run: tree ubuntu/

  test-build-nix-x64:
    runs-on: ubuntu-22.04
    permissions:
      id-token: "write"
      contents: "read"
    steps:
      - name: "Checkout 🥡"
        uses: "actions/checkout@v4"
      - name: "Install Nix ❄️"
        uses: "DeterminateSystems/nix-installer-action@v12"
      - name: "Enable Magic Nix Cache 🪄"
        uses: "DeterminateSystems/magic-nix-cache-action@v7"
      - name: "Build with Nix ❄️"
        run: |
          nix build .#quickgui
          tree ./result

