Foreman 1.21.0-RC1 release process

With the branching almost complete, starting this topic to track the progress of the RC1 release. We are currently hoping to have the release ready around the end of this week or early next week.

Writing release notes

  • Update manual if applicable for any additional installation steps
  • Draft release notes in markdown (example), with these sections (and do not use personal pronouns):
    • Headline features: half a dozen important features with a few sentences description each
    • Upgrade notes: all important notices that users must be aware of before upgrading
    • 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. You can auto-generate changes using the ‘changelog’ command in tool_belt
    • CLI release notes are taken from the hammer-cli and hammer-cli-foreman changelogs
    • Link to installer changelogs and note versions being used
  • Get the apipie doc and place it in api/1.21

Preparing code

  • Request Hammer CLI releases from maintainers if desired
  • Make patch releases of installer modules that have important changes
    • Branch to MAJ.MIN-stable if recent changes to the module aren’t suitable for patch (x.y.z) release
  • Compare tagged packages in nightly vs. release koji tag and re-tag any updated dependencies that are required
  • Remove/change release field for any open Redmine tickets assigned to the release still (next minor, unset it or reject)
  • List all issues targeted at the release, order by Closed date ascending and use git cherry-pick -x to cherry pick from develop to 1.21.0-RC1-stable branch
  • Clone tool_belt and run:
    • ./tools.rb setup-environment configs/foreman/1.21.yaml
    • ./tools.rb cherry-picks --version 1.21.0-RC1 configs/foreman/1.21.yaml
    • Verify tickets in the cherry_picks_1.21.0-RC1 file are accounted for or additional cherry pick them

Tagging a release

  • In foreman 1.21-stable:
    • Make sure test_1_21_stable is green
    • run make -C locale tx-update (if Transifex has not switched to the next major release yet, usually after .2)
    • run script/sync_templates.sh
    • update template snapshots with rake snapshots:generate RAILS_ENV=test and verify changes are expected
    • change VERSION to 1.21.0-RC1
    • Run extras/changelog
    • Commit: git commit -am "Release 1.21.0-RC1"
    • Tag: git tag -s -m "Release 1.21.0-RC1" 1.21.0-RC1
    • Push: git push --follow-tags
  • In smart-proxy 1.21-stable:
    • Make sure test_proxy_1_21_stable is green
    • change VERSION to 1.21.0-RC1
    • Run extra/changelog
    • Commit: git commit -am "Release 1.21.0-RC1"
    • Tag: git tag -s -m "Release 1.21.0-RC1" 1.21.0-RC1
    • Push: git push --follow-tags
  • In foreman-selinux 1.21-stable:
    • change VERSION to 1.21.0-RC1
    • Run extras/changelog
    • Commit: git commit -am "Release 1.21.0-RC1"
    • Tag: git tag -s -m "Release 1.21.0-RC1" 1.21.0-RC1
    • Push: git push --follow-tags
  • In foreman-installer 1.21-stable:
    • change VERSION to 1.21.0-RC1
    • Commit: git commit -am "Release 1.21.0-RC1"
    • Tag: git tag -s -m "Release 1.21.0-RC1" 1.21.0-RC1
    • Push: git push --follow-tags
  • Run the Jenkins Tarballs Release to create tarballs
  • Verify tarballs are present on downloads.theforeman.org
  • Download, sign and upload detached signatures

Note: If for some reason there was an issue with the tarballs that required uploading new tarballs, CDN cache should be invalidated so that the builders use the updated tarballs.

Packaging a release

  • In foreman-packaging rpm/1.21 branch, change foreman.spec, foreman-proxy.spec, foreman-selinux.spec, foreman-installer.spec:
    • Set version to 1.21.0
    • Set prerelease to RC1
    • In each package dir, remove the old tarball, run spectool -g *.spec and git annex add *.tar.bz2
    • Commit with message “Release 1.21.0-RC1”
    • Submit a pull request
  • Update changelog files for debs:
    • scripts/changelog.rb -v 1.21.0~rc1-1 -m "1.21.0-RC1 released" debian/*/*/changelog
    • Submit a pull request
  • Trigger next step of release pipeline: release_packages
  • Use RPM_Packaging to sign RPMs
    • Download RPMs
    • Sign RPMs
    • Upload signatures
    • Upload RPMs
    • Sign “extra” RPMs
  • Trigger release_mash
  • Trigger release_test if mashing didn’t
  • Trigger release_push_deb and release_push_rpm if testing didn’t

I’ve pushed 1.21.0-RC1 but we need to rebuild the REX plugin, then Ansible as well as update foreman_xen to 0.7.1 for repoclosure of the plugins repo to pass.

3 Likes