diff --git a/.github/workflows/release.yaml b/.github/workflows/release.yaml index 019b90ba..7acb443b 100644 --- a/.github/workflows/release.yaml +++ b/.github/workflows/release.yaml @@ -5,13 +5,60 @@ name: release jobs: release-please: runs-on: ubuntu-latest + permissions: + contents: read + id-token: write steps: - - uses: actions/checkout@8e8c483db84b4bee98b60c0593521ed34d9990e8 # v6 - - uses: actions/setup-node@v6 + - uses: actions/checkout@d23441a48e516b6c34aea4fa41551a30e30af803 # v6 + - uses: actions/setup-node@249970729cb0ef3589644e2896645e5dc5ba9c38 # v6 with: node-version: 18 - registry-url: 'https://wombat-dressing-room.appspot.com' - run: npm ci - - run: npm publish + - name: Authenticate to Google Cloud for OSS Exit Gate + id: auth + uses: google-github-actions/auth@7c6bc770dae815cd3e89ee6cdf493a5fab2cc093 # v3 + with: + token_format: 'access_token' + workload_identity_provider: 'projects/305452601764/locations/global/workloadIdentityPools/builders/providers/github' + + - name: Set up Cloud SDK + uses: google-github-actions/setup-gcloud@aa5489c8933f4cc7a4f7d45035b3b1440c9c10db # v3 + + - name: Clean up stale releases from staging repo + run: | + # clean up stale releases from staging repo + packages=$(gcloud artifacts packages list \ + --project="oss-exit-gate-prod" \ + --location="us" \ + --repository="gts--npm" \ + --format="value(name)" 2>/dev/null) + + echo "${packages}" | xargs -r -I {} sh -c ' + package_name=$(basename "{}") + echo "Deleting package: $package_name..." + gcloud artifacts packages delete "{}" \ + --project="oss-exit-gate-prod" \ + --location="us" \ + --repository="gts--npm" \ + --quiet + ' + + - name: Stage to Artifact Registry and trigger OSS Exit Gate env: - NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + ACCESS_TOKEN: ${{ steps.auth.outputs.access_token }} + RUN_ID: ${{ github.run_id }} + RUN_ATTEMPT: ${{ github.run_attempt }} + run: | + cat << 'NPMRC' > "$HOME/.npmrc" + registry=https://us-npm.pkg.dev/oss-exit-gate-prod/gts--npm/ + //us-npm.pkg.dev/oss-exit-gate-prod/gts--npm/:always-auth=true + //us-npm.pkg.dev/oss-exit-gate-prod/gts--npm/:_authToken=${ACCESS_TOKEN} + NPMRC + trap 'rm -f "$HOME/.npmrc"' EXIT + npm publish --access public --registry="https://us-npm.pkg.dev/oss-exit-gate-prod/gts--npm/" + cat << 'MANIFEST' > manifest.json + { + "publish_all": true + } + MANIFEST + gcloud storage cp manifest.json "gs://oss-exit-gate-prod-projects-bucket/gts/npm/manifests/manifest-${RUN_ID}-${RUN_ATTEMPT}.json"