-
Notifications
You must be signed in to change notification settings - Fork 0
Releasing
Releases are fully CI-driven by goreleaser. Publishing is essentially "push a tag."
Pushing a tag matching v* triggers .github/workflows/release.yml, which runs
goreleaser release --clean on a macos-latest runner, builds archives +
checksums, generates grouped release notes from Conventional Commits, and
publishes a GitHub Release.
Because every target is cgo (tree-sitter + SQLite are C), the toolchain is split:
-
darwin (amd64 + arm64) builds natively with the runner's Apple
clang + SDK.
zigcannot cross-compile darwin reliably — macOS needs Apple system libraries (libresolv, frameworks) it doesn't bundle, which surfaces asAccessDeniedorunable to find dynamic system library 'resolv'. -
linux (amd64 + arm64) builds via
zig cc, which ships a self-contained C toolchain and needs no macOS SDK.
Three native pieces, handled in the pipeline:
- sqlite-vec (vec0) is statically linked — nothing to ship.
- libtokenizers.a is fetched per target and linked at build time.
-
onnxruntime is loaded at runtime (dlopen), so it is bundled in each
archive beside the binary; the loader finds it next to the executable or via
COLUMBUS_ORT_LIB. Pinned to a version exposing the API the Go binding needs.
goreleaser fetches the model weights (//go:embed) before building, stages the
libs per target via scripts/fetch-native.sh, and adds the onnxruntime lib plus
LICENSE/THIRD_PARTY.md to every archive.
Publishing uses a repo secret, RELEASER_TOKEN, exposed to goreleaser as
GITHUB_TOKEN.
Artifacts produced:
-
columbus_<version>_{darwin,linux}_{amd64,arm64}.tar.gz(binary + onnxruntime lib + licenses) checksums.txt- Auto-generated changelog (grouped: Features, Bug Fixes, Performance, …)
# 1. Make sure main is green and your changes are merged.
# 2. Tag (annotated) and push:
git tag -a v0.1.0 -m "v0.1.0"
git push origin v0.1.0Watch it:
gh run watch
gh release view v0.1.0make release-check # = goreleaser check — lint the config
make release-test # = goreleaser release --snapshot --clean — full dry runmake release-test runs the same four-target cross-compile the CI release does
but publishes nothing; artifacts land in dist/. Run it on macOS with zig
installed so it mirrors the CI runner (darwin native + linux via zig). On Linux
the darwin targets will fail — that's expected, and exactly why CI uses a macOS
runner.
prerelease: auto means a tag like v0.1.0-rc.1 is published as a pre-release;
plain v0.1.0 is a full release.
gh release delete v0.1.0 --yes
git push --delete origin v0.1.0
git tag -d v0.1.0
# fix, then re-tagColumbus — the navigator your coding agent has been missing · local-only, deterministic code context · Repository · Issues · MIT License
Getting started
Concepts
Guides
- Using Columbus with Your Agent
- Searching Effectively
- Navigating Code
- Project Memory
- Tracking Work: Epics, Stories & Tasks
- Keeping the Index Fresh
Command reference
Reference
- Output Modes
- JSON Contract & Errors
- Exit Codes
- Configuration
- Supported Languages
- Color & Environment
Project