Project

General

Profile

Release Management » History » Revision 12

Revision 11 (Sam Kottler, 12/14/2012 10:04 AM) → Revision 12/28 (Sam Kottler, 12/14/2012 10:04 AM)

h1. Release Management 

 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. 

 h2. Release notes 

 h4. Template 

 h2. Communication 

 h4. Email 

 h4. IRC 

 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  

 h2. Packaging 

 h4. RHEL derivatives 

 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.  

 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. 

 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: 

 * Download the .gem from rubygems.org into your cwd. 
 * If the gem doesn't have native extensions run: 'rpmbuild rpmbuild -bs --nodeps --define "_sourcedir ." --define "_srcrpmdir ." rpms/epel-6/SPECS/rubygem-<gem name>.spec' name>.spec 
 * 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. 
 * The resulting RPM will be in /var/lib/mock/<distro>-<arch>/result. 

 This process should be completely scripted, but right now it's done via a set of one-off scripts. 

 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. 

 h4. Debian 

 Tasks for each RC release 

 * Update foreman-rpms/deb/<distro>/rc/<package> 
 ** As a minimum, update the changelog file, since the package version comes from that 
 ** Update build.sh with the SHAsum of the RC tag 
 * Get jenkins to rebuild the packages for the rc repo 

 Stuff to do at release: 

 * Update foreman-rpms/deb/<distro>/stable/<package> 
 ** copy from the appropriate RC packaging files 
 ** don't copy the rc changelog directly, craft a new one with appropriate release notes 
 ** update build.sh with the SHAsum of the release tag 
 * Clean out the rc repo on server09 by hand 
 ** reprepro -b ~/foreman-reprepro -C rc remove squeeze foreman-proxy 
 ** reprepro -b ~/foreman-reprepro -C rc remove squeeze foreman 
 ** reprepro -b ~/foreman-reprepro -C rc remove squeeze foreman-sqlite3 
 ** ... all the other foreman-* packages ... 
 * Get jenkins to build the packages for the stable repo