Skip to content

Merge pull request #10 from NanGua-QWQ/dev #26

Merge pull request #10 from NanGua-QWQ/dev

Merge pull request #10 from NanGua-QWQ/dev #26

Workflow file for this run

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