CI #52
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" ] | |
pull_request: | |
branches: [ "main" ] | |
workflow_dispatch: | |
inputs: | |
configuration: | |
description: 'Build Configuration' | |
required: true | |
default: 'Debug' | |
type: choice | |
options: | |
- Debug | |
- Release | |
version_suffix: | |
description: 'Suffix for the NuGet packages (without leading -). Build ID will be appended.' | |
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" | |
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 }} | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: 8.0.x | |
- id: versions | |
name: Calculate versions | |
shell: pwsh | |
run: | | |
$versionSuffix = "${{ inputs.version_suffix }}" | |
if ($versionSuffix -eq "") { | |
$date = [datetime]::Today | |
$dateString = $date.ToString('yyyyMMdd') | |
$versionSuffix = "ci$dateString-${env:GITHUB_RUN_NUMBER}" | |
} | |
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 = $envSPECS_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" | |
$testParams = "--no-build --verbosity normal -c $productConfig" | |
Write-Output "test_params=$testParams" >> $env:GITHUB_OUTPUT | |
Write-Output "Test Params: $testParams" | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore ${{ steps.versions.outputs.build_params }} | |
- name: Runtime Tests | |
run: dotnet test ./Tests/Reqnroll.RuntimeTests/Reqnroll.RuntimeTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0 | |
- name: Plugin Tests | |
run: dotnet test ./Tests/Reqnroll.PluginTests/Reqnroll.PluginTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0 | |
- name: Generator Tests | |
run: dotnet test ./Tests/Reqnroll.GeneratorTests/Reqnroll.GeneratorTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0 | |
- name: ExternalData Plugin Tests | |
run: dotnet test ./Plugins/Reqnroll.ExternalData/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests/Reqnroll.ExternalData.ReqnrollPlugin.UnitTests.csproj ${{ steps.versions.outputs.test_params }} -f net6.0 | |
- name: Upload packages | |
uses: actions/upload-artifact@v3 | |
with: | |
name: packages | |
path: "GeneratedNuGetPackages/**/*.nupkg" | |
specs-xunit: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: | | |
6.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }} | |
- name: Set .NET 6 SDK | |
run: dotnet new globaljson --sdk-version 6.0.418 | |
- name: xUnit Specs | |
shell: pwsh | |
run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj ${{ needs.build.outputs.test_params }} -f net6.0 --filter "Category=xUnit&Category=Net60&Category!=requiresMsBuild${{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-xunit-results.trx" | |
- uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: specs-results | |
path: "**/specs-xunit-results.trx" | |
- name: Test Report | |
uses: dorny/test-reporter@v1 | |
if: success() || failure() | |
with: | |
name: xUnit Specs | |
path: "**/specs-xunit-results.trx" | |
reporter: dotnet-trx | |
specs-nunit: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: | | |
6.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }} | |
- name: Set .NET 6 SDK | |
run: dotnet new globaljson --sdk-version 6.0.418 | |
- name: NUnit Specs | |
shell: pwsh | |
run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj ${{ needs.build.outputs.test_params }} -f net6.0 --filter "Category=NUnit3&Category=Net60&Category!=requiresMsBuild${{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-nunit-results.trx" | |
- uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: specs-results | |
path: "**/specs-nunit-results.trx" | |
- name: Test Report | |
uses: dorny/test-reporter@v1 | |
if: success() || failure() | |
with: | |
name: NUnit Specs | |
path: "**/specs-nunit-results.trx" | |
reporter: dotnet-trx | |
specs-mstest: | |
runs-on: ubuntu-latest | |
needs: build | |
steps: | |
- uses: actions/checkout@v3 | |
with: | |
fetch-depth: 0 # avoid shallow clone so nbgv can do its work. | |
- name: Setup .NET | |
uses: actions/setup-dotnet@v3 | |
with: | |
dotnet-version: | | |
6.0.x | |
- name: Restore dependencies | |
run: dotnet restore | |
- name: Build | |
run: dotnet build --no-restore ${{ needs.build.outputs.build_params }} | |
- name: Set .NET 6 SDK | |
run: dotnet new globaljson --sdk-version 6.0.418 | |
- name: MsTest Specs | |
shell: pwsh | |
run: dotnet test ./Tests/Reqnroll.Specs/Reqnroll.Specs.csproj ${{ needs.build.outputs.test_params }} -f net6.0 --filter "Category=MsTest&Category=Net60&Category!=requiresMsBuild${{ needs.build.outputs.specs_filter }}" --logger "trx;LogFileName=specs-mstest-results.trx" | |
- uses: actions/upload-artifact@v3 | |
if: success() || failure() | |
with: | |
name: specs-results | |
path: "**/specs-mstest-results.trx" | |
- name: Test Report | |
uses: dorny/test-reporter@v1 | |
if: success() || failure() | |
with: | |
name: MsTest Specs | |
path: "**/specs-mstest-results.trx" | |
reporter: dotnet-trx | |