Creating a Release Branch
This page describes the release branch creation process for FOLIO Eureka applications — what it means, how it is initiated, and what happens during the automated preparation.
Overview
A release branch represents a stable, version-controlled line of an application for a specific FOLIO platform release (e.g., Sunflower, Tulip). Once created, the release branch receives only controlled module version updates through pull requests, in contrast to the pre-release branch where updates are committed directly.
Release branches follow the naming convention R1-2025, R2-2025, etc., corresponding to the platform release cycle.
Two Modes of Release Branch Creation
Release branches can be created in two ways, depending on the scope.
Centralized (Platform-Wide)
The platform repository maintainer triggers release-preparation-orchestrator.yml in platform-lsp. This orchestrator processes all application repositories included in the platform in parallel:
Extracts the application list from the previous release's
platform-descriptor.jsonDispatches the
release-preparation.ymlworkflow in each application repository concurrentlyAfter all applications are processed, updates the platform template (
platform.template.json) with^VERSIONconstraintsCreates the release branch in
platform-lspitselfAdds the new branch configuration to
platform-lsp'supdate-config.yml
This is the standard mode used for regular release cycles. For step-by-step execution instructions, see Running Release Preparation Workflows.
Single-Application
An application maintainer or the platform repository maintainer triggers release-preparation.yml directly in a specific application repository. This mode is used when:
A new application is being added to a release mid-cycle
A release branch needs to be re-created after an issue
An application was not included in the platform-wide preparation and needs its own release branch
For step-by-step execution instructions, see Running Release Preparation Workflows.
What the Automation Does
When the release preparation workflow executes for an application repository, the following steps occur in sequence:
Determines the source branch — the previous release branch (e.g.,
R1-2025) serves as the base. If the previous release branch does not exist in the repository anduse_snapshot_fallbackis enabled, the default pre-release branch is used insteadIncrements the application version in
pom.xml— typically a major version bump (e.g.,1.0.0→2.0.0). See Version Increment Logic below for details on how the version is determinedUpdates
application.template.json:All module versions are set to
^VERSIONplaceholders — these must be replaced manually by application maintainers with valid semver constraints before the update scheduler can process the branchThe
preReleasefield is set to"false"for all modules and dependenciesDependency versions are updated with version constraints matching the expected release versions
Removes
application.lock.json— the state file is deleted because it will be regenerated by the update scheduler once the branch existsAdds the new branch configuration to
update-config.ymlon the default branch — the entry includesenabled: true,need_pr: true,preRelease: "false", andruleset.enabled: trueCreates the release branch with all changes committed
Triggers branch ruleset automation — the
branch-ruleset-automationworkflow applies required CI checks and merge queue configuration for the new branchSends Slack notification announcing the new release branch
After the Branch Is Created
Once the release branch exists, application maintainers should verify the following:
Module composition — review the module list in
application.template.jsonon the release branch to confirm no modules were accidentally included or excludedReplace
^VERSIONplaceholders — all module versions on the new branch are initially set to^VERSION. This is a placeholder, not a valid version constraint. Application maintainers must replace each^VERSIONwith a valid semver constraint (e.g.,^2.0.0,~2.1.0,>=2.0.0) before the update scheduler can process the branch. The scheduler skips applications with unresolved^VERSIONplaceholdersApplication dependencies — confirm that dependency versions reference the correct release versions of other applications (e.g.,
app-licenses ^2.0.0)PR reviewers — ensure the appropriate team is listed in
pr_reviewersin.github/update-config.ymlso automated PRs are routed correctlyFirst automated PR — once all
^VERSIONplaceholders have been replaced with valid semver constraints and pushed to the release branch, the update scheduler creates the first pull request within 20 minutes. This PR resolves the version constraints to specific module versions and establishes the initial release baseline. Review and approve this PR promptly
For details on how to manage the application on the release branch after creation, see Releasing Applications on a Release Branch.
Version Increment Logic
The automation determines the new application version based on the source branch and configuration:
Scenario | Source Version | New Version | Logic |
|---|---|---|---|
Previous release branch exists |
|
| Major version increment |
Fallback to pre-release; pre-release major > default major |
|
| Minor increment of the pre-release version |
Fallback to pre-release; pre-release major ≤ default major |
|
| Major increment of the default branch version |
The version is stored in pom.xml and does not use a -SNAPSHOT suffix on release branches. During subsequent PR-based updates on the release branch, the version receives a patch increment on the first update (e.g., 2.0.0 → 2.0.1).
What Not to Do
Do not create release branches manually — always use the
release-preparationworkflow, either through the platform orchestrator or directly in the application repositoryDo not edit
application.lock.jsonon the release branch — it is managed entirely by the CI systemDo not disable the scheduler on the release branch without coordinating with the CI infrastructure team
Do not modify workflow files (
.github/workflows/) — they are centrally managed boilerplate
Related Pages
Understanding Application Repository Files — Workflow Files — detailed reference for both workflows
Releasing Applications on a Release Branch — managing the application after the release branch is created
Managing Release Branch Updates — PR flow, merge queue, and troubleshooting