name: "publish-stable" on: push: branches: - release jobs: publish-tauri: permissions: contents: write issues: write pull-requests: write strategy: fail-fast: false matrix: include: - platform: "macos-latest" # for Arm based macs (M1 and above) args: "--target aarch64-apple-darwin" - platform: "macos-latest" # for Intel based macs args: "--target x86_64-apple-darwin" - platform: "ubuntu-22.04" args: "" - platform: "ubuntu-24.04-arm" args: "" - platform: "windows-latest" # Windows x64 args: "--target x86_64-pc-windows-msvc" - platform: "windows-latest" # Windows x86 (32-bit) args: "--target i686-pc-windows-msvc" - platform: "windows-latest" # Windows ARM64 args: "--target aarch64-pc-windows-msvc" runs-on: ${{ matrix.platform }} steps: - uses: actions/checkout@v6 with: fetch-depth: 0 - name: setup node uses: actions/setup-node@v6 with: node-version: latest - name: install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: > ${{ matrix.platform == 'macos-latest' && 'aarch64-apple-darwin,x86_64-apple-darwin' || matrix.platform == 'windows-latest' && 'x86_64-pc-windows-msvc,i686-pc-windows-msvc,aarch64-pc-windows-msvc' || '' }} - name: install dependencies (ubuntu only) if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-24.04-arm' run: | sudo apt-get update sudo apt-get install -y libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf libpcsclite-dev libudev-dev libusb-1.0-0-dev podman - name: install dependencies (ubuntu-arm64 only) if: matrix.platform == 'ubuntu-24.04-arm' run: | sudo apt-get install xdg-utils - name: Setup Deno uses: denoland/setup-deno@v2 with: deno-version: v2.x - name: install frontend dependencies run: deno install - name: Extract version from Cargo.toml id: get_version shell: bash run: | # Define the path to your Cargo.toml file cargo_file="src-tauri/Cargo.toml" # Extract ONLY the version number using a more precise regex version=$(grep -m 1 '^version' "$cargo_file" | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/') # Output for debugging echo "Version found: $version" # Set the output correctly for GitHub Actions echo "version=$version" >> $GITHUB_ENV # Step 3: Publish the release with combined release body - uses: tauri-apps/tauri-action@v0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} LINUXDEPLOY_OUTPUT_APP_IMAGE_EXCLUDE: "libpcsclite.so.1" with: tagName: v__VERSION__ releaseName: "PicoForge-v__VERSION__" releaseBody: | > [!WARNING] > This is a Beta release and thus can have some bugs, report them using github issues. #### Check the Installation guide for the Application on the wiki: https://github.com/librekeys/picoforge/wiki/Installation releaseDraft: true prerelease: false args: ${{ matrix.args }} - name: Patch and Overwrite AppImage if: matrix.platform == 'ubuntu-22.04' || matrix.platform == 'ubuntu-24.04-arm' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | if [[ "${{ matrix.platform }}" == *"arm"* ]]; then TOOL_ARCH="aarch64" else TOOL_ARCH="x86_64" fi echo "Detected architecture for AppImageTool: $TOOL_ARCH" wget -q "https://github.com/AppImage/appimagetool/releases/download/continuous/appimagetool-$TOOL_ARCH.AppImage" chmod +x "appimagetool-$TOOL_ARCH.AppImage" APPIMAGE_PATH=$(find src-tauri/target/release/bundle/appimage -name "*.AppImage" | head -n 1) echo "Patching local file: $APPIMAGE_PATH" "$APPIMAGE_PATH" --appimage-extract > /dev/null rm -f squashfs-root/usr/lib/libpcsclite.so.1 ARCH=$TOOL_ARCH "./appimagetool-$TOOL_ARCH.AppImage" --appimage-extract-and-run squashfs-root/ "$APPIMAGE_PATH" echo "Overwriting Draft Release asset..." gh release upload "v${{ env.version }}" "$APPIMAGE_PATH" --clobber echo "Success! The Draft Release now has the fixed AppImage." - name: Sync Spec Version & Tag (Podman Container) if: matrix.platform == 'ubuntu-22.04' env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} run: | cat << 'EOF' > ./update_spec_in_container.sh #!/bin/sh set -e dnf install -y tito git git config --global --add safe.directory /workspace git config --global user.email 'git@suyogtandel.in' git config --global user.name 'Suyog Tandel' git remote set-url origin https://x-access-token:$GITHUB_TOKEN@github.com/$GITHUB_REPOSITORY.git CARGO_FILE="src-tauri/Cargo.toml" NEW_VERSION=$(grep -m 1 '^version' "$CARGO_FILE" | sed -E 's/.*"([0-9]+\.[0-9]+\.[0-9]+)".*/\1/') CURRENT_SPEC_VERSION=$(grep -m 1 '^Version:' picoforge.spec | awk '{print $2}') CURRENT_SPEC_RELEASE=$(grep -m 1 '^Release:' picoforge.spec | awk '{print $2}' | sed 's/%{?dist}//') echo "Cargo Version: $NEW_VERSION" echo "Spec Version: $CURRENT_SPEC_VERSION" echo "Spec Release: $CURRENT_SPEC_RELEASE" if [ "$NEW_VERSION" != "$CURRENT_SPEC_VERSION" ]; then echo "New version detected. Resetting Release to 1." sed -i "s/^Version:.*/Version: $NEW_VERSION/" picoforge.spec sed -i "s/^Release:.*/Release: 1%{?dist}/" picoforge.spec else echo "Version match. Incrementing Release number." NEW_RELEASE=$((CURRENT_SPEC_RELEASE + 1)) sed -i "s/^Release:.*/Release: $NEW_RELEASE%{?dist}/" picoforge.spec fi if git diff --quiet picoforge.spec; then echo "No changes to spec file." else git add picoforge.spec git commit -m "chore: sync spec to $NEW_VERSION [skip ci]" fi tito tag --offline --accept-auto-changelog --keep-version git pull --rebase origin main git push --follow-tags origin HEAD:main HEAD:release EOF chmod +x ./update_spec_in_container.sh podman run --rm \ --security-opt label=disable \ -v "$PWD":/workspace \ -w /workspace \ -e GITHUB_TOKEN=$GITHUB_TOKEN \ -e GITHUB_REPOSITORY=$GITHUB_REPOSITORY \ fedora:latest \ /workspace/update_spec_in_container.sh rm ./update_spec_in_container.sh