Foreman 3.5 branching process

Make this post a wiki

Roles

Prep Week: 2022-10-25 to 2022-10-29

Installer Maintainer

Release Owner

  • Ensure headline features planned for the release have been merged or push them off to the next release.
  • Translations:

Stabilization Week: 2022-11-01 to 2022-11-05

Release Owner

  • Announce start of stabilization week to discourse development category.
  • Request new Hammer CLI release from maintainers if needed.
  • Prepare the manual for the new version:
    • Change $next parameter on web class to point to the new version number.
    • Copy website manual content from nightly to 3.5 and update version numbers mentioned in it.
    • Update installer options section of nightly manual using the get-params script
    • Clean up deprecation and upgrade warnings from nightly manual.
  • Branch foreman-documentation git repository and update website for new release:
  • Add new languages that are at a reasonable completion on Transifex to develop

Release Engineer

  • Create new GPG key for release. See GPG_Keys if needed.
  • Publish the key by exporting the GPG key
  • Create new settings files for client, ensure it has the rights OSES list and commit it too.
  • Create configs/foreman/3.5.yaml based on the nightly and previous release. Ensure that any based_on entries are filled out and pointing to nightly version of tag.
    • Generate mash configs
      bundle exec ./tools.rb mash-scripts configs/foreman/3.5.yaml
      sed -i '/strict_keys/ s/True/False/' mash_scripts/foreman/3.5.0/foreman-plugins-3.5-*.mash
      
    • Open PR with new config and mash scripts for review
    • Create mash configuration on Koji, from tool_belt checkout:
      scp mash_scripts/foreman/3.5.0/*.mash root@koji.katello.org:/etc/mash/
      
  • Update mash script if needed - collection-mash-split.py
  • Add the new release to the JJB job definitions in jenkins-jobs
    • Create a 3.5.groovy in pipelines/vars/foreman/ describing the operating systems the release supports
    • Add the release to the list in theforeman.org/yaml/views/release.yml
    • Add 3.5 to the version list in theforeman.org/yaml/includes/foreman_versions.yaml.inc
    • Add 3.5 to the version list in centos.org/jobs/foreman-pipelines.yml
    • Create test_3_5_stable.yaml and test_proxy_3_5_stable.yaml in yaml/jobs/
  • Open PR to remove any jobs that are related to end of life versions
  • Open PR to add 3.5 to Forklift versions config. Once the PR is merged, upgrade pipelines will fail, so do not merge it before packaging has been branched.

Branching: 2022-11-08

Release Engineer

  • Branch RPM packaging using tool_belt
    • Clone tags and create build targets in Koji: bundle exec ./tools.rb koji --commit configs/foreman/3.5.yaml
    • Create a rpm/3.5 branch in foreman-packaging based on rpm/develop
  • Branch Debian packaging

Release Owner

The next step should only be done after all branching, including packaging, has completed.

Preparing build systems: 2022-11-08

Release engineer

  • Update foreman-packaging rpm/develop to ensure nightlies build:
    • rpm/develop:
      • Update the build tag: sed -i 's/fm3_5/fm3_6/g' package_manifest.yaml
      • Set to version 3.6.0, reset release to 1 in packages/foreman/foreman{,-{installer,proxy,release,selinux}}/*.spec and packages/foreman/rubygem-hammer_cli{,_foreman}/*.spec. Then create a changelog using obal changelog --message '- Bump version to 3.6-develop' foreman{,-{installer,proxy,release,selinux}} rubygem-hammer_cli{,_foreman}
    • deb/develop: scripts/changelog.rb -v 3.6.0-1 -m "Bump changelog to 3.6.0 to match VERSION" debian/*/*/changelog
  • Prepare build systems for 3.5 release:
    • foreman-packaging’s rpm/3.5
      • Update packages/foreman/foreman-release/foreman.gpg, mock/*.cfg, package_manifest.yaml and repoclosure/*.conf
    • foreman-packaging’s deb/3.5
  • Trigger the foreman-packaging-rpm-3.5 job once, so that GitHub hooks are properly set up.
  • Trigger the foreman-packaging-deb-3.5 job once, so that GitHub hooks are properly set up.

Other systems: 2022-11-08

Release Owner

  • Create release schedule page for next version (3.6) linked from Development_Resources and post planned schedule on Discourse.
  • Create Redmine versions
    • Add next version number (3.6.0) and make sure it is shared with subprojects in foreman
    • Add first patch release (3.5.1) and make sure it is shared with subprojects in foreman
  • Ensure current Foreman deprecations for the next release are removed in develop

This was based on the wiki procedure and sometimes has a bit more info.

Update: I’m a bit behind. While updating translations I found various bad translations and got distracted trying to fix those:
https://github.com/theforeman/foreman/pull/9498

Here’s a reminder that tomorrow we’ll be branching Foreman 3.5.

As preparation for the branching:
https://github.com/theforeman/theforeman-rel-eng/pull/172
https://github.com/theforeman/tool_belt/pull/489
https://github.com/theforeman/jenkins-jobs/pull/287
https://github.com/theforeman/forklift/pull/1602
https://github.com/theforeman/theforeman.org/pull/2033

Still to be done: branching of the manuals.

Update: branching has happened but packaging is still waiting on some CI jobs to complete. I’m going to finish documentation and start Foreman 3.5.0-rc1 release process in the mean time.