name: Linux ARM64 (aarch64) Build on: workflow_dispatch: inputs: tag: description: "Optional release tag to build (e.g. v1.1.7)" required: false type: string push: tags: - "v*" jobs: build-linux-aarch64: name: Build Linux ARM64 runs-on: ubuntu-24.04-arm continue-on-error: true permissions: contents: write steps: - name: Checkout uses: actions/checkout@v4 - name: Determine version id: release run: | VERSION="" if [[ "${GITHUB_REF}" == refs/tags/v* ]]; then VERSION="${GITHUB_REF#refs/tags/v}" elif [[ -n "${{ inputs.tag }}" ]]; then VERSION="${{ inputs.tag }}" VERSION="${VERSION#v}" fi echo "version=$VERSION" >> "$GITHUB_OUTPUT" - name: Setup Node uses: actions/setup-node@v4 with: node-version: 24 cache: npm - name: Setup Rust uses: dtolnay/rust-toolchain@stable - name: Install system dependencies run: | sudo apt-get update # Pin WebKitGTK to 2.44.0-2 to prevent EGL_BAD_PARAMETER crash in AppImage # See: https://github.com/tauri-apps/tauri/issues/11994 sudo apt-get install -y \ libwebkit2gtk-4.1-0=2.44.0-2 \ libwebkit2gtk-4.1-dev=2.44.0-2 \ libjavascriptcoregtk-4.1-0=2.44.0-2 \ libjavascriptcoregtk-4.1-dev=2.44.0-2 \ gir1.2-javascriptcoregtk-4.1=2.44.0-2 \ gir1.2-webkit2-4.1=2.44.0-2 \ libgtk-3-dev \ libappindicator3-dev \ librsvg2-dev \ libasound2-dev \ patchelf \ build-essential \ xdg-utils - name: Install frontend deps run: npm ci - name: Build frontend run: npm run build - name: Build Tauri (deb + rpm + appimage) env: TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} run: npm run tauri build -- --bundles deb,rpm,appimage - name: Collect artifacts env: VERSION: ${{ steps.release.outputs.version }} run: | mkdir -p dist cp -v src-tauri/target/release/bundle/deb/*.deb dist/ || true cp -v src-tauri/target/release/bundle/rpm/*.rpm dist/ || true cp -v src-tauri/target/release/bundle/appimage/*.AppImage dist/ || true cp -v src-tauri/target/release/bundle/appimage/*.AppImage.sig dist/ || true # Create AUR tarball ARCH=aarch64 TARBALL_DIR="qbz_${VERSION}_${ARCH}" mkdir -p "tarball-staging/${TARBALL_DIR}/icons/hicolor"/{32x32,48x48,64x64,128x128,256x256}/apps # Binary cp src-tauri/target/release/qbz "tarball-staging/${TARBALL_DIR}/qbz" # Icons cp src-tauri/icons/32x32.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/32x32/apps/qbz.png" cp src-tauri/icons/128x128.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/48x48/apps/qbz.png" cp src-tauri/icons/128x128.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/64x64/apps/qbz.png" cp src-tauri/icons/128x128.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/128x128/apps/qbz.png" cp src-tauri/icons/128x128@2x.png "tarball-staging/${TARBALL_DIR}/icons/hicolor/256x256/apps/qbz.png" # Desktop file cat > "tarball-staging/${TARBALL_DIR}/qbz.desktop" << 'EOF' [Desktop Entry] Name=QBZ Comment=Native Qobuz client with hi-res audio support Exec=qbz Icon=qbz Terminal=false Type=Application Categories=AudioVideo;Audio;Music;Player; Keywords=music;audio;qobuz;hifi;streaming;audiophile; EOF tar -czf "dist/qbz_${VERSION}_${ARCH}.tar.gz" -C tarball-staging "${TARBALL_DIR}" ls -la dist - name: Upload artifacts uses: actions/upload-artifact@v4 with: name: qbz-linux-aarch64 path: dist/* - name: Publish GitHub Release Assets if: startsWith(github.ref, 'refs/tags/') uses: softprops/action-gh-release@v2 with: files: dist/* prerelease: ${{ contains(steps.release.outputs.version, '-rc') }} make_latest: ${{ contains(steps.release.outputs.version, '-rc') && 'false' || 'true' }}