Files
Wino-Mail/.github/workflows/pr-winui-build.yml
T
2026-03-16 12:12:13 +01:00

126 lines
4.2 KiB
YAML

name: PR WinUI Build
on:
pull_request:
types:
- opened
- synchronize
- reopened
- ready_for_review
permissions:
contents: read
packages: read
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
source-url: https://nuget.pkg.github.com/bkaankose/index.json
env:
NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- 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
source-url: https://nuget.pkg.github.com/bkaankose/index.json
env:
NUGET_AUTH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- 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."