diff --git a/.github/workflows/notify-postman.yml b/.github/workflows/notify-postman.yml new file mode 100644 index 0000000..52f61c1 --- /dev/null +++ b/.github/workflows/notify-postman.yml @@ -0,0 +1,60 @@ +# Tells the Postman collection pipeline that a specification release has landed. +# +# The specs in spec/ are updated by cb-sdk-gen's public-sdk-release, which opens +# a pull request here. Merging that pull request is the moment the specification +# becomes public — this repository's main branch is what downstream consumers +# read — so it is the moment worth announcing. +# +# The consumer, chargebee/cb-openapi-generator, regenerates its published Postman +# collections from spec/ and opens a pull request carrying the diff. Nothing +# auto-merges there; a human reads the semantic change. +# +# This is a latency optimisation, not a dependency. That pipeline also polls +# hourly and keys on this repository's commit SHA, so if the dispatch fails, is +# never configured, or this workflow is deleted, the collections still follow — +# just up to an hour later. Deliberately fails soft for the same reason: a +# specification release must not be reported as broken because a downstream +# notification could not be sent. +name: notify-postman + +on: + push: + branches: [main] + paths: + - 'spec/**' + workflow_dispatch: + +permissions: + contents: read + +jobs: + notify: + runs-on: ubuntu-latest + steps: + - name: Dispatch to cb-openapi-generator + env: + # Fine-grained token with Contents: read and write on + # chargebee/cb-openapi-generator — the permission repository_dispatch + # requires. Nothing else. + TOKEN: ${{ secrets.POSTMAN_REGEN_DISPATCH_TOKEN }} + SHA: ${{ github.sha }} + run: | + if [ -z "$TOKEN" ]; then + echo "::notice::POSTMAN_REGEN_DISPATCH_TOKEN is not set; skipping. The Postman pipeline polls hourly and will pick this up regardless." + exit 0 + fi + + status=$(curl -sS -o /tmp/dispatch.out -w '%{http_code}' \ + -X POST "https://api.github.com/repos/chargebee/cb-openapi-generator/dispatches" \ + -H "Authorization: Bearer $TOKEN" \ + -H "Accept: application/vnd.github+json" \ + -H "X-GitHub-Api-Version: 2022-11-28" \ + -d "{\"event_type\":\"openapi-spec-published\",\"client_payload\":{\"sha\":\"$SHA\"}}") + + if [ "$status" = "204" ]; then + echo "Notified cb-openapi-generator of ${SHA}." + else + # Soft failure on purpose: see the note at the top of this file. + echo "::warning::Dispatch returned HTTP ${status}. The Postman pipeline polls hourly, so this delays regeneration rather than preventing it." + cat /tmp/dispatch.out + fi