Merge pull request #2713 from microsoft/ci/validate-shipped-APIs #133
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
| ## ----------------------------------------------------------------------------- | |
| # Copyright (c) Microsoft Corporation. All rights reserved. | |
| # Licensed under the MIT License. See LICENSE.txt in the project root for license information. | |
| ## ----------------------------------------------------------------------------- | |
| # | |
| # Summary: | |
| # This GitHub Actions workflow automates the release process using Release Please. | |
| # It triggers on pushes to the main branch, generates a GitHub App token using organization | |
| # variables and secrets, and then runs the release-please-action to manage versioning and changelogs. | |
| name: Release Please | |
| on: | |
| push: | |
| branches: | |
| - main | |
| - support/v1 | |
| - support/v2 | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| release: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - name: Validate PublicAPI.Unshipped.txt files are empty | |
| shell: pwsh | |
| run: | | |
| $unshippedFiles = Get-ChildItem 'src/ ' -Recurse -Filter *.Unshipped.txt | Select -ExpandProperty FullName | |
| $hasUnshippedAPIs = $false | |
| foreach ($file in $unshippedFiles) { | |
| $content = Get-Content -Path $file -Raw | |
| # Remove the #nullable enable line and any whitespace | |
| $trimmedContent = $content -replace '^\s*#nullable enable\s*$', '' -replace '^\s+', '' | |
| if ($trimmedContent -ne '') { | |
| Write-Error "❌ $file contains unshipped APIs. Please promote them to PublicAPI.Shipped.txt before releasing.`nContent:`n$content" | |
| $hasUnshippedAPIs = $true | |
| } | |
| } | |
| if ($hasUnshippedAPIs) { | |
| exit 1 | |
| } | |
| Write-Output "✅ All PublicAPI.Unshipped.txt files are clean" | |
| - name: Generate GitHub App token | |
| id: app-token | |
| uses: actions/create-github-app-token@v2 | |
| with: | |
| app-id: ${{ vars.RELEASE_PLEASE_TOKEN_PROVIDER_APP_ID }} | |
| private-key: ${{ secrets.RELEASE_PLEASE_TOKEN_PROVIDER_PEM }} | |
| - name: Release Please | |
| uses: googleapis/release-please-action@v4 | |
| with: | |
| token: ${{ steps.app-token.outputs.token }} | |
| config-file: release-please-config.json | |
| manifest-file: .release-please-manifest.json | |
| target-branch: ${{ github.ref_name }} |