You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

176 lines
13 KiB

  1. # Breaking Changes
  2. This document describes QMK's Breaking Change process. A Breaking Change is any change which modifies how QMK behaves in a way that in incompatible or potentially dangerous. We limit these changes so that users can have confidence that updating their QMK tree will not break their keymaps.
  3. This also includes any keyboard moves within the repository.
  4. The breaking change period is when we will merge PR's that change QMK in dangerous or unexpected ways. There is a built-in period of testing so we are confident that any problems caused are rare or unable to be predicted.
  5. ## What has been included in past Breaking Changes?
  6. * [2022 Aug 27](ChangeLog/20220827.md)
  7. * [2022 May 28](ChangeLog/20220528.md)
  8. * [2022 Feb 26](ChangeLog/20220226.md)
  9. * [2021 Nov 27](ChangeLog/20211127.md)
  10. * [2021 Aug 28](ChangeLog/20210828.md)
  11. * [2021 May 29](ChangeLog/20210529.md)
  12. * [2021 Feb 27](ChangeLog/20210227.md)
  13. * [2020 Nov 28](ChangeLog/20201128.md)
  14. * [2020 Aug 29](ChangeLog/20200829.md)
  15. * [2020 May 30](ChangeLog/20200530.md)
  16. * [2020 Feb 29](ChangeLog/20200229.md)
  17. * [2019 Aug 30](ChangeLog/20190830.md)
  18. ## When is the next Breaking Change?
  19. The next Breaking Change is scheduled for November 26, 2022.
  20. ### Important Dates
  21. * 2022 Aug 27 - `develop` is tagged with a new release version. Each push to `master` is subsequently merged to `develop` by GitHub actions.
  22. * 2022 Oct 29 - `develop` closed to new PR's.
  23. * 2022 Oct 29 - Call for testers.
  24. * 2022 Nov 12 - Last day for merges -- after this point `develop` is locked for testing and accepts only bugfixes
  25. * 2022 Nov 19 - `develop` is locked, only critical bugfix PR's merged.
  26. * 2022 Nov 24 - `master` is locked, no PR's merged.
  27. * 2022 Nov 26 - Merge `develop` to `master`.
  28. * 2022 Nov 26 - `master` is unlocked. PR's can be merged again.
  29. ## What changes will be included?
  30. To see a list of breaking change candidates you can look at the [`breaking_change` label](https://github.com/qmk/qmk_firmware/pulls?q=is%3Aopen+label%3Abreaking_change+is%3Apr). New changes might be added between now and when `develop` is closed, and a PR with that label applied is not guaranteed to be merged.
  31. If you want your breaking change to be included in this round you need to create a PR with the `breaking_change` label and have it accepted before `develop` closes. After `develop` closes no new breaking changes will be accepted.
  32. Criteria for acceptance:
  33. * The PR is complete and ready to merge
  34. * The PR has a ChangeLog file describing the changes under `<qmk_firmware>/docs/Changelog/20221126`.
  35. * This should be in Markdown format, with a name in the format `PR12345.md`, substituting the digits for your PR's ID.
  36. * One strong recommendation that the ChangeLog document matches the PR description on GitHub, so as to ensure traceability.
  37. ## Checklists
  38. This section documents various processes we use when running the Breaking Changes process.
  39. ### 4 Weeks Before Merge
  40. * `develop` is now closed to new PR's, only fixes for current PR's may be merged
  41. * Post call for testers: message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
  42. * `@Breaking Changes Updates -- Hey folks, last day for functional PRs to be raised against qmk_firmware for this breaking changes cycle is today.`
  43. ### 2 Weeks Before Merge
  44. * `develop` is now closed to existing PR merges, only bugfixes for previous merges may be included
  45. * Post call for testers: message `@Breaking Changes Updates` on `#qmk_firmware` in Discord.
  46. * `@Breaking Changes Updates -- Hey folks, last day for functional PRs to be merged into qmk_firmware for this breaking changes cycle is today. After that, we're handling bugfixes only.`
  47. ### 1 Week Before Merge
  48. * `develop` is now closed to PR merges, only critical bugfixes may be included
  49. * Announce that master will be closed from <2 Days Before> to <Day of Merge> -- message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
  50. * `@Breaking Changes Updates -- Hey folks, last day for functional PRs to be merged into qmk_firmware for this breaking changes cycle is today. After that, we're handling bugfixes only.`
  51. ### 2 Days Before Merge
  52. * `master` is now closed to PR merges
  53. * Announce that master is closed for 2 days
  54. * `@Breaking Changes Updates -- Hey folks, the master branch of qmk_firmware is now locked for the next couple of days while we prepare to merge the newest batch of changes from develop.`
  55. ### Day Of Merge
  56. * `qmk_firmware` git commands
  57. * `git checkout develop`
  58. * `git pull --ff-only`
  59. * Edit `readme.md`
  60. * Remove the notes about `develop`
  61. * Roll up the ChangeLog into one file.
  62. * `git commit -m 'Merge point for <DATE> Breaking Change'`
  63. * `git push upstream develop`
  64. * GitHub Actions
  65. * Create a PR for `develop`
  66. * **Turn off 'Automatically delete head branches' for the repository** -- confirm with @qmk/directors that it is done before continuing
  67. * `qmk_firmware` git commands
  68. * `git checkout master`
  69. * `git pull --ff-only`
  70. * `git merge --no-ff develop`
  71. * `git tag <next_version>` # Prevent the breakpoint tag from confusing version incrementing
  72. * `git push upstream <next_version>`
  73. * `git push upstream master`
  74. ## Post-merge operations
  75. ### Updating the `develop` branch
  76. This happens immediately after the previous `develop` branch is merged to `master`.
  77. * `qmk_firmware` git commands
  78. * `git checkout master`
  79. * `git pull --ff-only`
  80. * `git checkout develop`
  81. * `git pull --ff-only`
  82. * `git merge --no-ff master`
  83. * Edit `readme.md`
  84. * Add a big notice at the top that this is a testing branch. See previous revisions of the `develop` branch.
  85. * Include a link to this document
  86. * `git commit -m 'Branch point for <DATE> Breaking Change'`
  87. * `git tag breakpoint_<YYYY>_<MM>_<DD>`
  88. * `git push upstream breakpoint_<YYYY>_<MM>_<DD>`
  89. * All submodules under `lib` now need to be checked against their QMK-based forks:
  90. * `git submodule foreach git log -n1`
  91. * Validate each submodule SHA1 matches the qmk fork, e.g. for ChibiOS:
  92. * Go to [qmk/ChibiOS](https://github.com/qmk/ChibiOS)
  93. * Compare the commit hash in the above output to the commit hash in the repository
  94. * If there's a mismatch, that repository needs to have its `master` branch updated to match (otherwise Configurator won't work):
  95. * `cd lib/chibios`
  96. * `git fetch --all`
  97. * `git checkout master`
  98. * `git reset --hard <commit hash>`
  99. * `git push origin master --force-with-lease`
  100. * Announce that both `master` and `develop` are now unlocked -- message `@Breaking Changes Updates` on `#qmk_firmware` in Discord:
  101. * `@Breaking Changes Updates -- Hey folks, develop has now been merged into master -- newest batch of changes are now available for everyone to use!`
  102. * (Optional) [update ChibiOS + ChibiOS-Contrib on `develop`](chibios_upgrade_instructions.md)
  103. ### Set up Discord events for the next cycle
  104. * Update this file with the new dates: `docs/breaking_changes.md`
  105. * Create Events on the QMK Discord - "Somewhere Else" => "GitHub":
  106. * Event #1:
  107. | Field | Value |
  108. |-------------|-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  109. | Topic | Last `develop` functionality PRs to be raised |
  110. | Start Date | ((5 weeks before merge)), 12:00am |
  111. | End Date | ((4 weeks before merge)), 12:00am |
  112. | Description | This is the last window for functional PRs to be raised against `develop` for the current breaking changes cycle. After ((4 weeks before merge)), any new PRs targeting `develop` will be deferred to the next cycle. |
  113. * Event #2:
  114. | Field | Value |
  115. |-------------|------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  116. | Topic | Last `develop` functionality PRs to be merged |
  117. | Start Date | ((4 weeks before merge)), 12:00am |
  118. | End Date | ((2 weeks before merge)), 12:00am |
  119. | Description | This is the last window for functional PRs to be merged into `develop` for the current breaking changes cycle. After ((2 weeks before merge)), only bugfix PRs targeting `develop` will be considered for merge. |
  120. * Event #3:
  121. | Field | Value |
  122. |-------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|
  123. | Topic | `develop` closed for merges |
  124. | Start Date | ((2 weeks before merge)), 12:00am |
  125. | End Date | ((day of merge)), 12:00am |
  126. | Description | This is the deadline for functionality bugfix PRs to be merged into `develop` for the current breaking changes cycle. After ((1 week before merge)), only critical bugfix PRs targeting `develop` will be considered for merge. |
  127. * Event #4:
  128. | Field | Value |
  129. |-------------|----------------------------------------------------------------------------------------------------------------------|
  130. | Topic | `master` closed for merges |
  131. | Start Date | ((2 days before merge)), 12:00am |
  132. | End Date | ((day of merge)), 12:00am |
  133. | Description | This is the period that no PRs are to be merged to `master`, so that the merge of `develop` into `master` is stable. |
  134. * Event #5:
  135. | Field | Value |
  136. |-------------|--------------------------------------------------------------------------------------------------------------------------------------------|
  137. | Topic | `develop` merges to `master` |
  138. | Start Date | ((day of merge)), 12:00am |
  139. | End Date | ((day of merge)), 11:45pm |
  140. | Description | At some point, QMK will merge `develop` into `master` and everyone will be able to reap the benefits of the newest batch of functionality. |