74b330622254b12bbe7a4ca71984cca70602e769
[docs.git] / docs / release-process / branch-cutting.rst
1 **************
2 Branch Cutting
3 **************
4
5 This page documents the current branch cutting tasks that are needed
6 to be performed at RC0 and which team has the necessary permissions
7 in order to perform the necessary task in Parentheses.
8
9 JJB (releng/builder)
10 --------------------
11
12 #. Export ``${NEXT_RELEASE}`` and ``${CURR_RELEASE}`` with new and current release names.
13    **(releng/builder committers)**
14
15    .. code-block:: bash
16
17       export NEXT_RELEASE="Neon"
18       export CURR_RELEASE="Fluorine"
19
20 #. Change JJB yaml files from ``stream: fluorine`` branch pointer from *master -> stable/${CURR_RELEASE,,}*
21    and create new ``stream: ${NEXT_RELEASE,,}`` branch pointer to branch master. This
22    requires handling two different file formats interspersed with in autorelease projects.
23    **(releng/builder committers)**
24
25    .. code-block:: yaml
26
27       stream:
28         - Neon:
29             branch: master
30         - Fluorine:
31             branch: stable/fluorine
32
33    .. code-block:: yaml
34
35       - project:
36           name: aaa-neon
37           jobs:
38             - '{project-name}-verify-{stream}-{maven}-{jdks}'
39           stream: neon
40           branch: master
41
42    - The above manual process of updating individual files is automated with the script.
43      **(releng/builder committers)**
44
45      .. code-block:: bash
46
47         cd builder/scripts/branch_cut
48         ./branch_cutter.sh -n $NEXT_RELEASE -c $CURR_RELEASE
49
50 #. Review and submit the changes to releng/builder project. **(releng/builder committers)**
51
52 Autorelease
53 -----------
54
55 #. Block submit permissions for registered users and elevate RE's committer rights on gerrit.
56    **(Helpdesk)**
57
58    .. figure:: images/gerrit-update-committer-rights.png
59
60    .. note::
61
62       Enable **Exclusive** checkbox for the submit button to override any existing permissions.
63
64 #. Enable create reference permissions on gerrit for RE's to submit .gitreview patches.
65    **(Helpdesk)**
66
67    .. figure:: images/gerrit-update-create-reference.png
68
69    .. note::
70
71       Enable Exclusive checkbox override any existing permissions.
72
73 #. Start the branch cut job or use the manual steps below for branch cutting autorelease. **(Release Engineering Team)**
74 #. Start the version bump job or use the manual steps below for version bump autorelease. **(Release Engineering Team)**
75 #. Merge all .gitreview patches submitted though the job or manually. **(Release Engineering Team)**
76 #. Remove create reference permissions set on gerrit for RE's. **(Helpdesk)**
77 #. Merge all version bump patches in the order of dependencies. **(Release Engineering Team)**
78 #. Re-enable submit permissions for registered users and disable elevated RE committer rights on gerrit. **(Helpdesk)**
79 #. Notify release list on branch cutting work completion. **(Release Engineering Team)**
80
81
82 Branch cut job (Autorelease)
83 ----------------------------
84 Branch cutting can be performed either through the job or manually.
85
86 #. Start the autorelease-branch-cut job
87    **(Release Engineering Team)**
88
89 Manual steps to branch cut (Autorelease)
90 ----------------------------------------
91
92 #. Setup releng/autorelease repository.
93    **(Release Engineering Team)**
94
95    .. code-block:: bash
96
97        git review -s
98        git submodule foreach 'git review -s'
99        git checkout master
100        git submodule foreach 'git checkout master'
101        git pull --rebase
102        git submodule foreach 'git pull --rebase'
103
104 #. Enable create reference permissions on gerrit for RE's to submit .gitreview patches.
105    **(Helpdesk)**
106
107    .. figure:: images/gerrit-update-create-reference.png
108
109    .. note::
110
111       Enable Exclusive check-box override any existing permissions.
112
113 #. Create stable/${CURR_RELEASE} branches based on HEAD master.
114    **(Release Engineering Team)**
115
116    .. code-block:: bash
117
118        git checkout -b stable/${CURR_RELEASE,,} origin/master
119        git submodule foreach 'git checkout -b stable/${CURR_RELEASE,,} origin/master'
120        git push gerrit stable/${CURR_RELEASE,,}
121        git submodule foreach 'git push gerrit stable/${CURR_RELEASE,,}'
122
123 #. Contribute .gitreview updates to stable/${CURR_RELEASE,,}.
124    **(Release Engineering Team)**
125
126    .. code-block:: bash
127
128        git submodule foreach sed -i -e "s#defaultbranch=master#defaultbranch=stable/${CURR_RELEASE,,}#" .gitreview
129        git submodule foreach git commit -asm "Update .gitreview to stable/${CURR_RELEASE,,}"
130        git submodule foreach 'git review -t ${CURR_RELEASE,,}-branch-cut'
131        sed -i -e "s#defaultbranch=master#defaultbranch=stable/${CURR_RELEASE,,}#" .gitreview
132        git add .gitreview
133        git commit -s -v -m "Update .gitreview to stable/${CURR_RELEASE,,}"
134        git review -t  ${CURR_RELEASE,,}-branch-cut
135
136 Version bump job (Autorelease)
137 ------------------------------
138 Version bump can performed either through the job or manually.
139
140 #. Start the autorelease-version-bump-${NEXT_RELEASE,,} job
141    **(Release Engineering Team)**
142
143    .. note::
144
145       Enabled BRANCH_CUT and disable DRY_RUN to run the job for branch cut
146       work-flow. The version bump job can be run only on the master branch.
147
148 Manual steps to version bump (Autorelease)
149 ------------------------------------------
150
151 #. Version bump master by x.(y+1).z. **(Release Engineering Team)**
152
153    .. code-block:: bash
154
155        git checkout master
156        git submodule foreach 'git checkout master'
157        pip install lftools
158        lftools version bump ${CURR_RELEASE}
159
160 #. Make sure the version bump changes does not modify anything under scripts or pom.xml.
161    **(Release Engineering Team)**
162
163    .. code-block:: bash
164
165        git checkout pom.xml scripts/
166
167 #. Push version bump master changes to gerrit. **(Release Engineering Team)**
168
169    .. code-block:: bash
170
171        git submodule foreach 'git commit -asm "Bump versions by x.(y+1).z for next dev cycle"'
172        git submodule foreach 'git review -t ${CURR_RELEASE,,}-branch-cut'
173
174 #. Merge the patches in order according to the merge-order.log file found
175    in autorelease jobs. **(Release Engineering Team)**
176
177    .. note::
178
179       The version bump patches can be merged more quickly by performing a local
180       build with ``mvn clean deploy -DskipTests`` to prime Nexus with the new
181       version updates.
182
183 Documentation post branch tasks
184 -------------------------------
185
186 #. Git remove all files/directories from the ``docs/release-notes/*`` directory.
187    **(Release Engineering Team)**
188
189    .. code-block:: bash
190
191        git checkout master
192        git rm -rf docs/release-notes/<project file and/or folder>
193        git commit -sm "Reset release notes for next dev cycle"
194        git review