diff --git a/.gitea/workflows/build-release.yml b/.gitea/workflows/build-release.yml index eda62564..f8b93828 100644 --- a/.gitea/workflows/build-release.yml +++ b/.gitea/workflows/build-release.yml @@ -121,6 +121,64 @@ jobs: path: dist/linux/ retention-days: 30 + build-windows: + name: Build Windows + runs-on: linux/amd64 + needs: test + # Cross-compiled from Linux via the official Tauri path (MSVC + cargo-xwin), + # baked into the builder image. No toolchain installs here — the image has + # cargo-xwin, clang/clang-cl, lld, llvm, nsis and the msvc target. + container: + image: gitea.tourolle.paris/dtourolle/jellytau-builder:latest + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Cache Rust dependencies + uses: actions/cache@v3 + with: + path: | + ~/.cargo/registry + ~/.cargo/git + ~/.cache/cargo-xwin + src-tauri/target + key: ${{ runner.os }}-cargo-windows-${{ hashFiles('**/Cargo.lock') }} + restore-keys: | + ${{ runner.os }}-cargo-windows- + + - name: Cache Node dependencies + uses: actions/cache@v3 + with: + path: | + ~/.bun/install/cache + node_modules + key: ${{ runner.os }}-bun-${{ hashFiles('**/bun.lock') }} + restore-keys: | + ${{ runner.os }}-bun- + + - name: Set app version from tag + run: | + # On a tag build the tag is the single source of truth for the version. + if echo "$GITHUB_REF" | grep -q '^refs/tags/v'; then + VERSION="${GITHUB_REF#refs/tags/v}" + echo "Setting version to $VERSION" + sed -i "s/\"version\": \"[^\"]*\"/\"version\": \"$VERSION\"/" src-tauri/tauri.conf.json + fi + grep '"version"' src-tauri/tauri.conf.json + + - name: Build Windows (NSIS installer + exe) + run: OUTPUT_DIR="$PWD/dist/windows" WIN_BUNDLES=nsis ./scripts/build-windows-cross.sh + + - name: List Windows artifacts + run: ls -lah dist/windows/ + + - name: Upload Windows build artifact + uses: actions/upload-artifact@v3 + with: + name: jellytau-windows + path: dist/windows/ + retention-days: 30 + build-android: name: Build Android runs-on: linux/amd64 @@ -239,7 +297,7 @@ jobs: create-release: name: Create Release runs-on: linux/amd64 - needs: [build-linux, build-android] + needs: [build-linux, build-windows, build-android] if: startsWith(github.ref, 'refs/tags/v') container: image: gitea.tourolle.paris/dtourolle/jellytau-builder:latest @@ -259,6 +317,12 @@ jobs: name: jellytau-linux path: artifacts/linux/ + - name: Download Windows artifacts + uses: actions/download-artifact@v3 + with: + name: jellytau-windows + path: artifacts/windows/ + - name: Download Android artifacts uses: actions/download-artifact@v3 with: @@ -277,6 +341,9 @@ jobs: echo "- **AppImage** - Run directly on most Linux distributions" >> release_notes.md echo "- **DEB** - Install via \`sudo dpkg -i jellytau_*.deb\` (Ubuntu/Debian)" >> release_notes.md echo "" >> release_notes.md + echo "#### Windows" >> release_notes.md + echo "- **Installer (.exe)** - Run \`jellytau_*-setup.exe\` (NSIS). Unsigned — SmartScreen may warn on first run." >> release_notes.md + echo "" >> release_notes.md echo "#### Android" >> release_notes.md echo "- **APK** - Install via \`adb install jellytau-release.apk\` or sideload via file manager" >> release_notes.md echo "- **AAB** - Upload to Google Play Console or testing platforms" >> release_notes.md @@ -358,7 +425,7 @@ jobs: fi echo "Release id=$RELEASE_ID" - for f in artifacts/android/* artifacts/linux/*; do + for f in artifacts/android/* artifacts/linux/* artifacts/windows/*; do [ -f "$f" ] || continue echo "⬆️ Uploading $(basename "$f")" curl -fsS -X POST \