Skip to content

Commit c94dd30

Browse files
committed
Add release plan documentation for versioning and release process
1 parent 299148d commit c94dd30

1 file changed

Lines changed: 92 additions & 0 deletions

File tree

release-plan.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Release Plan
2+
3+
Release process for `rustyfarian-network`.
4+
Covers versioning, pre-flight checks, publish targets, and post-release steps.
5+
6+
## Versioning
7+
8+
- **Scheme:** SemVer (pre-1.0 — minor bumps signal breaking changes)
9+
- **Lockstep:** all 13 workspace crates move together at the same version
10+
- **Snapshot convention:** none (we tag the release commit, no `-SNAPSHOT` between releases)
11+
- **Who decides version:** maintainer, based on `CHANGELOG.md` `[Unreleased]` content
12+
13+
## Branch and Tag Convention
14+
15+
- **Release branch:** `prepare-release` → merged to `main` after publish
16+
- **Tag format:** `vX.Y.Z` (annotated)
17+
- **Tagging:** manual on the release commit on `main`
18+
19+
## Pre-flight Checklist
20+
21+
Before any release:
22+
- [ ] Working tree clean on `prepare-release` (untracked `review-queue/` is OK)
23+
- [ ] `just fmt` clean
24+
- [ ] `just verify` passes (fmt-check + cargo deny + check + clippy)
25+
- [ ] `just test` passes (all pure-crate host tests)
26+
- [ ] At least one hardware example builds via `just build-example <name>` for each tier touched (sanity check; not exhaustive)
27+
- [ ] `cargo audit` shows no new advisories beyond those allow-listed in `deny.toml`
28+
- [ ] `CHANGELOG.md` `[Unreleased]` has entries for the target version
29+
- [ ] All 13 crates' `version = "X.Y.Z"` in `crates/*/Cargo.toml` are consistent
30+
31+
## Version Bump
32+
33+
Files to update when bumping the version:
34+
- `crates/espnow-pure/Cargo.toml``version`
35+
- `crates/lora-pure/Cargo.toml``version`
36+
- `crates/ota-pure/Cargo.toml``version`
37+
- `crates/wifi-pure/Cargo.toml``version`
38+
- `crates/rustyfarian-network-pure/Cargo.toml``version`
39+
- `crates/rustyfarian-esp-hal-lora/Cargo.toml``version`
40+
- `crates/rustyfarian-esp-hal-ota/Cargo.toml``version`
41+
- `crates/rustyfarian-esp-hal-wifi/Cargo.toml``version`
42+
- `crates/rustyfarian-esp-idf-espnow/Cargo.toml``version`
43+
- `crates/rustyfarian-esp-idf-lora/Cargo.toml``version`
44+
- `crates/rustyfarian-esp-idf-mqtt/Cargo.toml``version`
45+
- `crates/rustyfarian-esp-idf-ota/Cargo.toml``version`
46+
- `crates/rustyfarian-esp-idf-wifi/Cargo.toml``version`
47+
48+
Post-release bump target: none (next-version bump happens when the next `[Unreleased]` block is finalised)
49+
50+
## Publish
51+
52+
**Target registry:** none — tag-only on GitHub
53+
**Publish command:** `git push origin main --follow-tags`
54+
**Credentials:** standard GitHub push credentials (no registry tokens needed)
55+
**Signing:** not required (commit / tag GPG signing optional, follow whatever git is already configured to do)
56+
57+
## Changelog
58+
59+
**Location:** `CHANGELOG.md`
60+
**Format:** Keep a Changelog 1.1.0
61+
**Process:** rename `## [Unreleased]` to `## [X.Y.Z] - YYYY-MM-DD`; create a fresh empty `## [Unreleased]` block above it for next cycle
62+
63+
## GitHub Release
64+
65+
- [ ] Create release page at: `https://github.com/datenkollektiv/rustyfarian-network/releases/new`
66+
- [ ] Use tag `vX.Y.Z`
67+
- [ ] Title: `vX.Y.Z`
68+
- [ ] Body: paste the `## [X.Y.Z]` section from `CHANGELOG.md`
69+
- [ ] No artifact attachments (workspace is library crates; users consume via git dep)
70+
71+
## Post-release Steps
72+
73+
- [ ] Merge `prepare-release``main` (fast-forward)
74+
- [ ] Update `docs/ROADMAP.md` if any items shipped in this release are still listed as in-progress
75+
- [ ] Verify the GitHub release page is publicly visible and the tag resolves
76+
77+
## Rollback Procedure
78+
79+
If a release must be retracted after tagging:
80+
1. Delete remote tag: `git push --delete origin vX.Y.Z`
81+
2. Delete local tag: `git tag -d vX.Y.Z`
82+
3. Delete the GitHub release page (via web UI or `gh release delete vX.Y.Z`)
83+
4. Revert the release commit on `main`: `git revert <release-commit-sha>` and push
84+
85+
Note: because nothing is published to a registry, rollback is fully reversible.
86+
87+
## Release Record Location
88+
89+
Each release produces files in `release/`:
90+
1. `YYYY-MM-DD-<version>-preflight.md` — pre-flight assessment
91+
2. `YYYY-MM-DD-<version>-plan.md` — ordered execution plan
92+
3. `YYYY-MM-DD-<version>-record.md` — what was published and what remains

0 commit comments

Comments
 (0)