Skip to content

The key ring becomes a constant, and its silent failures become build… #105

The key ring becomes a constant, and its silent failures become build…

The key ring becomes a constant, and its silent failures become build… #105

Workflow file for this run

name: CI
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true
permissions:
contents: read
jobs:
discover-changes:
name: Discover Changed Projects
runs-on: ubuntu-latest
outputs:
projects: ${{ steps.filter.outputs.changes }}
steps:
- uses: actions/checkout@v4
- name: Paths filter
id: filter
uses: dorny/paths-filter@v3.0.2
with:
list-files: json
filters: |
OutWit.Common:
- 'Common/**'
OutWit.Common.Aspects:
- 'Aspects/**'
- 'Common/**'
OutWit.Common.CommandLine:
- 'CommandLine/**'
OutWit.Common.Logging:
- 'Logging/OutWit.Common.Logging/**'
- 'Logging/OutWit.Common.Logging.Tests/**'
- 'Logging/OutWit.Common.Logging.Abstractions/**'
- 'Aspects/**'
OutWit.Common.Logging.Abstractions:
- 'Logging/OutWit.Common.Logging.Abstractions/**'
OutWit.Common.Rest:
- 'Rest/**'
- 'Common/**'
OutWit.Common.Reflection:
- 'Reflection/**'
OutWit.Common.Proxy:
- 'Proxy/OutWit.Common.Proxy/**'
- 'Proxy/OutWit.Common.Proxy.Tests/**'
- 'Common/**'
OutWit.Common.Proxy.Generator:
- 'Proxy/OutWit.Common.Proxy.Generator/**'
- 'Proxy/OutWit.Common.Proxy.Generator.Tests/**'
- 'Proxy/OutWit.Common.Proxy/**'
OutWit.Common.Json:
- 'Serialization/Json/**'
- 'Aspects/**'
OutWit.Common.MemoryPack:
- 'Serialization/MemoryPack/**'
- 'Aspects/**'
OutWit.Common.MessagePack:
- 'Serialization/MessagePack/**'
- 'Aspects/**'
OutWit.Common.ProtoBuf:
- 'Serialization/ProtoBuf/**'
- 'Aspects/**'
OutWit.Common.MVVM:
- 'MVVM/OutWit.Common.MVVM/**'
- 'MVVM/OutWit.Common.MVVM.Tests/**'
OutWit.Common.MVVM.WPF:
- 'MVVM/OutWit.Common.MVVM.WPF/**'
- 'MVVM/OutWit.Common.MVVM.WPF.Tests/**'
- 'MVVM/OutWit.Common.MVVM.WPF.Generator/**'
- 'MVVM/OutWit.Common.MVVM/**'
OutWit.Common.MVVM.WPF.Generator:
- 'MVVM/OutWit.Common.MVVM.WPF.Generator/**'
OutWit.Common.MVVM.Avalonia:
- 'MVVM/OutWit.Common.MVVM.Avalonia/**'
- 'MVVM/OutWit.Common.MVVM.Avalonia.Tests/**'
- 'MVVM/OutWit.Common.MVVM.Avalonia.Generator/**'
- 'MVVM/OutWit.Common.MVVM/**'
OutWit.Common.MVVM.Avalonia.Generator:
- 'MVVM/OutWit.Common.MVVM.Avalonia.Generator/**'
OutWit.Common.MVVM.Blazor:
- 'MVVM/OutWit.Common.MVVM.Blazor/**'
- 'MVVM/OutWit.Common.MVVM.Blazor.Tests/**'
- 'MVVM/OutWit.Common.MVVM/**'
OutWit.Common.NUnit:
- 'NUnit/OutWit.Common.NUnit/**'
OutWit.Common.Platform:
- 'Platform/**'
OutWit.Common.Licensing:
- 'Licensing/**'
- 'Platform/**'
- 'Common/**'
OutWit.Common.Plugins:
- 'Plugins/OutWit.Common.Plugins/**'
- 'Plugins/OutWit.Common.Plugins.Tests/**'
- 'Plugins/OutWit.Common.Plugins.Tests.Mock.*/**'
- 'Plugins/OutWit.Common.Plugins.Abstractions/**'
OutWit.Common.Settings:
- 'Settings/OutWit.Common.Settings/**'
- 'Settings/OutWit.Common.Settings.Tests/**'
OutWit.Common.Settings.Json:
- 'Settings/Json/OutWit.Common.Settings.Json/**'
- 'Settings/Json/OutWit.Common.Settings.Json.Tests/**'
- 'Settings/OutWit.Common.Settings/**'
OutWit.Common.Settings.Csv:
- 'Settings/Csv/OutWit.Common.Settings.Csv/**'
- 'Settings/Csv/OutWit.Common.Settings.Csv.Tests/**'
- 'Settings/OutWit.Common.Settings/**'
OutWit.Common.Settings.Database:
- 'Settings/Database/OutWit.Common.Settings.Database/**'
- 'Settings/Database/OutWit.Common.Settings.Database.Tests/**'
- 'Settings/OutWit.Common.Settings/**'
OutWit.Common.Configuration:
- 'Configuration/**'
OutWit.Common.DependencyInjection:
- 'DependencyInjection/OutWit.Common.DependencyInjection/**'
- 'DependencyInjection/OutWit.Common.DependencyInjection.Tests/**'
- 'DependencyInjection/OutWit.Common.DependencyInjection.Generator/**'
OutWit.Common.DependencyInjection.Generator:
- 'DependencyInjection/OutWit.Common.DependencyInjection.Generator/**'
OutWit.Common.Email:
- 'Email/**'
OutWit.Common.Messenger:
- 'Messenger/**'
OutWit.Common.Logging.Query:
- 'Logging/OutWit.Common.Logging.Query/**'
- 'Logging/OutWit.Common.Logging.Query.Tests/**'
- 'Serialization/MemoryPack/**'
OutWit.Common.Logging.NewRelic:
- 'Logging/OutWit.Common.Logging.NewRelic/**'
- 'Logging/OutWit.Common.Logging.NewRelic.Tests/**'
- 'Logging/OutWit.Common.Logging.Query/**'
- 'Rest/**'
- 'Serialization/MemoryPack/**'
OutWit.Common.Logging.Loki:
- 'Logging/OutWit.Common.Logging.Loki/**'
- 'Logging/OutWit.Common.Logging.Loki.Tests/**'
- 'Logging/OutWit.Common.Logging.Query/**'
run-tests:
name: Test ${{ matrix.project }}
needs: discover-changes
if: needs.discover-changes.outputs.projects != '[]'
runs-on: windows-latest
strategy:
fail-fast: false
matrix:
project: ${{ fromJson(needs.discover-changes.outputs.projects) }}
steps:
- uses: actions/checkout@v4
- name: Setup .NET SDKs (6/7/8/9/10)
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
6.0.x
7.0.x
8.0.x
9.0.x
10.0.x
- name: Cache NuGet
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('**/*.slnx', '**/*.csproj') }}
restore-keys: |
nuget-${{ runner.os }}-
- name: Restore
run: dotnet restore OutWit.slnx
- name: Resolve test project path
id: paths
shell: pwsh
run: |
$projName = '${{ matrix.project }}'
$test = Get-ChildItem -Recurse -Filter "$projName.Tests.csproj" | Select-Object -Expand FullName -First 1
if (!$test) {
Write-Host "No test project for $projName � skipping tests."
"hasTests=false" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
} else {
"hasTests=true" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
"testCsproj=$test" | Out-File -FilePath $env:GITHUB_OUTPUT -Append
}
- name: Run tests
if: steps.paths.outputs.hasTests == 'true'
run: dotnet test "${{ steps.paths.outputs.testCsproj }}" --configuration Release --no-restore
# Cross-OS coverage for OutWit.Common.Platform. The package's whole point is
# to expose per-OS probes (Windows / Linux / macOS / Android); the only way
# to know the Linux and macOS code paths are still healthy is to actually
# run them on Linux and macOS runners. Windows is already covered by
# `run-tests` above, so this matrix just adds the other two.
run-platform-multi-os:
name: Platform on ${{ matrix.os }}
needs: discover-changes
if: contains(fromJson(needs.discover-changes.outputs.projects), 'OutWit.Common.Platform')
runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
steps:
- uses: actions/checkout@v4
- name: Setup .NET SDKs (6/7/8/9/10)
uses: actions/setup-dotnet@v4
with:
dotnet-version: |
6.0.x
7.0.x
8.0.x
9.0.x
10.0.x
- name: Cache NuGet
uses: actions/cache@v4
with:
path: ~/.nuget/packages
key: nuget-${{ runner.os }}-${{ hashFiles('Platform/**/*.csproj') }}
restore-keys: |
nuget-${{ runner.os }}-
- name: Restore
run: dotnet restore Platform/OutWit.Common.Platform.Tests/OutWit.Common.Platform.Tests.csproj
- name: Run tests
run: dotnet test Platform/OutWit.Common.Platform.Tests/OutWit.Common.Platform.Tests.csproj --configuration Release --no-restore