build #48
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 | |
| on: | |
| push: | |
| branches: [main] | |
| workflow_dispatch: | |
| inputs: | |
| version: | |
| description: '版本号(例如 1.2.3 或 v1.2.3)' | |
| required: false | |
| build: | |
| description: '构建命令标记(build:win|build:mac|build:linux|build:unpack|build:all)' | |
| required: false | |
| permissions: | |
| contents: write | |
| jobs: | |
| parse: | |
| runs-on: ubuntu-latest | |
| outputs: | |
| version: ${{ steps.parse.outputs.version }} | |
| tag: ${{ steps.parse.outputs.tag }} | |
| build_script: ${{ steps.parse.outputs.build_script }} | |
| run_win: ${{ steps.parse.outputs.run_win }} | |
| run_mac: ${{ steps.parse.outputs.run_mac }} | |
| run_linux: ${{ steps.parse.outputs.run_linux }} | |
| run_unpack: ${{ steps.parse.outputs.run_unpack }} | |
| steps: | |
| - uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 | |
| - name: 读取提交信息 | |
| id: msg | |
| shell: bash | |
| run: | | |
| if [ "${{ github.event_name }}" = "workflow_dispatch" ]; then | |
| { | |
| echo "message<<__EOF__" | |
| echo "${{ github.event.inputs.version }} ${{ github.event.inputs.build }}" | |
| echo "__EOF__" | |
| } >> "$GITHUB_OUTPUT" | |
| else | |
| { | |
| echo "message<<__EOF__" | |
| echo "${{ github.event.head_commit.message }}" | |
| echo "__EOF__" | |
| } >> "$GITHUB_OUTPUT" | |
| fi | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - name: 解析版本与构建命令 | |
| id: parse | |
| env: | |
| RELEASE_MESSAGE: ${{ steps.msg.outputs.message }} | |
| run: node scripts/ci/parse-commit.mjs | |
| build_win: | |
| needs: parse | |
| if: ${{ needs.parse.outputs.run_win == 'true' }} | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10 | |
| - name: 应用版本号 | |
| run: node scripts/ci/apply-version.mjs ${{ needs.parse.outputs.version }} | |
| - name: 安装依赖 | |
| run: pnpm install --frozen-lockfile | |
| - name: 构建(Windows) | |
| run: pnpm build:win | |
| - name: 清理 unpacked 目录 | |
| shell: pwsh | |
| run: | | |
| if (Test-Path dist) { | |
| Get-ChildItem -Path dist -Directory -ErrorAction SilentlyContinue | | |
| Where-Object { $_.Name -like '*unpacked*' } | | |
| ForEach-Object { Remove-Item -Recurse -Force $_.FullName } | |
| } | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-win | |
| path: dist/** | |
| build_mac: | |
| needs: parse | |
| if: ${{ needs.parse.outputs.run_mac == 'true' }} | |
| runs-on: macos-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10 | |
| - name: 应用版本号 | |
| run: node scripts/ci/apply-version.mjs ${{ needs.parse.outputs.version }} | |
| - name: 安装依赖 | |
| run: pnpm install --frozen-lockfile | |
| - name: 构建(macOS) | |
| run: pnpm -s build:mac | |
| - name: 清理 unpacked 目录 | |
| run: rm -rf dist/*unpacked* | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-mac | |
| path: dist/** | |
| build_linux: | |
| needs: parse | |
| if: ${{ needs.parse.outputs.run_linux == 'true' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10 | |
| - name: 应用版本号 | |
| run: node scripts/ci/apply-version.mjs ${{ needs.parse.outputs.version }} | |
| - name: 安装依赖 | |
| run: pnpm install --frozen-lockfile | |
| - name: 构建(Linux) | |
| run: pnpm -s build:linux | |
| - name: 清理 unpacked 目录 | |
| run: rm -rf dist/*unpacked* | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-linux | |
| path: dist/** | |
| build_unpack: | |
| needs: parse | |
| if: ${{ needs.parse.outputs.run_unpack == 'true' }} | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - uses: actions/setup-node@v4 | |
| with: | |
| node-version: 22 | |
| - uses: pnpm/action-setup@v4 | |
| with: | |
| version: 10 | |
| - name: 应用版本号 | |
| run: node scripts/ci/apply-version.mjs ${{ needs.parse.outputs.version }} | |
| - name: 安装依赖 | |
| run: pnpm install --frozen-lockfile | |
| - name: 构建(dir) | |
| run: pnpm -s build:unpack | |
| - name: 打包并移除 unpacked 目录 | |
| shell: pwsh | |
| run: | | |
| if (Test-Path dist) { | |
| $dirs = Get-ChildItem -Path dist -Directory -ErrorAction SilentlyContinue | Where-Object { $_.Name -like '*unpacked*' } | |
| foreach ($d in $dirs) { | |
| $zipBase = ($d.Name -replace 'unpacked', 'dir') | |
| $zipPath = Join-Path dist "$zipBase.zip" | |
| if (Test-Path $zipPath) { Remove-Item -Force $zipPath } | |
| Compress-Archive -Path (Join-Path $d.FullName '*') -DestinationPath $zipPath -Force | |
| Remove-Item -Recurse -Force $d.FullName | |
| } | |
| } | |
| - uses: actions/upload-artifact@v4 | |
| with: | |
| name: dist-unpack | |
| path: dist/** | |
| release: | |
| needs: [parse, build_win, build_mac, build_linux, build_unpack] | |
| if: ${{ always() && needs.parse.outputs.tag != '' }} | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/download-artifact@v4 | |
| with: | |
| path: artifacts | |
| - name: 清理 unpacked 目录 | |
| run: | | |
| if [ -d artifacts ]; then | |
| find artifacts -type d -name '*unpacked*' -prune -exec rm -rf {} + | |
| fi | |
| - name: 发布 Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: ${{ needs.parse.outputs.tag }} | |
| name: SecScore ${{ needs.parse.outputs.tag }} | |
| draft: True | |
| prerelease: ${{ contains(needs.parse.outputs.version, '-') }} | |
| files: | | |
| artifacts/**/*.zip | |
| artifacts/**/*.dmg | |
| artifacts/**/*.AppImage | |
| artifacts/**/*.deb |