Skip to content

Adopt VERSION-file versioning and dispatch-driven releases - #4

Merged
stut merged 2 commits into
mainfrom
feat/wakuwi-release-system
Jul 20, 2026
Merged

stut merged 2 commits into
mainfrom
feat/wakuwi-release-system

Conversation

@stut

@stut stut commented Jul 20, 2026

Copy link
Copy Markdown
Owner

Ports the versioning and release system from the wakuwi repo.

How it works

  • VERSION file is the single source of truth, holding X.Y.Z-dev during development — currently 1.3.0-dev so the next release is v1.3.0. The Makefile and Dockerfile inject it via -X main.version, and the startup banner prints it. A plain go build shows dev.
  • Releases are cut manually from the Actions tab: run the Release workflow with a minor or major bump. It runs the tests, strips -dev, commits and tags vX.Y.0, immediately bumps VERSION to the next -dev cycle, builds the five platform binaries, pushes a multi-arch (amd64/arm64) image to ghcr.io/stut/s3dir tagged vX.Y.0 + latest, and creates a GitHub release with --generate-notes. No more hand-tagging.
  • Dockerfile now cross-compiles from $BUILDPLATFORM for $TARGETOS/$TARGETARCH, so multi-arch builds don't run the Go compiler under QEMU, and accepts the VERSION build-arg.
  • docker-publish.yml loses its tag trigger — versioned images now come from the release workflow; branch pushes still publish to Docker Hub as before.

Differences from wakuwi: no UI build steps, no Homebrew tap step, and checkout uses the default GITHUB_TOKEN — if a branch ruleset is ever added to main, the release workflow will need a deploy key like wakuwi's RELEASE_DEPLOY_KEY to push its version commits.

Testing

  • make build binary prints Version: 1.3.0-dev; Docker image built with --build-arg VERSION=1.3.0-test prints Version: 1.3.0-test
  • Full test suite and lint pass
  • CLAUDE.md updated to document the release process

stut added 2 commits July 20, 2026 21:51
Ports the versioning and release system from the wakuwi repo:

- VERSION file holds the current version (1.3.0-dev); the Makefile and
  Dockerfile inject it via -X main.version and the server banner prints
  it
- Dockerfile cross-compiles for the target platform from the build
  platform (no emulation in multi-arch builds) and accepts a VERSION
  build-arg
- release.yml is now workflow_dispatch with a minor/major bump input:
  it strips the -dev suffix, commits and tags vX.Y.0, bumps VERSION to
  the next -dev cycle, builds platform binaries, pushes a multi-arch
  image to ghcr.io/stut/s3dir, and creates a GitHub release with
  generated notes
- docker-publish.yml no longer triggers on tags; versioned images come
  from the release workflow

The next release cut from this will be v1.3.0.
Release images are published to GHCR by the release workflow, so the
Docker Hub publish workflow, its setup guides and all references to it
are gone.
@stut
stut merged commit 3239409 into main Jul 20, 2026
6 checks passed
@stut
stut deleted the feat/wakuwi-release-system branch July 20, 2026 20:58
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