Skip to content

Add CAMARA release metadata schemas (Issue #337)#339

Merged
hdamker merged 18 commits intocamaraproject:mainfrom
hdamker:337-metadata-schemas
Dec 16, 2025
Merged

Add CAMARA release metadata schemas (Issue #337)#339
hdamker merged 18 commits intocamaraproject:mainfrom
hdamker:337-metadata-schemas

Conversation

@hdamker
Copy link
Collaborator

@hdamker hdamker commented Nov 25, 2025

What type of PR is this?

enhancement/feature

What this PR does / why we need it:

Implements JSON Schema definitions and validation for CAMARA release metadata files as specified in the Release Workflow and Metadata Concept document.

This PR adds:

  • JSON Schema Draft 7 definitions for release-plan.yaml and release-metadata.yaml
  • 5 example files covering key scenarios (new repo, multi-API, RC preparation, patch release, generated metadata)
  • Python validation script with schema and semantic checks
  • Comprehensive README documentation
  • Schema harmonization with master-metadata-schema.yaml for release-collector compatibility

Schema harmonization (2nd commit):

  • Aligns release-metadata.yaml structure with master-metadata-schema.yaml from project-administration
  • Enables release-collector to extract all needed data from release tags
  • Key changes:
    • Added repository_name field (immutable repository identifier)
    • Renamed release_number → release_tag (consistent naming)
    • Updated release_date to ISO 8601 datetime format (UTC)
    • Renamed apis[].name → api_name (leading identifier)
    • Added apis[].title field (from OpenAPI info.title)
    • Removed apis[].main_contacts from release-metadata (not immutable)

Concept document updates:

  • Updated examples in CAMARA-Release-Workflow-and-Metadata-Concept.md to reflect harmonized field names
  • Updated terminology table (release_number → release_tag)
  • Updated release_date format to ISO 8601 datetime

Additional change: Renamed status to release_type in release-metadata schema to prevent ambiguity with workflow status or lifecycle status.

All 5 examples validate successfully against the schemas.

Which issue(s) this PR fixes:

Fixes #337

Special notes for reviewers:

  • Schemas use JSON Schema Draft 7 specification
  • Extensibility enabled (additionalProperties allowed) for future field additions
  • Field names align with master-metadata-schema.yaml from project-administration
  • Validation script auto-detects schema type (release-plan vs release-metadata)
  • Python script provided (JavaScript migration planned for Phase 1B)
  • Small updates to concept document examples to use harmonized field names

Changelog input

Add JSON Schema definitions for release-plan.yaml and release-metadata.yaml with validation tooling and comprehensive examples. Schema harmonization with master-metadata-schema.yaml enables release-collector integration.

Additional documentation

- artifacts/metadata-schemas/README.md: Complete usage documentation
- artifacts/metadata-schemas/schemas/: JSON Schema definitions
- artifacts/metadata-schemas/examples/: 5 scenario examples
- Updated CAMARA-Release-Workflow-and-Metadata-Concept.md examples

Implement JSON Schema definitions for release planning and metadata:

Schema files:
- release-plan-schema.yaml: Planning metadata for main branch
- release-metadata-schema.yaml: Generated metadata for release branches
- Both schemas allow additional properties for future extensibility
- Full JSON Schema Draft 7 compliance with format validation

Example files covering key scenarios:
- New repository with Sandbox meta-release
- Multi-API repository with mixed maturity
- Release candidate preparation
- Maintenance patch release
- Generated release metadata format

Validation:
- Python validation script with schema and semantic checks
- Auto-detects schema type (release-plan vs release-metadata)
- Optional file existence validation
- All examples validate successfully

Documentation:
- Comprehensive README with usage examples
- Future JavaScript implementation guidance (ajv library)
- Schema extensibility benefits explained
- CI integration examples

Design decisions:
- Removed additionalProperties restrictions for forward compatibility
- Deferred schema_version field to Phase 1B
- Supports future fields: changelog, artifacts, compliance_checks
- Maintains strict validation of required fields and data types

Related to Issue camaraproject#337 (CAMARA Release Workflow automation)
Align release-metadata.yaml structure with master-metadata-schema.yaml
to enable release-collector to extract all needed data from release tags.

Schema changes:
- Add repository_name field (immutable repository identifier)
- Rename release_number → release_tag (consistent naming)
- Update release_date to ISO 8601 datetime format (UTC)
- Rename apis[].name → api_name (leading identifier)
- Add apis[].title field (from OpenAPI info.title)
- Remove apis[].main_contacts from release-metadata (not immutable)

Updated all examples, documentation, and validation script.
All 5 examples validate successfully.
Prevents ambiguity with workflow status or lifecycle status.
The field accurately describes the release type classification.
@hdamker
Copy link
Collaborator Author

hdamker commented Nov 26, 2025

@camaraproject/release-management_maintainers @camaraproject/release-management_codeowners

Please review this PR carefully and as soon as possible as it creates the base for our release process automation (see the dependencies within the implementation plan in #338).

For the alignment with the Release Collector workflow I have created already camaraproject/project-administration#52

@rartych
Copy link
Collaborator

rartych commented Nov 26, 2025

Is there any specific need to use http://json-schema.org/draft-07/schema# over the latest https://json-schema.org/draft/2020-12/schema JSON Schema definitions ?

@hdamker
Copy link
Collaborator Author

hdamker commented Nov 26, 2025

Is there any specific need to use http://json-schema.org/draft-07/schema# over the latest https://json-schema.org/draft/2020-12/schema JSON Schema definitions ?

The question is more if there is a specific need to use the latest. "draft-07 is the safer and fully sufficient choice; moving to 2020-12 mainly brings theoretical advantages and future extensibility, but at the cost of more careful tooling validation and possible friction for consumers".

@hdamker
Copy link
Collaborator Author

hdamker commented Dec 1, 2025

@camaraproject/release-management_maintainers Any further comments? Would be good if we can finalize / approve the schemata within the ReleaseManagement call on Tuesday Dec 2nd.

Copy link
Contributor

@albertoramosmonagas albertoramosmonagas left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

Copy link
Collaborator

@tanjadegroot tanjadegroot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

first comments set

Key changes based on reviewer feedback:

Terminology:
- Rename api_status enum: 'planned' → 'draft', remove 'unchanged'
- Rename dependency fields: xxx_version → xxx_release
- Rename 'version' → 'api_version' in release-metadata apis[]

New properties:
- Add 'release_scope' (none, sandbox, meta-release) to clarify
  meta-release participation vs sandbox releases
- Add 'pre-release-alpha' to release_readiness enum for M2 milestone

Schema fixes:
- Update release_tag pattern to exclude zeros (r1.1 valid, r0.1 invalid)
- Remove 'Sandbox' from meta_release pattern (use release_scope instead)

Validation improvements:
- Add release_scope/meta_release consistency check
- Add patch-release validation (requires all APIs public)
- Remove incorrect 0.x version warning (initial public is valid)
- Improve error messages to list specific API names

Documentation:
- Update concept document with all terminology changes
- Update README with new field documentation
- Rename and update all 5 example files
The term 'scope' conflicts with API repository scope terminology
where repositories define a 'scope' for their target release.

Terminology change:
- Rename 'release_scope' → 'release_track' in release-plan schema
- Update description to clarify this defines how repository
  participates in CAMARA releases (none, sandbox, meta-release)

Updated files:
- release-plan-schema.yaml: field name, required array, description
- README.md: all field references and documentation sections
- Concept document: terminology table and example YAML
- All 4 release-plan example files (01-04)
- validate-release-plan.py: method name, variable names, error messages

Validation: All 5 examples pass schema validation after rename.
- Clarify release_readiness as codeowner-declared, CI-validated
- Improve api_status descriptions in schema and docs
- Use "extension" consistently instead of "suffix"
- Fix typos in schema descriptions
- Minor wording improvements in example comments
Propagate three field renames across all metadata schema artifacts:
- release_readiness → target_release_type
- api_status → target_api_status
- target_version → target_api_version

Rationale: Fields in release-plan.yaml represent planning targets, not
actual values. The target_* prefix clearly distinguishes planning
intent from generated release-metadata.yaml fields (release_type,
api_version) which contain actual release values.

Updated files:
- schemas/release-plan-schema.yaml: Field definitions and descriptions
- schemas/release-metadata-schema.yaml: Cross-reference descriptions
- examples/01-04: All example release-plan files
- scripts/validate-release-plan.py: Detection logic, semantic checks,
  and error messages
- README.md: Documentation, field reference, error examples
- CAMARA-Release-Workflow-and-Metadata-Concept.md: Terminology table,
  example YAML blocks, and workflow descriptions

All 5 example files validated successfully against updated schemas.
@hdamker
Copy link
Collaborator Author

hdamker commented Dec 7, 2025

Thank you @tanjadegroot for the thorough review! It helped a lot to improve the schemata.

Here's a summary of the decision I have taken on each topic - hope that fits for you:


Terminology

Topic 1: "maturity" vs "status"
Agreed to use "API status" instead of "maturity" in prose to avoid confusion with repository maturity (Sandbox/Incubating/Graduated). Enum values remain unchanged.

Topic 2: "suffix" vs "extension"
Agreed to use "extension" instead of "suffix" for version pre-release identifiers (e.g., -alpha.1, -rc.2).


Field Naming

Topic 3: release_readiness rename
Finally agreed to rename release_readinesstarget_release_type. After further analysis, the field semantics are about what release type we're targeting for the NEXT release, not about achieved validation state. This aligns with the existing target_version pattern (now renamed target_api_version for consistency) - all three target_* fields answer "what are we targeting in the next release?" for different aspects:

  • target_api_version → which version?
  • target_release_type → which release type? (e.g., M3 rc, M4 public for meta-releases)
  • target_api_status → which API status?

Note: In release-metadata.yaml (generated file), the field remains release_type (not target_release_type) since by that point it's the actual release type, not a target.

CI validates that the repository content supports the declared target.

Topic 4: api_status rename
Agreed to rename api_statustarget_api_status for consistency with the target_* pattern. The field declares the API status for the next release, and CI validates that the API definition meets the requirements for that status level.

Additional proposed changes:

  • Renamed planneddraft (better conveys WIP with basic validation)
  • Removed unchanged from enum - CI will implicitly lock APIs when target_api_version equals an already-released public version

Topic 5: Version field renames
Agreed to rename version to api_version in the apis[] section of release-metadata for consistency.

Additionally renamed target_version to target_api_version in release-plan.yaml to align with the api_* naming pattern used for other API properties (api_name, api_version).

Topic 6: Dependencies format
Agreed to rename fields to commonalities_release and identity_consent_management_release since values are release numbers (r4.2), not versions. The release-metadata format remains r4.2 (1.0.1) with resolved version added during release (at least as long there is a repository wide version in Commonalities)


Meta-Release Handling

Topic 7: meta_release optionality
Added a new release_track property with enum [none, sandbox, meta-release] to make the intent explicit:

  • release_track: none - no release planned
  • release_track: sandbox - release outside meta-release cycle
  • release_track: meta-release - participating in a meta-release (requires meta_release field)

This clarifies semantics: meta_release only exists when the repository participates in a meta-release.

Note: Initially named release_scope, renamed to release_track to avoid conflict with the "scope" terminology used in API repositories for their target release scope.


Patterns and Enums

Topic 8: release_tag pattern
Corrected pattern to ^r[1-9]\d*\.[1-9]\d*$ (excluding zeros per existing guideline). Example changed from r5.0 to r5.3.

Topic 9: pre-release-alpha enum value
Agreed to add pre-release-alpha. Also dropped the generic pre-release:

  • pre-release-alpha: All APIs at alpha or better, mix of alpha/rc allowed. Public only for previously released APIs (no new public versions in pre-release).
  • pre-release-rc: All changed APIs at rc status.

Topic 10: title vs api_status in release-metadata
Decided to keep title (from OpenAPI info.title). No need to add api_status - the status is encoded in the version extension (-alpha.N, -rc.N, or none for public).


Example Files

Topic 11: File naming
Agreed to rename:

  • 02-multi-api-mixed-maturity.yaml02-multi-api-mixed-status.yaml
  • 05-generated-metadata.yaml05-generated-release-metadata.yaml

Topic 12: Example 03 clarification
Kept filename 03-rc-preparation.yaml. Updated comments to clarify it shows the pre-release-rc stage before public release.


Documentation

Topics 14-18:
Updated README, concept document, and validation script with all above changes. Added source information to release-metadata field descriptions (derived from release-plan vs generated during release).


Summary of Changes

Topic Decision
"maturity" → "status" Agreed
"suffix" → "extension" Agreed
release_readiness rename Agreed (target_release_type)
api_status rename Agreed (target_api_status)
planneddraft Proposed change
Remove unchanged Proposed change (implicit lock)
versionapi_version Agreed
Dependency fields rename Agreed (xxx_release)
Add release_track Proposed new field
release_tag pattern Corrected (no zeros)
Add pre-release-alpha Agreed
Drop pre-release Proposed change
Keep title Agreed
Example renames Agreed
target_versiontarget_api_version Proposed change

@hdamker
Copy link
Collaborator Author

hdamker commented Dec 7, 2025

Open Questions

Dropping api_ prefix from API properties?

With the addition of target_api_version, we now have several API properties with an api_ prefix: api_name, api_version, target_api_version, target_api_status.

Since these properties are already nested under apis[], the api_ prefix is somewhat redundant. Would it make sense to simplify to just name, version, target_version, target_status?

This would reduce verbosity while the context (apis[] array) still makes it clear these are API-level properties. Thoughts?

Should release_tag be auto-calculated to reduce manual updates?

Currently, release-plan.yaml requires specifying the exact release_tag (e.g., r3.1). Consequence: If we need a second Release Candidate (r3.2), we must manually update release-plan.yaml on main to bump the tag, even if the API target_version plan (e.g., 1.0.0) remains identical. This creates unnecessary friction and commits for every RC iteration.

Proposal: Change the schema to accept a Release Cycle (e.g., r3) instead of a specific tag. The automation would then:

  1. Read release_cycle: r3.
  2. Check existing tags in git (e.g., finds r3.1).
  3. Auto-calculate the next incremental tag (r3.2).

Benefit: The release-plan.yaml would remain persistent and static throughout the entire pre-release phase (RC1 -> RC2 -> RC3), mirroring the efficient behavior we already have for API versions.

@tanjadegroot
Copy link
Collaborator

Open Questions

Dropping api_ prefix from API properties?

With the addition of target_api_version, we now have several API properties with an api_ prefix: api_name, api_version, target_api_version, target_api_status.

Since these properties are already nested under apis[], the api_ prefix is somewhat redundant. Would it make sense to simplify to just name, version, target_version, target_status?

This would reduce verbosity while the context (apis[] array) still makes it clear these are API-level properties. Thoughts?

I would prefer to keep the api_ part as not very long and consoistent with definition elswhere (api_name, api-version in Commonalities dicumentation)

Should release_tag be auto-calculated to reduce manual updates?

Currently, release-plan.yaml requires specifying the exact release_tag (e.g., r3.1). Consequence: If we need a second Release Candidate (r3.2), we must manually update release-plan.yaml on main to bump the tag, even if the API target_version plan (e.g., 1.0.0) remains identical. This creates unnecessary friction and commits for every RC iteration.

Proposal: Change the schema to accept a Release Cycle (e.g., r3) instead of a specific tag. The automation would then:

  1. Read release_cycle: r3.
  2. Check existing tags in git (e.g., finds r3.1).
  3. Auto-calculate the next incremental tag (r3.2).

Benefit: The release-plan.yaml would remain persistent and static throughout the entire pre-release phase (RC1 -> RC2 -> RC3), mirroring the efficient behavior we already have for API versions.

why would we need at all the release tag in the plan if you can find and generate the latest_ Can it no be derived from the api-status ? Today the release tracker does not require to specify the release tag (or cycle) - that would avoid introducing the release cycle concept.

@tanjadegroot
Copy link
Collaborator

Thank you @tanjadegroot for the thorough review! It helped a lot to improve the schemata.

Here's a summary of the decision I have taken on each topic - hope that fits for you:

Thanks very much Herbert for the summary and for taking into account all these comments.
I also agree with your additional proposals.

I would have one more comment:
should we make it explicit that the target_api_version is the public version of the API: so rename it to target_public_api_version ?
This may help avoid that pêople would put x.y.z-rc.1 in that field. but I guess the validation would catch that anyway.

Copy link
Collaborator

@tanjadegroot tanjadegroot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

still some points to check

repository_name: QualityOnDemand
release_tag: r4.4
meta_release: Fall26
release_date: "2025-09-30T10:00:00Z"
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I presume the release date is automatically generated ? but when exactly ? is it the date/time of the release PR merge ?

however the schema validator checks this before the merge I suppose:
... if 'release_date' in repo and 'src_commit_sha' in repo: ...

so it has to be set before the validation, and cannot be after the release PR commit ?

I probably missed something (I hope) ...

Also, in the example for "Fall26", logically it should say "2026-..." (iso "2025-... ) ?

Copy link
Collaborator Author

@hdamker hdamker Dec 10, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #339 (comment) for an explanation how release_date and src_commit_sha are generated. release_date is more or less the time of the last commit done by the automation on the release branch (after the release PR is merged). During the release PR both fields will be validated to be null.

The example is updated.

type: string
description: |
Last commit SHA from main or maintenance branch included in this release.
Generated during release creation.
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Same comment as for release_date. "generated during release creation" seems too late as the file has to go into the release.

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

See #339 (comment) for explanation.

Your question has triggered the simplification ... with subsequent updates of the release branch from main branch, the calculation of this value would become complex.

Co-authored-by: Tanja de Groot <87864067+tanjadegroot@users.noreply.github.com>
@hdamker
Copy link
Collaborator Author

hdamker commented Dec 10, 2025

Thank you @tanjadegroot for the second round of thorough review! Your questions about the metadata timing and terminology helped clarify important aspects of the release workflow, especially Phase 4 (automated release creation).

Terminology & Field Name Consistency

Generated Metadata Timing and Workflow

Regarding the questions about when release_date and src_commit_sha are generated, and how validation works if they're populated after the release PR the proposal is to implement a two-phase workflow with immutable release branches as the initial implementation. That is a simplification compared to the current concept which allowed to merge from main during the lifetime of the release branch.

Phase 1: Release Branch Preparation (with PR review)

  1. Automation creates release branch from main/maintenance HEAD
  2. Generates release-metadata.yaml with:
    • release_date: null (will be set at finalization)
    • src_commit_sha: null (will be set at finalization)
    • Other fields derived from release-plan.yaml
  3. Release PR is created for review
  4. Immutable release branch principle:
    • Release branch content is immutable after creation
    • Exception: CHANGELOG.md entries may be added/updated
    • If API corrections needed: abandon release (close PR, delete branch), fix main, retrigger

Phase 2: Finalization (after PR merge)

  1. Automation triggers on release PR into release branch merge
  2. Populates final metadata:
    • release_date: Current UTC timestamp
    • src_commit_sha: HEAD SHA from base branch at branch creation time
  3. Creates "release commit": chore: finalize release metadata for rX.Y
  4. Creates git tag pointing to this release commit
  5. CI builds and publishes artifacts
  6. GitHub Release is created

Files updated

  1. Schema descriptions (release-metadata-schema.yaml):

    • release_date: Explains null during prep, populated at finalization
    • src_commit_sha: Explains immutable branch approach and calculation
  2. Workflow documentation (CAMARA-Release-Workflow-and-Metadata-Concept.md):

    • Step 3 (Review): Added abandon-and-retrigger process for API corrections
    • Step 4 (Tag and Generate): Comprehensive two-phase workflow explanation
    • Step 5d (new): Notes release branches are temporary, can be deleted after tag
    • Appendix ("Updating Release Branch from Main"): Marked for future consideration with clear note:

      This section describes a forward-merge approach that is deferred for future consideration.
      The initial implementation uses immutable release branches.

This commit addresses feedback from Tanja's second review round (Dec 9, 2025),
implementing four main topics and validation script enhancements for the
two-phase release workflow.

Changes:

1. Terminology consistency: patch-release → maintenance-release
   - Renamed example file: 04-patch-release.yaml → 04-maintenance-release.yaml
   - Updated schema enums in release-metadata-schema.yaml and release-plan-schema.yaml
   - Updated validation script messages and comments
   - Updated README.md references (4 occurrences)
   - Updated workflow documentation (5 occurrences, carefully distinguishing
     repository maintenance releases from API patch versions)

   CAMARA terminology clarification:
   - Maintenance release: Repository release with r-tag (e.g., r3.4, r3.5)
   - Patch version: API version increment (e.g., 1.0.1, 2.3.4)

2. Field naming consistency: title → api_title
   - Updated release-metadata-schema.yaml required fields
   - Updated example file 05-generated-release-metadata.yaml (3 occurrences)
   - Updated workflow documentation (3 occurrences)
   - Aligns with api_ prefix pattern used by api_name and api_version

   Related: camaraproject/project-administration#69

3. Two-phase workflow with immutable release branches
   - Updated schema descriptions for release_date and src_commit_sha
   - Enhanced Step 3: Added abandon-and-retrigger process for API corrections
   - Enhanced Step 4: Added comprehensive two-phase workflow explanation
   - Added Step 5d: Notes about temporary release branch lifecycle
   - Marked forward-merge approach for future consideration (Appendix)

   Initial implementation approach:
   - Release branches are immutable after creation (except CHANGELOG.md)
   - Corrections require abandon (close PR + delete branch) and retrigger
   - src_commit_sha uses base branch HEAD at creation time
   - Simpler validation and CI/CD workflows

4. Example date accuracy
   - Fixed 05-generated-release-metadata.yaml: 2025 → 2026 (matches Fall26)

5. Validation script enhancements for two-phase workflow
   - Updated schema type definitions to allow null values:
     * release_date: type: string → type: [string, "null"]
     * src_commit_sha: type: string → type: [string, "null"]
   - Added --strict-phase1 flag for Phase 1 validation
   - Added _check_two_phase_workflow() method
   - Updated README.md with validation examples and CI integration

   Validation modes:
   - Lenient (default): Accepts both null (Phase 1) and valid values (Phase 2)
   - Strict Phase 1: Enforces null values for release branch PR review

Files modified: 7 files (10 total including validation script changes)
- artifacts/metadata-schemas/schemas/release-metadata-schema.yaml
- artifacts/metadata-schemas/schemas/release-plan-schema.yaml
- artifacts/metadata-schemas/scripts/validate-release-plan.py
- artifacts/metadata-schemas/examples/04-maintenance-release.yaml (renamed)
- artifacts/metadata-schemas/examples/05-generated-release-metadata.yaml
- artifacts/metadata-schemas/README.md
- documentation/SupportingDocuments/CAMARA-Release-Workflow-and-Metadata-Concept.md

Addresses: PR camaraproject#339 review comments from @tanjadegroot (Dec 9, 2025)
Copy link
Collaborator

@tanjadegroot tanjadegroot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

All OK for the round 2 comments but sorry, I ended up with another batch.
please skip as you see fit.
per your guidance I should not approve this yet

Defines the structure for `release-plan.yaml` files maintained on the main branch.

**Key fields:**
- `repository.release_track` - Release track (none, sandbox, meta-release)
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think the "sandbox" value would be impacted by the new name for "independent" release e.g. step/intermediate/solo/individual

"indepedent" would work for me as well (as indeed this has started to be used and not sure that people use "Independent Sandbox" very often, rather just "Sandbox")

individual would be good as opposed to the meta-release being a grouped release (though we do not really use that term).

the change will impact the example files

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We can change this when we concluded the discussion. I will then change consistently across the files.

Current candidate none, independent, meta-release

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update: have done the change to none, independent, meta-release in 5251ef0

repository:
release_track: sandbox
release_tag: r1.1
target_release_type: none
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Question, but could be ignored, as "none" would imply to ignore the release tag I guess.

  • if there is a (target) release_tag given, should the target_release_type not be at least 'pre-release-alpha' ? (as none - No release planned or not ready yet)
  • or should the (target) release_tag value initially be "r-.-" or empty.
  • or if we consider the first pre-release is always at least alpha, then do we need the "none" value ?

Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logically (but maybe cosmetic) I would put the target_release_type before the (target) release tag.

Copy link
Collaborator Author

@hdamker hdamker Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

in the beginning the repository is not ready for any release (no API definition), so 'pre-release-alpha' would be invalid. My proposal is to set the line initially to

target_release_tag: null # replace with r1.1 for first release

release_tag: r4.4
meta_release: Fall26
release_date: "2026-09-30T10:00:00Z"
release_type: public-release
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logically I would put the release_type before the release_tag

Copy link
Collaborator Author

@hdamker hdamker Dec 12, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I keep the current order. Every release_type has a release_tag and the release_tag is the first thing I see after the repository in GitHub -- it is together with the repository the identifier of the release.


```
main ────┬───[fix]───────┬──────►
main ────┬───[fix]───────┬──────►
Copy link
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

online 437 below what is a Post-Release PR ? do we need it ?

Copy link
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Yes, we do. It is the same as described in step 5.1.

hdamker and others added 5 commits December 11, 2025 22:40
Updates release-plan.yaml schema to use target_release_tag instead of
release_tag, aligning with the consistent target_* prefix pattern used
by all other planning fields.

Rationale:
All four planning properties in release-plan.yaml describe values the
release SHOULD have when successfully created. The target_ prefix makes
this planning/intent semantic consistent:
- target_release_tag: The release tag this release should have
- target_release_type: The release type this release should have
- target_api_version: The API version each API should have
- target_api_status: The API status each API should have

Changes:
1. Schema files (2 files):
   - release-plan-schema.yaml: Renamed field and updated descriptions
   - release-metadata-schema.yaml: Updated description to reference
     target_release_tag in release-plan.yaml (field stays release_tag
     in release-metadata as it contains actual values, not targets)

2. Example files (4 files):
   - Updated all release-plan examples to use target_release_tag
   - 05-generated-release-metadata.yaml unchanged (uses release_tag)

3. Documentation (2 files):
   - README.md: Updated field references and naming standards
   - CAMARA-Release-Workflow-and-Metadata-Concept.md: Updated
     terminology table and example

Files modified: 8 files
- artifacts/metadata-schemas/schemas/release-plan-schema.yaml
- artifacts/metadata-schemas/schemas/release-metadata-schema.yaml
- artifacts/metadata-schemas/examples/01-new-repo-sandbox.yaml
- artifacts/metadata-schemas/examples/02-multi-api-mixed-status.yaml
- artifacts/metadata-schemas/examples/03-rc-preparation.yaml
- artifacts/metadata-schemas/examples/04-maintenance-release.yaml
- artifacts/metadata-schemas/README.md
- documentation/SupportingDocuments/CAMARA-Release-Workflow-and-Metadata-Concept.md

Validation: All example files pass schema validation
Breaking change: Existing release-plan.yaml files will need field rename
Co-authored-by: Tanja de Groot <87864067+tanjadegroot@users.noreply.github.com>
Key changes based on Tanja's review feedback:

Schema improvements:
- Remove $id from both schemas (not needed for copied schemas)
- Change "or better" → "or higher status" for precise terminology
- Standardize "release numbers" → "release_tag" terminology (4 locations)

Documentation clarifications:
- Remove "unchanged" status historical reference from README
- Change "bundles" → "Bundled OpenAPI specifications (later phase)"

Example fixes:
- Update 01-new-repo-sandbox.yaml: use null target_release_tag with
  target_release_type: none (semantic consistency)

Files modified: 5 files across schemas, examples, and documentation

Related: camaraproject#339
Remove meta_release field from release-metadata.yaml schema and examples,
as meta-release participation is not finalized at tagging time and can be
reverted before the actual meta-release.

Meta-release field remains in release-plan-schema.yaml for planning purposes.

Changes:
- Remove meta_release property from release-metadata-schema.yaml
- Remove meta_release from example 05-generated-release-metadata.yaml
- Remove meta_release from concept document example
@hdamker
Copy link
Collaborator Author

hdamker commented Dec 12, 2025

@tanjadegroot The changes for your third round of comments are within the commits b0c6de5, 1764119, and 09386f6. Details are in the commit descriptions.

One point is open: the value which replace the "sandbox" track. See my comment on this conversation.

One additional change which I have decided in 50e45ad: I removed the meta-release property from the release-metadata.yaml as I'm convinced that this is not immutable already at the time of the release commit and tagging. Definitely not for pre-releases, but also not for public releases (M4 -> M5). We won't be able to change this affiliation any more if it is in the release itself. Instead we should define the relationship between a repository rx release series and a concrete meta-release in a configuration file and enrich the generated reports with that.

@hdamker
Copy link
Collaborator Author

hdamker commented Dec 12, 2025

@camaraproject/release-management_codeowners We should get this merged soon. Further fine-tuning of descriptions is possible later, also updates of the schema itself (with some effort).

Update release-plan-schema.yaml to allow null values for target_release_tag
when target_release_type is "none", matching the semantic meaning that the
repository is not yet ready for a release.

This fixes validation for example 01-new-repo-sandbox.yaml which uses
target_release_tag: null with target_release_type: none.
Change the release_track enum value from "sandbox" to "independent" to better
reflect that these are professional independent releases on their own schedule,
not experimental releases.

"Sandbox" terminology is preserved when referring to repository categories
(Sandbox API Repositories, Sandbox teams), only the release_track enum value
and its references have been changed.

Changes:
- Update enum and descriptions in release-plan-schema.yaml
- Update example 01-new-repo-sandbox.yaml (file name unchanged - refers to repository category)
- Update 6 occurrences in README.md
- Update 2 occurrences in concept document
- Update validation script semantic check

All examples pass validation with the new enum value.
@hdamker
Copy link
Collaborator Author

hdamker commented Dec 12, 2025

One point is open: the value which replace the "sandbox" track. See my comment on this conversation.

@tanjadegroot that's done now as well in 5251ef0

@hdamker hdamker merged commit d8f8d47 into camaraproject:main Dec 16, 2025
1 check passed
@hdamker hdamker deleted the 337-metadata-schemas branch December 16, 2025 21:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Design and implement metadata schemas

4 participants