Release Process » History » Version 79
Dominic Cleal, 01/23/2014 03:51 PM
1 | 1 | Dominic Cleal | h1. Release Process |
---|---|---|---|
2 | |||
3 | For each major release (i.e. not patch releases), the project selects a "release nanny" who's responsible for taking the develop branch through to release. |
||
4 | |||
5 | Please amend these lists as you see free, and as you find what works and what doesn't work. |
||
6 | |||
7 | 51 | Lukas Zapletal | h2. First steps |
8 | 1 | Dominic Cleal | |
9 | # Select the release nanny |
||
10 | 2 | Dominic Cleal | # Ensure RPM and Debian nightly packages are in good shape and all RPM dependencies are up to date |
11 | 7 | Dominic Cleal | # Ensure "Transifex project":https://www.transifex.com/projects/p/foreman/ is up to date |
12 | 1 | Dominic Cleal | # Decide on the version number |
13 | 2 | Dominic Cleal | # If number has changed, update version number in redmine |
14 | # Add _next+1_ anticipated version number to redmine under "Settings":http://projects.theforeman.org/projects/foreman/settings, sharing "With subprojects" |
||
15 | # Check "roadmap":http://projects.theforeman.org/projects/foreman/roadmap and issue search ("example":http://projects.theforeman.org/projects/foreman/issues?fixed_version_id=24&set_filter=1&status_id=o) |
||
16 | #* reassign major features to next+1 version or remove version |
||
17 | 1 | Dominic Cleal | #* assign relevant bugs to this upcoming release |
18 | #* multiple bugs can be managed using checkboxes and then right clicking on the boxes for a menu |
||
19 | #* create public custom query with target version set, sorted by status ascending, then priority descending |
||
20 | 51 | Lukas Zapletal | # Go through targeted features in redmine and align features with our "backlog":https://trello.com/board/foreman-backlog/5162af6bb868365e0c007135 |
21 | |||
22 | h2. Before creating branch in git |
||
23 | |||
24 | 1 | Dominic Cleal | # Announce beginning of bug-squashing to foreman-dev ("example":http://groups.google.com/group/foreman-dev/browse_thread/thread/769d9060774da864) |
25 | 8 | Dominic Cleal | # Copy website manual content ("theforeman.org repo":http://github.com/theforeman/theforeman.org) from previous version to this version ("example":https://github.com/theforeman/theforeman.org/pull/43) |
26 | # Update manual if applicable for any additional installation steps |
||
27 | 58 | Lukas Zapletal | # Draft release notes in markdown ("example":https://gist.github.com/domcleal/5567450) using roadmap, with these sections (and do not use personal pronouns): |
28 | 6 | Dominic Cleal | ## Headline features: half a dozen important features with a few sentences description each |
29 | ## Upgrade notes: all important notices that users must be aware of before upgrading |
||
30 | 64 | Lukas Zapletal | ## Release notes: bullet point list by category of most changes, excluding bug fixes for issues introduced during the release cycle, include link to bug numbers (helper vim search and replace command bellow) |
31 | 60 | Lukas Zapletal | # Check @git log@ for any changes without associated bug number and add to release notes if applicable (https://gist.github.com/lzap/6520535) |
32 | 27 | Dominic Cleal | # Refresh kickstart, snippet and partition table templates from the community-templates repo to Foreman core |
33 | 52 | Dominic Cleal | # Request creation of tags and build targets in "Koji":http://koji.katello.org/koji from rel-eng: |
34 | #* foreman-1.2-rhel6 etc. as clones of nightly tags |
||
35 | #* foreman-plugins-1.2-rhel6 etc. with inheritance from the new Foreman tags |
||
36 | 55 | Lukas Zapletal | #* example set of actions: http://pastebin.test.redhat.com/162144 and http://pastebin.test.redhat.com/162145 |
37 | 57 | Dominic Cleal | # Add new plugin tags (i.e. 1.3) to: |
38 | 1 | Dominic Cleal | #* SFK configuration in "foreman-packaging":https://github.com/theforeman/foreman-packaging/blob/master/rpms/pull_from_koji.sh |
39 | #* Koji nightly mash script |
||
40 | 64 | Lukas Zapletal | |
41 | Helper vim command to replace all @(#1234)@ bugs with links: |
||
42 | |||
43 | %s/(\(#\)\([0-9]\+\))/(\[\1\2]\(http:\/\/projects.theforeman.org\/issues\/\2))/g |
||
44 | 1 | Dominic Cleal | |
45 | h2. Pre-release candidates |
||
46 | |||
47 | 8 | Dominic Cleal | When ready to branch for release candidates. |
48 | |||
49 | 40 | Dominic Cleal | # Add new languages that are at a reasonable completion on Transifex to *develop* |
50 | 61 | Lukas Zapletal | # In foreman *develop* run @make -C locale tx-update@ |
51 | 70 | Dominic Cleal | # In foreman, smart-proxy, foreman-installer and foreman-selinux branch *develop* to *1.2-stable* (*from this point* cherry-picks into this branch only from this point using: @git cherry-pick -x SHA@) |
52 | 71 | Dominic Cleal | # In foreman *develop* commit with message "Bump version to 1.3-develop": |
53 | ## change to VERSION to 1.3-develop |
||
54 | 70 | Dominic Cleal | ## change packagename.spec to 1.3.0, add %changelog entry |
55 | 1 | Dominic Cleal | ## run @extras/changelog@ |
56 | 71 | Dominic Cleal | # In smart-proxy *develop* commit with message "Bump version to 1.3-develop": |
57 | ## change to lib/proxy.rb VERSION to 1.3-develop |
||
58 | 70 | Dominic Cleal | ## change foreman-proxy.spec version to 1.3.0, add %changelog entry |
59 | 15 | Dominic Cleal | ## run @extra/changelog@ |
60 | 71 | Dominic Cleal | # In foreman-selinux *develop* commit with message "Bump version to 1.3-develop": |
61 | 73 | Dominic Cleal | ## change foreman-selinux.spec version to 1.3.0, add %changelog entry |
62 | 74 | Dominic Cleal | ## run @extras/changelog@ |
63 | 75 | Dominic Cleal | # In foreman-installer *develop* commit with message "Bump version to 1.3-develop": |
64 | ## change foreman-installer.spec version to 1.3.0, add %changelog entry |
||
65 | 52 | Dominic Cleal | # Update foreman-dev with "translations status":https://www.transifex.com/projects/p/foreman/ to encourage 100% translations before release, announce string freeze date |
66 | 38 | Dominic Cleal | # Change Transifex resource URL to point to the 1.2-stable branch |
67 | 10 | Dominic Cleal | # Update $repo in both foreman-installer/foreman and foreman_proxy modules to "rc" ("example":https://github.com/theforeman/puppet-foreman/commit/4098163a8) |
68 | 16 | Dominic Cleal | # Set up test_1_2_stable job on Jenkins, copy from existing stable or test_develop (don't use dots in the name, it breaks) |
69 | 25 | Dominic Cleal | # Update release notes in new website manual version |
70 | 2 | Dominic Cleal | |
71 | 1 | Dominic Cleal | h2. For each release candidate |
72 | |||
73 | 65 | Lukas Zapletal | # Update version and dependency versions in all foreman-installer submodules (using script ./bump_modules previous_version next_version) |
74 | 1 | Dominic Cleal | # Update submodules on foreman-installer's *develop* branch via PR, cherry-pick down to *1.2-stable* |
75 | 40 | Dominic Cleal | # Compare tagged packages in nightly vs. release koji tag and re-tag any updated dependencies that are required |
76 | 69 | Dominic Cleal | # In foreman *1.2-stable* run @make -C locale tx-update@ |
77 | 19 | Dominic Cleal | # In foreman *1.2-stable* commit with message "Release 1.2.0-RC1": |
78 | 20 | Dominic Cleal | ## change to VERSION to 1.2.0-RC1 |
79 | 36 | Dominic Cleal | ## change foreman.spec version to "1.2.0", release to "0.1.RC1", add %changelog entry |
80 | 1 | Dominic Cleal | ## run @extras/changelog@ |
81 | 76 | Dominic Cleal | ## change @extras/packaging/rpm/sources/foreman.repo@ URLs from @/nightly@ to @/rc@, change "nightly" in name to "RC" and enable gpg checking |
82 | 77 | Dominic Cleal | ## change @extras/packaging/rpm/sources/foreman-plugins.repo@ URLs from @/plugins/nightly@ to @/plugins/1.2@, change "nightly" in name to "1.2" and DO NOT enable GPG checking |
83 | 19 | Dominic Cleal | # In smart-proxy *1.2-stable* commit with message "Release 1.2.0-RC1": |
84 | ## change to lib/proxy.rb VERSION to 1.2.0-RC1 |
||
85 | 52 | Dominic Cleal | ## change foreman-proxy.spec version to "1.2.0", release to "0.1.RC1", add %changelog entry |
86 | 1 | Dominic Cleal | ## run @extra/changelog@ |
87 | 37 | Dominic Cleal | # In foreman-selinux *1.2-stable* commit with message "Release 1.2.0-RC1": |
88 | 52 | Dominic Cleal | ## change foreman-selinux.spec version to "1.2.0", release to "0.1", uncomment alphatag* (replace # with %) and change to RC1, add %changelog entry |
89 | 78 | Dominic Cleal | ## run extras/changelog |
90 | 1 | Dominic Cleal | # In foreman-installer *1.2-stable* commit with message "Release 1.2.0-RC1": |
91 | 52 | Dominic Cleal | ## change foreman-installer.spec version to "1.2.0", release to "0.1", uncomment alphatag* (replace # with %) and change to RC1, add %changelog entry |
92 | 1 | Dominic Cleal | # Tag commits in foreman, smart-proxy, foreman-installer and foreman-selinux: @git tag -m "Release 1.2.0-RC1" 1.2.0-RC1@ |
93 | 41 | Dominic Cleal | # Push to *your* GitHub repo to enable testing first |
94 | # Perform RPM scratch build of foreman, foreman-installer, foreman-proxy and foreman-selinux (see [[RPM_Packaging]]) |
||
95 | ## if they fail, revert your branch to current @project/1.2-stable@ branch, fix the issue in your repo and retry until it works |
||
96 | 43 | Dominic Cleal | # Push to the project repo: @git push project && git push project 1.2.0-RC1@ |
97 | 45 | Dominic Cleal | # [[RPM_Packaging]]: follow release procedure for foreman, foreman-proxy, foreman-installer and foreman-selinux using Jenkins |
98 | 23 | Greg Sutcliffe | # [[Debian_Packaging#foreman]]: Update build.sh and changelog files with appropriate data |
99 | 24 | Dominic Cleal | # Build foreman-installer modules from 1.2-stable (see [[Installer_Packaging]] workflow) |
100 | 37 | Dominic Cleal | # Build foreman-installer Debian package from 1.2-stable (see [[Debian_Packaging#foreman-installer]]) |
101 | 26 | Dominic Cleal | # Update theforeman.org sections: |
102 | 79 | Dominic Cleal | ## @_includes/social.html@ version number |
103 | 41 | Dominic Cleal | ## @_includes/header.html@ manual links |
104 | 1 | Dominic Cleal | # Generate and sign tarball of foreman and smart-proxy: |
105 | ## @git archive --prefix=foreman-1.2.0-RC1/ 1.2.0-RC1 | bzip2 -9 > foreman-1.2.0-RC1.tar.bz2@ |
||
106 | ## @gpg -b -u packages@theforeman.org foreman-1.2.0-RC1.tar.bz2@ (requires packages key) |
||
107 | # Follow "Publishing releases" below |
||
108 | |||
109 | h2. For final release |
||
110 | |||
111 | 41 | Dominic Cleal | # Update version and dependency versions in all foreman-installer submodules (TODO: script this) |
112 | # Update submodules on foreman-installer's *develop* branch via PR, cherry-pick down to *1.2-stable* |
||
113 | 1 | Dominic Cleal | # Compare tagged packages in nightly vs. release koji tag and re-tag any updated dependencies that are required |
114 | 69 | Dominic Cleal | # In foreman *1.2-stable* run @make -C locale tx-update@ |
115 | 1 | Dominic Cleal | # In foreman *1.2-stable* commit with message "Release 1.2.0": |
116 | 52 | Dominic Cleal | ## change to VERSION to 1.2.0 |
117 | 41 | Dominic Cleal | ## change foreman.spec version to "1.2.0", release to "1", add %changelog entry |
118 | 1 | Dominic Cleal | ## run @extras/changelog@ |
119 | 68 | Lukas Zapletal | ## change @extras/packaging/rpm/sources/foreman.repo@ URL from @/rc@ to @/releases/1.2@, change in name to "stable" and make sure gpgcheck is on |
120 | ## do the same for @foreman-plugins.repo@ |
||
121 | 41 | Dominic Cleal | # In smart-proxy *1.2-stable* commit with message "Release 1.2.0": |
122 | ## change to lib/proxy.rb VERSION to 1.2.0 |
||
123 | 52 | Dominic Cleal | ## change foreman-proxy.spec version to "1.2.0", release to "1", add %changelog entry |
124 | 41 | Dominic Cleal | ## run @extra/changelog@ |
125 | # In foreman-selinux *1.2-stable* commit with message "Release 1.2.0": |
||
126 | 52 | Dominic Cleal | ## change foreman-selinux.spec version to "1.2.0", release to "1", comment alphatag* (replace % with #), add %changelog entry |
127 | 41 | Dominic Cleal | # In foreman-installer *1.2-stable* commit with message "Release 1.2.0": |
128 | 52 | Dominic Cleal | ## change foreman-installer.spec version to "1.2.0", release to "1", comment alphatag* (replace % with #), add %changelog entry |
129 | 41 | Dominic Cleal | # Tag commits in foreman, smart-proxy, foreman-installer and foreman-selinux: @git tag -m "Release 1.2.0" 1.2.0@ |
130 | # Push to *your* GitHub repo to enable testing first |
||
131 | # Perform RPM scratch build of foreman, foreman-installer, foreman-proxy and foreman-selinux (see [[RPM_Packaging]]) |
||
132 | ## if they fail, revert your branch to current @project/1.2-stable@ branch, fix the issue in your repo and retry until it works |
||
133 | 43 | Dominic Cleal | # Push to the project repo: @git push project && git push project 1.2.0@ |
134 | 45 | Dominic Cleal | # [[RPM_Packaging]]: follow release procedure for foreman, foreman-proxy, foreman-installer and foreman-selinux using Jenkins |
135 | 41 | Dominic Cleal | # [[Debian_Packaging#foreman]]: Update build.sh and changelog files with appropriate data |
136 | # Build foreman-installer modules from 1.2-stable (see [[Installer_Packaging]] workflow) |
||
137 | # Build foreman-installer Debian package from 1.2-stable (see [[Debian_Packaging#foreman-installer]]) |
||
138 | # Update theforeman.org sections: |
||
139 | ## both @_includes/manuals/1.2/2_quickstart_guide.md@ and @_includes/manuals/1.2/3.2.1_installation.md@ |
||
140 | ##* supported platforms |
||
141 | ##* foreman-release path (@/releases/1.2@), package version number |
||
142 | ##* Debian platforms and component name (@stable@) |
||
143 | ## @_includes/releasesplash.html@ remove old version, update stable |
||
144 | ## @_includes/header.html@ manual links |
||
145 | ## @_layouts/homepage.html@ quickstart link |
||
146 | # Generate and sign tarball of foreman and smart-proxy: |
||
147 | ## @git archive --prefix=foreman-1.2.0/ 1.2.0 | bzip2 -9 > foreman-1.2.0.tar.bz2@ |
||
148 | ## @gpg -b -u packages@theforeman.org foreman-1.2.0.tar.bz2@ (requires packages key) |
||
149 | 1 | Dominic Cleal | # Merge develop branches into master (@git merge -Xtheirs --no-ff@) for: foreman, smart-proxy, foreman-installer, foreman-selinux |
150 | 59 | Dominic Cleal | # Add the new release to the Jenkins "packaging_publish_plugins_rpm":http://ci.theforeman.org/job/packaging_publish_plugins_rpm/ job matrix |
151 | 1 | Dominic Cleal | # Follow "Publishing releases" below |
152 | 28 | Dominic Cleal | |
153 | h2. Publishing releases (RCs and final) |
||
154 | 29 | Dominic Cleal | |
155 | 46 | Dominic Cleal | # Sign all RPMs (see [[RPM_Packaging]]) |
156 | 41 | Dominic Cleal | # Run or request (from rel-eng) RPM repo mash/compose for Koji release tags |
157 | 47 | Dominic Cleal | # Do a dry run of the RPM push process to check repoclosure etc. (see [[RPM_Packaging]]) |
158 | 41 | Dominic Cleal | # Push RPMs to repo on the web host, under @/rc@ or @/releases/1.2@ etc using Jenkins (see [[RPM_Packaging]]) |
159 | 32 | Dominic Cleal | # Push foreman-installer to Freight (see [[Debian_Packaging#foreman-installer]]) |
160 | 28 | Dominic Cleal | # Upload tarballs and detached signatures to http://projects.theforeman.org/projects/foreman/files |
161 | 49 | Dominic Cleal | ## Final only: delete all existing RC files to free up space |
162 | 28 | Dominic Cleal | # Upload all installer module .tar.gz files to Puppet Forge |
163 | 41 | Dominic Cleal | # Final only: update @$latest@ class parameter on @web@ class to point to the new version number (see @foreman-infra/puppet/modules/web/manifests/init.pp@) |
164 | 50 | Dominic Cleal | # Send announcement e-mail to foreman-announce, CC foreman-users, set reply-to to foreman-users |
165 | 1 | Dominic Cleal | # Link to announcement e-mail on IRC, Google+ and update IRC /topic |
166 | 72 | Lukas Zapletal | # Update Wikipedia Foreman entry at: https://en.wikipedia.org/wiki/Foreman_(software) |
167 | 40 | Dominic Cleal | |
168 | h2. After final release |
||
169 | |||
170 | 41 | Dominic Cleal | # Sync translations from Transifex into *develop* and run @rake locale:find@ |
171 | 49 | Dominic Cleal | # Remove target version from all issues assigned to the current release, unless they will be fixed in a future point release |