name: Release Editor App on: push: tags: - 'editor-v*' workflow_dispatch: inputs: version: description: 'Release version (e.g., 1.0.0)' required: true default: '1.0.0' jobs: build-tauri: strategy: fail-fast: false matrix: include: - platform: windows-latest target: x86_64-pc-windows-msvc arch: x64 - platform: macos-latest target: x86_64-apple-darwin arch: x64 - platform: macos-latest target: aarch64-apple-darwin arch: arm64 runs-on: ${{ matrix.platform }} steps: - name: Checkout code uses: actions/checkout@v4 - name: Install pnpm uses: pnpm/action-setup@v2 with: version: 10 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' cache: 'pnpm' - name: Install Rust stable uses: dtolnay/rust-toolchain@stable with: targets: ${{ matrix.target }} - name: Rust cache uses: Swatinem/rust-cache@v2 with: workspaces: packages/editor-app/src-tauri cache-on-failure: true - name: Install dependencies (Ubuntu) if: matrix.platform == 'ubuntu-latest' run: | sudo apt-get update sudo apt-get install -y libgtk-3-dev libwebkit2gtk-4.0-dev libappindicator3-dev librsvg2-dev patchelf - name: Install frontend dependencies run: pnpm install - name: Update version in config files (for manual trigger) if: github.event_name == 'workflow_dispatch' run: | cd packages/editor-app node -e "const pkg=require('./package.json'); pkg.version='${{ github.event.inputs.version }}'; require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2)+'\n')" node scripts/sync-version.js - name: Install wasm-pack run: cargo install wasm-pack # 使用 Turborepo 自动按依赖顺序构建所有包 # 这会自动处理:core -> asset-system -> editor-core -> ui -> 等等 - name: Build all packages with Turborepo run: pnpm run build - name: Copy WASM files to ecs-engine-bindgen shell: bash run: | mkdir -p packages/ecs-engine-bindgen/src/wasm cp packages/engine/pkg/es_engine.js packages/ecs-engine-bindgen/src/wasm/ cp packages/engine/pkg/es_engine.d.ts packages/ecs-engine-bindgen/src/wasm/ cp packages/engine/pkg/es_engine_bg.wasm packages/ecs-engine-bindgen/src/wasm/ cp packages/engine/pkg/es_engine_bg.wasm.d.ts packages/ecs-engine-bindgen/src/wasm/ - name: Bundle runtime files for Tauri run: | cd packages/editor-app node scripts/bundle-runtime.mjs - name: Build Tauri app uses: tauri-apps/tauri-action@v0.5 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} TAURI_SIGNING_PRIVATE_KEY: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY }} TAURI_SIGNING_PRIVATE_KEY_PASSWORD: ${{ secrets.TAURI_SIGNING_PRIVATE_KEY_PASSWORD }} with: projectPath: packages/editor-app tagName: ${{ github.event_name == 'workflow_dispatch' && format('editor-v{0}', github.event.inputs.version) || github.ref_name }} releaseName: 'ECS Editor v${{ github.event.inputs.version || github.ref_name }}' releaseBody: 'See the assets to download this version and install.' releaseDraft: false prerelease: false includeUpdaterJson: true updaterJsonKeepUniversal: false args: ${{ matrix.platform == 'macos-latest' && format('--target {0}', matrix.target) || '' }} # 构建成功后,创建 PR 更新版本号 update-version-pr: needs: build-tauri if: github.event_name == 'workflow_dispatch' && success() runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v4 - name: Setup Node.js uses: actions/setup-node@v4 with: node-version: '20.x' - name: Update version files run: | cd packages/editor-app node -e "const pkg=require('./package.json'); pkg.version='${{ github.event.inputs.version }}'; require('fs').writeFileSync('./package.json', JSON.stringify(pkg, null, 2)+'\n')" node scripts/sync-version.js - name: Create Pull Request uses: peter-evans/create-pull-request@v6 with: token: ${{ secrets.GITHUB_TOKEN }} commit-message: "chore(editor): bump version to ${{ github.event.inputs.version }}" branch: release/editor-v${{ github.event.inputs.version }} delete-branch: true title: "chore(editor): Release v${{ github.event.inputs.version }}" body: | ## Release v${{ github.event.inputs.version }} This PR updates the editor version after successful release build. ### Changes - Updated `packages/editor-app/package.json` → `${{ github.event.inputs.version }}` - Updated `packages/editor-app/src-tauri/tauri.conf.json` → `${{ github.event.inputs.version }}` ### Release - [GitHub Release](https://github.com/${{ github.repository }}/releases/tag/editor-v${{ github.event.inputs.version }}) --- *This PR was automatically created by the release workflow.* labels: | release editor automated pr