Skip to content

feat: publish multi-platform container images - #6

Merged
danielkov merged 1 commit into
mainfrom
feat/publish-container-images
Aug 25, 2026
Merged

feat: publish multi-platform container images#6
danielkov merged 1 commit into
mainfrom
feat/publish-container-images

Conversation

@danielkov

@danielkov danielkov commented Aug 25, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds user-agnostic Bookworm, slim, and Alpine Kit container images. Each release publishes native linux/amd64 and linux/arm64 manifests to ghcr.io/speakeasy-api/kit, with slim as the default flavor.

Motivation

Kit currently ships binaries and package-manager integrations, but no supported container base for downstream agent environments. Publishing minimal Kit images provides a consistent foundation without coupling Kit to project-specific tools, language runtimes, or Git.

Impact

Customers can run Kit directly from GHCR or extend a documented base image for their own environments. All flavors run as the non-root kit user with UID/GID 1000, so bind-mounted workspaces must be writable by that identity.

The change affects the release pipeline after GitHub release publication. It does not change existing Kit command behavior or binary distribution.

Technical details

Image flavors

  • slim uses Debian Bookworm Slim with glibc and is the default image.
  • bookworm uses the full Debian Bookworm runtime with glibc.
  • alpine uses Alpine 3.23 and a separately compiled musl binary.
  • Each runtime contains only Kit, CA certificates, and a POSIX shell.

Multi-platform publication

Release jobs build linux/amd64 and linux/arm64 images on native GitHub-hosted runners. Each architecture is pushed by digest, then combined into a public multi-platform manifest without architecture-specific public tags.

Tag behavior

Every release publishes versioned flavor tags:

  • Slim: v<version> and v<version>-slim
  • Bookworm: v<version>-bookworm
  • Alpine: v<version>-alpine

Only the newest stable release updates latest, slim, bookworm, and alpine. Prereleases and reruns of older stable releases do not move floating tags.

Runtime contract

All flavors run from /workspace as kit, UID/GID 1000. The images expose port 8081 for remote ACP usage and use SIGTERM as the stop signal. OCI metadata records the Kit version and source revision.

GHCR visibility

The workflow authenticates with GITHUB_TOKEN and packages: write; no additional registry secret is required. GitHub may create the package as private on its first push, so the workflow verifies public visibility and reports the package settings URL if an organization administrator must make the one-time change.

@danielkov
danielkov merged commit ae91b30 into main Aug 25, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant