aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/.github/workflows/semifold-ci.yaml
diff options
context:
space:
mode:
Diffstat (limited to '.github/workflows/semifold-ci.yaml')
-rw-r--r--.github/workflows/semifold-ci.yaml200
1 files changed, 200 insertions, 0 deletions
diff --git a/.github/workflows/semifold-ci.yaml b/.github/workflows/semifold-ci.yaml
new file mode 100644
index 0000000..7938a9d
--- /dev/null
+++ b/.github/workflows/semifold-ci.yaml
@@ -0,0 +1,200 @@
+name: Semifold CI
+on:
+ push:
+ branches: [main]
+
+env:
+ CARGO_TERM_COLOR: always
+ CLICOLOR_FORCE: 1
+
+permissions:
+ id-token: write
+ contents: write
+ pull-requests: write
+
+jobs:
+ build-tauri:
+ name: Build on ${{ matrix.name }}
+ strategy:
+ fail-fast: false
+ matrix:
+ include:
+ # Linux
+ - platform: "ubuntu-22.04"
+ name: "Linux x86_64 (GNU)"
+ target: "x86_64-unknown-linux-gnu"
+ args: "--target x86_64-unknown-linux-gnu"
+ # - platform: "ubuntu-latest"
+ # name: "Linux x86_64 (Musl)"
+ # target: "x86_64-unknown-linux-musl"
+ # args: "--target x86_64-unknown-linux-musl"
+ - platform: "ubuntu-24.04-arm"
+ name: "Linux arm64"
+ target: "aarch64-unknown-linux-gnu"
+ args: "--target aarch64-unknown-linux-gnu"
+ # macOS
+ - platform: "macos-latest"
+ name: "macOS x86_64"
+ target: "x86_64-apple-darwin"
+ args: "--target x86_64-apple-darwin"
+ - platform: "macos-latest"
+ name: "macOS arm64"
+ target: "aarch64-apple-darwin"
+ args: "--target aarch64-apple-darwin"
+ # Windows
+ - platform: "windows-latest"
+ name: "Windows x86_64 (MSVC)"
+ target: "x86_64-pc-windows-msvc"
+ args: "--target x86_64-pc-windows-msvc --bundles nsis"
+ # - platform: "windows-latest"
+ # name: "Windows x86_64 (GNU)"
+ # target: "x86_64-pc-windows-gnu"
+ # args: "--target x86_64-pc-windows-gnu --bundles nsis"
+ - platform: "windows-11-arm"
+ name: "Windows arm64"
+ target: "aarch64-pc-windows-msvc"
+ args: "--target aarch64-pc-windows-msvc --bundles nsis"
+
+ runs-on: ${{ matrix.platform }}
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Install Dependencies (Linux x86_64)
+ if: runner.os == 'Linux'
+ run: |
+ sudo apt-get update
+ sudo apt-get install -y libwebkit2gtk-4.1-dev build-essential curl wget file libssl-dev libgtk-3-dev libayatana-appindicator3-dev librsvg2-dev libfuse2
+
+ - name: Install pnpm
+ uses: pnpm/action-setup@v4
+
+ - name: Install Node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: 22
+ cache: "pnpm"
+ cache-dependency-path: "pnpm-lock.yaml"
+
+ - name: Install Node.js Dependencies
+ run: pnpm install
+
+ - name: Install Rust
+ uses: dtolnay/rust-toolchain@stable
+ with:
+ targets: ${{ matrix.target }}
+
+ - name: Rust Cache
+ uses: swatinem/rust-cache@v2
+ with:
+ shared-key: ${{ matrix.target }}
+
+ - name: Setup appimagetool (Linux)
+ if: startsWith(matrix.platform, 'ubuntu') && !startsWith(matrix.platform, 'macos') && !startsWith(matrix.platform, 'windows')
+ run: |
+ ARCH=$(uname -m)
+ wget -q "https://github.com/AppImage/AppImageKit/releases/download/continuous/appimagetool-${ARCH}.AppImage"
+ chmod +x "appimagetool-${ARCH}.AppImage"
+ if command -v sudo >/dev/null 2>&1; then
+ sudo mv "appimagetool-${ARCH}.AppImage" /usr/local/bin/appimagetool
+ else
+ mv "appimagetool-${ARCH}.AppImage" /usr/local/bin/appimagetool
+ fi
+
+ - name: Build Tauri App
+ uses: tauri-apps/tauri-action@v0
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ with:
+ args: ${{ matrix.args }}
+
+ - name: Fix AppImage for Wayland (Linux)
+ if: startsWith(matrix.platform, 'ubuntu') && !startsWith(matrix.platform, 'macos') && !startsWith(matrix.platform, 'windows')
+ run: |
+ # Locate the generated AppImage
+ APPIMAGE=$(find bundle -name "*.AppImage" -type f | head -1)
+ echo "Found AppImage: $APPIMAGE"
+
+ if [ -n "$APPIMAGE" ]; then
+ # backup original AppImage
+ cp "$APPIMAGE" "${APPIMAGE}.backup"
+
+ # extract AppImage
+ "$APPIMAGE" --appimage-extract
+
+ # Fix GTK hook, remove forced X11
+ if [ -f squashfs-root/apprun-hooks/linuxdeploy-plugin-gtk.sh ]; then
+ sed -i 's/^export GDK_BACKEND=x11.*$/# export GDK_BACKEND=x11 # Disabled for Wayland compatibility/' squashfs-root/apprun-hooks/linuxdeploy-plugin-gtk.sh
+ echo "Successfully patched GTK hook for Wayland compatibility"
+ fi
+
+ # Repack AppImage
+ appimagetool squashfs-root "$APPIMAGE"
+ rm -rf squashfs-root
+ fi
+ working-directory: target/release
+
+ - name: Upload Artifact (Linux)
+ if: runner.os == 'Linux'
+ uses: actions/upload-artifact@v6
+ with:
+ name: linux-${{ matrix.target }}-artifacts
+ path: |
+ target/${{ matrix.target }}/release/bundle/appimage/*.AppImage
+ target/${{ matrix.target }}/release/bundle/deb/*.deb
+ target/${{ matrix.target }}/release/bundle/appimage/*.rpm
+ retention-days: 1
+
+ - name: Upload Artifact (Windows)
+ if: runner.os == 'Windows'
+ uses: actions/upload-artifact@v6
+ with:
+ name: windows-${{ matrix.target }}-artifacts
+ path: |
+ target/${{ matrix.target }}/release/bundle/msi/*.msi
+ target/${{ matrix.target }}/release/bundle/nsis/*.exe
+ retention-days: 1
+
+ - name: Upload Artifact (macOS)
+ if: runner.os == 'macOS'
+ uses: actions/upload-artifact@v6
+ with:
+ name: macos-${{ matrix.target }}-artifacts
+ path: |
+ target/${{ matrix.target }}/release/bundle/dmg/*.dmg
+ target/${{ matrix.target }}/release/bundle/macos/*.app.tar.gz
+ retention-days: 1
+
+ release:
+ name: Release
+ runs-on: ubuntu-latest
+ needs: [build-tauri]
+ steps:
+ - name: Checkout
+ uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
+ - name: Setup Semifold
+ uses: noctisynth/setup-semifold@main
+ - name: Install pnpm
+ uses: pnpm/action-setup@v4
+ - name: Install Node.js
+ uses: actions/setup-node@v6
+ with:
+ node-version: 22
+ cache: "pnpm"
+ cache-dependency-path: "pnpm-lock.yaml"
+ - name: Install Node.js Dependencies
+ run: pnpm install
+ - name: Download build artifacts
+ uses: actions/download-artifact@v6
+ with:
+ path: artifacts/
+ merge-multiple: true
+ - name: List artifacts
+ run: ls -R artifacts/
+ - name: Semifold CI
+ run: semifold ci
+ env:
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+ CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}
+ NODE_AUTH_TOKEN: ${{ secrets.NODE_AUTH_TOKEN }}