Release Automation#
Bamboo uses release-please to fully automate versioning, changelog generation, and Hex package publishing. The pipeline has two stages: a release PR stage and a publish stage.
How It Works#
Push to main
│
▼
release.yaml — runs release-please-action
│
▼
Release Please opens/updates a release PR
│ (bumps mix.exs, manifest, CHANGELOG.md, README.md)
▼
PR is merged
│
▼
GitHub Release is created
│
▼
production.yaml — publishes to Hex.pm
Stage 1 — Release PR (.github/workflows/release.yaml)
Triggered on every push to main. Runs googleapis/release-please-action@v5 and either opens a new release PR or updates the existing one. It reads configuration from two files:
.github/release-please-config.json— definesrelease-type: elixir, changelog sections (Features, Bug Fixes, Miscellaneous), asentence-caseplugin, and—critically—listsREADME.mdas anextra-filesentry so the installation snippet is updated alongsidemix.exs..github/release-please-manifest.json— tracks the current released version (e.g.,"." : "2.5.0"). This is the source of truth release-please uses to determine what the next version should be.
Stage 2 — Hex Publish (.github/workflows/production.yaml)
Triggered on GitHub release events (released or prereleased). Compiles with docs and runs mix hex.publish --yes using the HEX_API_KEY secret.
What Gets Updated in a Release PR#
When release-please generates a release PR (e.g., PR #767 "chore(main): release 2.5.1"), it automatically updates:
| File | Change |
|---|---|
mix.exs | Version string bumped |
.github/release-please-manifest.json | Root version key updated |
CHANGELOG.md | New version section added with linked commits/issues |
README.md | Installation snippet version updated (via extra-files) |
The version bump type (patch / minor / major) is determined by Conventional Commits in the merge history: fix: → patch, feat: → minor, feat!: or BREAKING CHANGE → major.
Configuration Ownership#
Both .github/release-please-config.json and all workflow files carry the comment:
"This file is synced with beam-community/common-config. Any changes will be overwritten."
This means the release automation config is centrally managed in the beam-community/common-config repository. Do not edit these files locally — submit changes upstream to common-config instead.
Key Files at a Glance#
| File | Purpose |
|---|---|
.github/workflows/release.yaml | Triggers release-please on push to main |
.github/workflows/production.yaml | Publishes to Hex.pm on GitHub release |
.github/release-please-config.json | Release-please behavior, changelog structure, extra-files |
.github/release-please-manifest.json | Current version state tracked by release-please |
README.md (installation section) | Auto-updated version snippet (managed via extra-files) |