Documents the dev/beta/main branch and release-track workflow shared across the bread ecosystem. See bread-ecosystem's docs/release-channels.md for the full policy this implements.
3.7 KiB
Contributing
breadclip — Wayland clipboard history manager for Hyprland (daemon + GTK4 popup).
Part of the bread ecosystem; this repo follows the same branch/release workflow as every other ecosystem product.
Branches
main— release branch, always tag-ready. Nothing is committed to it directly; it only moves forward via abetamerge (see below).dev— integration branch. All day-to-day work lands here first. Every push todevautomatically builds and publishes a dev-track build (see Tracks below) — use this to test your change in a real install before it goes any further.beta— a frozen stabilization branch, cut fromdevperiodically. Every push tobetaautomatically builds and publishes a beta-track build. While a freeze is active, only fixes for issues found in that freeze should land onbeta.
New work — features and bug fixes alike — goes on a short-lived branch:
feature/<short-name>
fix/<issue-number-or-short-name>
Branch off dev, open a PR/push back into dev when ready. If you're fixing
something reported against an active beta freeze, branch off beta
instead, merge the fix there to unblock testers, and also forward the same
fix into dev so it doesn't quietly reappear next cycle.
The release cycle
- Work accumulates on
devviafeature/x/fix/xbranches. Each push auto-publishes a dev build — install it withbakery track set devandbakery update --all, then report or fix anything broken with another push todev. - Once
devhas gone roughly a week without new issues,betais cut fresh fromdev's current tip. This freezes it as the stabilization target —devkeeps moving independently starting the next cycle. betais open for anyone to test:bakery track set betaandbakery update --all. File issues against anything you find on this repo's Forgejo issue tracker. Fixes land viafix/<issue>branches merged intobeta.- Once
betahas gone roughly a month without new issues, it's merged intomainand taggedvX.Y.Z— that tag is what actually triggers the stable release build.betais then reset fromdevto start the next cycle.
Tracks, from a user's perspective
bakery track show # what you're currently on (defaults to stable)
bakery track set dev # or beta, or stable
bakery update --all # pull the latest build on your current track
| Track | What it is | Published from |
|---|---|---|
stable |
The last tagged release | main, on a vX.Y.Z tag push |
beta |
Current stabilization freeze | beta, on every push |
dev |
Bleeding edge | dev, on every push |
Dev/beta versions are auto-computed (X.Y.Z-dev.<timestamp>+<sha> /
-beta.…) from the latest published stable tag, so they always sort as
newer than what you have installed — no manual version bumping needed when
pushing to dev or beta.
Local development
cargo build --release --workspace
cargo test --release --workspace
CI
dev-release.yml— triggered on push todev.beta-release.yml— triggered on push tobeta.release.yml— triggered on av*tag push, cuts the actual stable release.
All CI runs on a self-hosted runner; nothing runs automatically on plain commits or PRs beyond the track builds above. See bread-ecosystem's docs/release-channels.md for the full policy, including how a new product gets wired onto these tracks.
Questions
Open an issue on this repo's Forgejo tracker.