You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: docs/development/release-create.md
+84-21Lines changed: 84 additions & 21 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,11 +2,11 @@
2
2
3
3
This document describes the process for creating INAV firmware and configurator releases.
4
4
5
-
> **Note:** This document is designed to be used with coding assistants (such as Claude Code) that can execute the commands and automate parts of the release process. Update this document with lessons learned after each release.
5
+
> **Note:** This document is designed to be used with coding assistants (such as Claude Code) that can execute the commands and automate parts of the release process. Update this document with lessons learned after each release. Sensei has written more detailed guides for his process in the third-party repo https://github.com/sensei-hacker/inav-claude/tree/master/claude/release-manager
6
6
7
7
## CRITICAL PRINCIPLE: Verify Builds BEFORE Creating Tags
8
8
9
-
**Never tag a commit that hasn't been proven to build successfully.**
9
+
**Never tag a commit that hasn't been fully tested successfully.**
- Update: `npm version <X.Y.Z> --no-git-tag-version`
95
95
96
+
## Version String Format (RC Releases)
97
+
98
+
**CRITICAL:** Establish the canonical version string before starting any release work.
99
+
100
+
RC version strings must use **lowercase `rc`** joined to the version with a **hyphen**:
101
+
102
+
| Correct | Wrong |
103
+
|---------|-------|
104
+
|`9.1.0-rc1`|`9.1.0-RC1`|
105
+
|`9.1.0-rc2`|`9.1.0_RC2`|
106
+
|`9.0.0-rc3`|`9.0.0-rc_3`|
107
+
108
+
The Configurator firmware flasher uses a case-sensitive regex to parse firmware filenames. Uppercase `RC` or underscore separators cause the target board name to be misread, making the firmware invisible in the flasher even after a successful release upload.
**Before including a PR in release notes**, confirm it is actually merged into the release branch, not a future branch. `gh pr list` shows PRs by merge date regardless of target branch — a PR merged to `maintenance-10.x` will appear even though it's not in the current release.
340
+
341
+
```bash
342
+
# Confirm a PR's merge commit exists on the release branch
For RC releases, add `--prerelease` so GitHub marks them as pre-release and they don't appear as the latest stable release. Use `--target <commit-sha>` to tag a specific commit (safer than tagging the current HEAD, and works even when the local repo is locked).
Open INAV Configurator → Firmware Flasher tab → enable "Show unstable releases". The new firmware version must appear in the release list. This confirms the GitHub release is properly formatted and the filename regex parsed correctly.
537
+
538
+
Also select a target whose name contains spaces (e.g., `MAMBAH743 2022B GYRO2`) and confirm it displays with spaces, not underscores — this validates that multi-word target names parsed correctly.
539
+
540
+
If the firmware does not appear: check that filenames follow `inav_<version>-rc<n>_<TARGET>.hex` exactly (lowercase `rc`, hyphen separator). See [Asset Naming Conventions](#asset-naming-conventions).
541
+
480
542
```bash
481
-
gh release edit <version> --draft=false
543
+
# Step 3: Publish configurator release (only after firmware verified in flasher)
0 commit comments