Skip to content

Conversation

@leggetter
Copy link
Collaborator

Introduce a contributing guide to assist developers in contributing to the Outpost SDKs.

@vercel
Copy link

vercel bot commented Oct 28, 2025

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Preview Comments Updated (UTC)
outpost-docs Ready Ready Preview Comment Oct 28, 2025 0:21am
outpost-website Ready Ready Preview Comment Oct 28, 2025 0:21am

Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR introduces a comprehensive contributing guide for Outpost SDKs, documenting the complete workflow for updating, generating, testing, and publishing the Go, Python, and TypeScript SDKs. The guide emphasizes that SDK generation is a manual process and highlights critical testing considerations, particularly around the TypeScript SDK's local file dependency race condition.

Key Changes:

  • Establishes documentation for the SDK generation and publishing workflows
  • Details versioning guidelines (BETA and post-BETA strategies)
  • Documents critical testing procedures to avoid race conditions with the TypeScript SDK

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

```bash
cd spec-sdk-tests && rm -rf node_modules && npm install
```
3. Is Outpost running locally? Check `http://localhost:3333/healthz`
Copy link

Copilot AI Oct 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Port mismatch: Line 273 shows Outpost running on port 8000 (curl http://localhost:8000/healthz), but this troubleshooting step references port 3333. The port should be consistent throughout the document.

Suggested change
3. Is Outpost running locally? Check `http://localhost:3333/healthz`
3. Is Outpost running locally? Check `http://localhost:8000/healthz`

Copilot uses AI. Check for mistakes.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

go run cmd/outpost/main.go

# Verify Outpost is running
curl http://localhost:3333/healthz
Copy link

Copilot AI Oct 28, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Port mismatch: This references port 3333, but line 273 shows Outpost running on port 8000. The port should be consistent throughout the document.

Suggested change
curl http://localhost:3333/healthz
curl http://localhost:8000/healthz

Copilot uses AI. Check for mistakes.
Copy link
Collaborator

@alexluong alexluong left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Got a few issues here as I tried to follow the steps locally

Overall the guide makes sense. I wonder if a short TLDR in the beginning to give the full flow before going in-depth would be helpful.

flow:
- GHA to initiate SpeakEasy CI to generate new SDKs
-> PRs -> merge
-> GHA using SpeakEasy CI to publish SDK

3. **Validate the specification**:
```bash
# Use Speakeasy CLI to validate (if installed)
speakeasy validate -s docs/apis/openapi.yaml
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

➜  outpost git:(chore/sdk-generation-docs) ✗ speakeasy validate -s docs/apis/openapi.yaml
unknown shorthand flag: 's' in -s

Comment on lines +76 to +78
# Or use the spec-sdk-tests validation
cd spec-sdk-tests
npm run validate:spec
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

➜  outpost git:(chore/sdk-generation-docs) ✗ cd spec-sdk-tests
➜  spec-sdk-tests git:(chore/sdk-generation-docs) ✗ npm run validate:spec

> @outpost/[email protected] validate:spec
> swagger-cli validate ../apis/openapi.yaml

Error opening file "/Users/alexluong/git/hub/hookdeck/outpost/apis/openapi.yaml"
ENOENT: no such file or directory, open '/Users/alexluong/git/hub/hookdeck/outpost/apis/openapi.yaml'

4. **Commit and push**:
```bash
git add docs/apis/openapi.yaml
git commit -m "Update OpenAPI spec: <description>"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I don't think this commit message conform to conventional commit convention which we follow

- Select the branch (typically `main`)
- **Optional inputs**:
- `force`: Force generation even if no OpenAPI changes detected (default: false)
- `set_version`: Set a specific SDK version (e.g., `1.2.3`). Leave empty to keep current version
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. Should the version start with v or not? v1.2.3 vs 1.2.3
  2. Do we try to keep the SDK version matching Outpost version?


### 1. Go SDK (`sdks/outpost-go/`)
- **Location**: `sdks/outpost-go/`
- **Package**: `github.com/hookdeck/outpost-go`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

this is incorrect, the package is github.com/hookdeck/outpost/sdks/outpost-go

Comment on lines +264 to +274
4. **Start Outpost locally** (in a separate terminal):
```bash
# Using Docker Compose
docker-compose -f build/dev/compose.yml up

# Or run directly with Go
go run cmd/outpost/main.go

# Verify it's running
curl http://localhost:8000/healthz
```
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

we should encourage folks to use make up, or what I do personally is

make up/deps
make up/outpost
# also test infra to run test suite locally
make up/test

We can also refer people to the contributing/getting-started.md guide

go run cmd/outpost/main.go

# Verify it's running
curl http://localhost:8000/healthz
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

default port is 3333, also /api/v1/healthz

```bash
cd spec-sdk-tests && rm -rf node_modules && npm install
```
3. Is Outpost running locally? Check `http://localhost:3333/healthz`
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

go run cmd/outpost/main.go

# Verify Outpost is running
curl http://localhost:3333/healthz
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment on lines +540 to +543
# Start Outpost locally for testing
docker-compose -f build/dev/compose.yml up
# OR
go run cmd/outpost/main.go
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

make up

@leggetter
Copy link
Collaborator Author

@alexluong - any chance you could edit the changes you know are wrong and leave anything you need clarification on?

@fmvilas fmvilas moved this to Todo in Outpost Releases Nov 7, 2025
@fmvilas fmvilas moved this from Todo to In Review in Outpost Releases Nov 7, 2025

Outpost SDKs are automatically generated from the [OpenAPI specification](../docs/apis/openapi.yaml) using [Speakeasy](https://www.speakeasyapi.dev/). The SDK generation, testing, and publishing process is managed through GitHub Actions workflows, but requires manual triggering and careful coordination to ensure quality.

**Key Point**: SDK generation is a **manual process** that requires explicit workflow triggering and version management. This is intentional to maintain control over releases.
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why is this? I mean, what would be wrong with releasing one version per each merged PR?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The current phrasing is misleading - it's not that manual control is intentionally better, it's that we just haven't fully thought through what complete automation looks like and gotten around to implementing it.

We could instead:

  1. Automatically trigger SDK generation when Outpost releases are published (we already have the release.yml workflow)
  2. Only generate SDKs if docs/apis/openapi.yaml has changed since the last release
  3. Let Speakeasy handle versioning automatically (it detects breaking vs non-breaking changes), testing and releasing

Right now we don't auto-generate or version the OpenAPI spec.

Related: there's presently no checking that the OpenAPI spec is correct and we have had some bugs raised. However, there is the start of a test suite that generates the TS SDK, and makes calls to the API, then the TS SDK validates the responses.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: In Review

Development

Successfully merging this pull request may close these issues.

4 participants