Foreman 2.1 branching procedure

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 and the nightly config which might contain different tags/repos.
  • Clone tags and create build targets in Koji: bundle exec ./tools.rb koji --commit configs/foreman/2.1.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.1.yaml
    sed -i '/strict_keys/ s/True/False/' mash_scripts/foreman/2.1.0/foreman-plugins-2.1-*.mash
    scp mash_scripts/foreman/2.1.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 (
    • PR
  • Add version 2.1 to jobs in axes and/or combination filters, remove old ones (keep three)
  • Clone Debian nightly repos to 2.1 using copy/freight instructions

Branch main code repos

  • Create 2.1-stable branches:
  • Branch foreman-packaging:
    • Create rpm/2.1 and update packages/foreman/foreman-release/foreman.gpg, mock/*.cfg, package_manifest.yaml, rel-eng/{releasers.conf,tito.props} and repoclosure/*.conf
    • Create deb/2.1
    • Update .github/ (by adding [ ] 2.1 to it) in master
  • Bump versions to 2.2-develop:
    echo 2.2.0-develop > VERSION
  • Update foreman-packaging to 2.2:
    • rpm/develop:
      • Update the build tag: sed -i 's/fm2_1/fm2_2/g' rel-eng/{releasers.conf,tito.props}
      • Set to version 2.2.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.2-develop' foreman{,-{installer,proxy,release,selinux}}
      • PR
    • deb/develop: scripts/changelog.rb -v 2.2.0-1 -m "Bump changelog to 2.2.0 to match VERSION" debian/*/*/changelog

Other systems

  • Create release schedule page for next version (2.2) linked from Development_Resources and post planned schedule on Discourse.
  • Create Redmine versions:
    • Add next version number (2.2) and make sure it is shared with subprojects in foreman
    • Add first patch release (2.1.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.1.groovy in pipelines/vars/foreman/ describing the operating systems the release supports
    • Add 2.1 to the version list in yaml/jobs/pipeline/foreman-release.yaml
    • Create test_2_1_stable.yaml and test_proxy_2_1_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.1 to Forklift versions config

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