Foreman 2.0 branching process

Make this post a wiki

Two weeks before branching

During the week before branching

Package build systems

  • Create tool_belt config based on the previous release PR

  • Clone tags and create build targets in Koji: bundle exec ./tools.rb koji --commit configs/foreman/2.0.yaml

  • Make sure all nightly builds of packages are removed from the releases tags

  • Create mash configuration on Koji:

    bundle exec ./tools.rb mash-scripts configs/foreman/2.0.yaml
    sed -i '/strict_keys/ s/True/False/' mash_scripts/foreman/2.0.0/foreman-plugins-2.0-*.mash
    scp mash_scripts/foreman/2.0.0/*.mash
  • Update mash scripts and deploy them to Koji:

    • Verify main mash scripts (, and don’t need any version-specific updates
    • Update dists in client mash script (
  • Add version 2.0 to jobs in axes and/or combination filters, remove old ones (keep three)

  • Clone Debian nightly repos to 2.0 using copy/freight instructions

Branch main code repos

  • Create 2.0-stable branches
  • Branch foreman-packaging
    • Create rpm/2.0 and update packages/foreman/foreman-release/foreman.gpg, mock/*.cfg, package_manifest.yaml, rel-eng/{releasers.conf,tito.props} and repoclosure/*.conf PR
    • Create deb/2.0
    • Update .github/ (by adding [ ] 2.0 to it) in master
  • Bump versions to 2.1-develop
    echo 2.1.0-develop > VERSION
  • Update foreman-packaging to 2.1:
    • rpm/develop:
      • Update the build tag: sed -i 's/fm2_0/fm2_1/g' rel-eng/{releasers.conf,tito.props} PR
      • Set to version 2.1.0, reset release to 1 in packages/foreman/foreman{,-{installer,proxy,release,selinux}}/*.spec and create a changelog using obal changelog --message '- Bump version to 2.1-develop' foreman{,-{installer,proxy,release,selinux}} PR
    • deb/develop: scripts/changelog.rb -v 2.1.0-1 -m "Bump changelog to 2.1.0 to match VERSION" debian/*/*/changelog

Other systems

  • Create release schedule page for next version (2.1) linked from Development_Resources and post planned schedule on Discourse.
  • Create Redmine versions
    • Add next version number (2.1) and make sure it is shared with subprojects in foreman
    • Add first patch release (2.0.1) and make sure it is shared with subprojects in foreman
  • Add the new release to the JJB job definitions in foreman-infra
    • Create a 2.0.groovy in pipelines/vars/foreman/ describing the operating systems the release supports
    • Add 2.0 to the version list in yaml/jobs/pipeline/foreman-release.yaml
    • Create test_2_0_stable.yaml and test_proxy_2_0_stable.yaml in yaml/jobs/
    • Remove the oldest version to keep last 3 from the files/directories in the previous steps
  • Ensure current Foreman deprecations for the next release are removed in develop
  • Add 2.0 to Forklift versions config

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

1 Like

All the Puppet modules have been released and kicked off

Some complications we are seeing is that both Katello ( and hammer-cli-foreman ( have been bumped to the new version before packaging was branched. Since they have nightly packages, that is a problem. Our tooling assumes they match and currently the release jobs are failing. In the future we should make sure this doesn’t happen again.