You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The Speakeasy bot opens PRs that regen SDKs (chore: 🐝 Update SDK - Generate OUTPOST-TS 1.3.0 (#NNN) style). Today nothing exercises that SDK against a running server before it's published. If the regen produces an SDK that silently misroutes requests — like the discriminator-union dispatch bug we hit in #920 — it ships and we hear about it from a customer.
The release order makes this useful: Outpost is tagged → sdk-generate-on-release runs against that tag → bot opens SDK PR → SDK is published. The newly-regen'd SDK is being prepared to ship against a server that already exists. We can test that pairing directly.
Question this workflow answers
"Does the newly-regen'd SDK in this PR work against the latest released Outpost?"
Different from #925, which asks "does this PR's spec match this PR's server?" — both are needed.
Resolve latest release dynamically at workflow runtime — this repo uses namespaced tags (sdks/outpost-typescript/v1.3.0 for SDK, plain v1.0.3 for Outpost), so gh release view returns the wrong thing. Use:
Server via docker pull hookdeck/outpost:<tag>. Migrations via the same image's migrate apply.
SDK built from the PR: npm install && npm run build in sdks/outpost-typescript. No speakeasy run — the regen is the PR.
Tests: same spec-sdk-tests suite, .env pointing at localhost.
Why PR-triggered, not folded into the gen workflow
The PR is where humans investigate failures. Test results next to the diff is more actionable than buried in Actions logs for a non-PR workflow run.
Folding tests into sdk-generate-on-release.yml couples "did the regen succeed" with "does the regen work," and that workflow is already complex (reusable workflow, three-language fan-out, version detection).
Failure on the PR keeps the PR open and red — visible. Failure inside the gen workflow can silently suppress the PR.
The gen workflow can still gate auto-merge on this check passing if we want strict "merge only if green" semantics.
Open questions
TS only initially, or fan out to Go and Python on day one? TS first is probably right — the bug we caught was TS-specific (Zod union dispatch); Go and Python have different failure modes that may or may not be reachable via this suite.
Trigger
The Speakeasy bot opens PRs that regen SDKs (
chore: 🐝 Update SDK - Generate OUTPOST-TS 1.3.0 (#NNN)style). Today nothing exercises that SDK against a running server before it's published. If the regen produces an SDK that silently misroutes requests — like the discriminator-union dispatch bug we hit in #920 — it ships and we hear about it from a customer.The release order makes this useful: Outpost is tagged →
sdk-generate-on-releaseruns against that tag → bot opens SDK PR → SDK is published. The newly-regen'd SDK is being prepared to ship against a server that already exists. We can test that pairing directly.Question this workflow answers
"Does the newly-regen'd SDK in this PR work against the latest released Outpost?"
Different from #925, which asks "does this PR's spec match this PR's server?" — both are needed.
sdks/outpost-typescript/**hookdeck/outpost:<latest-release>(docker)go build ./cmd/outpost-serverfrom PRregenerate-sdk.shImplementation notes
Resolve latest release dynamically at workflow runtime — this repo uses namespaced tags (
sdks/outpost-typescript/v1.3.0for SDK, plainv1.0.3for Outpost), sogh release viewreturns the wrong thing. Use:Filters on the bare
vX.Y.Zpattern and skips prereleases. Auto-updating; no per-release bump.Service containers same as ci(spec-sdk-tests): add workflow that runs the contract suite against a local Outpost #925: Postgres,
redis/redis-stack-server(RediSearch fortenants.list), RabbitMQ.Server via
docker pull hookdeck/outpost:<tag>. Migrations via the same image'smigrate apply.SDK built from the PR:
npm install && npm run buildinsdks/outpost-typescript. Nospeakeasy run— the regen is the PR.Tests: same
spec-sdk-testssuite,.envpointing at localhost.Why PR-triggered, not folded into the gen workflow
sdk-generate-on-release.ymlcouples "did the regen succeed" with "does the regen work," and that workflow is already complex (reusable workflow, three-language fan-out, version detection).Open questions
chore(sdks)PRs that touch.speakeasy/workflow.yaml(chore(sdks): drop x-speakeasy-pagination overlay from all SDK sources #919-style overlay drops) or only the per-language dirs?Related
🤖 Generated with Claude Code