Moves the Containerfile and build.sh added in the previous CI fix up into bread-ecosystem/ci/, so other GTK4 layer-shell products in the ecosystem can share it instead of each carrying their own copy. This repo's ci/build.sh is now a thin wrapper that clones bread-ecosystem at the commit pinned in ci/bread-ecosystem.rev and delegates to its ci/build.sh — pinned by sha rather than tracking main, so an unrelated change over there can't silently break this repo's release builds (the failure mode the bread-theme test fix a moment ago was caused by). Verified locally: clippy, test, and release build all pass through the new delegator path.
4.1 KiB
Contributing
breadpad — Quick-capture scratchpad and note viewer (breadman) with AI classification.
Part of the bread ecosystem; this repo follows the same branch/release workflow as every other ecosystem product.
Branches
There is one long-lived branch: main. All day-to-day work lands here.
Every push to main automatically builds and publishes a dev-track
build (see Tracks below) — a real install you can test before cutting
anything more formal.
New work — features and bug fixes alike — goes on a short-lived branch:
feature/<short-name>
fix/<issue-number-or-short-name>
Branch off main, open a PR/push back into main when ready. Short-lived
branches get deleted on merge — they never accumulate the kind of drift a
second long-lived branch does.
The release cycle
There's no separate beta or release branch — "stable" and "beta" are both
just tags on main, not branches that need to be kept in sync:
- Work accumulates on
mainviafeature/x/fix/xbranches. Each push auto-publishes a dev build — install it withbakery track set devandbakery update --all, then fix anything broken with another push. - When you want to stabilize before a real release, tag a release
candidate:
git tag vX.Y.Z-rc.1 && git push origin vX.Y.Z-rc.1(push to both remotes). That tag alone triggers a beta-track build — "freezing" is just pausing pushes tomainwhile you test it, not a branch operation. Cut-rc.2,-rc.3, etc. for further fixes. - Once an RC has gone without issues, tag the real release:
git tag vX.Y.Z && git push origin vX.Y.Z— that's what triggers the signed stable release build.
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 | a vX.Y.Z tag |
beta |
Latest release candidate | a vX.Y.Z-rc.N tag |
dev |
Bleeding edge | main, on every push |
Dev versions are auto-computed (X.Y.Z-dev.<timestamp>+<sha>) from the
latest published stable tag, so they always sort as newer than what you
have installed — no manual version bumping needed. Beta versions are just
the RC tag itself (already valid semver, already sorts below the real
release it's a candidate for).
Local development
cargo build --release --workspace
cargo test --release --workspace
CI
check.yml— clippy + test, triggered on push tofeature/**/fix/**. Fast-fail before anything reachesmain.dev-release.yml— triggered on push tomain.rc-release.yml— triggered on anyvX.Y.Z-rc.Ntag push.release.yml— triggered on any otherv*tag push, cuts the actual stable release.
All of these build inside a pinned Arch Linux container on a self-hosted
runner — not the runner host's native environment. Arch's repos carry
current gtk4/libadwaita/gtk4-layer-shell as prebuilt packages, so
there's no from-source library build to go stale. The Containerfile and
build script are shared across bread-ecosystem GTK4 products, living in
bread-ecosystem/ci/; ci/build.sh here is a thin wrapper that clones
that repo at the commit pinned in ci/bread-ecosystem.rev (not main —
an unrelated change there shouldn't silently affect this repo's release
builds) and delegates to it. Bump the pin deliberately when you want the
shared image or build logic updated. A ci/deps.txt here (currently
absent — breadpad needs nothing beyond the shared base) would layer on
extra pacman packages if that ever changes. Nothing runs automatically on
plain commits or PRs beyond the jobs listed 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.