name: Publish C# SDKs on: push: tags: - "csharp/sandbox/v*" - "csharp/code-interpreter/v*" permissions: contents: read id-token: write attestations: write artifact-metadata: write jobs: release-preflight: uses: ./.github/workflows/release-preflight.yml publish: needs: release-preflight name: Publish (${{ matrix.sdk.name }}) runs-on: ubuntu-latest strategy: fail-fast: false matrix: sdk: - name: sandbox tagPrefix: sandbox csprojPath: sdks/sandbox/csharp/src/OpenSandbox/OpenSandbox.csproj - name: code-interpreter tagPrefix: code-interpreter csprojPath: sdks/code-interpreter/csharp/src/OpenSandbox.CodeInterpreter/OpenSandbox.CodeInterpreter.csproj steps: - name: Checkout code uses: actions/checkout@v6 - name: Set up .NET uses: actions/setup-dotnet@v5 with: dotnet-version: "10.0.x" - name: Parse package version from tag if: startsWith(github.ref, format('refs/tags/csharp/{0}/v', matrix.sdk.tagPrefix)) shell: bash run: | VERSION="${GITHUB_REF_NAME#csharp/${{ matrix.sdk.tagPrefix }}/v}" echo "PACKAGE_VERSION=$VERSION" >> "$GITHUB_ENV" - name: Restore if: startsWith(github.ref, format('refs/tags/csharp/{0}/v', matrix.sdk.tagPrefix)) run: | EXTRA_RESTORE_ARGS="" if [ "${{ matrix.sdk.name }}" = "code-interpreter" ]; then EXTRA_RESTORE_ARGS="-p:UseLocalOpenSandboxProjectReference=false" fi dotnet restore "${{ matrix.sdk.csprojPath }}" ${EXTRA_RESTORE_ARGS} - name: Pack if: startsWith(github.ref, format('refs/tags/csharp/{0}/v', matrix.sdk.tagPrefix)) run: | EXTRA_PACK_ARGS="" if [ "${{ matrix.sdk.name }}" = "code-interpreter" ]; then EXTRA_PACK_ARGS="-p:UseLocalOpenSandboxProjectReference=false" fi dotnet pack "${{ matrix.sdk.csprojPath }}" \ --configuration Release \ --no-restore \ -p:PackageVersion="${PACKAGE_VERSION}" \ -p:ContinuousIntegrationBuild=true \ ${EXTRA_PACK_ARGS} \ --output ./artifacts/${{ matrix.sdk.name }} - name: Attest built package if: startsWith(github.ref, format('refs/tags/csharp/{0}/v', matrix.sdk.tagPrefix)) uses: actions/attest@v4 with: subject-path: ./artifacts/${{ matrix.sdk.name }}/*.nupkg - name: Publish to NuGet if: startsWith(github.ref, format('refs/tags/csharp/{0}/v', matrix.sdk.tagPrefix)) env: NUGET_API_KEY: ${{ secrets.NUGET_API_KEY }} run: | dotnet nuget push "./artifacts/${{ matrix.sdk.name }}/*.nupkg" \ --api-key "$NUGET_API_KEY" \ --source "https://api.nuget.org/v3/index.json" \ --skip-duplicate