Dev Containers

Speakeasy can seamlessly generate Dev Container configurations for your SDK repositories. This offers both you and your SDK consumers an intuitive, predefined sandbox environment to explore the capabilities of your SDK. Beyond setting up this environment, Speakeasy has CLI commands that allow SDK users to effortlessly generate example usage snippets for any API operation within this container setting.

Success Icon

TIP

Dev Containers are currently available in Go, Typescript, and Python SDKs.

Configuring Dev Containers

To set up the automatically generated dev container configurations, you'll need to make minor adjustments to your gen.yaml file. The schemaPath shown below should reference your SDK's OpenAPI spec, which can be either a local path or a remote URL.

Dev Container gen.yaml:

configVersion: 1.0.0
generation:
  devContainers:
    enabled: true
    schemaPath: ./openapi.yaml

The result of generation will be a newly created .devcontainer directory containing a configuration file like the one shown below.

Generated devcontainer.json:

// For format details, see https://aka.ms/devcontainer.json. For config options, see the
// README at: https://github.com/devcontainers/templates/tree/main/src/go
{
    "name": "Go",
    "image": "mcr.microsoft.com/devcontainers/go:1-1.20-bullseye",
    // Features to add to the dev container. More info: https://containers.dev/features.
    // "features": {},
    // Use 'forwardPorts' to make a list of ports inside the container available locally.
    // "forwardPorts": [],
    // Use 'postCreateCommand' to run commands after the container is created.
    "postCreateCommand": "sudo chmod +x ./.devcontainer/setup.sh && ./.devcontainer/setup.sh",
    "customizations": {
        "vscode": {
            "extensions": [
                "golang.go",
                "github.vscode-pull-request-github" // Github interaction
            ],
            "settings": {
                "files.eol": "\n",
                "editor.formatOnSave": true,
                "go.buildTags": "",
                "go.toolsEnvVars": {
                    "CGO_ENABLED": "0"
                },
                "go.useLanguageServer": true,
                "go.testEnvVars": {
                    "CGO_ENABLED": "1"
                },
                "go.testFlags": [
                    "-v",
                    "-race"
                ],
                "go.testTimeout": "60s",
                "go.coverOnSingleTest": true,
                "go.coverOnSingleTestFile": true,
                "go.coverOnTestPackage": true,
                "go.lintTool": "golangci-lint",
                "go.lintOnSave": "package",
                "[go]": {
                    "editor.codeActionsOnSave": {
                        "source.organizeImports": true
                    }
                },
                "gopls": {
                    "usePlaceholders": false,
                    "staticcheck": true,
                    "vulncheck": "Imports"
                }
            }
        },
        "codespaces": {
            "openFiles": [
                ".devcontainer/README.md"
            ]
        }
    }
    // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root.
    // "remoteUser": "root"
}

Using Dev Containers in the browser

Your SDK users can instantly initialize a sandbox in Github Codespaces (opens in a new tab) with just a click. By default, GitHub Codespace shifts the cost to the user. However, you have the option to configure your organization (opens in a new tab) to offer complimentary codespaces to your users if you prefer.

Open a Dev Container for a given repo

Start a Dev Container from a README badge