This document provides an overview of the release process followed in the OpenDataHub (ODH) operator development lifecycle. It explains how upstream and downstream repositories are managed, including the branching strategy, code synchronization, and backporting workflows.
The OpenDataHub operator development and release process spans two main repositories:
- Upstream Repository: opendatahub-io/opendatahub-operator
- Downstream Repository: red-hat-data-services/rhods-operator
There are four long-lived branches:
mainthe primary development branch where all changes land firststablethe staging branch for changes before they reach downstreamrhoaithe branch tracking downstream (productization) changesstable-2.xthe branch for the2.xrelease changes
- All new features and bug fixes are first merged into the
mainbranch.
- The
stablebranch serves as a staging area for changes before they reach downstream. - Changes are automatically synced from
maintostableevery 2 hours via fast-forward merge.
- A dedicated
rhoaibranch exists to track downstream-related changes. - Changes are automatically synced from
stabletorhoaievery 2 hours.
- The
stable-2.xbranch tracks the2.xrelease series. - Changes are automatically synced from
stable-2.xto the downstream branchrhoai-2.25. - All the changes targeted for RHOAI 2.X must land in this branch.
- Release branches (
odh-x.y, e.g.,odh-2.26.0) are created from themainbranch when a new upstream release is planned.
Changes to the operator flow through a two-stage sync pipeline: main → stable → rhoai.
gitGraph
branch stable order: 3
branch rhoai order: 4
checkout main
commit
checkout stable
commit
checkout rhoai
commit
checkout main
branch feature
commit id: "2-0a10a11"
checkout main
merge feature
checkout stable
merge main
checkout rhoai
merge stable
- Merge PR to
main. Follow the process in CONTRIBUTING.md. - Sync changes to
stablebranch: The sync-main-to-stable workflow will automatically sync the changes from themainbranch to thestablebranch every 2 hours using fast-forward merge. - Sync changes to
rhoaibranch: The sync-stable-to-rhoai workflow will automatically sync the changes from thestablebranch to therhoaibranch every 2 hours.
To prepare the downstream releases, we freeze the rhoai branch to prevent new development from entering the release. Development continues on the upstream main branch and stable branch.
During code freeze:
- The sync-stable-to-rhoai workflow is disabled to prevent automatic syncing from
stabletorhoai. - The sync-main-to-stable workflow continues to run, keeping
stableup to date withmain. - Changes that need to land in the release after the code freeze must be cherry-picked manually into the red-hat-data-services/rhoai-x.y branch.
- Changes from the upstream
rhoaibranch are synced into the downstreammainbranch.
- From the downstream
mainbranch, changes are backported to release-specific branches (rhoai-x.y, e.g.,rhoai-2.21). - These branches represent versions that are under active development or maintenance.
sequenceDiagram
actor engineer
participant main as opendatahub-io/main
participant stable as opendatahub-io/stable
participant rhoai as opendatahub-io/rhoai
participant rhds as red-hat-data-services/main
participant rhoaixy as red-hat-data-services/rhoai-x.y
engineer ->> main: pull request
main ->> stable: merge (via CI)
stable ->> rhoai: merge (via CI)
rhoai ->> rhds: merge (via CI)
alt landing a change in the next rhoai release
rhds ->> rhoaixy: merge (via CI)
else fixing a blocker issue in a frozen release branch/fixing an issue in a z-stream release
engineer ->> rhoaixy: cherry-pick & pull request
end
A change that lands in the odh-operator main branch ends up in the next rhoai-x.y branch as follows:
- CI automation periodically (every 2 hours) merges the opendatahub-operator
mainbranch into the opendatahub-operatorstablebranch using fast-forward merge. - CI automation periodically (every 2 hours) merges the opendatahub-operator
stablebranch into the opendatahub-operatorrhoaibranch. - CI automation periodically merges the opendatahub-operator
rhoaibranch into the rhods-operatormainbranch. - CI automation periodically merges the rhods-operator
mainbranch into the active rhods-operatorrhoai-x.yrelease branch.
If a change is needed in a frozen/z-stream downstream release branch, an engineer opens a pull request against that specific release branch. The following illustration shows the three stages of downstream branches:
rhoai-2.22– Active development branchrhoai-2.21– Frozen branch in blocker-only phaserhoai-2.19– Released branch receiving only z-stream (critical) fixes
- Automatic backports from
maintorhoai-2.21are stopped. - A new development branch such as
rhoai-2.22is created, which starts receiving backports frommain. rhoai-2.21becomes a frozen branch, entering the blocker-only phase, where only critical, approved fixes are permitted.- Any fix targeting
rhoai-2.21must be approved as a blocker. - Older branches (e.g.,
rhoai-2.19) represent previously released versions and are maintained through z-stream (micro) releases, which accept only critical fixes. - These frozen/z-stream fixes are typically cherry-picked manually from the
mainbranch to the appropriate branches.
The Open Data Hub (ODH) follows a 4-week release cycle. This document outlines the standard steps involved in preparing and executing an ODH release.
On the code freeze date (Friday), each team must:
- Post a comment on the tracker issue (created for every release)
- The comment must include the following format:
#Release# component-name|branch-url|tag-url
Note: The comment format must comply with the expected structure to be parsed by the release automation tool.
For operator-level images (non-component images like kube-auth-proxy), teams can include an additional section in their tracker comment:
#Images#
image-name|full-image-reference
Example:
#Images#
kube-auth-proxy|quay.io/opendatahub/odh-kube-auth-proxy:v1.2.3
This section is optional. If present, the release automation will:
- Parse the image references from the
#Images#section - Update the
RELATED_IMAGE_*environment variables inconfig/manager/manager.yaml - Flow these image references through to the operator bundle/CSV automatically
Note: Image names are automatically converted to environment variable names using a naming convention:
- Uppercase the image name
- Replace hyphens with underscores
- Add prefix
RELATED_IMAGE_ODH_and suffix_IMAGE- Example:
kube-auth-proxy→RELATED_IMAGE_ODH_KUBE_AUTH_PROXY_IMAGENo code changes needed to add a new operator-level image - just add it to the tracker comment!
Code freeze occurs on Friday, and the actual release occurs on the following Monday.
A set of workflows/tasks using GitHub Actions (GHA) and Konflux Pipelines assists in automating the release process:
In the operator repository:
- Trigger the
release-stagingGHA workflow by providing:- Tracker issue URL eg: opendatahub-io/opendatahub-community#176
- Release version eg: 2.30.0(Strictly semver)
This workflow performs the following steps:
-
Validation:
- Validates the tracker URL format
- Validates the version number follows semver
-
Issue Number Extraction:
- Extracts the issue number from the tracker URL for later use
-
Release Branch:
- Creates or updates the release branch (
odh-x.y.z) - If the branch exists, it's checked out and updated
- If the branch doesn't exist, it's created from main
- Creates or updates the release branch (
-
Version Updates:
- Updates versions in relevant files
- Runs make manifests and bundle
- Cleans up bundle files
- Updates manifest branches
-
Pre-Release:
- Creates and pushes a tag (v{x.y.z})
- Generates release notes
- Creates a GitHub pre-release with:
- Tag: v{x.y.z}
- Pre-release status: true
-
Tracker Update:
- Comments on the tracker issue with the release information of the opendatahub-operator
-
Konflux Integration:
- Triggers the Konflux release onboarder workflow
odh-konflux-central: odh-konflux-release-onboarder
This workflow is automatically triggered by the release-staging workflow and it:
- Creates a PR to the release branch
- Adds the Tekton files required for the Konflux build process
- The workflow is triggered with:
- component: opendatahub-operator
- release_branch: odh-{version}
- version: v{version}
Once the above PR is merged, the Konflux pipeline starts and:
- Builds the operator image
- Builds the operator bundle
The initial catalog build will fail as there will be no catalog.yaml present, the next step will take care of the failure by generating the catalog and retriggering the catalog build.
opendatahub: fbc-processor
Triggered at the end of the operator bundle pipeline:
- Generates
catalog.yamlrequired for the catalog build - Pushes commit to the release branch
- Initiates a Konflux build to create the catalog image
The Quality Engineering (QE) team performs:
- A set of ODS-CI tests using the catalog image generated from the above step
- The tests will run for fresh installation and upgrade case
- Once QE provides final sign-off, the release can proceed
- Create a PR to the
community-operators-prodrepository with updated manifests (example PR) - Once merged:
- Set the GitHub release to final (latest) state
- Update and close the tracker issue with:
- Link to the merged PR in
community-operators-prod(example comment)
- Link to the merged PR in
ODH Release Process is now complete.
- The overall process involves five branches across two repos.
- First, a change lands in the opendatahub-io/opendatahub-operator repo according to the Basic Upstream Workflow, flowing through the two-stage sync pipeline:
main→stable→rhoai. - Then, downstream work happens in the red-hat-data-services/rhods-operator repo according to the Basic Downstream Workflow.