Manual NuGet Publish #8
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: Manual NuGet Publish | |
| on: | |
| workflow_dispatch: | |
| inputs: | |
| reason: | |
| description: 'Reason for manual publish' | |
| required: false | |
| default: 'Manual publish' | |
| permissions: | |
| contents: read | |
| packages: write | |
| env: | |
| DOTNET_VERSION: '10.0.x' | |
| DOTNET_SKIP_FIRST_TIME_EXPERIENCE: true | |
| DOTNET_CLI_TELEMETRY_OPTOUT: true | |
| DOTNET_NOLOGO: true | |
| jobs: | |
| publish: | |
| name: Manually Publish to NuGet.org | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v7 | |
| with: | |
| fetch-depth: 0 | |
| - name: Setup .NET 10 | |
| uses: actions/setup-dotnet@v6 | |
| with: | |
| dotnet-version: '10.0.x' | |
| - name: Restore dependencies | |
| run: dotnet restore SharpCoreDB.CI.slnf --configfile NuGet.Config | |
| - name: Build | |
| run: dotnet build SharpCoreDB.CI.slnf --configuration Release --no-restore /p:ContinuousIntegrationBuild=true | |
| - name: Pack NuGet packages | |
| run: dotnet pack SharpCoreDB.CI.slnf --configuration Release --output ./artifacts /p:ContinuousIntegrationBuild=true --configfile NuGet.Config | |
| - name: Publish packages in dependency order | |
| shell: bash | |
| env: | |
| NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} | |
| NUGET_SOURCE: https://api.nuget.org/v3/index.json | |
| run: | | |
| set -euo pipefail | |
| push_layer() { | |
| local layer_name="$1" | |
| shift | |
| local found_any=false | |
| echo "::group::Publishing $layer_name" | |
| for pattern in "$@"; do | |
| for pkg in ./artifacts/${pattern}; do | |
| [ -f "$pkg" ] || continue | |
| found_any=true | |
| echo " ↗ Pushing $(basename "$pkg")" | |
| dotnet nuget push "$pkg" \ | |
| --api-key "$NUGET_API_KEY" \ | |
| --source "$NUGET_SOURCE" \ | |
| --skip-duplicate | |
| done | |
| done | |
| echo "::endgroup::" | |
| if [ "$found_any" = true ]; then | |
| echo "⏳ Waiting 30s for NuGet.org to index $layer_name..." | |
| sleep 30 | |
| fi | |
| } | |
| push_layer "Layer 0 (core)" \ | |
| "SharpCoreDB.[0-9]*.nupkg" \ | |
| "SharpCoreDB.Client.Protocol.*.nupkg" \ | |
| "SharpCoreDB.Server.Protocol.*.nupkg" | |
| push_layer "Layer 1 (core dependents)" \ | |
| "SharpCoreDB.Graph.[0-9]*.nupkg" \ | |
| "SharpCoreDB.VectorSearch.*.nupkg" \ | |
| "SharpCoreDB.Functional.[0-9]*.nupkg" \ | |
| "SharpCoreDB.EventSourcing.*.nupkg" \ | |
| "SharpCoreDB.Analytics.*.nupkg" \ | |
| "SharpCoreDB.Distributed.*.nupkg" \ | |
| "SharpCoreDB.Identity.*.nupkg" \ | |
| "SharpCoreDB.Serilog.Sinks.*.nupkg" | |
| push_layer "Layer 2 (mid-level)" \ | |
| "SharpCoreDB.Client.[0-9]*.nupkg" \ | |
| "SharpCoreDB.EntityFrameworkCore.[0-9]*.nupkg" \ | |
| "SharpCoreDB.Extensions.*.nupkg" \ | |
| "SharpCoreDB.Data.Provider.*.nupkg" \ | |
| "SharpCoreDB.Server.Core.*.nupkg" \ | |
| "SharpCoreDB.CQRS.*.nupkg" \ | |
| "SharpCoreDB.Projections.*.nupkg" | |
| push_layer "Layer 3 (top-level)" \ | |
| "SharpCoreDB.Server.[0-9]*.nupkg" \ | |
| "SharpCoreDB.Graph.Advanced.*.nupkg" \ | |
| "SharpCoreDB.Provider.Sync.*.nupkg" \ | |
| "SharpCoreDB.Provider.YesSql.*.nupkg" \ | |
| "SharpCoreDB.Functional.Dapper.*.nupkg" \ | |
| "SharpCoreDB.Functional.EntityFrameworkCore.*.nupkg" \ | |
| "SharpCoreDB.Functional.Linq2DB.*.nupkg" | |
| push_layer "Remaining packages" \ | |
| "*.nupkg" | |
| echo "✅ All packages published in dependency order." | |
| - name: Create release summary | |
| run: | | |
| echo "## 📦 Manual NuGet Publish Completed" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Reason**: ${{ github.event.inputs.reason }}" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "Published $(ls -1 ./artifacts/*.nupkg | wc -l) package(s) to NuGet.org" >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "### Packages" >> $GITHUB_STEP_SUMMARY | |
| ls -1 ./artifacts/*.nupkg | xargs -I {} basename {} >> $GITHUB_STEP_SUMMARY | |
| echo "" >> $GITHUB_STEP_SUMMARY | |
| echo "**Triggered by**: @${{ github.actor }}" >> $GITHUB_STEP_SUMMARY | |
| echo "**Commit**: ${{ github.sha }}" >> $GITHUB_STEP_SUMMARY |