Tags: hookdeck/outpost
Tags
ci(spec-sdk-tests-vs-release): test PR's SDK against latest released … …Outpost (#927) * ci(spec-sdk-tests-vs-release): test PR's SDK against latest released Outpost Closes #926. Trigger: PRs touching sdks/outpost-typescript/** (where the Speakeasy bot regen PRs land). Resolves the latest non-prerelease Outpost tag dynamically via the GitHub releases API (the repo uses namespaced tags like sdks/outpost-typescript/v1.3.0 for SDK releases, so the bare vX.Y.Z pattern correctly picks out the Outpost release). Question this answers: "Will the newly-regen'd SDK in this PR work against the version of Outpost that customers are already running?" Distinct from the existing spec-sdk-tests.yml workflow which asks "does this PR's spec match this PR's server" — both are needed, neither subsumes the other. Job shape: pull hookdeck/outpost:<tag> as a docker image, run it alongside the same service containers as the sibling workflow (Postgres, redis-stack-server for RediSearch, RabbitMQ), build the SDK from the PR with no regen step (the regen IS the PR), run the contract suite. Not dogfooded on this PR — the trigger filter only matches SDK paths, which this PR doesn't touch. First real run will be on the next Speakeasy bot regen PR after this lands. * ci(spec-sdk-tests-vs-release): support sdk_version + outpost_version dispatch overrides Lets you trigger the workflow from the Actions UI with optional inputs for ad-hoc compat testing: sdk_version pins the SDK to a specific release tag (or uses the dispatch branch's contents if empty). outpost_version pins the server to a specific Outpost release (or resolves the latest non-prerelease release if empty). Both accept "1.3.0" or "v1.3.0" — leading "v" is normalized. Inputs only affect workflow_dispatch runs; pull_request triggers ignore them, so the gate behaviour for bot regen PRs is unchanged. Single workflow rather than a sibling file — the job body is ~95% identical between PR gate and compat testing; the only material differences are two variables (which SDK, which Outpost). * ci(spec-sdk-tests-vs-release): guard inputs.* references with workflow_dispatch event check Defensive pattern flagged by Copilot review on #927: inputs.* context is officially only populated on workflow_dispatch (and workflow_call). Practically this works on PR events too — inputs.x evaluates to null which compares as empty — but the explicit guard is unambiguous and costs almost nothing. Two changes: * OVERRIDE env in the tag resolver uses the short-circuit ternary (github.event_name == 'workflow_dispatch' && inputs.x || ''). * SDK override step's if: prepends event_name == 'workflow_dispatch' so the inputs.sdk_version check is only evaluated on dispatch runs. * ci(spec-sdk-tests-vs-release): don't self-trigger on workflow file edits PRs that touch only this workflow file would fire it against main's state — currently NEW tests + OLD SDK (regen still pending) + OLD released Outpost — and fail at TS compile with 'type does not exist in type DestinationUpdate'. That's predicted transitional-state noise, not a real bug, but it leaves a permanently-red dogfood result that future reviewers have to recognize as expected. Drop the workflow file from its own trigger paths. The actual scenario this workflow exists for — Speakeasy bot regen PRs — always touches sdks/outpost-typescript/**, so the gate still catches them. Local iteration on the workflow file itself uses 'gh workflow run --ref'. Spotted while inspecting failing PR runs on #927.
fix: increase consumer error tolerance for transient infra outages (#900 ) Previously the consumer gave up after 5 consecutive receive errors with a 5s backoff cap (~3s total tolerance), permanently killing the worker with no recovery path. A brief broker hiccup (e.g. GCP OAuth/DNS blip, managed broker restart) was enough to take down logmq/deliverymq workers across deployments until containers were manually restarted. Mirrors the same fix applied to the retrymq scheduler in #881. Increase to 10 errors with 15s backoff cap (~1 min tolerance window). Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
chore: 🐝 Update SDK - Generate OUTPOST-TS 1.3.0 (#905) * `outpost.destinations.create()`: `request.body` **Changed** * `outpost.destinations.update()`: `request.body` **Changed** Co-authored-by: speakeasybot <bot@speakeasyapi.dev>
chore: 🐝 Update SDK - Generate OUTPOST-TS 1.2.0 (#893) * `outpost.publish()`: **Added** * `outpost.retry()`: **Added** * `outpost.publish.event()`: **Removed** (Breaking⚠️ ) * `outpost.retry.retry()`: **Removed** (Breaking⚠️ ) Co-authored-by: speakeasybot <bot@speakeasyapi.dev>
chore: 🐝 Update SDK - Generate OUTPOST-TS 1.1.0 (#888) * `outpost.destinations.create()`: * `request.body.union(kafka)` **Added** * `response.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.destinations.disable()`: `response.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.events.list()`: `request` **Changed** (Breaking⚠️ ) * `outpost.attempts.list()`: * `request` **Changed** (Breaking⚠️ ) * `response.models[].destination.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.attempts.get()`: `response.destination.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.destinations.list()`: `response.[].union(kafka)` **Added** (Breaking⚠️ ) * `outpost.metrics.getAttemptMetrics()`: `request` **Changed** (Breaking⚠️ ) * `outpost.destinations.update()`: * `request.body.union(DestinationUpdateKafka)` **Added** * `response.union(Destination).union(kafka)` **Added** (Breaking⚠️ ) * `outpost.metrics.getEventMetrics()`: `request` **Changed** (Breaking⚠️ ) * `outpost.destinations.enable()`: `response.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.destinations.get()`: `response.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.destinations.listAttempts()`: * `request` **Changed** (Breaking⚠️ ) * `response.models[].destination.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.destinations.getAttempt()`: `response.destination.union(kafka)` **Added** (Breaking⚠️ ) * `outpost.retry.retry()`: **Added** * `outpost.attempts.retry()`: **Removed** (Breaking⚠️ ) Co-authored-by: speakeasybot <bot@speakeasyapi.dev>
PreviousNext