...
- backports: most commonly, a change for OpenJDK 11 updates is a backport of a change made in a higher OpenJDK version. Start the recipe from Step 1.
- new fixes: rarely, there is a need for a net new change for OpenJDK 11 an updates repository, e.g., because a fix would not apply to higher OpenJDK versions that are in maintenance. Fix the issue in the highest release it is applicable to. Prefix the JBS title with something like "[17u]". Start the recipe from Step 3. Example.
Important: The whole process is driven by the backport requester/contributor. Nothing here assumes that somebody else would do the work. If you are not an OpenJDK Author, you don't have a JBS user account, so you'll have to ask for help for steps 5 and 6 (working with JBS to put appropriate metadata). The regular place to ask for help is the JDK Updates mailing list. Regular contributors would eventually gain the necessary privileges to avoid this overhead.
...
- Check the original JBS issue on https://bugs.openjdk.org/
- Carefully check linked issues and whether follow-up fixes need to be brought with the backport. See below how to handle fixes depending on each other.
- Is there a higher maintained release that needs this fix? Backport it to that release first, at least for LTS releases.
- Was there a backport to a higher release that was not clean? Consider basing your backport on that commit.
- If relevant issues prevent a clean backport, consider backporting those first (within reason).
- To avoid others picking up the same issue, add a preliminary "Fix request 11u|17u" (see step 6.) comment saying that you are working on this. Once you reach step 6.), edit the comment and add the required information.
- Create the backport commit:
- Option 1 - Use the /backport comment command on GitHub:
- Make sure GitHub Actions is enabled for you on the OpenJDK Bots jdk11u-dev repository resp. OpenJDK Bots jdk17u-dev repository.
- Open the link of the original commit in GitHub and issue the /backport command by adding the comment: "
/backport jdk11u-dev" or "/backport jdk17u-dev"
- For a clean backport, the bot will provide you with a branch in his own repository and a link to create a pull request. If the backport needs manual resolving, it will provide you with instructions, similar to option 3.
IMPORTANT: if you are using the "/backport" command the very first time for a target repository, you will receive an invitation which will offer you write access to the bot's fork of the target repository. You'll have to accept that invitation, otherwise you won't be able to update your PR if that becomes necessary (see the documentation of the "/backport" command for more details).
- Option 2 - Use SKARA CLI tooling:
- Create a branch for your backport, e.g.,"
git checkout -b my-backport-branch master
" "git backport --from https://github.com/openjdk/jdk <commit-sha>"
. See the SKARA Wiki for more info.
- If necessary, resolve changes and follow the instructions.
- Create a branch for your backport, e.g.,"
- Option 3 - Use plain Git to create the change:
- Create a branch for your backport, e.g.,"
git checkout -b my-backport-branch master
" "git fetch --no-tags https://github.com/openjdk/jdk <commit-sha>"
- "
git cherry-pick --no-commit
<commit-sha
>" - If necessary, resolve changes.
- "
git commit -a -m "Backport <commit sha>
"
- Create a branch for your backport, e.g.,"
- Option 1 - Use the /backport comment command on GitHub:
- Test the patch: testing is very important. Your backport is very close to the customer, with few safety nets. In comparison, patches for the mainline head release get much more cooking time before seeing broad adoption. Don't rely on maintainers doing testing for you! You should know your patch best and must make sure it works and does not introduce regressions.
- "tier1" tests should pass at all times. Use
"make run-test TEST=tier1"
to run. You should test both debug- and release builds. Don't just test one of them!- If your patch changes platform-dependent code, test your patch on as many of those platforms as you have available. If you cannot test every platform but feel that tests are needed, clearly state so in the PR or in the Fix Request. Maintainers then will strive to fill the testing holes for you.
- "tier2" provides a larger coverage if you have the resources to run it. Use
"make run-test TEST=tier2"
to run - Run tests from the area that the patch affects, use
"make run-test TEST=<path-to-tests>"
to run specific tests - New regression tests that come with the patch should pass
- Enabling GitHub Actions for your personal fork of the jdk11u-dev repository before publishing your branch will provide you with builds and a tier 1 test run via GitHub Actions on many platforms. If tests fail, analyze why they are failing and share this information.
- "tier1" tests should pass at all times. Use
- Create a pull request at https://github.com/openjdk/jdk11u-dev | https://github.com/openjdk/jdk17u-dev
- If you have created a backport via Option1, the /backport command, and the backport was clean, you can use the provided link to create a PR
- In all other cases, push the new branch to your fork of https://github.com/openjdk/jdk11u-dev | https://github.com/openjdk/jdk17u-dev
- and open a PR. You can do this in one step via the SKARA command "
git pr create --publish
". If it is a backport, make sure the title of the PR is "Backport <SHA hash of original commit>
" to have the bots correctly recognize your change as a backport.
- If your patch is not a clean backport (labeled as
clean
by the bots), get the change reviewed by some jdk-updates reviewer- Note: the change review is not the approval, which you would get at the next step
- The PR message is automatically posted to the jdk-updates-dev mailing list. You might optionally cc the original mailing list or other OpenJDK mailing lists to get some more attention to your PR by using the
/label
command. In case of a backport, state in the PR description what changes were needed and why: the difference against the original patch, motivations for doing things differently, etc... The description is addressed to the reviewers who assess whether the change is correct for the update release.
Code Block title Example PR message collapse true Hi, This is a backport of JDK-8888888: My Hovercraft Is Full Of Eels Original patch does not apply cleanly to 11u, because eels are all different sizes and shapes. Notably, I had to change the com/antioch/holy/Grenade.cpp to avoid API that only exists in 12+. Testing: x86_64 build, affected tests, tier1 Thanks, -Monty
- Request and await approval for the fix (See below for how to handle non-public issues). Only do this after finishing all previous steps: the PR should have been reviewed and tested.
It is now possible to request maintainer approval directly from the pull request (and without JBS access) with the help of the
/approval
pull request command:"/approval request My reason
". Read the pull request commands documentation for the full description of the command. You can skip step II. and go right to step iii. if this command succeeds.- Add a "Fix Request <java version>" comment to the JBS issue that explains: why the fix should be backported, gives a risk estimate of introducing new errors, explains the dependencies on other backports (if any), shows what testing was done to verify the backport, etc. The "Fix Request" comment should give maintainers all information they need to make an informed decision for inclusion into the update release. Then put the
jdk11u-fix-request or the
jdk17u-fix-request
label on the JBS issue. Now the JBS issue will appear in the filters used by the maintainers. The maintainers might remove the label if the issue is not ready to be decided upon. Add the label again if all preconditions are fulfilled.
Wait for maintainer approval or rejection, which will manifest as either
jdkXXu-fix-yes
or
jdkXXu-fix-no
label on the issue.Code Block title Example Fix Request comment with RFR collapse true Fix Request 11u|17u Backporting this patch eliminates the critical eel overflow. The risk is medium. It changes the critical component xyz, where little changes sometimes have unexpected effects. But this only touches abc and not the primary functionality of xyz. Fixing the issue overweights the risk. Patch does not apply cleanly to 11u and requires adjustments. Backport requires JDK-8423421 and JDK-8771177 to be applied first. Included test passes. Ran tier1 and tier2 and a big application to rule out secondary effects.
Code Block title Example Fix Request comment without RFR collapse true Fix Request 11u|17u Backporting this patch eliminates the eel overflow. Low risk as this only touches tests. Patch applies cleanly to 11u. Backport requires follow up issue JDK-8282288. New test fails without the product patch, and passes with it. Tier1 and tier2 tests pass with the patch and 8282288.
In case of a larger change or backport, you might not want to invest the work for steps 1-5. and only then find out that the change is not accepted. In this case, you can add the "Fix Request" comment and label in advance telling you want a prelimninary assessment or address the maintainers for advice in other ways.
...