Foreman 3.19 branching process

This procedure was generated from procedures/foreman/branch.md.erb at 42e0f40f46df3629e22c6e87a2663a1d17a8a25e

Make this post a wiki (help)

Roles

Prep Week: 2026-04-27 to 2026-05-01

Installer Maintainer

Release Owner

  • Ensure headline features planned for the release have been merged or push them off to the next release.
  • Translations:
    • Setup Transifex CLI if not already installed: Follow the Transifex CLI documentation for installation and authentication setup
    • Update locales in foreman develop: make -C locale tx-update
    • Coordinate with plugin authors to extract i18n strings:
      • Ask plugin authors to start extracting i18n strings and pushing the changes into develop/master git branches so Transifex can pick it up (send a message in the Matrix channel)
    • Work with Transifex for translation status and announcements:
      • Export translation statistics from Transifex (click on Report) and save as foreman_foreman.languages.csv. See this help article on how to generate the report for all languages.
      • Post string freeze announcement to foreman-dev using string_freeze_announcement script: ./string_freeze_announcement foreman_foreman.languages.csv BRANCHING_DATE RC1_DATE RC2_DATE PLANNING_URL to encourage 100% translations before release
      • Send a project-level announcement on Transifex about the string freeze using transifex_announcement script: ./transifex_announcement GA_DATE SCHEDULE_URL PLANNING_URL
    • Track translation work in project management:

Stabilization Week: 2026-05-04 to 2026-05-08

Release Owner

  • Announce start of stabilization week to discourse development category.
  • Request new Hammer CLI release from maintainers if needed.
  • Update Hammer CLI packaging once the Hammer CLI release is ready:
    • RPM: Update rubygem-hammer_cli and rubygem-hammer_cli_foreman in rpm/3.19 branch
      • obal update rubygem-hammer_cli --version 3.19.0
      • obal update rubygem-hammer_cli_foreman --version 3.19.0
    • DEB: Update packaging in deb/develop and cherry-pick the changes to deb/3.19
      • deb/develop is updated by automation, ensure that happened
      • Cherry-pick the changes to deb/3.19
  • Prepare the manual for the new version:
    • Update installer options section of nightly manual using the get-params script
    • Copy website manual content from nightly to 3.19 and update version numbers mentioned in it.
      • cp -r manuals/nightly manuals/3.19
      • cp -r _includes/manuals/nightly _includes/manuals/3.19
      • sed -i 's/nightly/3.19/i' manuals/3.19/*.md
      • sed -i '/previous_version/ s/: .\+/: "3.19"/' manuals/nightly/index.md
      • sed -i '/- nightly/a \ \ - "3.19"' _config.yml
    • Clean up deprecation and upgrade warnings from nightly manual for in both foreman.adoc and katello.adoc.
    • Commit the manual changes: git commit -a -m "Add Foreman 3.19 manual and update nightly" and create a pull request
  • Add new languages that are at a reasonable completion on Transifex to develop

Release Engineer

Branching: 2026-05-12

Release Engineer

  • Branch RPM packaging
    • Create a rpm/3.19 branch in foreman-packaging based on rpm/develop: git checkout rpm/develop && git pull && git checkout -b rpm/3.19
    • Update foreman_version in package_manifest.yaml on the rpm/3.19 branch: sed -i '/foreman_version:/ s/nightly/3.19/' package_manifest.yaml
    • Update katello_version in package_manifest.yaml on the rpm/3.19 branch: sed -i '/katello_version:/ s/nightly/KATELLO_VERSION_HERE/' package_manifest.yaml
    • Create release repositories in Copr by forking nightly repositories obal copr-project copr_projects on the rpm/3.19 branch
    • Push the rpm/3.19 branch
  • Branch Debian packaging

Release Owner

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

Preparing build systems: 2026-05-12

Release engineer

  • Merge the earlier created jenkins-jobs PR that creates the release pipelines
  • Update foreman-packaging rpm/develop to ensure nightlies build:
    • rpm/develop:
      • Update the build tag: sed -i 's/fm3_19/fm3_20/g' package_manifest.yaml
      • Set to version 3.20.0, reset release to 1: sed -i '/^Version:/ s/[0-9\.]\+$/3.20.0/ ; /^%global release/ s/[0-9]\+$/1/' packages/foreman/foreman{,-{installer,proxy,release,selinux}}/*.spec packages/foreman/rubygem-hammer_cli{,_foreman}/*.spec
      • Create a changelog using obal changelog --message '- Bump version to 3.20-develop' foreman{,-{installer,proxy,release,selinux}} rubygem-hammer_cli{,_foreman}
      • Commit: git commit -a -m 'Bump version to 3.20-develop'
    • deb/develop: scripts/changelog.rb -v 3.20.0-1 -m "Bump changelog to 3.20.0 to match VERSION" debian/*/*/changelog
  • Prepare build systems for 3.19 release:
    • foreman-packaging’s rpm/3.19
      • Update packages/foreman/foreman-release/foreman.gpg, mock/*.cfg, package_manifest.yaml and repoclosure/*.conf and commit with message: git commit -a -m "Foreman 3.19 branching build updates". See example patch
    • foreman-packaging’s deb/3.19
      • Update debian/*/foreman-release/theforeman-archive-keyring.asc from https://deb.theforeman.org/foreman.asc, you will only see changes if the key was recently updated, and commit with message: git commit -a -m "Foreman 3.19 keyring updates"
  • Trigger the foreman-packaging-rpm-3.19 job once, so that GitHub hooks are properly set up.
  • Trigger the foreman-packaging-deb-3.19 job once, so that GitHub hooks are properly set up.

Other systems: 2026-05-12

Release Owner

  • Create the 3.19.0-rc release procedure in Development/Releases: PROJECT=foreman VERSION=3.19 ./procedure_release 2026-05-12 '@ogajduse' '@ogajduse' | wl-copy
  • Create a Foreman 3.20 Schedule and Planning post on Development/Releases using schedule: ./schedule 2026-05-13 (make sure there are no conflicts with other important dates)
  • Ask on Discourse Developers to remove Foreman deprecations for the next release in develop

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