# Процес випуску This page documents the PX4 release process for maintainers. It covers the steps from preparing a release candidate through to the final announcement. ## Загальний огляд PX4 uses a branch-based release workflow: - **`release/X.Y`** (e.g., `release/1.17`, `release/2.0`) - The active development branch for a specific release where changes are merged and tested - **`stable`** - Points to the latest stable release tag; reset after each release - **`beta`** - For flight testers to validate release candidates The target release cycle is approximately 6 months, best effort. The actual cadence depends on testing results and maintainer availability, with an ongoing goal to shorten the cycle. Releases are tracked on the [PX4 Release Project Board](https://github.com/orgs/PX4/projects/45), which is reused and renamed for each release cycle. ### Release Tag Progression Release branches go through the following tag stages: | Stage | Example | Branch Status | What Gets Merged | | ---------- | ---------------- | -------------- | ---------------------------------------------------------------------- | | **Alpha** | `v1.18.0-alpha1` | Open for fixes | Bug fixes and regression fixes only | | **Beta** | `v1.18.0-beta1` | Open for fixes | Bug fixes and regression fixes only | | **RC** | `v1.18.0-rc1` | Frozen | Nothing (unless veto vote passes) | | **Stable** | `v1.18.0` | Open for fixes | Bug fixes and regression fixes (for point releases) | :::info New features are never merged to release branches. Once a release branch is created from `main`, only bug fixes and regression fixes are accepted. New features must target `main` and will be included in the next release cycle. ::: ## Starting a New Release Cycle A new release cycle begins immediately after a stable release is published. This involves two votes during the [Weekly Community Q&A Call](../contribute/dev_call.md) when approving a stable release: 1. **Vote to publish the current release** - Approve the stable release for publication 2. **Vote on the next release name/number** - Decide the version number for the next release (e.g., v1.18 or v2.0) ### Prepare Release Notes Before Branching Release notes are built incrementally in [`main.md`](../releases/main.md), which accumulates changes as they land on `main`. Before creating the release branch: 1. Rename `main.md` to the version-specific file (e.g., `docs/en/releases/1.18.md`) 2. Add the new file to `SUMMARY.md` and `releases/index.md` 3. Reset `main.md` to a clean template for the next release cycle 4. Verify that documentation for all included contributions is complete 5. Search for instances of `main (planned for:` and replace with the release version now that it is known. So, for example `` is replaced with ``. Note that once the name of the next version is confirmed, badges may use the second form (e.g. ``. 6. Search for instances of ``. Remove this for features that are considered core and/or stable. :::tip Community members are encouraged to document changes as they are merged into `main`. This distributes the documentation workload and ensures changes are captured while they're fresh. ::: ### Create the Release Branch Once the next release version is decided, create the new release branch from `main` in PX4-Autopilot and the companion repositories: ```sh # PX4-Autopilot git checkout main && git pull git checkout -b release/1.18 git push origin release/1.18 ``` Matching release branches must also be created in: - [PX4/px4_msgs](https://github.com/PX4/px4_msgs) - [Auterion/px4-ros2-interface-lib](https://github.com/Auterion/px4-ros2-interface-lib) After creating the companion branches, update the [ROS integration test workflow](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/ros_integration_tests.yml) on the release branch to clone `px4-ros2-interface-lib` from the matching release branch: ```diff - git clone --recursive https://github.com/Auterion/px4-ros2-interface-lib.git + git clone --recursive --branch release/1.18 https://github.com/Auterion/px4-ros2-interface-lib.git ``` :::warning Once the release branches are created, they only accept bug fixes and regression fixes. All new feature development continues on `main`. ::: ### Create the Alpha Tag Immediately after creating the release branch, create the first alpha tag to mark the beginning of the release cycle: ```sh # On the new release branch git checkout release/1.18 # Create the signed alpha tag git tag -s v1.18.0-alpha1 -m "v1.18.0-alpha1" git push origin v1.18.0-alpha1 ``` Subsequent alpha tags can be created as fixes are merged (e.g., `v1.18.0-alpha2`, `v1.18.0-alpha3`). ## Release Steps ### 1. Review and Merge PRs (Alpha Phase) During the alpha phase, review pull requests targeting the release branch: - Review PRs according to the project's [contribution guidelines](../contribute/code.md) - Merge **bug fixes and regression fixes only** - New features must target `main`, not the release branch - Create additional alpha tags as fixes are merged (e.g., `v1.18.0-alpha2`) ### 2. Alpha Testing The _Dronecode Test Team_ (provided by [Ascend Engineering](https://www.ascendengineer.com) — Dronecode Silver member) conducts initial flight testing of alpha builds using: - The [test cards](../test_and_ci/test_flights.md) documented in the PX4 guide - A hardware matrix covering supported flight controllers and airframes Alpha testing focuses on identifying regressions and blockers early. The alpha phase is complete when: - All test cards pass across the core hardware matrix (no critical or high-severity failures) - All identified regressions have fixes merged or have been triaged as non-blocking - Release notes and documentation for included changes are complete ### 3. Create Beta Tag Once the alpha exit criteria above are met, create the first beta tag: ```sh # On the release branch git checkout release/1.18 git pull # Create the signed beta tag git tag -s v1.18.0-beta1 -m "v1.18.0-beta1" git push origin v1.18.0-beta1 ``` ### 4. Beta Testing Beta builds are published for wider community validation. Unlike alpha testing (which is conducted by the Dronecode Test Team on the core hardware matrix), beta testing focuses on: - **Community testing** — beta builds are made available for community members to test on their own hardware and airframe configurations - **Extended hardware coverage** — testing on hardware and configurations beyond the core test matrix - **Real-world flight scenarios** — longer flights, mission testing, and edge cases not covered by standard test cards During beta, continue to: - Review and merge **bug fixes and regression fixes only** - Create additional beta tags as fixes are merged (e.g., `v1.18.0-beta2`, `v1.18.0-beta3`) ### 5. Create Release Candidate Tag The beta phase is complete when: - No new critical or high-severity issues are reported for at least one beta tag cycle - All beta-reported regressions have fixes merged or have been triaged as non-blocking Once the beta exit criteria are met, create the first release candidate: ```sh # On the release branch git checkout release/1.18 git pull # Create the signed RC tag git tag -s v1.18.0-rc1 -m "v1.18.0-rc1" git push origin v1.18.0-rc1 ``` :::warning The branch is now frozen. No PRs will be merged unless a veto vote passes (see below). ::: :::tip Tags must be GPG-signed. Ensure your GitHub account is [configured for GPG signing](https://docs.github.com/en/authentication/managing-commit-signature-verification). Only maintainers with registered GPG keys can create release tags. ::: ### 6. RC Testing and Branch Freeze During RC testing, the release branch is frozen: - No PRs are merged by default - Testing focuses on final validation before stable release - Any issues found are documented and evaluated #### Veto Vote for Critical Fixes If a critical issue is discovered during RC testing that must be fixed before release: 1. Raise the issue during the [Weekly Community Q&A Call](../contribute/dev_call.md) 2. Present the case for why the fix is critical 3. Maintainers vote on whether to merge the fix 4. If approved, merge the fix and create a new RC tag (e.g., `v1.18.0-rc2`) ### 7) Release Vote The release vote takes place during the [Weekly Community Q&A Call](../contribute/dev_call.md): - Present the release status and test results - **Vote 1:** Core maintainers vote on whether to publish the release - **Vote 2:** Decide the name/number of the next release version - The call happens Wednesdays at 17:00 CET on [Discord](https://discord.com/invite/BDYmr6FA6Q) ### 8. Create and Push Release Tag After a successful vote, create the final release tag: ```sh # On the release branch git checkout release/1.18 git pull # Create the signed release tag git tag -s v1.18.0 -m "v1.18.0" git push origin v1.18.0 ``` ### 9. Update the Stable Branch Reset the `stable` branch to point to the new release tag: ```sh git checkout stable git reset --hard v1.18.0 git push --force origin stable ``` :::warning This is a force push that rewrites the stable branch history. Ensure you have the correct tag before executing. ::: ### 10. GitHub Release (Automated) When a version tag is pushed, the [build_all_targets.yml](https://github.com/PX4/PX4-Autopilot/blob/main/.github/workflows/build_all_targets.yml) GitHub Actions workflow automatically: 1. Builds firmware for all supported targets 2. Uploads firmware artifacts to AWS S3 (`Firmware/vX.Y.Z/` and updates `Firmware/stable/`) 3. Creates a **draft release** on GitHub with all `.px4` firmware files attached ### 11) Publish GitHub Release Edit the draft release on GitHub: - Add a brief description of major changes - Link to the full release notes in the documentation (e.g., `releases/1.18.md`) - Publish the release ### 12. Finalize Documentation Review and finalize the release notes that have been developed throughout the release cycle: - Ensure all noteworthy changes, new features, and upgrade guides are documented - Review for completeness and accuracy - See existing [release notes](../releases/index.md) for the expected format ### 13. Announce the Release Announce the release through official channels: - [PX4 Discuss Forum](https://discuss.px4.io/) - [PX4 Discord](https://discord.com/invite/dronecode) - Social media (Twitter/X, LinkedIn) - Dronecode newsletter ### 14. Start Next Release Cycle Immediately after publishing, start the next release cycle: - Create the new release branch from `main` (see [Create the Release Branch](#create-the-release-branch)) - Create the alpha tag for the new release - Create the initial documentation for the next release - Rename and prepare the project board (see [Project Board Management](#project-board-management)) ## Point Releases After a stable release is published, the release branch reopens for bug fixes and regression fixes to support point releases (e.g., `v1.18.1`). For patch releases: 1. Merge bug fixes and regression fixes to the release branch 2. Create beta tags for testing if needed (e.g., `v1.18.1-beta1`) 3. Create RC tags for final validation (e.g., `v1.18.1-rc1`) 4. After testing and vote, tag the point release 5. Update stable branch and publish ## Project Board Management The [PX4 Release Project Board](https://github.com/orgs/PX4/projects/45) is reused across release cycles to track issues and PRs for the current release. ### After a Release Once a release is published: 1. **Rename the project board** to reflect the next release version (e.g., "v1.17 Release" → "v1.18 Release") 2. **Review remaining items**: - Close items that are no longer relevant - Move incomplete items that should carry over to the next release - Remove items that were descoped or deferred indefinitely 3. **Update the board description** if needed to reflect the new release target ## Дивіться також - [Source Code Management](../contribute/code.md) - Branching model and contribution guidelines - [Test Flights](../test_and_ci/test_flights.md) - Flight test procedures and test cards - [Weekly Community Q&A Call](../contribute/dev_call.md) - Where release votes happen