feat: tag-triggered SDK generation and release docs - #738
Conversation
…itional params in Python
- Change `requestBodyFieldName` from `params` to `body` across all three SDKs
- Switch Python SDK to `flattenRequests: false`, `maxMethodParams: 4`,
`methodArguments: require-security-and-request` to match Go/TS style
with positional path params and a named `body=` keyword argument
Expected Python signatures after regeneration:
outpost.destinations.create("t1", body=DestinationCreate(...))
outpost.destinations.update("t1", "d1", body=DestinationUpdate(...))
https://claude.ai/code/session_018pZ8NkJ3QqwPR8Aa7QD1eF
… 0.13.2 destinations.create() now takes body= (not destination_create=) after requestBodyFieldName: body in gen.yaml. Made-with: Cursor
- Add sdk-generate-on-release.yml: generates Go, Python, TS on push tags v* - Add sdk-generate-one.yml: reusable workflow used by manual and tag-triggered runs - Refactor manual sdk_generation_outpost_* workflows to call sdk-generate-one - Add contributing/release.md as primary release playbook (checklist, 1.0.0 override) - Update CONTRIBUTING.md with Release process and SDKs links - Update contributing/sdks.md: lock file doc, release section, reusable workflow note Made-with: Cursor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
There was a problem hiding this comment.
Pull request overview
This PR implements tag-triggered SDK generation and centralizes release documentation. It introduces two new GitHub Actions workflows (a reusable single-target generator and a tag-triggered orchestrator), refactors the three existing per-language manual workflows to use the shared reusable workflow, adds release process documentation, and updates Speakeasy SDK configuration across all three SDKs.
Changes:
- New reusable workflow (
sdk-generate-one.yml) and tag-triggered orchestrator (sdk-generate-on-release.yml) that automatically generates Go, Python, and TypeScript SDKs sequentially when av*tag is pushed, with the manual per-language workflows refactored to call the shared reusable workflow. - Speakeasy
gen.yamlconfiguration changes across all three SDKs:requestBodyFieldNamechanged fromparamstobody, and the Python SDK additionally getsflattenRequests: false,maxMethodParams: 4, andmethodArguments: require-security-and-request(aligning with Go and TypeScript). - New
contributing/release.mdrelease playbook and updatedcontributing/sdks.mdwith lock file documentation, tag-triggered generation details, and updated key point;CONTRIBUTING.mdupdated with links.
Reviewed changes
Copilot reviewed 12 out of 12 changed files in this pull request and generated 2 comments.
Show a summary per file
| File | Description |
|---|---|
.github/workflows/sdk-generate-one.yml |
New reusable workflow wrapping Speakeasy's action for one SDK target |
.github/workflows/sdk-generate-on-release.yml |
New orchestrator workflow triggered by v* tags, runs Go → Python → TS sequentially |
.github/workflows/sdk_generation_outpost_go.yaml |
Refactored to call sdk-generate-one.yml instead of Speakeasy directly |
.github/workflows/sdk_generation_outpost_python.yaml |
Refactored to call sdk-generate-one.yml instead of Speakeasy directly |
.github/workflows/sdk_generation_outpost_ts.yaml |
Refactored to call sdk-generate-one.yml instead of Speakeasy directly |
sdks/outpost-go/.speakeasy/gen.yaml |
requestBodyFieldName changed from params to body |
sdks/outpost-python/.speakeasy/gen.yaml |
requestBodyFieldName → body, flattenRequests → false, maxMethodParams → 4, methodArguments → require-security-and-request |
sdks/outpost-typescript/.speakeasy/gen.yaml |
requestBodyFieldName changed from params to body |
examples/sdk-python/example/create_destination.py |
Updated parameter name from destination_create to body to match gen.yaml change |
contributing/release.md |
New release process playbook |
contributing/sdks.md |
Updated with lock file documentation and tag-triggered generation details |
CONTRIBUTING.md |
Added links to release process and SDKs guides |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
You can also share your feedback on Copilot code review. Take the survey.
…iginal commit - Order: tag → workflows → merge SDK PRs → create GitHub Release - Remove optional 'move the tag' step; document that we do not rewrite the tag - Clarify that release is created after SDKs are generated and merged Made-with: Cursor
…available Made-with: Cursor
Made-with: Cursor
Summary
Implements tag-triggered SDK generation and centralizes release documentation. Also includes Speakeasy
gen.yamland example updates that align SDK request body naming and method arguments across Go, Python, and TypeScript.Changes
Workflows
v*) is pushed. Generates Go, Python, and TypeScript SDKs sequentially (to avoid conflicts on.speakeasy/workflow.lock) and opens three PRs. Supportsworkflow_dispatchfor testing without pushing a tag. Passes SDK version override only when tag isv1.0.0.sdk-generate-one.yml; manualworkflow_dispatchwithforceandset_versioninputs unchanged.Speakeasy SDK configuration (breaking API surface)
gen.yaml):requestBodyFieldNamechanged fromparamstobody— generated request types now use abodyparameter instead ofparams. This is a breaking change for call sites that pass request payloads.flattenRequests: false,maxMethodParams: 4,methodArguments: require-security-and-request(aligns with Go and TypeScript). Method signatures may change.create_destination.pyupdated to usebody=instead ofdestination_create=to match the new naming.Documentation
Testing
v0.0.0-sdk-gen-test) or use Actions → SDK generate on release tag → Run workflow to verify without a real release.set_versionas before.bodyparameter as in updatedcreate_destination.py.