From e68bd9286fde0ffb5a938bc43a46829e4d2413ef Mon Sep 17 00:00:00 2001 From: doudou0720 <98651603+doudou0720@users.noreply.github.com> Date: Sat, 28 Mar 2026 20:57:09 +0800 Subject: [PATCH] =?UTF-8?q?feat(ci):=20=E5=88=86=E7=A6=BBPR=E6=A3=80?= =?UTF-8?q?=E6=9F=A5=E5=B7=A5=E4=BD=9C=E6=B5=81=E5=B9=B6=E6=B7=BB=E5=8A=A0?= =?UTF-8?q?=E5=A4=9A=E6=9E=B6=E6=9E=84=E6=9E=84=E5=BB=BA=E6=94=AF=E6=8C=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 将PR检查从主工作流中分离为独立文件,并添加对x86架构的构建支持 Signed-off-by: doudou0720 <98651603+doudou0720@users.noreply.github.com> --- .github/workflows/dotnet-desktop.yml | 24 ++++-- .github/workflows/prcheck.yml | 110 +++++++++++++++++++++++++++ 2 files changed, 126 insertions(+), 8 deletions(-) create mode 100644 .github/workflows/prcheck.yml diff --git a/.github/workflows/dotnet-desktop.yml b/.github/workflows/dotnet-desktop.yml index 7168fe63..d8f76885 100644 --- a/.github/workflows/dotnet-desktop.yml +++ b/.github/workflows/dotnet-desktop.yml @@ -3,11 +3,6 @@ name: .NET Build & Package on: push: branches: [ main, beta ] - pull_request: - types: [opened, synchronize, reopened ] - branches: [ main, beta ] - paths-ignore: - - '**/*.md' workflow_dispatch: concurrency: @@ -21,6 +16,10 @@ jobs: build-and-package: name: Build & Package runs-on: windows-latest + strategy: + fail-fast: false + matrix: + architecture: [AnyCPU, x86] steps: - name: Checkout code uses: actions/checkout@v6 @@ -42,7 +41,7 @@ jobs: - name: Build the Solution env: DLASS_SENTRY_DSN: ${{ secrets.DLASS_SENTRY_DSN }} - run: msbuild /p:platform="AnyCPU" /p:configuration="Debug" /p:GitFlow="$GITFLOW" "Ink Canvas/InkCanvasForClass.csproj" /m /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true /verbosity:minimal -maxcpucount /p:RunAnalyzers=false + run: msbuild /p:platform="${{ matrix.architecture }}" /p:configuration="Debug" /p:GitFlow="$GITFLOW" "Ink Canvas/InkCanvasForClass.csproj" /m /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true /verbosity:minimal -maxcpucount /p:RunAnalyzers=false - name: Check if exe file is generated id: check-exe @@ -70,12 +69,19 @@ jobs: $version = "debug-$shortSha-$env:GITHUB_RUN_NUMBER" echo "archive_name=$version" >> $env:GITHUB_OUTPUT - - name: Upload Artifact (if build succeeded) - if: steps.check-exe.outputs.build_success == 'true' + - name: Upload Artifact(AnyCPU) (if build succeeded) + if: steps.check-exe.outputs.build_success == 'true' and matrix.architecture == 'AnyCPU' uses: actions/upload-artifact@v7 with: name: InkCanvasForClass.CE.debug path: "Ink Canvas/bin/Debug/net472/*" + + - name: Upload Artifact(x86) (if build succeeded) + if: steps.check-exe.outputs.build_success == 'true' and matrix.architecture == 'x86' + uses: actions/upload-artifact@v7 + with: + name: InkCanvasForClass.CE.debug.x86 + path: "Ink Canvas/bin/x86 Debug/net472/*" - name: Create Summary if: always() @@ -90,6 +96,7 @@ jobs: echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY echo "**Version:** ${{ steps.create-archive.outputs.archive_name }}" >> $GITHUB_STEP_SUMMARY + echo "**Architecture:** ${{ matrix.architecture }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "[Download Artifact](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY @@ -99,6 +106,7 @@ jobs: echo "" >> $GITHUB_STEP_SUMMARY echo "**Event:** ${{ github.event_name }} (${{ github.event.action || 'N/A' }})" >> $GITHUB_STEP_SUMMARY echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Architecture:** ${{ matrix.architecture }}" >> $GITHUB_STEP_SUMMARY echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY echo "" >> $GITHUB_STEP_SUMMARY echo "Check build logs for details." >> $GITHUB_STEP_SUMMARY diff --git a/.github/workflows/prcheck.yml b/.github/workflows/prcheck.yml new file mode 100644 index 00000000..e67466cb --- /dev/null +++ b/.github/workflows/prcheck.yml @@ -0,0 +1,110 @@ +name: .NET Build & Package + +on: + pull_request: + types: [opened, synchronize] + branches: [ main, beta ] + paths-ignore: + - '**/*.md' + +concurrency: + group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}-${{ github.head_ref || github.sha }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + build-and-package: + name: Build & Package + runs-on: windows-latest + strategy: + fail-fast: false + matrix: + architecture: [AnyCPU, x86] + steps: + - name: Checkout code + uses: actions/checkout@v6 + with: + fetch-depth: 1 + + - name: Setup MSBuild + uses: microsoft/setup-msbuild@v3 + + - name: Setup dotnet + uses: actions/setup-dotnet@v5 + + - name: Restore Package + run: dotnet restore "Ink Canvas.sln" --locked-mode + + - name: Build the Solution + run: msbuild /p:platform="${{ matrix.architecture }}" /p:configuration="Debug" /p:GitFlow="$GITFLOW" "Ink Canvas/InkCanvasForClass.csproj" /m /p:UseMultiToolTask=true /p:EnforceProcessCountAcrossBuilds=true /verbosity:minimal -maxcpucount /p:RunAnalyzers=false + + - name: Check if exe file is generated + id: check-exe + run: | + $exePath = "Ink Canvas\bin\Debug\net472\InkCanvasForClass.exe" + + if (Test-Path $exePath) { + echo "build_success=true" >> $env:GITHUB_OUTPUT + } else { + echo "build_success=false" >> $env:GITHUB_OUTPUT + + if ("${{ github.event_name }}" -eq "workflow_dispatch") { + exit 1 + } + } + + - name: Create Package (if build succeeded) + id: create-archive + if: steps.check-exe.outputs.build_success == 'true' + env: + GITHUB_SHA: ${{ github.sha }} + GITHUB_RUN_NUMBER: ${{ github.run_number }} + run: | + $shortSha = $env:GITHUB_SHA.Substring(0, 7) + $version = "debug-$shortSha-$env:GITHUB_RUN_NUMBER" + echo "archive_name=$version" >> $env:GITHUB_OUTPUT + + - name: Upload Artifact(AnyCPU) (if build succeeded) + if: steps.check-exe.outputs.build_success == 'true' and matrix.architecture == 'AnyCPU' + uses: actions/upload-artifact@v7 + with: + name: InkCanvasForClass.CE.debug + path: "Ink Canvas/bin/Debug/net472/*" + + - name: Upload Artifact(x86) (if build succeeded) + if: steps.check-exe.outputs.build_success == 'true' and matrix.architecture == 'x86' + uses: actions/upload-artifact@v7 + with: + name: InkCanvasForClass.CE.debug.x86 + path: "Ink Canvas/bin/x86 Debug/net472/*" + + - name: Create Summary + if: always() + shell: bash + run: | + echo "# Build Summary" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + + if [ "${{ steps.check-exe.outputs.build_success }}" = "true" ]; then + echo "## ✅ Build Successful" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY + echo "**Version:** ${{ steps.create-archive.outputs.archive_name }}" >> $GITHUB_STEP_SUMMARY + echo "**Architecture:** ${{ matrix.architecture }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "[Download Artifact](https://github.com/${{ github.repository }}/actions/runs/${{ github.run_id }})" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "[Nightly.link Download](https://nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/InkCanvasForClass.CE.debug.zip) \([GhProxy Fastly Mirror](https://cdn.gh-proxy.com/nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/InkCanvasForClass.CE.debug.zip) / [GhProxy Mirror](https://gh-proxy.com/nightly.link/${{ github.repository }}/actions/runs/${{ github.run_id }}/InkCanvasForClass.CE.debug.zip)\)" >> $GITHUB_STEP_SUMMARY + else + echo "## ❌ Build Failed" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "**Event:** ${{ github.event_name }} (${{ github.event.action || 'N/A' }})" >> $GITHUB_STEP_SUMMARY + echo "**Commit:** \`${{ github.sha }}\`" >> $GITHUB_STEP_SUMMARY + echo "**Architecture:** ${{ matrix.architecture }}" >> $GITHUB_STEP_SUMMARY + echo "**Run:** #${{ github.run_number }}" >> $GITHUB_STEP_SUMMARY + echo "" >> $GITHUB_STEP_SUMMARY + echo "Check build logs for details." >> $GITHUB_STEP_SUMMARY + fi