Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: Build & Upload Release Artifacts | |
| on: | |
| release: | |
| types: [published] | |
| workflow_dispatch: | |
| inputs: | |
| tag_name: | |
| description: "Tag to build and upload (e.g. v1.2.3)" | |
| required: true | |
| type: string | |
| release_name: | |
| description: "Release title (defaults to tag)" | |
| required: false | |
| type: string | |
| prerelease: | |
| description: "Mark as prerelease" | |
| required: false | |
| type: boolean | |
| default: false | |
| draft: | |
| description: "Create as draft" | |
| required: false | |
| type: boolean | |
| default: false | |
| permissions: | |
| contents: write | |
| concurrency: | |
| group: release-${{ github.event_name }}-${{ inputs.tag_name || github.ref }} | |
| cancel-in-progress: false | |
| env: | |
| CI: true | |
| jobs: | |
| create_release: | |
| name: Create or ensure GitHub Release (for manual runs) | |
| if: github.event_name == 'workflow_dispatch' | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Ensure release exists | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ inputs.tag_name }} | |
| name: ${{ inputs.release_name || inputs.tag_name }} | |
| draft: ${{ inputs.draft }} | |
| prerelease: ${{ inputs.prerelease }} | |
| build-windows: | |
| needs: [create_release] | |
| name: Windows (x64) | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build renderer (Vite) | |
| run: npm run build:electron | |
| - name: Make Windows installers (Squirrel + ZIP) | |
| run: npx electron-forge make --platform=win32 --arch=x64 --targets=@electron-forge/maker-squirrel,@electron-forge/maker-zip | |
| - name: Upload Windows artifacts to GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ inputs.tag_name || github.ref_name }} | |
| files: | | |
| out/make/**/*.exe | |
| out/make/**/*.zip | |
| build-linux: | |
| needs: [create_release] | |
| name: Linux (x64) | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build renderer (Vite) | |
| run: npm run build:electron | |
| - name: Install system dependencies (RPM tooling) | |
| run: sudo apt-get update && sudo apt-get install -y rpm | |
| - name: Make Linux packages (DEB + RPM) | |
| run: npx electron-forge make --platform=linux --arch=x64 --targets=@electron-forge/maker-deb,@electron-forge/maker-rpm | |
| - name: Upload Linux artifacts to GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ inputs.tag_name || github.ref_name }} | |
| files: | | |
| out/make/**/*.deb | |
| out/make/**/*.rpm | |
| out/make/**/*.zip | |
| build-macos: | |
| needs: [create_release] | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - runner: macos-13 | |
| arch: x64 | |
| - runner: macos-14 | |
| arch: arm64 | |
| name: macOS (${{ matrix.arch }}) | |
| runs-on: ${{ matrix.runner }} | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v4 | |
| - name: Setup Node.js | |
| uses: actions/setup-node@v4 | |
| with: | |
| node-version: 20 | |
| cache: npm | |
| - name: Install dependencies | |
| run: npm ci | |
| - name: Build renderer (Vite) | |
| run: npm run build:electron | |
| - name: Make macOS artifacts (DMG + ZIP) | |
| run: npx electron-forge make --platform=darwin --arch=${{ matrix.arch }} --targets=@electron-forge/maker-dmg,@electron-forge/maker-zip | |
| env: | |
| # 避免在 CI 中尝试自动使用本地签名身份;无证书时使用 ad-hoc 签名 | |
| CSC_IDENTITY_AUTO: "false" | |
| - name: Upload macOS artifacts to GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ inputs.tag_name || github.ref_name }} | |
| files: | | |
| out/make/**/*.dmg | |
| out/make/**/*.zip | |