CAMARA Release Process - Coverage of Fall25 Release PR checks

CAMARA Release Process - Coverage of Fall25 Release PR checks

Release Workflow Categories

The CAMARA release process is structured into a series of workflow categories (C1–C5).
Each category defines what is validated or generated, where it happens (main, release, or maintenance branch), and how automation enforces consistency.
These categories together form the backbone of the automated release process described in the CAMARA Release Workflow and Metadata Concept.

Category

Description

main content rule

Category

Description

main content rule

C1 – Continuous Validation on main

Full linting and schema checks (YAML + OpenAPI), enforcing the work‑in‑progress rule. CI ensures main always contains placeholders and never concrete release values.

Placeholders only: info.version: "wip", {{version}}, {{api_version}}; placeholder server URLs.

C2 – Automated Release Branch Generation

On release trigger, tooling creates the release branch, replaces placeholders with computed values (exact versions, server URLs), and writes release-metadata.yaml.

Concrete values set only in release branch.

C3 – Release Preparation & Review

Manual review through PRs to release branch; branch protection enforces CODEOWNERS and reviewers approvals.

C4 – Tagging & Post-Release Sync

Create tag, publish artifacts (including release-metadata.yaml), and open a sync PR to main. main stays with placeholders.

C5 – Maintenance / Patch Release

Apply the same C2–C4 flow on maintenance-rX branches for hot‑fix releases (release_readiness: patch-release).

Topic-by-Topic Coverage

Topics / Expected Check

How It’s Addressed

Category

Topics / Expected Check

How It’s Addressed

Category

YAML and OpenAPI schema validity

CI runs MegaLinter + schema checks on every PR to main.

C1

Version field handling (info.version)

Must be "wip" on main; real value is computed from target_version with auto‑incremented suffix (e.g., -rc.2) in the release branch.

C1 → C2

Server URL pattern enforcement (“Version in URL path”)

Placeholder format validated on main; concrete vX.Y replaced during release generation.

C1 + C2

API status / repository readiness coherence

CI cross-checks release_readiness vs each api_status.

C1

Existence of API definitions and tests

Required for all alpha or higher APIs; CI fails if missing.

C1

No changes to unchanged APIs

CI diff against previous release tag; reference point on main marked by src/X.Y.

C1

Dependency references (Commonalities / ICM)

Only meta-release references on main; concrete tag refs inserted in release branch.

C1 + C2

Placeholder replacement

Done automatically for {{api_version}}, {{commonalities_version}}, etc. in release branch.

C2

Generation of release-metadata.yaml

Scripted from release-plan.yaml + commit SHA.

C2

CHANGELOG generation

Auto-generated (as far as possible), edited and reviewed via release prep PR.

C2 + C3

Readiness checklist validation

Evaluated from metadata; results shown in release PR.

C2 + C3

Approval and branch protection

Required CODEOWNER approval before tag.

C3

Tag creation and artifact publishing

After approval CI creates rX.Y tag + GitHub Release w/ artifacts.

C4

Post-release PR to main

After tagging, automation opens a PR to main that adds the new CHANGELOG.md and README entries (e.g., updated API tables). All version fields on main remain as "wip", and for public releases the release-plan.yaml is updated to set all APIs to unchanged, enforcing explicit planning for the next cycle.

C4

src/X.Y tag creation

Marks branch point on main for maintenance.

C4

Maintenance / patch releases

Executed on maintenance-rX branches with same checks as main releases.

C5

Summary Table

Category

Main Focus

When Applied

Key Artifacts

Category

Main Focus

When Applied

Key Artifacts

C1 – Validation on main

Ensure structure, “wip” state, and metadata correctness.

All PRs to main.

CI reports, schema lint logs.

C2 – Release Branch Generation

Replace placeholders, compute versions, generate metadata + CHANGELOG.

On release trigger (e.g. issue with label).

release-metadata.yaml, CHANGELOG.

C3 – Review & Approval

Manual review of release branch artifacts.

PRs to release/rX.Y.

Reviewed PRs, branch protections ensure needed approvals.

C4 – Tag & Sync Back

Tag, publish, open sync PR to main (CHANGELOG, README, update release-plan.yaml to unchanged where applicable).

After approval / tag.

GitHub Release, src/X.Ytag, sync PR into main.

C5 – Maintenance

Patch releases on older cycles.

When needed.

maintenance-rX branches, patch tags.

Backup — Original Release PR Topics and How They Map

API YAML

info.version
-> must be "wip" on main; set only in release branch (C1 → C2).
info.description contains the mandatory text from the section on authentication and authorization from the ICM CAMARA-API-access-and-user-consent.md.
→ checked via linting rules (C1) or
→ placeholder in main; replaced in release branch (C1 → C2).
info.description contains the mandatory text on error codes
→ checked via linting rules (C1) or
→ placeholder in main; replaced in release branch (C1 → C2).
Version in URL path
→ placeholder validation on main, set on release (C1 + C2).
x-camara-commonalities with 0.6
→ placeholder validation on main, set on release (C1 + C2).
Syntax of the YAML filename
→ lint rule on main (C1)
Presence of externalDocs section with content
→ lint rule on main (C1)

externalDocs:
description: Project documentation at CAMARA
url: https://github.com/camaraproject/<repository-name>

In the components section, presence of the securitySchemes part
→ schema check (C1).
Presence and pattern of the x-correlator schema
→ schema check (C1).
Presence of contact section - should be removed
lint rule on main (C1)

CHANGELOG.md release related section

Release number in section heading
→ replaced via placeholder generation from template (C2).
Release number in links
-> updated on release branch (C2)

API Readiness Checklist

→ complete list generated on release branch (C2)

API version
→ derived from release-plan.yaml
Syntax of the API name
→ derived from release-plan.yaml
Commonalities release reference
→ derived from release-plan.yaml
ICM release reference
→ derived from release-plan.yaml
API description wiki linked
→ not immutable, should be only in release review process

Test files

Syntax of the API name
→ existence checked for each alpha or higher API (C1).
Check usage of operationId
→ lint rule on main (C1).
Check the version occurrences are updated in the files (at the top and in the background section)
→ automatically replaced in release branch (C2).

README

→ complete section Release Information will be (re)generated on release branch (C2) and again on main branch (C4).

Release number in links
-> same as in other artifacts
Add a link to the API description on the http://camaraproject.org website to the readme.md. It is proposed to put this link “[API description]” with the 3 links to the API definitions.
× Not recommend for README.md within: links to website are not immutable, will eventually break
→ can be added to (re)generated Release Information section within main branch (C4).

Review process

Generate the release PR for the release update
→ handled by release automation (C2 + C3)
Manage the progress status of the release reviews for M3 and M4 in the automated release tracking process and generate the corresponding table for the meta-release wiki page.
→ derived from metadata (on the release branch) + and displayed in meta-release overview (C2 + C3)

Other automation needs / ideas

Add spelling checker into the automation flow
→ additional lint rule on main (C1)