Project

General

Profile

Release Management » History » Version 11

Sam Kottler, 12/14/2012 10:04 AM

1 1 Sam Kottler
h1. Release Management
2 4 Sam Kottler
3 5 Sam Kottler
For each major (x.0) and minor release there is a release nanny who is responsible for managing communication around releases. This person is responsible for handling the generation of release notes, sending emails and IRC notifications about release candidates and final releases, as well as generally tracking blockers, etc.
4 1 Sam Kottler
5 2 Sam Kottler
h2. Release notes
6 3 Sam Kottler
7 1 Sam Kottler
h4. Template
8
9 2 Sam Kottler
h2. Communication
10 3 Sam Kottler
11 1 Sam Kottler
h4. Email
12
13
h4. IRC
14
15 11 Sam Kottler
Many users rely primarily on IRC for asking questions about the release process, location of the packages, and new features that are included in the 
16
17 2 Sam Kottler
h2. Packaging
18 3 Sam Kottler
19 1 Sam Kottler
h4. RHEL derivatives
20 11 Sam Kottler
21
There are currently scripts in the "rpmbuild" branch of the foreman-rpms repository that will build the appropriate SRPM's and then use mock to create the RPM's for each distribution and architecture. 
22
23
The best way to get started with creating the RC repositories (which will ultimately become the final repo for the new release) is to rsync the nightly repository from shell.theforeman.org. This repo will contain the most recent dependencies, Requires and BuildRequires for the core foreman and foreman-proxy specs.
24
25
Development dependencies for the nightly packages, which are generally needed for package RC's and ultimately the final release, are stored in foreman.spec-devel.patch, which is included in the SOURCES directory for each distro. Some packages will then need to get rebuilt and copied into the RPM repository. To build a package for a dependency (RubyGem) run the following:
26
27
* Download the .gem from rubygems.org into your cwd.
28
* If the gem doesn't have native extensions run: rpmbuild -bs --nodeps --define "_sourcedir ." --define "_srcrpmdir ." rpms/epel-6/SPECS/rubygem-<gem name>.spec
29
* Run mock for each distribution and architecture that's supported: mock --verbose -r <distro>-<arch> <srpm in cwd>.src.rpm (i.e. mock --verbose -r epel-6-x86_64 rubygem-rbovirt-0.0.15-1.el6.src.rpm). Mock sure you have the mock configurations from the foreman-rpms repository in /etc/mock; these will add the Foreman repo so that build dependencies can be met.
30
* The resulting RPM will be in /var/lib/mock/<distro>-<arch>/result.
31
32
This process should be completely scripted, but right now it's done via a set of one-off scripts.
33
34
After all the dependencies are built and reflected in foreman.spec and foreman-proxy.spec, run a rpmbuild and subsequent mock command for each distro and arch. Replace the packages in the nightly repo that your rsync'ed earlier that have never versions that just got built. Then run "createrepo ." for each distribution and architecture. Yet another process that is automated with a one-off script that needs a more permanent solution.
35 1 Sam Kottler
36
h4. Debian
37 8 Greg Sutcliffe
38 9 Greg Sutcliffe
Tasks for each RC release
39 8 Greg Sutcliffe
40
* Update foreman-rpms/deb/<distro>/rc/<package>
41 10 Greg Sutcliffe
** As a minimum, update the changelog file, since the package version comes from that
42
** Update build.sh with the SHAsum of the RC tag
43 8 Greg Sutcliffe
* Get jenkins to rebuild the packages for the rc repo
44
45
Stuff to do at release:
46
47 1 Sam Kottler
* Update foreman-rpms/deb/<distro>/stable/<package>
48 10 Greg Sutcliffe
** copy from the appropriate RC packaging files
49
** don't copy the rc changelog directly, craft a new one with appropriate release notes
50
** update build.sh with the SHAsum of the release tag
51 6 Sam Kottler
* Clean out the rc repo on server09 by hand
52 10 Greg Sutcliffe
** reprepro -b ~/foreman-reprepro -C rc remove squeeze foreman-proxy
53
** reprepro -b ~/foreman-reprepro -C rc remove squeeze foreman
54
** reprepro -b ~/foreman-reprepro -C rc remove squeeze foreman-sqlite3
55
** ... all the other foreman-* packages ...
56 8 Greg Sutcliffe
* Get jenkins to build the packages for the stable repo