Sheriffing/How To/Merges: Difference between revisions

add instructions to request missing tasks to get merge candidate if no merge since last Nightly builds
No edit summary
(add instructions to request missing tasks to get merge candidate if no merge since last Nightly builds)
 
(14 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Sheriffing How To|Merges}}
{{Sheriffing How To|Merges}}
= Goal =  
= Goal =  
'''Autoland''' and '''Inbound''' repositories are opened for developers who work on bug fixes, improvements and other. Usually, '''twice a day''', clean code is transferred form Autoland and Inbound to Central, and back. <br />
'''Autoland''' is a repository opened for developers who work on bug fixes, improvements and other. Merging means that clean code is transferred from Autoland to Central, and back if there are any changes Central might hold, but Autoland not. <br />
<span style="color:#14866d">'''''No sync is performed, only differences are transferred (merge).'''''</span>
<span style="color:#14866d">'''''No sync is performed, only differences are transferred.'''''</span>
 
Merges are done between <span style="color:#FF0000">'''8:00 PM – 10 PM''' UTC</span> and <span style="color:#FF0000">'''8 AM – 10 AM'''</span>. At <span style="color:#FF0000">'''11AM'''</span> and <span style="color:#FF0000">'''11PM'''</span> UTC time, <span style="color:#FF0000">'''Nightly builds start'''</span> (they take between 2 to 4 hours to build) and it’s desired to transfer as much clean code as possible. Ideally, merges should be done before 10 AM/PM UTC time to be able to fix bad code before Nightly builds start.
 
Each sheriff should perform a merge at the beginning of their work day. Effectively, this results in two sets of merges every day to/from autoland and mozilla-inbound to mozilla-central.
 
<span style="color:#FF0000">'''Note'''</span>: in winter Nightlies, always start at <span style="color:#FF0000">12PM/AM Romanian time</span> (+1 or 2 minutes after that), so having merges done before that helps with getting the changes into these builds. How long it takes to merge depends, mostly on merge conflicts.
 


= Choosing a changeset to merge =
= Choosing a changeset to merge =
For merges from the integration trees to mozilla-central, you should choose a changeset with a green PGO run to avoid bustages on nightly builds that also run PGO. You need to also make sure that are *NOT* any backouts *after* that changeset.
For merges from the integration trees to mozilla-central, you should choose a changeset with a green Shippable run to avoid bustages on nightly builds that also run on Shippable. You need to also make sure that are *NOT* any backouts *after* that changeset.


'''A more in depth view of the conditions a merge candidate must fulfill:'''
'''A more in depth view of the conditions a merge candidate must fulfill:'''
#Candidate revision must be <span style="color:#14866d">'''100% completed'''</span> or <span style="color:#14866d">'''at least 98-99%'''</span>, with <span style="color:#14866d">'''maximum 15 jobs running'''</span>.
#Candidate revision must be <span style="color:#14866d">'''100% completed'''</span> or <span style="color:#14866d">'''at least 98-99%'''</span>, with <span style="color:#14866d">'''maximum 15 jobs running'''</span>. The candidate revision will have the Windows 10 Shippable opt suite and the complete Windows 10 opt suite.
#<span style="color:#FF0000">'''No jobs classified as fixed by commit'''</span>
#<span style="color:#FF0000">'''No jobs classified as fixed by commit'''</span>
#'''Few''' or '''no unclassified''' jobs
#'''Few''' or '''no unclassified''' jobs
#Windows 7 pgo platform must have <span style="color:#14866d">'''all jobs finished'''</span> (32 minimum – M-e10s, see screenshot as an example) [[File:Pgo tests.png|frame|center]]
#Windows 10 '''Shippable''' platform and Windows 10 '''opt''' must have <span style="color:#14866d">'''all jobs finished'''</span> (see screenshot as an example)
[[File:Win10.png|center|windows 10]]
#No backouts after merge candidate
#No backouts after merge candidate
#If a merge candidate has more than 15 jobs running but they are autophone jobs, the candidate is good to use
#If a merge candidate has more than 15 jobs running but they are autophone jobs, the candidate is good to use


If the planned merge is scheduled directly before Nightly builds will run on mozilla-central and there is no merge candidate and there hasn't been a merge to mozilla-central since the last Nightly builds ran, check if requesting all missing tasks for an autoland push has a good chance to turn it into a merge candidate. If that applies, request the missing tasks from the push's menu.
Onboarding code sheriffs shall let the merge candidate they identified get checked by another sheriff.


= Order of operations =
= Order of operations =
Line 28: Line 25:
'''Merge pattern:'''
'''Merge pattern:'''
# autoland > central
# autoland > central
# inbound  > central
# central > autoland <span style="color:#14866d">(if Central has changes Autoland might not)</span>
# central > autoland
# central  > inbound


== Merging from autoland and mozilla-inbound to mozilla-central ==  
== Merging from autoland to mozilla-central ==  
Steps on how to do the <span style="color:#14866d">'''autoland to mozilla-central'''</span> AND <span style="color:#14866d">'''mozilla-inbound to mozilla-central'''</span> merge:
Steps on how to do the <span style="color:#14866d">'''autoland to mozilla-central'''</span> merge:


# Have your revision ids ready
# Have your revision ids ready
Line 41: Line 36:
# Autoland to central merge command: <code>hg merge -r <span style="color:#14866d"><autoland_revision_id></span></code>
# Autoland to central merge command: <code>hg merge -r <span style="color:#14866d"><autoland_revision_id></span></code>
# Add a commit message: <code>hg commit -m "Merge autoland to mozilla-central.  a=merge"</code>
# Add a commit message: <code>hg commit -m "Merge autoland to mozilla-central.  a=merge"</code>
# Transfer the files to Central repo: <code>hg push -r . central</code>
# Inbound to Central merge command: <code>hg merge -r <span style="color:#14866d"><inbound_revision_id></span></code>
# Add a commit message: <code>hg commit -m "Merge inbound to mozilla-central. a=merge"</code>
# Transfer the files to Central repo: <code>hg push -r . central</code>
# Transfer the files to Central repo: <code>hg push -r . central</code>


After the merges are in Central, <span style="color:#FF0000">'''bugs need to be marked with Bugherder'''</span>: go to Central and in the top right side of each of your pushes to Central, click on '''Action Menu''' (arrow button next to the pin button) and choose '''Mark With Bugherder'''.
After the merge is in Central, <span style="color:#FF0000">'''bugs need to be marked with Bugherder'''</span>: go to Central and in the top right side of each of your pushes to Central, click on '''Action Menu''' (arrow button next to the pin button) and choose '''Mark With Bugherder'''.
[[File:Bugherder tool.png|frame|center]]
[[File:Bugherder tool.png|frame|center]]
Navigate through all the pages, check for any security bugs that can’t be updated by Bugherder and mention them to someone who can, check that Resolve and Fixed checkboxes are ticked and the correct version is set. At the last step click '''Submit''' and use your '''API key''' to finish the process. Leave the tab opened until the loadbar is not displayed anymore.
Navigate through all the pages, check for any security bugs that can’t be updated by Bugherder and mention them to someone who can, check that Resolve and Fixed checkboxes are ticked and the correct version is set. At the last step click '''Submit''' and use your '''API key''' to finish the process. Leave the tab opened until the loadbar is not displayed anymore.


<span style="color:#14866d">'''Monitor the pushes and check that the Gecko Decision Task opt job is running. If it fails, retrigger it, if it fails again the tree should be closed and the issue escalated.'''</span>
Announce in the sheriffing chat if there are bugs shown as restricted by Bugherder because the tool cannot access it and they need to be updated manually. Some of these bugs are also not accessible to code sheriffs.
 
<span style="color:#14866d">'''Monitor the pushes and check that the Gecko Decision Task opt job is running. If it fails, rerun it, if it fails again the tree should be closed and the issue escalated.'''</span>


== Merging back from mozilla-central to autoland and mozilla-inbound ==
== Merging back from mozilla-central to autoland ==
Steps on how to do the <span style="color:#14866d">'''mozilla-central to autoland'''</span> AND <span style="color:#14866d">'''mozilla-central to inbound'''</span> merge:
Steps on how to do the <span style="color:#14866d">'''mozilla-central to autoland'''</span> merge:


# Close inbound and autoland from [https://mozilla-releng.net/treestatus Treestatus]  
# Close autoland from [https://mozilla-releng.net/treestatus Treestatus]  
# In the console switch to Mozilla-unified directory: <code>cd mozilla-unified</code>
# In the console switch to Mozilla-unified directory: <code>cd mozilla-unified</code>
# Download the repos: <code>hg pull fxtrees</code>
# Download the repos: <code>hg pull fxtrees</code>
# Update autoland: <code>hg update autoland</code>
# Update autoland: <code>hg update autoland</code>
# Merge from central to autoland: <code>hg merge central</code>
# Merge from central to autoland: <code>hg merge central</code>
# Add a commit message: <code>hg commit -m "Merge mozilla-central to autoland. a=merge CLOSED TREE"</code>
# Add a commit message: <code>hg commit -m "Merge mozilla-central to autoland. CLOSED TREE"</code>
# Transfer the files to Autoland: <code>hg push -r . autoland</code>
# Transfer the files to Autoland: <code>hg push -r . autoland</code>
# Update inbound: <code>hg update inbound</code>
# Merge from central to inbound: <code>hg merge central</code>
# Add a commit messagel: <code>hg commit -m "Merge mozilla-central to mozilla-inbound.  a=merge CLOSED TREE"</code>
# Transfer the files to inbound: <code>hg push -r . inbound</code>




These commands *might* result in race conditions on the tree when it is busy. Under those circumstances, this commands avoid delays between steps:
These commands *might* result in race conditions on the tree when it is busy. Under those circumstances, this commands avoid delays between steps:
  cd mozilla-unified
  cd mozilla-unified
  hg pull && hg update inbound && hg merge central && hg commit -m "Merge mozilla-central to mozilla-inbound" && hg push -r . inbound
  hg pull && hg update autoland && hg merge central && hg commit -m "Merge mozilla-central to autoland" && hg push -r . autoland


<span style="color:#FF0000">'''Note'''</span>: For correcting a commit message, use <code>hg commit --amend</code>
<span style="color:#FF0000">'''Note'''</span>: For correcting a commit message, use <code>hg commit --amend</code>
Line 83: Line 73:
# Set the m-c tree back to "approval-required" in Treestatus. This is important because if we miss this, we risk unexpected pushes to mozilla-central since some people might think the open tree is intentional.
# Set the m-c tree back to "approval-required" in Treestatus. This is important because if we miss this, we risk unexpected pushes to mozilla-central since some people might think the open tree is intentional.
# Use Bugherder to mark and failures as usual for your push. If all bugs failed to get marked, entered Bugzilla API might be wrong. Close the tab and try with a new one. If only some failed, open Bugherder for that push again and append <code>&resume=1</code> to the url.
# Use Bugherder to mark and failures as usual for your push. If all bugs failed to get marked, entered Bugzilla API might be wrong. Close the tab and try with a new one. If only some failed, open Bugherder for that push again and append <code>&resume=1</code> to the url.
# Now when you merge from mozilla-inbound you get the note that you need to merge.
# Now when you merge from autoland you get the note that you need to merge.


= Issues =
= Issues =
Line 93: Line 83:
<code>mozilla.check.webidl_check = false</code>
<code>mozilla.check.webidl_check = false</code>


== How to run Bugherder if the tool is not working ==
= Merges from central to beta etc. =
 
These merges are done per release cycle to update the repository containing the code closer to the release repository with the code from the more development oriented repository. This merge is performed by the Release Engineering team.
# Go to https://bugherder.mozilla.org/
# Save the whole page ('''menu File > Save Page As > complete page''')
# Save it as bugherder.htm
#  In the folder '''"bugherder_files"''', you will find the file: <span style="color:#FF0000">'''bz-0.js'''</span>. Open that with an editor
# Go to <span style="color:#FF0000">'''line 265'''</span> and change the url to https://bugzilla.mozilla.org/latest/configuration
# Save the file
# Open bugherder.htm in the browser
# Type in the '''revision number from central''' (first autoland revision and then mozilla-inbound revision), hit submit
# Check to see if everything is ok and submit the changes
Confirmed users
571

edits