This procedure was generated from procedures/foreman/branch.md.erb at dfcc8d5252ac90cb62fc20eb8da54c8bfd84a63d
Make this post a wiki (help)
Roles
Prep Week: 2026-01-27 to 2026-01-31
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](https://github.com/theforeman/theforeman-rel-eng/blob/master/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](https://github.com/theforeman/theforeman-rel-eng/blob/master/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-02-03 to 2026-02-07
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:
- Update installer options section of nightly manual using the get-params script
- Copy website manual content from nightly to 3.18 and update version numbers mentioned in it.
cp -r manuals/nightly manuals/3.18cp -r _includes/manuals/nightly _includes/manuals/3.18sed -i 's/nightly/3.18/i' manuals/3.18/*.mdsed -i '/previous_version/ s/: .\+/: "3.18"/' manuals/nightly/index.mdsed -i '/- nightly/a \ \ - "3.18"' _config.yml
- Clean up deprecation and upgrade warnings from nightly manual for in both foreman.adoc and katello.adoc.
- 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 back up
- sign_gpg
- upload_gpg
- Publish the key
- Use export_gpg_public to show the GPG key and update the website’s security.md and create a file in static/keys
- Use upload_yum_gpg to create releases/3.18/RPM-GPG-KEY-foreman on yum.theforeman.org
- 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
- 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.18 KATELLO_VERSION - Open PR to remove any jobs that are related to end of life versions
- Open PR to add 3.18 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-02-10
Release Engineer
- Branch RPM packaging
- Create a
rpm/3.18branch in foreman-packaging based onrpm/develop:git checkout rpm/develop && git pull && git checkout -b rpm/3.18 - Update
foreman_versioninpackage_manifest.yamlon therpm/3.18branch:sed -i '/foreman_version:/ s/nightly/3.18/' package_manifest.yaml - Update
katello_versioninpackage_manifest.yamlon therpm/3.18branch: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.18branch - Push the
rpm/3.18branch
- Create a
- Branch Debian packaging
- Clone Debian nightly repos to 3.18 using copy/freight instructions
- Create a
deb/3.18branch in foreman-packaging based ondeb/develop
Release Owner
- Create 3.18-stable branches using branch_project
- Push 3.18-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.19-develop using develop_branch_bump
- Push version bumps to 3.19-develop using develop_branch_push
- Create Redmine version 3.19.0 and make sure it is shared with subprojects in foreman
- Ask Hammer maintainer to bump hammer-cli and hammer-cli-foreman
Preparing build systems: 2026-02-10
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_18/fm3_19/g' package_manifest.yaml - Set to version
3.19.0, reset release to1:sed -i '/^Version:/ s/[0-9\.]\+$/3.19.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.19-develop' foreman{,-{installer,proxy,release,selinux}} rubygem-hammer_cli{,_foreman} - Commit:
git commit -a -m 'Bump version to 3.19-develop'
- Update the build tag:
- deb/develop:
scripts/changelog.rb -v 3.19.0-1 -m "Bump changelog to 3.19.0 to match VERSION" debian/*/*/changelog
- rpm/develop:
- Prepare build systems for 3.18 release:
- foreman-packaging’s rpm/3.18
- Update
packages/foreman/foreman-release/foreman.gpg,mock/*.cfg,package_manifest.yamlandrepoclosure/*.conf
- Update
- foreman-packaging’s deb/3.18
- 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.
- Update
- foreman-packaging’s rpm/3.18
- Trigger the
foreman-packaging-rpm-3.18job once, so that GitHub hooks are properly set up. - Trigger the
foreman-packaging-deb-3.18job once, so that GitHub hooks are properly set up.
Other systems: 2026-02-10
Release Owner
- Create the 3.18.0-rc release procedure in Development/Releases:
PROJECT=foreman VERSION=3.18 ./procedure_release 2026-02-10 '@ogajduse' '@ogajduse' | wl-copy - Create a
Foreman 3.19 Schedule and Planningpost on Development/Releases using schedule:./schedule 2026-02-11(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.