From d2fce5eee135b395a925c4ea345074af91210e0f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Burak=20Kaan=20K=C3=B6se?= Date: Fri, 27 Feb 2026 14:16:31 +0100 Subject: [PATCH] Add PR GitHub Actions workflow to build WinUI and run Core tests on Windows (#823) --- .github/workflows/pr-winui-build.yml | 115 +++++++++++++++++++++++++++ 1 file changed, 115 insertions(+) create mode 100644 .github/workflows/pr-winui-build.yml diff --git a/.github/workflows/pr-winui-build.yml b/.github/workflows/pr-winui-build.yml new file mode 100644 index 00000000..7d054727 --- /dev/null +++ b/.github/workflows/pr-winui-build.yml @@ -0,0 +1,115 @@ +name: PR WinUI Build + +on: + pull_request: + types: + - opened + - synchronize + - reopened + - ready_for_review + +jobs: + build-winui: + name: Build project (${{ matrix.platform }}) + if: github.event.pull_request.draft == false + runs-on: windows-latest + continue-on-error: ${{ contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.pull_request.author_association) }} + strategy: + fail-fast: false + matrix: + include: + - platform: x86 + rid: win-x86 + - platform: x64 + rid: win-x64 + - platform: ARM64 + rid: win-arm64 + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 10.0.x + + - name: Restore WinUI project dependencies + run: dotnet restore Wino.Mail.WinUI/Wino.Mail.WinUI.csproj --configfile nuget.config -p:Platform=${{ matrix.platform }} -p:RuntimeIdentifier=${{ matrix.rid }} + + - name: Build WinUI project + run: dotnet build Wino.Mail.WinUI/Wino.Mail.WinUI.csproj --configuration Release --no-restore -p:Platform=${{ matrix.platform }} -p:RuntimeIdentifier=${{ matrix.rid }} -p:GenerateAppxPackageOnBuild=false -p:AppxPackageSigningEnabled=false + + core-tests: + name: Run Core tests + if: github.event.pull_request.draft == false + runs-on: windows-latest + continue-on-error: ${{ contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.pull_request.author_association) }} + + steps: + - name: Checkout repository + uses: actions/checkout@v4 + + - name: Setup .NET SDK + uses: actions/setup-dotnet@v4 + with: + dotnet-version: 10.0.x + + - name: Restore Core test projects + shell: pwsh + run: | + $coreTests = Get-ChildItem -Path . -Recurse -Filter "*Core*.Tests.csproj" | ForEach-Object { $_.FullName } + if (-not $coreTests) { + throw "No Core test projects were found." + } + + foreach ($project in $coreTests) { + dotnet restore $project --configfile nuget.config + } + + - name: Run Core test projects + shell: pwsh + run: | + New-Item -ItemType Directory -Path TestResults -Force | Out-Null + $coreTests = Get-ChildItem -Path . -Recurse -Filter "*Core*.Tests.csproj" + if (-not $coreTests) { + throw "No Core test projects were found." + } + + foreach ($project in $coreTests) { + $name = $project.BaseName + dotnet test $project.FullName --configuration Release --no-restore --verbosity normal --logger "trx;LogFileName=$name.trx" --results-directory TestResults + } + + - name: Upload Core test result artifacts + if: always() + uses: actions/upload-artifact@v4 + with: + name: core-test-results + path: TestResults/*.trx + if-no-files-found: warn + + - name: Publish Core test report + if: always() + uses: EnricoMi/publish-unit-test-result-action/windows@v2 + with: + trx_files: TestResults/*.trx + check_name: Core test results + + enforce-for-non-maintainers: + name: Enforce required checks (non-maintainers) + if: github.event.pull_request.draft == false && !contains(fromJSON('["OWNER","MEMBER","COLLABORATOR"]'), github.event.pull_request.author_association) + runs-on: ubuntu-latest + needs: + - build-winui + - core-tests + + steps: + - name: Fail when build or tests fail for non-maintainers + if: needs.build-winui.result != 'success' || needs.core-tests.result != 'success' + run: | + echo "WinUI build and Core tests must pass for non-maintainer pull requests." + exit 1 + + - name: Confirm build and test success for non-maintainers + run: echo "WinUI build and Core tests passed."