Conversation
The CLI is a statically-linked Go binary (CGO_ENABLED=0) that runs on bare metal with zero dependencies across 10 OS/arch targets. Docker adds no value: - Auth requires browser OAuth — dead on arrival in a container - Keyring doesn't work in containers - Shell completions are useless containerized - CI/CD has better options (gh release download, curl) - QEMU multi-arch builds are the slowest part of the release pipeline and the source of the timeout-minutes: 30 (now reduced to 15) Removes: Dockerfile.goreleaser, dockers_v2 from .goreleaser.yaml, QEMU/Buildx/ GHCR steps from release.yml, packages:write permission.
There was a problem hiding this comment.
Pull request overview
This PR removes the Docker multi-arch image release channel from the Basecamp CLI project. The rationale is sound: the CLI is a statically linked Go binary with no runtime dependencies that requires browser OAuth, system keyring access, and shell integration — features that don't work in a container — making Docker images of little practical value.
Changes:
- Deleted
Dockerfile.goreleaser(the minimal distroless image spec used for Docker builds) - Removed the
dockers_v2section from.goreleaser.yaml(multi-arch GHCR image publishing config) - Cleaned up
.github/workflows/release.yml: removed QEMU/Docker Buildx/GHCR login steps, droppedpackages: writepermission, and halved the release job timeout from 30 to 15 minutes
Reviewed changes
Copilot reviewed 3 out of 3 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
Dockerfile.goreleaser |
Deleted entirely; the distroless container image spec is no longer needed |
.goreleaser.yaml |
Removed dockers_v2 block that published multi-arch images to ghcr.io/basecamp/cli |
.github/workflows/release.yml |
Removed Docker-related steps (QEMU, Buildx, GHCR login), dropped packages: write permission (was solely for GHCR push), and reduced timeout from 30 to 15 minutes |
No stale Docker or GHCR references remain in the release config, documentation, or other workflow files. The .goreleaser.yaml ends cleanly, the permissions section is correctly trimmed, and the timeout reduction is well-motivated by removing the QEMU-dependent slow path.
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
What
Remove Docker multi-arch image builds from the release pipeline.
Why
The CLI is a statically-linked Go binary (
CGO_ENABLED=0) with zero runtime dependencies, cross-compiled for 10 OS/arch targets. Docker adds no value for an interactive CLI that requires browser OAuth, system keyring access, and shell integration — none of which work in a container.QEMU multi-arch builds were the slowest part of the release pipeline (the
timeout-minutes: 30existed because of QEMU hangs). Release job timeout reduced to 15 minutes.Removed:
Dockerfile.goreleaserdockers_v2section from.goreleaser.yamlrelease.ymlpackages: writepermission (was only needed for GHCR push)Testing
goreleaser checkpasses