]>
Commit | Line | Data |
---|---|---|
df3005f9 JG |
1 | Hotfix Release Process |
2 | ====================== | |
3 | ||
24bfc7c6 JG |
4 | Hotfix releases are versioned by incrementing the build number of the latest |
5 | release. For example: | |
6 | ||
7 | First hotfix: v1.0.11 -> v1.0.11-1 | |
8 | Second hotfix: v1.0.11-1 -> v1.0.11-2 | |
9 | ||
df3005f9 JG |
10 | In the commands below, <RELEASE> and <RELEASE_PREV> are prefixed with a v, ie. |
11 | v1.0.11 (not 1.0.11). | |
12 | ||
13 | ## Create a hotfix branch | |
14 | ||
15 | Create a hotfix branch from the previous release tag, and push it to the main | |
16 | repository: | |
17 | ||
18 | $ git branch hotfix-<RELEASE> <RELEASE_PREV> | |
19 | $ git push '[email protected]:zcash/zcash' hotfix-<RELEASE> | |
20 | ||
de3e1434 JG |
21 | ## Implement hotfix changes |
22 | ||
23 | Hotfix changes are implemented the same way as regular changes (developers work | |
24 | in separate branches per change, and push the branches to their own repositories), | |
25 | except that the branches are based on the hotfix branch instead of master: | |
26 | ||
27 | $ git checkout hotfix-<RELEASE> | |
28 | $ git checkout -b <BRANCH_NAME> | |
29 | ||
df3005f9 JG |
30 | ## Merge hotfix PRs |
31 | ||
de3e1434 JG |
32 | Hotfix PRs are created like regular PRs, except using the hotfix branch as the |
33 | base instead of master. Each PR should be reviewed as normal, and then the | |
34 | following process should be used to merge: | |
df3005f9 | 35 | |
de3e1434 JG |
36 | - A CI merge build is manually run by logging into the CI server, going to the |
37 | pr-merge builder, clicking the "force" button, and entering the following | |
38 | values: | |
df3005f9 JG |
39 | |
40 | - Repository: https://github.com/<DevUser>/zcash | |
41 | - <DevUser> must be in the set of "safe" users as-specified in the CI | |
42 | config. | |
43 | - Branch: name of the hotfix PR branch (not the hotfix release branch). | |
44 | ||
45 | - A link to the build and its result is manually added to the PR as a comment. | |
46 | ||
47 | - If the build was successful, the PR is merged via the GitHub button. | |
48 | ||
49 | ## Release process | |
50 | ||
51 | The majority of this process is identical to the standard release process. | |
52 | However, there are a few notable differences: | |
53 | ||
54 | - When running the release script, use the `--hotfix` flag: | |
55 | ||
56 | $ ./zcutil/make-release.py --hotfix <RELEASE> <RELEASE_PREV> <APPROX_RELEASE_HEIGHT> | |
57 | ||
58 | - To review the automated changes in git: | |
59 | ||
60 | $ git log hotfix-<RELEASE>..HEAD | |
61 | ||
62 | - After the standard review process, use the hotfix merge process outlined above | |
63 | instead of the regular merge process. | |
64 | ||
65 | - When making the tag, check out the hotfix branch instead of master. | |
66 | ||
67 | ## Post-release | |
68 | ||
69 | Once the hotfix release has been created, a new PR should be opened for merging | |
70 | the hotfix release branch into master. This may require fixing merge conflicts | |
71 | (e.g. changing the version number in the hotfix branch to match master, if | |
72 | master is ahead). Such conflicts **MUST** be addressed with additional commits | |
73 | to the hotfix branch; specifically, the branch **MUST NOT** be rebased on | |
74 | master. |