Support for scenario-level parallel execution #624
Workflow file for this run
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
name: CI | |
on: | |
push: | |
branches: | |
- 'main' | |
paths-ignore: | |
- 'docs/**' | |
- README.md | |
- CHANGELOG.md | |
pull_request: | |
branches: [ "main" ] | |
workflow_dispatch: | |
inputs: | |
configuration: | |
description: 'Build Configuration' | |
required: true | |
default: 'Debug' | |
type: choice | |
options: | |
- Debug | |
- Release | |
production_release: | |
description: 'If the build produces a production package' | |
type: boolean | |
default: false | |
required: true | |
version_suffix: | |
description: 'Suffix for the NuGet packages (without leading -). Build ID will be appended. Use "-" to force empty.' | |
required: false | |
specs_filter: | |
description: 'Filter for Specs execution (e.g. Category=basicExecution)' | |
required: false | |
permissions: | |
checks: write | |
env: | |
SPECS_FILTER: "" # use for testing CI: "&Category=basicExecution" | |
REQNROLL_TEST_PIPELINEMODE: true | |
jobs: | |
build: | |
runs-on: ubuntu-latest | |
outputs: | |
product_version_suffix: ${{ steps.versions.outputs.product_version_suffix }} | |
product_configuration: ${{ steps.versions.outputs.product_configuration }} | |
build_params: ${{ steps.versions.outputs.build_params }} | |
test_params: ${{ steps.versions.outputs.test_params }} | |
specs_filter: ${{ steps.versions.outputs.specs_filter }} | |
gh_logger_settings: ${{ steps.versions.outputs.gh_logger_settings }} | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- id: versions | |
name: Calculate versions | |
shell: pwsh | |
env: | |
APPINSIGHTS_KEY: ${{ secrets.APPINSIGHTS_KEY }} | |
run: | | |
$productionReleaseSetting = "${{ inputs.production_release }}" | |
$productionRelease = $false | |
if ($productionReleaseSetting -eq 'true') { | |
$productionRelease = $true | |
} | |
Write-Output "Production release: $productionRelease" | |
$versionSuffix = "${{ inputs.version_suffix }}" | |
if ($versionSuffix -eq "") { | |
$date = [datetime]::Today | |
$dateString = $date.ToString('yyyyMMdd') | |
$versionSuffix = "ci$dateString-${env:GITHUB_RUN_NUMBER}" | |
} | |
elseif ($versionSuffix -eq "-") { | |
$versionSuffix = "" | |
} | |
else { | |
$versionSuffix = "$versionSuffix-${env:GITHUB_RUN_NUMBER}" | |
} | |
Write-Output "product_version_suffix=$versionSuffix" >> $env:GITHUB_OUTPUT | |
Write-Output "Product Suffix: $versionSuffix" | |
$productConfig = "${{ inputs.configuration }}" | |
if ($productConfig -eq "") { | |
$productConfig = "Debug" | |
} | |
Write-Output "product_configuration=$productConfig" >> $env:GITHUB_OUTPUT | |
Write-Output "Product Configuration: $productConfig" | |
$specsFilter = "${{ inputs.specs_filter }}" | |
if ($specsFilter -ne "") { | |
$specsFilter = "&$specsFilter" | |
} | |
else { | |
$specsFilter = $env:SPECS_FILTER | |
} | |
Write-Output "specs_filter=$specsFilter" >> $env:GITHUB_OUTPUT | |
Write-Output "Specs Filter: $specsFilter" | |
$buildParams = "-p:VersionSuffix=$versionSuffix -c $productConfig" | |
Write-Output "build_params=$buildParams" >> $env:GITHUB_OUTPUT | |
Write-Output "Build Params: $buildParams" | |
$mainBuildParams = $buildParams | |
if ($productionRelease) { | |
$mainBuildParams = "$mainBuildParams -p:AppInsightsInstrumentationKey=$env:APPINSIGHTS_KEY" | |
Write-Output "Main Build Params Updated for Production" | |
} | |
Write-Output "main_build_params=$mainBuildParams" >> $env:GITHUB_OUTPUT | |
$gitHubActionsLoggerSettings = '"GitHubActions;summary.includePassedTests=true;summary.includeSkippedTests=true;annotations.titleFormat=[@traits.Category] @test;annotations.messageFormat=@error\n@trace"' | |
$testParams = "--no-build --verbosity normal -c $productConfig --logger $gitHubActionsLoggerSettings -- RunConfiguration.CollectSourceInformation=true RunConfiguration.TreatNoTestsAsError=true" | |
Write-Output "test_params=$testParams" >> $env:GITHUB_OUTPUT | |
Write-Output "Test Params: $testParams" | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Install Test Report Dependencies | |
run: | | |
dotnet add ./Tests/Reqnroll.RuntimeTests/Reqnroll.RuntimeTests.csproj package GitHubActionsTestLogger | |
dotnet add ./Tests/Reqnroll.PluginTests/Reqnroll.PluginTests.csproj package GitHubActionsTestLogger | |
dotnet add ./Tests/Reqnroll.GeneratorTests/Reqnroll.GeneratorTests.csproj package GitHubActionsTestLogger | |
- name: Build | |
run: dotnet build --no-restore ${{ steps.versions.outputs.main_build_params }} | |
- name: Runtime Tests | |
run: dotnet test ./Tests/Reqnroll.RuntimeTests/Reqnroll.RuntimeTests.csproj --logger "trx;LogFileName=runtimetests-results.trx" ${{ steps.versions.outputs.test_params }} | |
- name: Generator Tests | |
run: dotnet test ./Tests/Reqnroll.GeneratorTests/Reqnroll.GeneratorTests.csproj --logger "trx;LogFileName=generatortests-results.trx" ${{ steps.versions.outputs.test_params }} | |
- name: Plugin Tests | |
run: dotnet test ./Tests/Reqnroll.PluginTests/Reqnroll.PluginTests.csproj --logger "trx;LogFileName=plugintests-results.trx" ${{ steps.versions.outputs.test_params }} | |
- name: Upload packages | |
uses: actions/upload-artifact@v4 | |
with: | |
name: packages | |
path: "GeneratedNuGetPackages/**/*.*nupkg" | |
- name: Upload TRX files | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: build-trx | |
path: "**/*.trx" | |
specs: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Install Test Report Dependencies | |
run: | | |
dotnet add ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj package GitHubActionsTestLogger | |
- name: Build | |
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }} | |
- name: Specs | |
shell: pwsh | |
run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj --filter "Category!=quarantaine{{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-results.trx" ${{ needs.build.outputs.test_params }} | |
- name: Upload TRX files | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: specs-trx | |
path: "**/specs-results.trx" | |
system-tests-windows: | |
runs-on: windows-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: .NET Information | |
run: | | |
dotnet --list-sdks | |
dotnet --list-runtimes | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Install Test Report Dependencies | |
run: | | |
dotnet add ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj package GitHubActionsTestLogger | |
- name: Build | |
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }} | |
- name: System Tests | |
shell: pwsh | |
run: dotnet test ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj --logger "trx;LogFileName=systemtests-windows-results.trx" ${{ needs.build.outputs.test_params }} | |
- name: Upload Test Result TRX Files | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: systemtests-windows-trx | |
path: "**/*.trx" | |
system-tests-linux: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v4 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: .NET Information | |
run: | | |
dotnet --list-sdks | |
dotnet --list-runtimes | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Install Test Report Dependencies | |
run: | | |
dotnet add ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj package GitHubActionsTestLogger | |
- name: Build | |
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }} | |
- name: System Tests | |
shell: pwsh | |
run: dotnet test ./Tests/Reqnroll.SystemTests/Reqnroll.SystemTests.csproj --filter "TestCategory!=MsBuild&TestCategory!=Net481" --logger "trx;LogFileName=systemtests-linux-results.trx" ${{ needs.build.outputs.test_params }} | |
- name: Upload Test Result TRX Files | |
uses: actions/upload-artifact@v4 | |
if: always() | |
with: | |
name: systemtests-linux-trx | |
path: "**/*.trx" | |