Skip to content

Add release-plan.yaml rollout campaign#103

Merged
hdamker merged 20 commits intocamaraproject:mainfrom
hdamker:release-plan-rollout-campaign
Jan 27, 2026
Merged

Add release-plan.yaml rollout campaign#103
hdamker merged 20 commits intocamaraproject:mainfrom
hdamker:release-plan-rollout-campaign

Conversation

@hdamker
Copy link
Copy Markdown
Contributor

@hdamker hdamker commented Jan 9, 2026

What type of PR is this?

enhancement/feature

What this PR does / why we need it:

Implements the release-plan.yaml rollout campaign - automated infrastructure to add release-plan.yaml metadata files to all ~61 CAMARA API repositories.

Key features:

  • Automated generation of release-plan.yaml from releases-master.yaml data
  • Two template variants: repositories with existing releases vs. new repositories
  • CODEOWNERS integration: automatically populates main_contacts from repository CODEOWNERS
  • Validation integration: calls validation action (currently stub via hdamker/tooling@release-plan-validation)
  • Dry-run mode: plan and preview all changes before creating PRs

Templates for review:

YAML templates (generated release-plan.yaml):

PR body templates (PR descriptions for target repos):

Testing Status

Apply mode test (3 repos): Successful run 21092880099

Dry-run test (all repos): Successful run (2 minutes)

  • 45 repositories with releases
  • 14 repositories without releases (WIP/new)
  • 3 of the 64 repositories would be skipped in apply (already have PR from apply test)

Which issue(s) this PR fixes:

Fixes #99

Special notes for reviewers:

Feedback requested on:

  1. YAML template structure and comments
  2. PR body template wording and instructions
  3. Default values (target_release_type: none, dependencies versions)

Workflow:

  1. select job: Builds repo list from releases-master.yaml, filters by category, skips repos with existing release-plan.yaml
  2. run job (matrix): For each repo: fetch CODEOWNERS → generate YAML → validate → create PR
  3. aggregate job: Merges all per-repo results into campaign summary

Changes:

  • New campaign: campaigns/release-plan-rollout/
  • New action: generate-release-plan (TypeScript, Mustache templates)
  • Simplified campaign-finalize-per-repo (removed superseding logic)
  • Validation step integration (stub, to be replaced with camaraproject/tooling@v0)

Before production rollout:

  • Change validation action reference from hdamker/tooling@release-plan-validation to camaraproject/tooling@v0 (after shared-action is released)

Changelog input

Add release-plan.yaml rollout campaign for automated metadata file deployment across CAMARA repositories

Additional documentation

See campaigns/release-plan-rollout/docs/README.md for usage documentation

hdamker and others added 10 commits January 7, 2026 22:00
- Refactor campaign-finalize-per-repo for generic reuse
- Add INCLUDE filter to release-info workflow
- Create release-plan-rollout campaign workflow and actions
- Add generate-release-plan TypeScript action
- Add PR body template and documentation

Fixes camaraproject#99
…ject#99)

- Add include_wip_repos and include_new_repos workflow inputs
- Update select job to use repositories array with API file detection
- Categorize repos: with-release, WIP (has API files), new (no API files)
- Generate placeholder release-plan.yaml for repos without releases
- Add warning section in PR body template for placeholders
- Update aggregation summary with category breakdown
- Update campaign documentation
- Add UX-reviewed templates for repos with/without releases
- Use Mustache for YAML generation with code-appended API section
- Fetch CODEOWNERS and include all in main_contacts
- Simplify campaign-finalize-per-repo: skip if PR exists (no superseding)
- Remove duplicate meta_release entry (consolidated conditional block)
- Update meta_release comment: "update for next cycle when planning"
- Update target_release_type comment in both templates:
  "must be set before release can be triggered"
- Enable validation via hdamker/tooling@release-plan-validation (stub)
- Add log step showing validation result (valid, errors, warnings)
- Skip PR creation when validation fails, report error in summary
- Remove target_release_type and pr_body_template from summary output
@hdamker
Copy link
Copy Markdown
Contributor Author

hdamker commented Jan 9, 2026

@tanjadegroot @camaraproject/release-management_maintainers the workflow is not yet 100% complete and not fully tested, but I would like to get already your comments on the four templates. They are designed along the following principles:

  • Safe to merge as-is: Pre-populated from existing release data and CODEOWNERS; target_release_type: none ensures no accidental releases — maintainers verify rather than fill in from scratch
  • Evergreen comments: No specific version numbers in explanatory comments in the YAML(e.g., "increment first number" not "r3.2 → r4.1") so guidance stays valid after updates
  • PR description does the heavy lifting: Detailed instructions in the one-time PR description; YAML comments kept minimal since the file will be edited repeatedly
  • Declare intent, don't trigger: The file expresses what maintainers plan to release; actual release triggering happens externally

Three examples of generated release-plan.yaml files (from https://github.com/hdamker/project-administration/actions/runs/20861601808):

hdamker and others added 4 commits January 12, 2026 09:54
- campaign-finalize-per-repo: derive git user identity from github_token
  via gh api user (removes hardcoded/configurable git_user_name/email)
- Templates: update docs URL to ReleaseManagement/tree/main/documentation
- PR body templates: add three documentation links (full docs, workflow
  spec, API versioning guide)
In apply mode, artifacts are named results-* not plan-*. The aggregate
job now detects the mode and uses the correct pattern and file names.
@hdamker hdamker marked this pull request as ready for review January 13, 2026 21:35
@hdamker hdamker requested review from a team as code owners January 13, 2026 21:35
@Kevsy
Copy link
Copy Markdown

Kevsy commented Jan 14, 2026

Thanks @hdamker I've checked and proofread all the templates, looks good 👍

Just a couple of minor comments:

  1. release-plan-no-releases.mustache/ release-plan-with-releases.mustache

For:

 # Uncomment and set when planning a meta-release participation:
  # meta_release: Fall26

...may be worth stating the meta-release syntax (i.e. no space between the classifier and the year: Fall26 ✅ , Falll 26 ❌ )

  1. release-plan-no-releases.mustache/ release-plan-with-releases.mustache

For:

# APIs in this repository
# Update with your actual API(s) when ready:
# - api_name: kebab-case identifier (will be filename in code/API_definitions/)
# - target_api_status: draft (no file yet) | alpha (file exists) | rc | public
apis:

...please can you include a commented example showing the apis: object structure with at least two APIs included? It's not clear to me from the current example how to do that.

@hdamker
Copy link
Copy Markdown
Contributor Author

hdamker commented Jan 14, 2026

...please can you include a commented example showing the apis: object structure with at least two APIs included? It's not clear to me from the current example how to do that.

Hi @Kevsy they are not included in the templates as they will be generated within the workflow based on the existing APIs, see for example in camaraproject/QualityOnDemand#523. For a new repository without prior release there is an example added, see camaraproject/ConsentManagement#7

Regarding "Fall26" vs "Fall 26" ... good point to add this to the validation (allowing currently only Spring26 and Fall26, if we support maintenance releases also Fall25).

Avoids GitHub's "bidirectional Unicode text" warning banner when
viewing generated release-plan.yaml files.
- Update API section comments in release-plan-no-releases.mustache
- Rename example-api to placeholder-entry for clarity
- Update PR body template to match
Removes remaining Unicode characters (U+2014 EM DASH) that triggered
GitHub's bidirectional text warning banner.
- Update workflow comment to describe CI validation and release generation
- Clarify target_release_tag comment in with-releases template
- Add explicit note about target_release_tag pre-fill in PR body
@hdamker
Copy link
Copy Markdown
Contributor Author

hdamker commented Jan 18, 2026

Regarding "Fall26" vs "Fall 26" ... good point to add this to the validation (allowing currently only Spring26 and Fall26, if we support maintenance releases also Fall25).

Pattern validation was already within the script, now also validating against the list of concrete valid values (as of now Fall25 (for maintenance releases), Spring26, Fall26). See camaraproject/tooling@7543d1e within camaraproject/tooling#48

Kevsy
Kevsy previously approved these changes Jan 19, 2026
Copy link
Copy Markdown

@Kevsy Kevsy left a comment

Choose a reason for hiding this comment

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

LGTM

- Replace "work in progress" link with Release Management Documentation
- Add specific link to release-plan.yaml documentation
- Add link to Release Lifecycle (explains workflow phases)
- Simplify API Versioning link text
@hdamker
Copy link
Copy Markdown
Contributor Author

hdamker commented Jan 20, 2026

Updated the documentation links in 699e907, they are now dependent on the merge of camaraproject/ReleaseManagement#364 (PR can be merged and tested on repositories earlier, but documentation links will not work)

@hdamker hdamker requested review from Kevsy and rartych January 20, 2026 21:54
- Update actions/checkout v4 -> v6
- Update actions/github-script v7 -> v8
- Update actions/setup-node v4 -> v6
- Update actions/upload-artifact v4 -> v6
- Update actions/download-artifact v4 -> v7
- Update actions/upload-pages-artifact v3 -> v4
- SHA pin peter-evans/create-pull-request to v8.0.0
- Add dependabot.yml for automated weekly updates
@hdamker
Copy link
Copy Markdown
Contributor Author

hdamker commented Jan 20, 2026

Done here in this PR branch:

Security hardening: Update GitHub Actions and add Dependabot*

Updates all GitHub Actions to their latest major versions and adds automated dependency management:

Action Change
checkout v4 → v6
github-script v7 → v8
setup-node v4 → v6
upload-artifact v4 → v6
download-artifact v4 → v7
upload-pages-artifact v3 → v4
peter-evans/create-pull-request v5 → v8 (SHA pinned)

Third-party action peter-evans/create-pull-request is SHA-pinned for supply chain security.

Added dependabot.yml for weekly automated updates with grouped PRs.

Copy link
Copy Markdown

@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.

Just a few questions, but LGTM!

Copy link
Copy Markdown

@Kevsy Kevsy 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
Copy Markdown
Contributor

@rartych rartych left a comment

Choose a reason for hiding this comment

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

LGTM

@hdamker hdamker merged commit e485feb into camaraproject:main Jan 27, 2026
1 check passed
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.

Campaign: Implement release-plan.yaml roll-out to all repositories

4 participants