name: Publish Quickgui ๐Ÿท๏ธ # To release a new version: # - Make sure pubspec.yaml version: has been revved and is in the format "X.Y.Z+n" # - Create a git tag with the format "X.Y.Z" and push it # - The build and publish will run automatically if the git tag matches the # pubspec.yaml version without the +n suffix on: push: tags: - "v?[0-9]+.[0-9]+.[0-9]+*" workflow_dispatch: inputs: tag: description: "The existing tag to publish" type: "string" required: true # TODO: arm64 runner # https://github.blog/changelog/2024-06-03-actions-arm-based-linux-and-windows-runners-are-now-in-public-beta/ jobs: version-check: # The git tag and pubspec.yaml version must be identical. name: "Check versions โš–๏ธ" runs-on: ubuntu-22.04 steps: - uses: actions/checkout@v4 with: fetch-depth: 0 - name: "Compare App and Git versions ๐ŸŸฐ" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | APP_VERSION=$(grep "^version" pubspec.yaml | cut -d' ' -f2 | sed 's/+.*//') GIT_VERSION=$(git describe --tags | cut -d'-' -f1) echo "App version: ${APP_VERSION}" echo "Git version: ${GIT_VERSION}" if [ "${APP_VERSION}" != "${GIT_VERSION}" ]; then echo "ERROR! Version mismatch."; exit 1 fi publish-linux-x64: needs: [version-check] name: "Publish 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 system 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: Activate flutter_distributor ๐Ÿš€ run: dart pub global activate flutter_distributor - name: Build AppImage ๐Ÿง run: | sudo apt-get -y install libfuse-dev locate wget -q "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-x86_64.AppImage" -O /usr/local/bin/appimagetool chmod +x /usr/local/bin/appimagetool flutter_distributor package --platform=linux --targets=appimage - name: Build .deb ๐Ÿฅ run: | sudo apt-get -y install dpkg flutter_distributor package --platform=linux --targets=deb - name: Build .rpm ๐ŸŽฉ run: | sudo apt-get -y install patchelf rpm flutter_distributor package --platform=linux --targets=rpm - name: Build .zip ๐Ÿค run: flutter_distributor package --platform=linux --targets=zip - name: Show artifacts ๐Ÿ‘€ run: tree dist/ - name: "Publish Release ๐Ÿ“ค๏ธ" env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | REL_VER=$(grep "^version" pubspec.yaml | cut -d' ' -f2) gh release create "${{ github.ref }}" --draft --generate-notes for PKG in AppImage deb rpm zip; do gh release upload "${{ github.ref }}" "dist/${REL_VER}/quickgui-${REL_VER}-linux.${PKG}" --clobber done if [ "$(gh release view "${{ github.ref }}" --json assets --template '{{len .assets}}')" -lt 0 ]; then exit 1 fi gh release edit "${{ github.ref }}" --draft=false publish-flakehub: needs: [version-check] name: "Publish FlakeHub โ„๏ธ" runs-on: "ubuntu-22.04" permissions: id-token: "write" contents: "read" steps: - uses: "actions/checkout@v4" with: ref: "${{ (inputs.tag != null) && format('refs/tags/{0}', inputs.tag) || '' }}" - uses: "DeterminateSystems/nix-installer-action@v12" - uses: "DeterminateSystems/magic-nix-cache-action@v7" - uses: "DeterminateSystems/flakehub-push@v4" with: visibility: "public" name: "quickemu-project/quickgui" tag: "${{ inputs.tag }}" publish-ppa-x64: needs: [version-check] name: "Publish 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/quickemu ../quickgui_${DEB_VER}~${CODENAME}${STAMP}_source.changes done - name: Show artifacts ๐Ÿ‘€ run: tree ubuntu/