This document describes how releases are managed for OpenAstroTracker-Firmware. It is intended for project developers with write access to the repository.
Releases are fully automated via release-please. The process requires no manual version bumping or changelog editing — both are driven by PR titles following the Conventional Commits specification.
PR merged → release-please updates its Release PR → maintainer merges Release PR → tag + GitHub Release created automatically
Every PR title must follow this format:
<type>: <short description>
CI will reject PR titles that do not conform.
| Type | Triggers | Example |
|---|---|---|
feat! or BREAKING CHANGE: footer |
major version bump | feat!: remove legacy serial protocol |
feat |
minor version bump | feat: add AZ/ALT steps-per-degree Meade command |
fix |
patch version bump | fix: correct sidereal rate after meridian flip |
perf |
patch version bump | perf: reduce interrupt latency in stepper ISR |
chore |
no version bump | chore: update platformio dependencies |
docs |
no version bump | docs: clarify wiring diagram for RAMPS |
refactor |
no version bump | refactor: extract stepper configuration logic |
test |
no version bump | test: add unit tests for DayTime rollover |
ci |
no version bump | ci: update clang-format action version |
The description becomes the changelog entry, so write it as a user-facing statement of what changed — not what you did internally.
After each PR is merged into develop, the release-please GitHub Action updates an open Release PR. This PR:
- Accumulates all
feat,fix, and other notable commits since the last release - Proposes the next semantic version (patch / minor / major based on commit types)
- Updates
CHANGELOG.mdwith categorised entries linked to PRs - Updates
Version.hwith the new version string
The Release PR stays open and self-updates as more PRs are merged. When you are ready to cut a release, simply merge the Release PR.
- Review the open Release PR (titled
chore(main): release V<version>) — check the proposed version and changelog entries. - Merge it into
develop. release-pleaseautomatically:- Creates a git tag
v<version>(e.g.v1.14.0) - Publishes a GitHub Release with the generated changelog
- Creates a git tag
No manual tag pushing, no manual Version.h edits.
Versions follow Semantic Versioning (MAJOR.MINOR.PATCH):
| Change | Bump |
|---|---|
| Breaking change in Meade protocol or configuration | Major |
| New feature, new board support, new Meade command | Minor |
| Bug fix, performance improvement | Patch |
| Chore, CI, refactor, test, docs | None |
All of the following must pass before a PR can be merged:
| Check | What it validates |
|---|---|
| PR Title (Conventional Commits) | PR title follows <type>: <description> format |
| Unit Tests | pio test -e native passes |
| Build (mksgenlv21) | Firmware compiles for MKS Gen L V2.1 |
| Build (mksgenlv2) | Firmware compiles for MKS Gen L V2 |
| Build (mksgenlv1) | Firmware compiles for MKS Gen L V1 |
| Build (esp32) | Firmware compiles for ESP32 |
| Build (ramps) | Firmware compiles for RAMPS |
| clang-format | Code formatting matches .clang-format; auto-fixed on same-repo branches |
Pre-built binaries are not published in GitHub Releases. Because the firmware is configured via generated header files (stepper drivers, sensors, display type, etc.), a generic binary would not be usable without recompilation. Users must build the firmware for their specific hardware configuration using PlatformIO.