Project

General

Profile

Actions

Release Management » History » Revision 15

« Previous | Revision 15/28 (diff) | Next »
Sam Kottler, 12/14/2012 10:19 AM


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.

Release notes

The release notes are all stored on the ReleaseNotes page. One of the most helpful tools to generate the release notes is using the target version in Redmine, which is available by going to http://theforeman.org/projects/foreman/roadmap. All the bugs, features, and support requests for the specific version you are working on will be available on that page. It's also helpful to compare the git log to that page since sometimes there are important commits that are not included redmine for whatever reason.

Template

Communication

Email

Schedule

The first email to go out to the user list will usually be an announcement about packages being available. The next email after that usually has a link to the release notes and can give a quick overview of what changes are made in the release. Be sure to include links to the previous email about RPM and Debian package availability so users who may have missed those emails and would like to try the RC.

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

Packaging

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 -bs --nodeps --define "_sourcedir ." --define "_srcrpmdir ." rpms/epel-6/SPECS/rubygem-<gem 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.

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

Updated by Sam Kottler about 12 years ago · 28 revisions