Add PR GitHub Actions workflow to build WinUI and run Core tests on Windows (#823)
This commit is contained in:
@@ -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."
|
||||
Reference in New Issue
Block a user