dotCMS / dotCMS/core

epic(ci): Automated release notes for GitHub releases

Open
#35,011 1 comment 0 reactions 1 assignee View on GitHub

@sfreudenthaler is already working on this.

Since Mar 17, 2026.

Dominant language
Java
Stars
970
Forks
486
Avg merge
3d 33m
Merged PRs (30d)
170

Description

User Story

As a developer or technical buyer evaluating or operating dotCMS, I want every GitHub release to have a populated description with categorized changelogs, so that I can quickly understand what changed, what broke, and what I need to do — without waiting for someone to manually write the notes.

Problem

Every dotCMS release requires someone to manually read through GitHub issues, review PRs, and write a changelog for dev.dotcms.com/docs/changelogs. Meanwhile, GitHub release descriptions at github.com/dotCMS/core/releases are created empty (generate_release_notes: false in the release prepare workflow). With near-daily releases, this manual process doesn't scale.

Solution

An automated pipeline that generates developer-facing release notes for every dotCMS release:

  1. TypeScript data-gathering script extracts PR details, labels, and categorization from GitHub API
  2. Claude AI writes polished changelog prose from the structured data
  3. GitHub Actions orchestrates the pipeline as a non-blocking job in the existing release workflow

Architecture:

release-prepare → build → deployment → release → release-notes (non-blocking)
                                                ↘              ↘
                                          finalize (always)   report (always)

Pipeline flow (within release-notes job):

1. Idempotency check (skip if notes exist)
2. TS script gathers data → structured JSON
3. Prompt assembled (template + JSON)
4. Claude writes /tmp/release-notes.md (Write tool only)
5. gh release edit updates the release (deterministic shell step)

Key design decisions:

  • Separation of concerns: Claude only writes prose (Write tool access). The gh release edit runs as a plain shell step for auditability
  • Non-blocking: release-notes job uses if: success() and doesn't block finalize or report
  • Idempotent: Checks if release body already has content before running — safe for job reruns
  • Tag filtering: Skips CLI (dotcms-cli-*) and LTS (*_lts_*) releases automatically
  • Reusable: Same component used by both the release pipeline and a standalone backfill workflow

Changelog format:

  • 4 sections: Features & Enhancements, Fixes and Known Issues, Deprecations/EOL/Reminders, Infrastructure & Security
  • [!CAUTION] rollback warning when Not Safe To Rollback labels detected
  • Changelog: Skip label support to omit internal changes
  • Every bullet links to its PR for traceability

Phases

Phase Description Status
1 Claude Code skill for local changelog generation ✅ Complete
2 GitHub Actions pipeline (TS script + workflows) 🔧 In Progress
3 dev.dotcms.com changelog publishing via MCP 📋 Planned
4 Hardening (Slack notifications, fallback, backfill) 📋 Planned

Files

Purpose Path
TS data-gathering script .github/scripts/gather-release-data/
Prompt template .github/scripts/gather-release-data/prompt-template.md
Reusable workflow component .github/workflows/cicd_comp_ai-release-notes-phase.yml
Backfill workflow .github/workflows/cicd_ai-release-notes-backfill.yml
Release pipeline integration .github/workflows/cicd_6-release.yml (new release-notes job)
Test harness script .github/scripts/gather-release-data/test/create-test-harness.sh
Claude Code skill ~/.claude/skills/dotcms-release-notes/SKILL.md

References

  • Test PR in core-workflow-test: dotCMS/core-workflow-test#451
  • Existing release workflow: .github/workflows/cicd_6-release.yml
  • Claude action reference: anthropics/claude-code-action@v1

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.