Project

General

Profile

Release Process » History » Version 63

Lukas Zapletal, 09/16/2013 10:21 AM
Helper vim command to replace issue numbers with hyperlinks

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
## 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
31 63 Lukas Zapletal
## Helper vim command to replace issue numbers with hyperlinks: @:%s/\(#\)\([0-9]\+\)/\[\1\2]\(http:\/\/projects.theforeman.org\/issues\/\2)/g@
32 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)
33 27 Dominic Cleal
# Refresh kickstart, snippet and partition table templates from the community-templates repo to Foreman core
34 52 Dominic Cleal
# Request creation of tags and build targets in "Koji":http://koji.katello.org/koji from rel-eng:
35
#* foreman-1.2-rhel6 etc. as clones of nightly tags
36
#* foreman-plugins-1.2-rhel6 etc. with inheritance from the new Foreman tags
37 55 Lukas Zapletal
#* example set of actions: http://pastebin.test.redhat.com/162144 and http://pastebin.test.redhat.com/162145
38 57 Dominic Cleal
# Add new plugin tags (i.e. 1.3) to:
39
#* SFK configuration in "foreman-packaging":https://github.com/theforeman/foreman-packaging/blob/master/rpms/pull_from_koji.sh
40
#* Koji nightly mash script
41 1 Dominic Cleal
42
h2. Pre-release candidates
43
44 8 Dominic Cleal
When ready to branch for release candidates.
45
46 40 Dominic Cleal
# Add new languages that are at a reasonable completion on Transifex to *develop*
47 61 Lukas Zapletal
# 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@)
48
## change foreman.spec to 1.2.9999, add %changelog entry
49 1 Dominic Cleal
# In foreman *develop* commit with message "Bump version to 1.2-develop":
50 15 Dominic Cleal
## change to VERSION to 1.2-develop
51 61 Lukas Zapletal
## change packagename.spec to 1.2.9999, add %changelog entry
52 15 Dominic Cleal
## run @extras/changelog@
53 1 Dominic Cleal
## run @rake locale:find@
54
# In smart-proxy *develop* commit with message "Bump version to 1.2-develop":
55 15 Dominic Cleal
## change to lib/proxy.rb VERSION to 1.2-develop
56 52 Dominic Cleal
## change foreman-proxy.spec version to 1.2.9999, add %changelog entry
57 15 Dominic Cleal
## run @extra/changelog@
58 54 Lukas Zapletal
# In foreman-selinux *develop* commit with message "Bump version to 1.2-develop":
59
## change foreman-proxy.spec version to 1.2.9999, add %changelog entry
60
## run @extra/changelog@
61 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
62 38 Dominic Cleal
# Change Transifex resource URL to point to the 1.2-stable branch
63 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)
64 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)
65 25 Dominic Cleal
# Update release notes in new website manual version
66 2 Dominic Cleal
67 1 Dominic Cleal
h2. For each release candidate
68
69 37 Dominic Cleal
# Update version and dependency versions in all foreman-installer submodules (TODO: script this)
70 1 Dominic Cleal
# Update submodules on foreman-installer's *develop* branch via PR, cherry-pick down to *1.2-stable*
71 40 Dominic Cleal
# Sync translations from Transifex directly into *1.2-stable* (new languages go to *develop* first)
72 39 Dominic Cleal
# Compare tagged packages in nightly vs. release koji tag and re-tag any updated dependencies that are required
73 19 Dominic Cleal
# In foreman *1.2-stable* commit with message "Release 1.2.0-RC1":
74 20 Dominic Cleal
## change to VERSION to 1.2.0-RC1
75 52 Dominic Cleal
## change foreman.spec version to "1.2.0", release to "0.1.RC1", add %changelog entry
76 36 Dominic Cleal
## run @extras/changelog@
77 1 Dominic Cleal
## run @rake locale:find@ if before string freeze
78 62 Lukas Zapletal
## change @extras/packaging/rpm/sources/foreman.repo@ URL from @/nightly@ to @/rc@, change "nightly" in name to "RC" and enable gpg checking
79 19 Dominic Cleal
# In smart-proxy *1.2-stable* commit with message "Release 1.2.0-RC1":
80
## change to lib/proxy.rb VERSION to 1.2.0-RC1
81 52 Dominic Cleal
## change foreman-proxy.spec version to "1.2.0", release to "0.1.RC1", add %changelog entry
82 1 Dominic Cleal
## run @extra/changelog@
83 37 Dominic Cleal
# In foreman-selinux *1.2-stable* commit with message "Release 1.2.0-RC1":
84 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
85 1 Dominic Cleal
# In foreman-installer *1.2-stable* commit with message "Release 1.2.0-RC1":
86 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
87 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@
88 41 Dominic Cleal
# Push to *your* GitHub repo to enable testing first
89
# Perform RPM scratch build of foreman, foreman-installer, foreman-proxy and foreman-selinux (see [[RPM_Packaging]])
90
## if they fail, revert your branch to current @project/1.2-stable@ branch, fix the issue in your repo and retry until it works
91 43 Dominic Cleal
# Push to the project repo: @git push project && git push project 1.2.0-RC1@
92 45 Dominic Cleal
# [[RPM_Packaging]]: follow release procedure for foreman, foreman-proxy, foreman-installer and foreman-selinux using Jenkins
93 23 Greg Sutcliffe
# [[Debian_Packaging#foreman]]: Update build.sh and changelog files with appropriate data
94 24 Dominic Cleal
# Build foreman-installer modules from 1.2-stable (see [[Installer_Packaging]] workflow)
95 37 Dominic Cleal
# Build foreman-installer Debian package from 1.2-stable (see [[Debian_Packaging#foreman-installer]])
96 26 Dominic Cleal
# Update theforeman.org sections:
97 1 Dominic Cleal
## both @_includes/manuals/1.2/2_quickstart_guide.md@ and @_includes/manuals/1.2/3.2.1_installation.md@
98 26 Dominic Cleal
##* supported platforms
99
##* foreman-release path (rc or releases), package version number
100
##* Debian platforms and repo name (rc or stable)
101
## @_includes/releasesplash.html@ version number
102 41 Dominic Cleal
## @_includes/header.html@ manual links
103 1 Dominic Cleal
# Generate and sign tarball of foreman and smart-proxy:
104
## @git archive --prefix=foreman-1.2.0-RC1/ 1.2.0-RC1 | bzip2 -9 > foreman-1.2.0-RC1.tar.bz2@
105
## @gpg -b -u packages@theforeman.org foreman-1.2.0-RC1.tar.bz2@ (requires packages key)
106
# Follow "Publishing releases" below
107
108
h2. For final release
109
110 44 Dominic Cleal
# Update $repo in both foreman-installer/foreman and foreman_proxy modules to "stable" ("example":https://github.com/theforeman/puppet-foreman/commit/73bd43fa)
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
# Sync translations from Transifex directly into *1.2-stable* (new languages go to *develop* first)
114 41 Dominic Cleal
# Compare tagged packages in nightly vs. release koji tag and re-tag any updated dependencies that are required
115 1 Dominic Cleal
# In foreman *1.2-stable* commit with message "Release 1.2.0":
116
## change to VERSION to 1.2.0
117 52 Dominic Cleal
## change foreman.spec version to "1.2.0", release to "1", add %changelog entry
118 41 Dominic Cleal
## run @extras/changelog@
119
## run @rake locale:find@
120
## change @extras/packaging/rpm/sources/foreman.repo@ URL from @/rc@ to @/releases/1.2@, change in name to "stable"
121
# 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 40 Dominic Cleal
167
h2. After final release
168
169 41 Dominic Cleal
# Sync translations from Transifex into *develop* and run @rake locale:find@
170 49 Dominic Cleal
# Remove target version from all issues assigned to the current release, unless they will be fixed in a future point release