aboutsummaryrefslogtreecommitdiffstatshomepage
path: root/.github/workflows/semifold-ci.yaml
diff options
context:
space:
mode:
author简律纯 <i@jyunko.cn>2026-01-18 22:13:25 +0800
committerGitHub <noreply@github.com>2026-01-18 22:13:25 +0800
commit53d3d71b69408b5fade60fbc41cee3d8e0946cbe (patch)
treeeb54be440ee6fe7af30ea54cc2f689563dc28ef8 /.github/workflows/semifold-ci.yaml
parent30a7da9eb1734e19bdb98083bdaae757e0ce9b3a (diff)
parent09b2e0f84721587f0b0a59818ebc5720c447ebb8 (diff)
downloadDropOut-53d3d71b69408b5fade60fbc41cee3d8e0946cbe.tar.gz
DropOut-53d3d71b69408b5fade60fbc41cee3d8e0946cbe.zip
Adopt Semifold CI and prepare 0.2.0-alpha pre-release (#62)
Refer: http://semifold.noctisynth.org/ ## Summary by Sourcery Adopt Semifold-based release management and prepare the project for a 0.2.0-alpha pre-release across Rust and UI packages. New Features: - Introduce Semifold CI release workflow to orchestrate builds, publishing, and changelog management. - Add Semifold status workflow to report release status on pull requests. - Add workspace-level Node tooling and scripts to manage Tauri version bumping and project preparation. Enhancements: - Refactor GitHub Actions workflows for build, test, check, and lint to simplify pnpm usage, update action versions, and standardize artifact paths. - Move Rust profile configuration into a new Cargo workspace and add a pnpm workspace for the UI package. - Configure Semifold changelog and release metadata for Rust and Node packages, including alpha pre-release tagging. Build: - Replace the tag-triggered GitHub release workflow with a branch-based Semifold CI pipeline that builds artifacts for Linux, macOS, and Windows and uploads them for publishing. - Update CI action versions (checkout, setup-node, upload-artifact, download-artifact) and adjust Rust cache configuration and artifact locations. - Add root workspace package.json, pnpm-workspace.yaml, and pnpm overrides to centralize tooling and dependency management. CI: - Add a dedicated Semifold status GitHub Actions workflow for pull requests to main. - Update existing check, lint, test, and build workflows to align with the new workspace layout and artifact directories. Deployment: - Integrate Semifold configuration for automated publishing to crates.io and npm, including pre-checks, post-version hooks, and use of stored build artifacts in releases. Tests: - Adjust test workflow artifact paths to match the new target directory structure and workspace configuration. Chores: - Remove unused Python packaging files and old Node lockfiles that are no longer part of the build or release process.
Diffstat (limited to '.github/workflows/semifold-ci.yaml')
-rw-r--r--.github/workflows/semifold-ci.yaml199
1 files changed, 199 insertions, 0 deletions
diff --git a/.github/workflows/semifold-ci.yaml b/.github/workflows/semifold-ci.yaml
new file mode 100644
index 0000000..bb32da7
--- /dev/null
+++ b/.github/workflows/semifold-ci.yaml
@@ -0,0 +1,199 @@
+name: Semifold CI
+on:
+ push:
+ branches: [main]
+ pull_request:
+ 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"
+ - os: 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"
+ - platform: "windows-latest"
+ name: "Windows x86_64 (GNU)"
+ target: "x86_64-pc-windows-gnu"
+ args: "--target x86_64-pc-windows-gnu"
+ - platform: "windows-11-arm"
+ name: "Windows arm64"
+ target: "aarch64-pc-windows-msvc"
+ args: "--target aarch64-pc-windows-msvc"
+
+ runs-on: ${{ matrix.platform }}
+ steps:
+ - uses: actions/checkout@v6
+
+ - name: Install Dependencies (Linux x86_64)
+ if: matrix.platform == 'ubuntu-22.04'
+ 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 Dependencies (Linux ARM64)
+ if: matrix.platform == 'ubuntu-24.04-arm'
+ 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 Frontend Dependencies
+ run: pnpm install
+ working-directory: ui
+
+ - 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: 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 }}