Skip to content

Commit eda58ec

Browse files
sfreudenthalerclaudeSteve Freudenthaler
authored
feat: add AI release notes pipeline and test harness (#451)
## Summary - TypeScript data-gathering script that extracts PR details, labels, and categorization from GitHub API - Prompt template for Claude to generate changelog prose (assembled via simple shell concatenation with JSON data) - Reusable workflow component (`cicd_comp_ai-release-notes-phase.yml`) with release validation and `continue-on-error` for non-blocking execution - Backfill workflow (`cicd_ai-release-notes-backfill.yml`) for manual/retroactive runs - Reproducible test harness script (`test/create-test-harness.sh`) - Jest tests for categorization and GitHub API helpers (30 passing) ## Architecture ``` ┌─────────────────────────────────────────────────────────┐ │ RELEASE PIPELINE │ │ (cicd_6-release.yml) │ │ │ │ Step 1: Build artifacts │ │ Step 2: Run tests │ │ Step 3: Create GitHub release + tag │ │ Step 4: Deploy │ │ Step 5: ───► calls ───────────────────────┐ │ │ (passes newly generated release tag) │ └────────────────────────────────────────────┼─────────────┘ │ ▼ ┌──────────────────────────┐ │ REUSABLE COMPONENT │ │ (cicd_comp_ai-release- │ │ notes-phase.yml) │ │ │ │ 1. Gather PR data │ │ 2. Assemble prompt │ │ 3. Claude writes notes │ │ 4. Update release desc │ └──────────────────────────┘ ▲ │ ┌────────────────────────────────────────────┼─────────────┐ │ BACKFILL WORKFLOW │ │ │ (cicd_ai-release-notes-backfill.yml)│ │ │ │ │ │ Manual trigger (workflow_dispatch) ───────┘ │ │ │ │ Use cases: │ │ • Past releases that never got AI notes │ │ • Re-generate notes after prompt improvements │ │ • Test the pipeline without doing a real release │ └──────────────────────────────────────────────────────────┘ ``` ## Test plan - [ ] Merge this PR so workflows are available on `main` - [ ] Trigger backfill workflow with `v26.03.17-02` to test end-to-end - [ ] Verify filter: trigger with `v26.03.17_lts_v01` → should skip - [ ] Re-trigger with `v26.03.17-02` → should safely overwrite existing notes ## Links closes dotCMS#35016 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com> Co-authored-by: Steve Freudenthaler <stevefreudenthaler@dotcmss-mbp.home>
1 parent 85ebf00 commit eda58ec

File tree

14 files changed

+5626
-0
lines changed

14 files changed

+5626
-0
lines changed
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
/** @type {import('ts-jest').JestConfigWithTsJest} */
2+
module.exports = {
3+
preset: 'ts-jest',
4+
testEnvironment: 'node',
5+
roots: ['<rootDir>/src'],
6+
testMatch: ['**/*.test.ts'],
7+
// @octokit packages are ESM-only; transform them with ts-jest
8+
transformIgnorePatterns: [
9+
'node_modules/(?!(@octokit|universal-user-agent|before-after-hook)/)',
10+
],
11+
transform: {
12+
'^.+\\.tsx?$': 'ts-jest',
13+
'^.+\\.jsx?$': ['ts-jest', { tsconfig: { allowJs: true } }],
14+
},
15+
};

0 commit comments

Comments
 (0)