From d20db80c52afba283e24821a931ae224c65acfb7 Mon Sep 17 00:00:00 2001 From: robert-j-y <212159665+robert-j-y@users.noreply.github.com> Date: Thu, 11 Jun 2026 09:56:50 -0700 Subject: [PATCH] ci: regenerate SDK directly on merged spec changes Spec updates land on main automatically, but the only generation trigger is the nightly cron in PR mode, whose rolling PRs require a manual merge (#205 sat open Apr 24 - Jun 11). Mirror typescript-sdk's spec-change workflow: when a PR touching .speakeasy/in.openapi.yaml merges to main, run Speakeasy in direct mode so the regenerated SDK lands on main and the publish workflow fires. --- .../sdk_generation_for_spec_change.yaml | 40 +++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 .github/workflows/sdk_generation_for_spec_change.yaml diff --git a/.github/workflows/sdk_generation_for_spec_change.yaml b/.github/workflows/sdk_generation_for_spec_change.yaml new file mode 100644 index 0000000..37d96a6 --- /dev/null +++ b/.github/workflows/sdk_generation_for_spec_change.yaml @@ -0,0 +1,40 @@ +name: Generate (spec change merged) +permissions: + checks: write + contents: write + pull-requests: write + statuses: write + id-token: write +"on": + workflow_dispatch: + inputs: + force: + description: Force generation of SDKs + type: boolean + default: false + set_version: + description: optionally set a specific SDK version + type: string + pull_request: + types: [closed] + branches: + - main + paths: + - .speakeasy/in.openapi.yaml + +jobs: + generate: + if: github.event.pull_request.merged == true || github.event_name == 'workflow_dispatch' + uses: speakeasy-api/sdk-generation-action/.github/workflows/workflow-executor.yaml@v15 + with: + force: ${{ github.event.inputs.force }} + mode: direct + set_version: ${{ github.event.inputs.set_version }} + secrets: + # Must be a PAT with push access to this repo (not the default + # GITHUB_TOKEN): pushes made with GITHUB_TOKEN do not trigger other + # workflows, so the publish workflow (push on .speakeasy/gen.lock) + # would never fire. Same secret name as go-sdk uses for this purpose. + github_access_token: ${{ secrets.SDK_MERGE_PAT }} + pypi_token: ${{ secrets.PYPI_TOKEN }} + speakeasy_api_key: ${{ secrets.SPEAKEASY_API_KEY }}