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
- Make releases of installer modules
- Tier 0 (no dependencies)
- Tier 1 (Dependencies on Tier 0)
- Tier 2 (Dependencies on Tier 1)
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_URLto 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
- Export translation statistics from Transifex (click on Report) and save as
- Track translation work in project management:
- Create Redmine issue for locale updates: Template link
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.19branch-
obal update rubygem-hammer_cli --version 3.19.0 -
obal update rubygem-hammer_cli_foreman --version 3.19.0
-
- DEB: Update packaging in
deb/developand cherry-pick the changes todeb/3.19-
deb/developis updated by automation, ensure that happened - Cherry-pick the changes to
deb/3.19
-
- RPM: Update rubygem-hammer_cli and rubygem-hammer_cli_foreman in
- 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.19cp -r _includes/manuals/nightly _includes/manuals/3.19sed -i 's/nightly/3.19/i' manuals/3.19/*.mdsed -i '/previous_version/ s/: .\+/: "3.19"/' manuals/nightly/index.mdsed -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
- Create new GPG key for release. See GPG_Keys if needed.
- generate_gpg
- export_gpg_private to backup private key to gopass
- Publish the key
- Use export_gpg_public to export the clean GPG key and update the website’s security.md and create a file in static/keys
- Use upload_yum_gpg to create releases/3.19/RPM-GPG-KEY-foreman on yum.theforeman.org
- Sign and upload the key to the keyserver
- sign_gpg for web-of-trust only - do NOT re-import or back up the signed key
- upload_gpg to upload the public key to keyservers
- Make sure the settings file contains the right
OSESlist. It should match what is in the nightly settings file - Commit the settings file to the
theforeman-rel-engrepository with message:git commit -m "Foreman 3.19 settings"
- Create new settings files for client, ensure it has the rights
OSESlist and commit it too. - Open a PR with the result of jenkins-jobs branching:
./branch-foreman 3.19 KATELLO_VERSION - Open PR to remove any jobs that are related to end of life versions
- Open PR to add 3.19 to Forklift versions config. Once the PR is merged, upgrade pipelines will fail, so do not merge it before packaging has been branched.
Branching: 2026-05-12
Release Engineer
- Branch RPM packaging
- Create a
rpm/3.19branch in foreman-packaging based onrpm/develop:git checkout rpm/develop && git pull && git checkout -b rpm/3.19 - Update
foreman_versioninpackage_manifest.yamlon therpm/3.19branch:sed -i '/foreman_version:/ s/nightly/3.19/' package_manifest.yaml - Update
katello_versioninpackage_manifest.yamlon therpm/3.19branch: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_projectson therpm/3.19branch - Push the
rpm/3.19branch
- Create a
- Branch Debian packaging
- Clone Debian nightly repos to 3.19 using copy/freight instructions
- Create a
deb/3.19branch in foreman-packaging based ondeb/develop
Release Owner
- Create 3.19-stable branches using branch_project
- Push 3.19-stable branches using branch_push
- Branch foreman-documentation git repository and update website for new release by following the README instructions
- Ask Hammer maintainer to branch hammer-cli and hammer-cli-foreman
The next step should only be done after all branching, including packaging, has completed.
- Bump versions to 3.20-develop using develop_branch_bump
- Push version bumps to 3.20-develop using develop_branch_push
- Create Redmine version 3.20.0 using create_redmine_version
- Ask Hammer maintainer to bump hammer-cli and hammer-cli-foreman
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 to1: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'
- Update the build tag:
- deb/develop:
scripts/changelog.rb -v 3.20.0-1 -m "Bump changelog to 3.20.0 to match VERSION" debian/*/*/changelog
- rpm/develop:
- Prepare build systems for 3.19 release:
- foreman-packaging’s rpm/3.19
- Update
packages/foreman/foreman-release/foreman.gpg,mock/*.cfg,package_manifest.yamlandrepoclosure/*.confand commit with message:git commit -a -m "Foreman 3.19 branching build updates". See example patch
- Update
- foreman-packaging’s deb/3.19
- Update
debian/*/foreman-release/theforeman-archive-keyring.ascfrom 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"
- Update
- foreman-packaging’s rpm/3.19
- Trigger the
foreman-packaging-rpm-3.19job once, so that GitHub hooks are properly set up. - Trigger the
foreman-packaging-deb-3.19job 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 Planningpost 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.