Skip to content

Commit f427e81

Browse files
committed
explicitly reflect the phased implementation approach from the brief
Signed-off-by: grokspawn <[email protected]> Assisted-by: claude
1 parent 4808789 commit f427e81

File tree

1 file changed

+128
-13
lines changed

1 file changed

+128
-13
lines changed

enhancements/olm/bundle-version-overrides.md

Lines changed: 128 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ api-approvers:
1313
creation-date: 2025-10-24
1414
last-updated: 2025-10-27
1515
tracking-link:
16-
- TBD
16+
- "https://issues.redhat.com/browse/OCPSTRAT-2232"
1717
see-also:
1818
- "/https://docs.google.com/document/d/1tX0fXYuflTpTal6z0TbNkrQ7SAkYIKxQj4cPjlFAh4Q/"
1919
- "https://docs.google.com/document/d/14LNdxplPKB8mbfKLVvkHHsvboh4FEJOp0thzPNGgnzA/"
@@ -235,6 +235,90 @@ The `opm` command and operator-registry library are updated to:
235235

236236
The enhancement includes a new FBC catalog template `substitutesFor` that helps operator authors trivially adopt the release field approach and avoid common error scenarios when implementing Freshmaker-style bundle substitution workflows.
237237

238+
### Implementation Phases
239+
240+
This enhancement will be implemented in three distinct phases across different components:
241+
242+
#### Phase 1: API and Operator Registry (operator-framework/api and operator-framework/operator-registry)
243+
244+
**Scope:**
245+
- Add the optional `release` field to the CSV specification in operator-framework/api
246+
- Implement release field extraction logic in operator-registry
247+
- Update `opm` tooling to parse and render release information
248+
- Add the `substitutesFor` catalog template
249+
250+
**Deliverables:**
251+
- [ ] API schema update with `release` field in Package struct
252+
- [ ] Hierarchical extraction logic (CSV annotation → build metadata)
253+
- [ ] Semver prerelease validation for release values
254+
- [ ] Fatal error handling for invalid build metadata with `olm.substitutesFor`
255+
- [ ] `opm render` support for release field output
256+
- [ ] Catalog template for `substitutesFor` workflows
257+
- [ ] Unit and integration tests for all extraction and validation logic
258+
259+
**Dependencies:** None - this is the foundational phase
260+
261+
**Status:** In Progress - See PRs:
262+
- https://github.com/operator-framework/api/pull/454
263+
- https://github.com/operator-framework/operator-registry/pull/1792
264+
265+
#### Phase 2: OLMv1 (operator-framework/operator-controller)
266+
267+
**Scope:**
268+
- Implement bundle selection prioritization based on release field
269+
- Add feature gate to control release-based ordering
270+
- Update resolution logic to compare release values using semver comparison
271+
272+
**Deliverables:**
273+
- [ ] Feature gate `ReleaseVersionPriority` (disabled by default)
274+
- [ ] Bundle selection logic that prioritizes higher release values
275+
- [ ] Comparison implementation using semver's `PRVersion.Compare`
276+
- [ ] Priority rules: version comparison → release comparison → with release > without release
277+
- [ ] E2E tests demonstrating release-based selection
278+
- [ ] Documentation for enabling the feature gate
279+
280+
**Dependencies:** Phase 1 (API and operator-registry changes)
281+
282+
**Feature Gate:** `ReleaseVersionPriority`
283+
- Default: Disabled
284+
- Purpose: Controls whether bundle selection considers release field for prioritization
285+
- Graduation: Tech Preview → GA based on testing and feedback
286+
287+
**Status:** Pending
288+
289+
#### Phase 3: OLMv0 Integration
290+
291+
**Scope:**
292+
- Ensure OLMv0 components gracefully handle bundles with release fields
293+
- Maintain backward compatibility (no feature gate - passive support only)
294+
- Validate that existing bundle processing workflows continue unchanged
295+
296+
**Deliverables:**
297+
- [ ] Verification that OLMv0 catalog-operator ignores release field without errors
298+
- [ ] Confirmation that CSVs with release annotations are processed normally
299+
- [ ] Regression testing for Freshmaker-style bundles in OLMv0
300+
- [ ] Documentation noting OLMv0 will not actively use release for prioritization
301+
302+
**Dependencies:** Phase 1 (API and operator-registry changes)
303+
304+
**Note:** OLMv0 does not support feature gates. The release field is purely additive and optional, so OLMv0 will safely ignore it. Bundle selection in OLMv0 will continue to use existing mechanisms without considering the release field.
305+
306+
**Status:** Pending
307+
308+
#### Cross-Phase Considerations
309+
310+
**Testing Strategy:**
311+
- Phase 1 tests focus on parsing, extraction, and validation
312+
- Phase 2 tests focus on selection logic and prioritization behavior
313+
- Phase 3 tests focus on backward compatibility and regression prevention
314+
- All phases include integration tests with real bundle scenarios
315+
316+
**Rollout Strategy:**
317+
- Phase 1 can be deployed independently (tools update)
318+
- Phase 2 rolls out with feature gate disabled by default
319+
- Phase 3 validates alongside Phase 1/2 deployments
320+
- Progressive enablement: Phase 2 feature gate enabled after sufficient testing
321+
238322
### Risks and Mitigations
239323

240324
**Risk:** Changes to the operator-framework API schema could break existing tools or scripts that parse bundle metadata.
@@ -346,25 +430,56 @@ The test strategy focuses on ensuring both new functionality and backward compat
346430

347431
### Dev Preview -> Tech Preview
348432

349-
- [ ] Release field is added to operator-framework API schema
433+
**Phase 1 (API/Registry):**
434+
- [ ] Release field added to operator-framework API schema
350435
- [ ] Extraction logic successfully parses semver build metadata from Freshmaker-style bundles
351436
- [ ] `opm` tools can render bundles with both explicit and extracted release fields
352-
- [ ] Unit tests demonstrate correct behavior for various release value formats
353-
- [ ] Integration tests pass with bundles using `olm.substitutesFor` annotations
354-
- [ ] Bundle selection prioritizes releases correctly in test environments
355-
- [ ] Documentation updated to reflect the new optional field and usage patterns
437+
- [ ] Validation enforces semver prerelease syntax for release values
438+
- [ ] Fatal errors for invalid `olm.substitutesFor` build metadata
439+
- [ ] Unit and integration tests pass
440+
- [ ] `substitutesFor` catalog template available
441+
442+
**Phase 2 (OLMv1):**
443+
- [ ] `ReleaseVersionPriority` feature gate implemented in operator-controller
444+
- [ ] Bundle selection correctly prioritizes by release when feature gate enabled
445+
- [ ] E2E tests demonstrate release-based ordering
446+
- [ ] Feature gate documentation published
447+
448+
**Phase 3 (OLMv0):**
449+
- [ ] OLMv0 compatibility verified (graceful handling of release field)
450+
- [ ] Regression tests pass for legacy bundles
451+
- [ ] No breaking changes to existing OLMv0 workflows
452+
453+
**Documentation:**
454+
- [ ] API changes documented
455+
- [ ] Feature gate usage guide published
456+
- [ ] Migration guidance for operator authors
457+
- [ ] OLMv0 vs OLMv1 behavior differences documented
356458

357459
### Tech Preview -> GA
358460

359-
- [ ] All tests passing including end-to-end scenarios with real operator bundles
360-
- [ ] No regressions in existing bundle processing workflows
361-
- [ ] Bundle selection in OLM correctly prioritizes higher release versions
362-
- [ ] Freshmaker integration validated with multiple operator bundles
363-
- [ ] Downstream consumers (Console, UI components) updated to handle and display release field
364-
- [ ] Sufficient time for feedback from operators, maintainers, and catalog publishers
461+
**Phase 1 (API/Registry):**
462+
- [ ] All tests passing across multiple operator bundles in production catalogs
463+
- [ ] No regressions in bundle rendering or validation
464+
- [ ] Freshmaker integration validated with production workloads
465+
- [ ] Performance impact assessed (negligible overhead confirmed)
466+
467+
**Phase 2 (OLMv1):**
468+
- [ ] Feature gate `ReleaseVersionPriority` enabled by default
469+
- [ ] Bundle selection in OLMv1 correctly prioritizes higher release versions
470+
- [ ] No critical issues reported during tech preview period
471+
- [ ] User feedback incorporated
472+
- [ ] Dashboard/Console updated to display release information
473+
474+
**Phase 3 (OLMv0):**
475+
- [ ] Long-term compatibility verified in production environments
476+
- [ ] No unexpected issues with mixed OLMv0/v1 deployments
477+
478+
**Cross-Phase:**
479+
- [ ] Sufficient time for feedback from operators, maintainers, and catalog publishers (minimum 2 releases)
365480
- [ ] User-facing documentation created in openshift-docs
481+
- [ ] Support procedures documented
366482
- [ ] Feature available by default with stable API
367-
- [ ] No critical issues reported during tech preview period
368483

369484
### Removing a deprecated feature
370485

0 commit comments

Comments
 (0)