Foreman 2.6/3.0 branching process

Note: Mostly this process will be updated for Foreman 3.0 version. Until then this post can be used to track progress of stuff which is independent of puppet ENC to plugin extraction.

Make this post a wiki

Roles

Prep Week: 2021-07-19 to 2021-07-23

Installer Maintainer

Release Owner

  • Ensure headline features planned for the release have been merged or push them off to the next release.
  • Translations:
    • Update locales in foreman develop: make -C locale tx-update
    • Ask plugin authors to start extracting i18n strings and pushing the changes into develop/master git branches so Transiflex can pick it up
    • Announce string freeze date on discourse and send announcement via Foreman localization
    • Update foreman-dev with translations status to encourage 100% translations before release

Stabilization Week: 2021-07-26 to 2021-07-30

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.0 and update version numbers mentioned in it.
    • Clean up deprecation and upgrade warnings from nightly manual.
  • Branch foreman-documentation git repository:

  • 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.0.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.0.yaml
      sed -i '/strict_keys/ s/True/False/' mash_scripts/foreman/3.0.0/foreman-plugins-3.0-*.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.0.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.0.groovy in pipelines/vars/foreman/ describing the operating systems the release supports
    • Add 3.0 to the version list in theforeman.org/yaml/includes/foreman_versions.yaml.inc
    • Add 3.0 to the version list in centos.org/jobs/foreman-pipelines.yml
    • Create test_3_0_stable.yaml and test_proxy_3_0_stable.yaml in yaml/jobs/
  • Open PR to remove any jobs that are related to end of life versions
  • Open PR to add 3.0 to Forklift versions config. Once the PR is merged, upgrade pipelines will fail, so do not merge it before packaging has been branched.

Branching: 2021-08-03

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.0.yaml
    • Create a rpm/3.0 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: 2021-08-03

Release engineer

  • Update foreman-packaging rpm/develop to ensure nightlies build:
    • rpm/develop:
      • Update the build tag: sed -i 's/fm3_0/fm3_1/g' rel-eng/{releasers.conf,tito.props} package_manifest.yaml
      • Set to version 3.1.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.1-develop' foreman{,-{installer,proxy,release,selinux}} rubygem-hammer_cli{,_foreman}
    • deb/develop: scripts/changelog.rb -v 3.1.0-1 -m "Bump changelog to 3.1.0 to match VERSION" debian/*/*/changelog
  • Prepare build systems for 3.0 release:
    • foreman-packaging’s rpm/3.0
      • Update packages/foreman/foreman-release/foreman.gpg, mock/*.cfg, package_manifest.yaml, rel-eng/{releasers.conf,tito.props} and repoclosure/*.conf
  • Trigger the foreman-packaging-rpm-3.0 job once, so that GitHub hooks are properly set up.

Other systems: 2021-08-03

Release Owner

  • Create release schedule page for next version (3.1) linked from Development_Resources and post planned schedule on Discourse.
  • Create Redmine versions
    • Add next version number (3.1.0) and make sure it is shared with subprojects in foreman
    • Add first patch release (3.0.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.

2 Likes