This guide explains the release process for the Coolify CLI.
- Write access to the
coollabsio/coolify-clirepository - All changes merged to the target branch (
main) - All tests passing (
go test ./internal/...)
- Go to https://github.com/coollabsio/coolify-cli/releases/new
- Click "Choose a tag" and create a new tag:
- Tag name:
v1.x.x(must start withv, e.g.,v1.2.3) - Target:
main(or your target branch)
- Tag name:
- Release title:
v1.x.x(same as tag name) - Description: Write release notes describing:
- New features
- Bug fixes
- Breaking changes (if any)
- Example:
## What's New - Added support for database management - Improved error messages for API failures ## Bug Fixes - Fixed panic when config file is missing ## Breaking Changes - None
- Click "Publish release"
Once you publish the release:
- GitHub Actions automatically triggers the
release-cli.ymlworkflow - GoReleaser builds binaries for:
- Linux: amd64, arm64
- macOS (Darwin): amd64, arm64
- Windows: amd64, arm64
- Goreleaser injects the version from the tag into the binaries via ldflags (into
internal/version.version) - Binaries are automatically uploaded to the release
- A follow-up
update-versionjob then:- Updates the
versionconstant ininternal/version/checker.goto the new tag - Commits the bump to
mainaschore: bump version to vX.Y.Z - Force-moves the release tag to point at that new commit
- Updates the
- GoReleaser also publishes a Homebrew formula to the tap at
coollabsio/homebrew-coolify-cli(underFormula/coolify-cli.rb), using theHOMEBREW_TAP_GITHUB_TOKENsecret - The release becomes available at:
- GitHub:
https://github.com/coollabsio/coolify-cli/releases/tag/v1.x.x - Install script:
curl -fsSL https://cdn.coollabs.io/coolify/install.sh | bash - Homebrew:
brew install coollabsio/coolify-cli/coolify-cli go install:go install github.com/coollabsio/coolify-cli/coolify@v1.x.x
- GitHub:
After the workflow completes (usually 2-5 minutes), verify without touching your local install:
- Check the release page has all platform binaries (Linux/macOS/Windows × amd64/arm64)
- Confirm the
update-versionjob committed the bump onmain(look forchore: bump version to vX.Y.Z) and that the tag now points at that commit - Confirm
internal/version/checker.goonmainhas the new version - Confirm the Homebrew tap has a new
Formula/coolify-cli.rbcommit for this version at https://github.com/coollabsio/homebrew-coolify-cli
- Check the GitHub Actions logs at https://github.com/coollabsio/coolify-cli/actions
- Common issues:
- Syntax errors in Go code
- Test failures
- GoReleaser configuration issues
- The version is injected at build time via ldflags into
internal/version.version— you do not need to edit it manually before releasing. The post-releaseupdate-versionjob also rewritesinternal/version/checker.goonmain. - If the hardcoded fallback in
internal/version/checker.gois stale, check that theupdate-versionjob ran successfully after the release. - The tag must start with
v(e.g.,v1.2.3, not1.2.3) - Check that the workflow has write permissions (
contents: writeinrelease-cli.yml)
- Wait a few minutes for GitHub's CDN to update
- Check that binaries were uploaded to the release
- Verify the tag format is correct (
v1.x.x)
Before creating a release:
- All tests pass:
go test ./internal/... - Code is formatted:
go fmt ./... - Changes merged to
mainbranch - Release notes prepared
Note: You do not need to bump the version manually. GoReleaser injects the tag version via ldflags, and the
update-versionCI job commits the bump tointernal/version/checker.goafter the release.
After creating a release:
- GitHub Actions workflow completed successfully (both
release-cliandupdate-versionjobs) - All platform binaries are present on the release page
-
internal/version/checker.goonmainshows the new version - Homebrew tap has a fresh
Formula/coolify-cli.rbcommit
The release process uses these configuration files:
.goreleaser.yml- GoReleaser configuration (build matrix, archives, Homebrew tap) - entry point is./coolify/main.go.github/workflows/release-cli.yml- GitHub Actions workflowscripts/install.sh- User-facing install scriptinternal/version/checker.go- ContainsGetVersion()function that returns the current versioncoolify/main.go- Binary entry point forgo installsupportcoollabsio/homebrew-coolify-cli- External Homebrew tap updated automatically on each release
- The CLI has auto-update checking built-in (checks every 10 minutes)
- Users can manually update with
coolify update - Install script supports version pinning:
bash install.sh v1.2.3 - Homebrew users can install via
brew install coollabsio/coolify-cli/coolify-cli(the tap at https://github.com/coollabsio/homebrew-coolify-cli is auto-updated by GoReleaser) - Releases are immutable - if you need to fix something, create a new patch version