chore: Migrate to Central Package Management (CPM) #548
Workflow file for this run
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: CI | |
| on: | |
| push: | |
| branches: [ main ] | |
| pull_request: | |
| branches: [ main ] | |
| workflow_dispatch: | |
| inputs: | |
| reason: | |
| description: 'Reason' | |
| required: false | |
| default: 'Manual run' | |
| env: | |
| DOTNET_NOLOGO: true | |
| INCLUDE_SYMBOLS: true | |
| jobs: | |
| pr-checks: | |
| if: github.event_name == 'pull_request' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: read | |
| pull-requests: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: | | |
| 8.0.x | |
| 9.0.x | |
| 10.0.x | |
| - name: Restore | |
| run: | | |
| dotnet restore JD.Efcpt.Build.sln --use-lock-file | |
| dotnet tool restore | |
| - name: Install efcpt global tool | |
| run: | | |
| dotnet tool install -g erikej.efcorepowertools.cli --version 10.1.1055 | |
| echo "${HOME}/.dotnet/tools" >> $GITHUB_PATH | |
| - name: Build (Release) | |
| run: dotnet build JD.Efcpt.Build.sln --configuration Release --no-restore /p:ContinuousIntegrationBuild=true | |
| - name: Ensure Samples restored | |
| run: | | |
| dotnet restore tests/TestAssets/SampleDatabase/Sample.Database.sqlproj | |
| dotnet restore tests/TestAssets/SampleApp/Sample.App.csproj | |
| - name: Ensure Samples build | |
| run: | | |
| dotnet build --configuration Release tests/TestAssets/SampleDatabase/Sample.Database.sqlproj | |
| dotnet build --configuration Release tests/TestAssets/SampleApp/Sample.App.csproj | |
| - name: Test with coverage | |
| run: | | |
| dotnet test JD.Efcpt.Build.sln \ | |
| --configuration Release \ | |
| --no-build \ | |
| /p:EfcptToolMode=tool-manifest \ | |
| --collect:"XPlat Code Coverage" \ | |
| -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura \ | |
| -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[JD.Efcpt.Build*]*" \ | |
| -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude="[*Tests]*" | |
| - name: Install ReportGenerator | |
| run: dotnet tool update -g dotnet-reportgenerator-globaltool | |
| - name: Combine coverage and create reports | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| REPORTS=$(find . -type f -path "*/TestResults/*/coverage.cobertura.xml" | tr '\n' ';') | |
| if [ -z "$REPORTS" ]; then | |
| echo "No coverage reports found" >&2 | |
| exit 1 | |
| fi | |
| reportgenerator \ | |
| -reports:"$REPORTS" \ | |
| -targetdir:"coverage-report" \ | |
| -reporttypes:"HtmlInline;Cobertura;TextSummary;lcov;Badges" \ | |
| -assemblyfilters:"+JD.Efcpt.Build*;-*Tests*" \ | |
| -filefilters:"-**/*.Tests/*;-**/*Tests*/**" | |
| echo "COVERAGE_SUMMARY<<EOF" >> $GITHUB_ENV | |
| cat coverage-report/Summary.txt >> $GITHUB_ENV | |
| echo "EOF" >> $GITHUB_ENV | |
| - name: Upload coverage HTML report | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: coverage-report | |
| path: coverage-report | |
| - name: Add coverage summary to PR | |
| uses: marocchino/sticky-pull-request-comment@v3 | |
| with: | |
| recreate: true | |
| message: | | |
| ## Code Coverage | |
| ``` | |
| ${{ env.COVERAGE_SUMMARY }} | |
| ``` | |
| - name: Upload coverage to Codecov | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: | | |
| **/TestResults/*/coverage.cobertura.xml | |
| flags: unittests | |
| fail_ci_if_error: true | |
| verbose: true | |
| env: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| release: | |
| if: github.event_name == 'push' && github.ref == 'refs/heads/main' | |
| runs-on: ubuntu-latest | |
| permissions: | |
| contents: write | |
| packages: write | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup .NET | |
| uses: actions/setup-dotnet@v5 | |
| with: | |
| dotnet-version: | | |
| 8.0.x | |
| 9.0.x | |
| 10.0.x | |
| - name: Restore | |
| run: | | |
| dotnet restore JD.Efcpt.Build.sln --use-lock-file | |
| dotnet tool restore | |
| - name: Install efcpt global tool | |
| run: | | |
| dotnet tool install -g erikej.efcorepowertools.cli --version 10.1.1055 | |
| echo "${HOME}/.dotnet/tools" >> $GITHUB_PATH | |
| - name: Fetch tags | |
| run: git fetch --prune --tags | |
| - name: Install GitVersion | |
| uses: gittools/actions/gitversion/setup@v4 | |
| with: | |
| versionSpec: '6.x' | |
| - name: Run GitVersion | |
| id: gitversion | |
| uses: gittools/actions/gitversion/execute@v4 | |
| - name: Set version env vars | |
| run: | | |
| echo "PACKAGE_VERSION=${{ steps.gitversion.outputs.semVer }}" >> $GITHUB_ENV | |
| echo "ASSEMBLY_VERSION=${{ steps.gitversion.outputs.assemblySemVer }}" >> $GITHUB_ENV | |
| echo "FILE_VERSION=${{ steps.gitversion.outputs.assemblySemFileVer }}" >> $GITHUB_ENV | |
| - name: Replace version placeholders in documentation | |
| shell: pwsh | |
| run: | | |
| ./build/replace-version.ps1 -Version "${{ env.PACKAGE_VERSION }}" -Path "." | |
| - name: Build (Release) | |
| run: > | |
| dotnet build JD.Efcpt.Build.sln | |
| --configuration Release | |
| --no-restore | |
| /p:ContinuousIntegrationBuild=true | |
| /p:Version=${{ env.PACKAGE_VERSION }} | |
| /p:AssemblyVersion=${{ env.ASSEMBLY_VERSION }} | |
| /p:FileVersion=${{ env.FILE_VERSION }} | |
| /p:PackageVersion=${{ env.PACKAGE_VERSION }} | |
| - name: Ensure SampleDatabase restored (Release) | |
| run: | | |
| dotnet restore tests/TestAssets/SampleDatabase/Sample.Database.sqlproj | |
| - name: Test with coverage (Release) | |
| run: | | |
| dotnet test JD.Efcpt.Build.sln \ | |
| --configuration Release \ | |
| --no-build \ | |
| /p:EfcptToolMode=tool-manifest \ | |
| --collect:"XPlat Code Coverage" \ | |
| -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Format=cobertura \ | |
| -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Include="[JD.Efcpt.Build*]*" \ | |
| -- DataCollectionRunSettings.DataCollectors.DataCollector.Configuration.Exclude="[*Tests]*" | |
| - name: Pack (all packable projects) | |
| run: > | |
| dotnet pack JD.Efcpt.Build.sln | |
| --configuration Release | |
| --no-build | |
| --output ./artifacts | |
| /p:ContinuousIntegrationBuild=true | |
| /p:IncludeSymbols=${{ env.INCLUDE_SYMBOLS }} | |
| /p:Version=${{ env.PACKAGE_VERSION }} | |
| /p:AssemblyVersion=${{ env.ASSEMBLY_VERSION }} | |
| /p:FileVersion=${{ env.FILE_VERSION }} | |
| /p:PackageVersion=${{ env.PACKAGE_VERSION }} | |
| - name: Upload packages as artifact | |
| uses: actions/upload-artifact@v7 | |
| with: | |
| name: nuget-packages | |
| path: | | |
| ./artifacts/*.nupkg | |
| ./artifacts/*.snupkg | |
| - name: Upload coverage to Codecov (Release) | |
| uses: codecov/codecov-action@v5 | |
| with: | |
| files: | | |
| **/TestResults/*/coverage.cobertura.xml | |
| flags: unittests | |
| fail_ci_if_error: false | |
| verbose: true | |
| env: | |
| CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | |
| - name: Create and push git tag | |
| shell: bash | |
| run: | | |
| set -euo pipefail | |
| git config user.name "github-actions" | |
| git config user.email "github-actions@github.com" | |
| if git rev-parse "v${PACKAGE_VERSION}" >/dev/null 2>&1; then | |
| echo "Tag v${PACKAGE_VERSION} already exists. Skipping tag push." | |
| else | |
| git tag "v${PACKAGE_VERSION}" | |
| git push origin "v${PACKAGE_VERSION}" | |
| fi | |
| - name: Create GitHub Release | |
| uses: softprops/action-gh-release@v2 | |
| with: | |
| tag_name: v${{ env.PACKAGE_VERSION }} | |
| name: Release v${{ env.PACKAGE_VERSION }} | |
| files: | | |
| ./artifacts/*.nupkg | |
| ./artifacts/*.snupkg | |
| generate_release_notes: true | |
| - name: Push to NuGet.org | |
| env: | |
| NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} | |
| run: | | |
| if [ -n "$NUGET_API_KEY" ]; then | |
| dotnet nuget push ./artifacts/*.nupkg \ | |
| --api-key "$NUGET_API_KEY" \ | |
| --source https://api.nuget.org/v3/index.json \ | |
| --skip-duplicate | |
| else | |
| echo "Skipping NuGet.org push: API key not set." | |
| fi | |
| - name: Push to GitHub Packages (optional) | |
| run: | | |
| dotnet nuget push "./artifacts/*.nupkg" \ | |
| --source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
| --api-key "${{ secrets.GITHUB_TOKEN }}" \ | |
| --skip-duplicate | |
| dotnet nuget push "./artifacts/*.snupkg" \ | |
| --source "https://nuget.pkg.github.com/${{ github.repository_owner }}/index.json" \ | |
| --api-key "${{ secrets.GITHUB_TOKEN }}" \ | |
| --skip-duplicate | |