diff options
Diffstat (limited to '.github/workflows/semifold-ci.yaml')
| -rw-r--r-- | .github/workflows/semifold-ci.yaml | 200 |
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..d42b4e1 --- /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: "ui/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: "ui/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 }} |