Merge pull request #20 from ClearMeasureLabs/claude/stupefied-bouman #28
This file contains hidden or 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: Build and Publish | |
| on: | |
| push: | |
| branches: [ main, develop ] | |
| pull_request: | |
| branches: [ main, develop ] | |
| release: | |
| types: [ published ] | |
| workflow_dispatch: | |
| env: | |
| DOTNET_VERSION: '10.0.x' | |
| DOTNET_SKIP_FIRST_TIME_EXPERIENCE: 1 | |
| DOTNET_NOLOGO: true | |
| DOTNET_CLI_TELEMETRY_OPTOUT: 1 | |
| jobs: | |
| build: | |
| name: Build and Test | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout code | |
| uses: actions/checkout@v4 | |
| with: | |
| fetch-depth: 0 # Full history for versioning | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_VERSION }} | |
| - name: Display .NET version | |
| run: dotnet --version | |
| - name: Build solution | |
| run: | | |
| cd src | |
| .\build.ps1 -Configuration Release -SkipTests | |
| shell: pwsh | |
| - name: Run tests with coverage | |
| run: | | |
| cd src | |
| .\build.ps1 -Configuration Release -TestOnly -EnableCodeCoverage -GenerateTestReport | |
| shell: pwsh | |
| - name: Upload test results | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: test-results | |
| path: src/TestResults/**/* | |
| retention-days: 30 | |
| - name: Upload code coverage | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: code-coverage | |
| path: src/TestResults/Coverage/**/* | |
| retention-days: 30 | |
| - name: Publish test results | |
| if: always() | |
| uses: EnricoMi/publish-unit-test-result-action/windows@v2 | |
| with: | |
| files: src/TestResults/**/*.trx | |
| check_name: Test Results | |
| comment_mode: off | |
| - name: Code Coverage Report | |
| if: always() | |
| uses: danielpalme/[email protected] | |
| with: | |
| reports: 'src/TestResults/Coverage/coverage.cobertura.xml' | |
| targetdir: 'src/TestResults/CoverageReport' | |
| reporttypes: 'MarkdownSummaryGithub;Html' | |
| filefilters: '-*.g.cs' | |
| verbosity: 'Info' | |
| - name: Write Coverage Summary to Job Summary | |
| if: always() | |
| run: | | |
| if (Test-Path src/TestResults/CoverageReport/SummaryGithub.md) { | |
| Get-Content src/TestResults/CoverageReport/SummaryGithub.md >> $env:GITHUB_STEP_SUMMARY | |
| } | |
| shell: pwsh | |
| - name: Add Coverage PR Comment | |
| if: github.event_name == 'pull_request' && always() | |
| uses: marocchino/sticky-pull-request-comment@v2 | |
| with: | |
| recreate: true | |
| path: src/TestResults/CoverageReport/SummaryGithub.md | |
| - name: Create NuGet packages | |
| if: github.event_name == 'push' || github.event_name == 'release' || github.event_name == 'workflow_dispatch' | |
| run: | | |
| cd src | |
| $version = "1.0.${{ github.run_number }}" | |
| Write-Host "Creating packages with version: $version" | |
| .\build.ps1 -Configuration Release -PackOnly -PackageOutputPath "${{ github.workspace }}/packages" -Version $version | |
| shell: pwsh | |
| - name: Upload NuGet packages | |
| if: github.event_name == 'push' || github.event_name == 'release' || github.event_name == 'workflow_dispatch' | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: nuget-packages | |
| path: packages/**/*.nupkg | |
| retention-days: 90 | |
| publish: | |
| name: Publish to NuGet.org | |
| runs-on: windows-latest | |
| needs: build | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' || github.event_name == 'release' | |
| steps: | |
| - name: Download NuGet packages | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: nuget-packages | |
| path: packages | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_VERSION }} | |
| - name: Publish to NuGet.org | |
| run: | | |
| $hasError = $false | |
| Get-ChildItem -Path packages -Filter *.nupkg -Recurse | Where-Object { $_.Name -notlike "*.symbols.nupkg" } | ForEach-Object { | |
| Write-Host "Publishing $($_.Name)..." | |
| dotnet nuget push $_.FullName --api-key ${{ secrets.NUGET_API_KEY }} --source "https://api.nuget.org/v3/index.json" --skip-duplicate | |
| if ($LASTEXITCODE -ne 0) { | |
| $hasError = $true | |
| Write-Error "Failed to publish $($_.Name)" | |
| } | |
| } | |
| if ($hasError) { | |
| Write-Error "One or more packages failed to publish." | |
| exit 1 | |
| } | |
| shell: pwsh | |
| - name: Publish Summary | |
| run: | | |
| $packages = Get-ChildItem -Path packages -Filter *.nupkg -Recurse | Where-Object { $_.Name -notlike "*.symbols.nupkg" } | |
| Write-Output "## Published Packages" >> $env:GITHUB_STEP_SUMMARY | |
| Write-Output "" >> $env:GITHUB_STEP_SUMMARY | |
| Write-Output "| Package | Version |" >> $env:GITHUB_STEP_SUMMARY | |
| Write-Output "|---------|---------|" >> $env:GITHUB_STEP_SUMMARY | |
| foreach ($pkg in $packages) { | |
| $name = $pkg.BaseName -replace '\.\d+\.\d+\.\d+.*$', '' | |
| $version = $pkg.BaseName -replace '^.*?(\d+\.\d+\.\d+.*)$', '$1' | |
| Write-Output "| $name | $version |" >> $env:GITHUB_STEP_SUMMARY | |
| } | |
| shell: pwsh | |
| publish-release: | |
| name: Publish Release to NuGet.org | |
| runs-on: windows-latest | |
| needs: build | |
| if: github.event_name == 'release' | |
| steps: | |
| - name: Download NuGet packages | |
| uses: actions/download-artifact@v4 | |
| with: | |
| name: nuget-packages | |
| path: packages | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v4 | |
| with: | |
| dotnet-version: ${{ env.DOTNET_VERSION }} | |
| - name: Publish to NuGet.org | |
| run: | | |
| $hasError = $false | |
| Get-ChildItem -Path packages -Filter *.nupkg -Recurse | Where-Object { $_.Name -notlike "*.symbols.nupkg" } | ForEach-Object { | |
| Write-Host "Publishing release package $($_.Name)..." | |
| dotnet nuget push $_.FullName --api-key ${{ secrets.NUGET_API_KEY }} --source "https://api.nuget.org/v3/index.json" --skip-duplicate | |
| if ($LASTEXITCODE -ne 0) { | |
| $hasError = $true | |
| Write-Error "Failed to publish $($_.Name)" | |
| } | |
| } | |
| if ($hasError) { | |
| Write-Error "One or more packages failed to publish." | |
| exit 1 | |
| } | |
| shell: pwsh | |
| - name: Upload packages to release | |
| uses: softprops/action-gh-release@v1 | |
| with: | |
| files: packages/**/*.nupkg | |
| env: | |
| GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} |