From 103712855c8b6425de920e9bb896bedd25596307 Mon Sep 17 00:00:00 2001 From: mikeller Date: Tue, 5 May 2020 00:17:12 +1200 Subject: [PATCH] Added instructions for how to add test targets to pull requests. --- .github/pull_request_template.md | 27 +++++------------- docs/development/Development.md | 8 ++++++ .../assets/pull_request_test_targets.png | Bin 0 -> 36356 bytes 3 files changed, 15 insertions(+), 20 deletions(-) create mode 100644 docs/development/assets/pull_request_test_targets.png diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 433b4d0e79..536d7517ca 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -9,23 +9,6 @@ From 25 March 2020 until the release of Betaflight 4.2.0 (scheduled for 01 May 2 3. All other pull requests will be scheduled for 4.3, and discussed / reviewed / merged into `master` after 4.2.0 has been released. Please keep in mind that this potentially means that you will have to rebase your changes if they are broken by bugfixes made for 4.2. -## Important: New requirements for the submission of new and updated targets - -As announced earlier in https://github.com/betaflight/betaflight#betaflight-40, Betaflight 4.0 is introducing a radically new way to define targets, the so-called 'Unified Targets'. - -This new approach makes it possible to use the same firmware binary (the so called 'Unified Target firmware') for all boards that share the same MCU type (only supported on F4 and F7). Manufacturers will be able to add support for new boards by simply publishing a new configuration (the so called 'Unified Target configuration') for their new board. Users can then simply load the already published Unified Target firmware and the new Unified Target configuration onto their new board to get it to work. - -Work to give users a simple way to flash unified targets in Betaflight configurator still needs to be done, so Betaflight 4.0 will be released with targets done in the 'legacy' way. But the plan is to add support for seamless use of Unified Targets into Betaflight configurator after Betaflight 4.0 has been released, and convert all of the existing F4 and F7 targets to the new format after the release of Betaflight 4.1. - -In order to be prepared for this move, the following new requirements for pull requests adding new targets or modifying existing targets are put in place from now on: - -1. No new F3 based targets will be accepted; - -2. For any new target that is to be added, only a Unified Target config into https://github.com/betaflight/unified-targets/tree/master/configs/default needs to be submitted. See https://github.com/betaflight/betaflight/blob/master/docs/TargetMaintenance/CreatingAUnifiedTarget.md for how to create a Unified Target configuration. If there is no Unified Target for the MCU type of the new target (see instructions above), then a 'legacy' format target definition into `src/main/target/` has to be submitted as well; - -3. For changes to existing targets, the change needs to be applied to the Unified Target config in https://github.com/betaflight/unified-targets/tree/master/configs/default. If no Unified Target configuration for the target exists, a new Unified Target configuration will have to be created and submitted. If there is no Unified Target for the MCU type of the new target (see instructions above), then an update to the 'legacy' format target definition in `src/main/target/` has to be submitted alongside the update to the Unified Target configuration. - - ## Important considerations when opening a pull request: 1. Make sure you do not make the changes you want to open a pull request for on the `master` branch of your fork, or open the pull request from the `master` branch of your fork. Some of our integrations will fail if you do this, resulting in your pull request not being accepted. If this is your first pull request, it is probably a good idea to first read up on how opening pull requests work (https://opensource.com/article/19/7/create-pull-request-github is a good introduction); @@ -40,8 +23,12 @@ In order to be prepared for this move, the following new requirements for pull r 6. All pull requests are reviewed. Be ready to receive constructive criticism, and to learn and improve your coding style. Also, be ready to clarify anything that isn't already sufficiently explained in the code and text of the pull request, and to defend your ideas. -7. We use continuous integration (CI) with [Travis](https://travis-ci.com/betaflight) to build all targets and run the test suite for every pull request. Pull requests that fail any of the builds or fail tests will most likely not be reviewed before they are fixed to build successfully and pass the tests. In order to get a quick idea if there are things that need fixing **before** opening a pull request or pushing an update into an existing pull request, run `make pre-push` to run a representative subset of the CI build. _Note: This is not an exhaustive test (which will take hours to run on any desktop type system), so even if this passes the CI build might still fail._ +7. If your pull request is for a new target or an update to an existing target, please be aware that all targets have to be submitted as Unified Target configurations if a Unified Target for the MCU type is available. Read and follow [these instructions](https://github.com/betaflight/betaflight/blob/master/docs/TargetMaintenance/CreatingAUnifiedTarget.md). -8. If your pull request is a fix for one or more issues that are open in GitHub, add a comment to your pull request, and add the issue numbers of the issues that are fixed in the form `Fixes #`. This will cause the issues to be closed when the pull request is merged; +8. We use continuous integration (CI) with [Travis](https://travis-ci.com/betaflight) to build all targets and run the test suite for every pull request. Pull requests that fail any of the builds or fail tests will most likely not be reviewed before they are fixed to build successfully and pass the tests. In order to get a quick idea if there are things that need fixing **before** opening a pull request or pushing an update into an existing pull request, run `make pre-push` to run a representative subset of the CI build. _Note: This is not an exhaustive test (which will take hours to run on any desktop type system), so even if this passes the CI build might still fail._ -9. Remove this Text :). +9. If your pull request is a fix for one or more issues that are open in GitHub, add a comment to your pull request, and add the issue numbers of the issues that are fixed in the form `Fixes #`. This will cause the issues to be closed when the pull request is merged; + +10. If your pull request contains a change that can be tested by other users, please build a set of test firmware files for all Unified Targets and attach them to the pull request. The required firmware files can be built in zipped form ready for upload to GitHub with `make unified_zip`. When attaching test firmware files, you can point users to this video for instructions on how to install the test firmware: https://youtu.be/I1uN9CN30gw + +11. Remove this Text :). diff --git a/docs/development/Development.md b/docs/development/Development.md index 8bec753333..9a3261a0ab 100644 --- a/docs/development/Development.md +++ b/docs/development/Development.md @@ -108,6 +108,14 @@ Later, you can get the changes from the betaflight repo into your `master` branc You can also perform the git commands using the git client inside Eclipse. Refer to the Eclipse git manual. +### Providing Test Targets for Pull Requests + +If you open a pull request for the betaflight repository that contains a change that can be tested by other users, please build a set of test firmware files for all Unified Targets and attach them to the pull request. The required firmware files can be built in zipped form ready for upload to GitHub with `make unified_zip`. When attaching test firmware files, you can point users to this video for instructions on how to install the test firmware: https://youtu.be/I1uN9CN30gw + +Example of a pull request with test firmware attached: + +![Pull request with test targets](assets/pull_request_test_targets.png) + ### IDEs and .gitignore The projects [.gitignore](/.gitignore) already ignores certain artifacts from some IDEs, but if you'd like to use something else, you can set up git to ignore the necessary files at a global level (all git projects on the computer) diff --git a/docs/development/assets/pull_request_test_targets.png b/docs/development/assets/pull_request_test_targets.png new file mode 100644 index 0000000000000000000000000000000000000000..2b94781278ac360347ca8a6684f183ecf0a835ad GIT binary patch literal 36356 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 literal 0 HcmV?d00001