@devilsdev/rag-pipeline-utils 2.1.4 โ 2.1.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.github/PROJECT_ROADMAP.md +102 -0
- package/.github/PULL_REQUEST_TEMPLATE.md +8 -0
- package/.github/workflows/auto-release-note.yml +73 -0
- package/.github/workflows/ci.yml +5 -3
- package/.github/workflows/docs-ci.yml +12 -15
- package/.github/workflows/docs-deploy.yml +24 -10
- package/.github/workflows/enforce-release-review.yml +50 -0
- package/.github/workflows/generate-blog-post.yml +44 -0
- package/.github/workflows/post-release-generate-blog.yml +71 -0
- package/.github/workflows/release-sync.yml +50 -0
- package/.github/workflows/roadmap-label-sync.yml +35 -0
- package/.github/workflows/roadmap-labels.yml +67 -0
- package/.github/workflows/roadmap-sync.yml +44 -0
- package/.github/workflows/sync-roadmap.yml +62 -0
- package/.github/workflows/verify-blog-badge.yml +50 -0
- package/CHANGELOG.md +41 -0
- package/README.md +40 -0
- package/__tests__/scripts/ensure-roadmap-labels.test.js +64 -0
- package/docs-site/blog/2025-04-21-release-v2.1.4.md +13 -0
- package/docs-site/blog/2025-04-22-release-v2.1.5.md +13 -0
- package/docs-site/blog/2025-04-24-v2.1.6.md +21 -0
- package/docs-site/package.json +4 -1
- package/package.json +7 -11
- package/scripts/banner-injector.js +82 -69
- package/scripts/close-done-roadmap-issues.js +65 -0
- package/scripts/create-roadmap-issues.js +47 -0
- package/scripts/ensure-roadmap-labels.js +73 -0
- package/scripts/generate-release-note.js +97 -27
- package/scripts/get-previous-tag.js +40 -0
- package/scripts/label-roadmap-issues.js +125 -0
- package/scripts/manual-test-checklist.md +90 -0
- package/scripts/sync-labels.js +71 -0
- package/scripts/sync-roadmap-labels.js +21 -0
- package/scripts/tag-release.js +64 -0
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
# ๐ฃ๏ธ Project Roadmap - RAG Pipeline Utils
|
|
2
|
+
|
|
3
|
+
> Version: 1.2.0
|
|
4
|
+
> Status: In Progress
|
|
5
|
+
> Last Updated: 2025-04-22
|
|
6
|
+
|
|
7
|
+
This roadmap guides the feature evolution, developer tooling, CI/CD automation, and community integration for the `@devilsdev/rag-pipeline-utils` project. Changes here are synchronized to GitHub Issues and CI workflows.
|
|
8
|
+
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
## โ
Legend
|
|
12
|
+
|
|
13
|
+
| Symbol | Meaning |
|
|
14
|
+
|--------|---------|
|
|
15
|
+
| โ
| Done |
|
|
16
|
+
| ๐ง | In Progress |
|
|
17
|
+
| ๐ | Upcoming |
|
|
18
|
+
| ๐งช | Experimental |
|
|
19
|
+
|
|
20
|
+
---
|
|
21
|
+
|
|
22
|
+
## ๐ฆ Phase 1: Foundation & CI/CD
|
|
23
|
+
|
|
24
|
+
| Feature | Status | Target Version | Tags |
|
|
25
|
+
|---------|--------|----------------|------|
|
|
26
|
+
| Automated test coverage with Jest | โ
Done | v2.0.0 | test, ci |
|
|
27
|
+
| Codecov integration + badge | โ
Done | v2.0.0 | ci, badge |
|
|
28
|
+
| GitHub Actions CI: lint, test, release | โ
Done | v2.0.0 | ci |
|
|
29
|
+
| GitHub Pages deploy for Docusaurus | โ
Done | v2.0.0 | docs, deploy |
|
|
30
|
+
| CHANGELOG auto-generation | โ
Done | v2.0.0 | release |
|
|
31
|
+
| Blog post sync from changelog | โ
Done | v2.1.0 | blog, release |
|
|
32
|
+
|
|
33
|
+
---
|
|
34
|
+
|
|
35
|
+
## ๐ Phase 2: Community & Docs
|
|
36
|
+
|
|
37
|
+
| Feature | Status | Target Version | Tags |
|
|
38
|
+
|---------|--------|----------------|------|
|
|
39
|
+
| Interactive onboarding via CLI | ๐ง In Progress | v2.2.0 | devx, onboarding |
|
|
40
|
+
| GitHub Discussions integration | ๐ | v2.2.0 | community |
|
|
41
|
+
| Contributor guide & issue templates | โ
Done | v2.0.0 | community, docs |
|
|
42
|
+
| Roadmap โ GitHub Issues sync | โ
Done | v2.1.0 | ci, roadmap |
|
|
43
|
+
| Label sync from roadmap | โ
Done | v2.1.0 | ci, labels |
|
|
44
|
+
| Manual & automated blog generation | โ
Done | v2.1.1 | blog, release |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## ๐ง Phase 3: Developer Tooling
|
|
49
|
+
|
|
50
|
+
| Feature | Status | Target Version | Tags |
|
|
51
|
+
|---------|--------|----------------|------|
|
|
52
|
+
| CLI for `release:tag` with changelog preview | โ
Done | v2.1.1 | cli, release |
|
|
53
|
+
| Hydra.js integration for dynamic RAG config | ๐ง In Progress | v2.2.0 | config, hydra |
|
|
54
|
+
| CLI for roadmap issue tagging | โ
Done | v2.1.1 | cli, roadmap |
|
|
55
|
+
| Status badge: Release Review Passed | โ
Done | v2.1.1 | badge, ci |
|
|
56
|
+
| Kanban sync for roadmap issues | โ
Done | v2.1.1 | roadmap, ci |
|
|
57
|
+
| Custom VS Code snippets & workspace | ๐ | v2.3.0 | devx |
|
|
58
|
+
|
|
59
|
+
---
|
|
60
|
+
|
|
61
|
+
## ๐ Phase 4: International & Advanced UX
|
|
62
|
+
|
|
63
|
+
| Feature | Status | Target Version | Tags |
|
|
64
|
+
|---------|--------|----------------|------|
|
|
65
|
+
| Blog subscribe + RSS | โ
Done | v2.1.1 | blog |
|
|
66
|
+
| i18n translation support | ๐ | v2.3.0 | i18n |
|
|
67
|
+
| SEO optimization + open graph cards | โ
Done | v2.1.1 | seo, meta |
|
|
68
|
+
| Comment system on blog posts | ๐ | v2.3.0 | blog, community |
|
|
69
|
+
| Performance tuning + SSR check | โ
Done | v2.1.0 | perf, ssr |
|
|
70
|
+
| Multilingual toggle in header | ๐ | v2.3.0 | i18n, ui |
|
|
71
|
+
|
|
72
|
+
---
|
|
73
|
+
|
|
74
|
+
## ๐งฉ Future Enhancements
|
|
75
|
+
|
|
76
|
+
| Feature | Status | Target Version | Tags |
|
|
77
|
+
|---------|--------|----------------|------|
|
|
78
|
+
| Plugin support via CLI | ๐ | v2.4.0 | cli, plugin |
|
|
79
|
+
| Graph-based pipeline UI | ๐ | v2.5.0 | ux, devx |
|
|
80
|
+
| Real-world RAG examples + use cases | ๐ | v2.3.0 | docs, showcase |
|
|
81
|
+
| Prebuilt Docker image | ๐ | v2.4.0 | infra, deploy |
|
|
82
|
+
| Slack/Discord webhook for releases | ๐ | v2.3.0 | infra, notify |
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## ๐ Contributor Stats
|
|
87
|
+
|
|
88
|
+
- GitHub Insights Badge: 
|
|
89
|
+
- Roadmap Sync: `scripts/create-roadmap-issues.js`
|
|
90
|
+
- Label Sync: `scripts/ensure-roadmap-labels.js`
|
|
91
|
+
- CLI Integration: `scripts/release-changelog.js`, `scripts/sync-roadmap-cli.js`
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## ๐ Files
|
|
96
|
+
|
|
97
|
+
- `.github/PROJECT_ROADMAP.md` โ source
|
|
98
|
+
- `scripts/ensure-roadmap-labels.js` โ label sync
|
|
99
|
+
- `scripts/create-roadmap-issues.js` โ issue sync
|
|
100
|
+
- `scripts/close-roadmap-done.js` โ close done items
|
|
101
|
+
- `.github/workflows/sync-roadmap.yml` โ automation trigger
|
|
102
|
+
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
## โ
Release Quality Checklist
|
|
2
|
+
|
|
3
|
+
- [ ] CHANGELOG.md updated
|
|
4
|
+
- [ ] Blog post generated (`docs-site/blog/*release*.md`)
|
|
5
|
+
- [ ] `release:tag` and `release:sync` flows tested
|
|
6
|
+
|
|
7
|
+
<!-- CI Badge -->
|
|
8
|
+

|
|
@@ -0,0 +1,73 @@
|
|
|
1
|
+
# .github/workflows/auto-release-note.yml
|
|
2
|
+
# Version: 1.0.0
|
|
3
|
+
# Description: Unified workflow to generate changelog + blog post from Git tag
|
|
4
|
+
# Author: Ali Kahwaji
|
|
5
|
+
|
|
6
|
+
name: โซ Auto Release Note
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
tags:
|
|
11
|
+
- 'v*'
|
|
12
|
+
workflow_dispatch:
|
|
13
|
+
|
|
14
|
+
permissions:
|
|
15
|
+
contents: write
|
|
16
|
+
|
|
17
|
+
jobs:
|
|
18
|
+
generate-note:
|
|
19
|
+
name: ๐ Generate Blog + Changelog
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
|
|
22
|
+
steps:
|
|
23
|
+
- name: โฌ๏ธ Checkout code
|
|
24
|
+
uses: actions/checkout@v4
|
|
25
|
+
|
|
26
|
+
- name: ๐ง Setup Node.js
|
|
27
|
+
uses: actions/setup-node@v4
|
|
28
|
+
with:
|
|
29
|
+
node-version: 20
|
|
30
|
+
|
|
31
|
+
- name: ๐ฆ Install dependencies
|
|
32
|
+
run: npm ci
|
|
33
|
+
|
|
34
|
+
- name: ๐ Generate release note from tag
|
|
35
|
+
env:
|
|
36
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
37
|
+
run: |
|
|
38
|
+
VERSION=${GITHUB_REF#refs/tags/v}
|
|
39
|
+
echo "Generating blog + changelog for v$VERSION"
|
|
40
|
+
|
|
41
|
+
git fetch --tags --force
|
|
42
|
+
|
|
43
|
+
node scripts/generate-release-note.js v$VERSION
|
|
44
|
+
|
|
45
|
+
- name: ๐ Auto-commit blog + changelog
|
|
46
|
+
uses: stefanzweifel/git-auto-commit-action@v5
|
|
47
|
+
with:
|
|
48
|
+
commit_message: "docs(release): auto-publish blog and changelog"
|
|
49
|
+
file_pattern: "CHANGELOG.md docs-site/blog/*.md"
|
|
50
|
+
push_options: '--follow-tags'
|
|
51
|
+
|
|
52
|
+
- name: ๐ Confirm complete
|
|
53
|
+
run: echo "Release blog + changelog committed and pushed."
|
|
54
|
+
|
|
55
|
+
- name: ๐ Emit Blog Badge Trigger
|
|
56
|
+
run: echo "::set-output name=blog::generated"
|
|
57
|
+
|
|
58
|
+
- name: ๐ Trigger Badge (Optional)
|
|
59
|
+
if: always()
|
|
60
|
+
uses: peter-evans/create-or-update-comment@v4
|
|
61
|
+
with:
|
|
62
|
+
issue-number: 1
|
|
63
|
+
body: "Blog Post + Changelog updated for ${{ github.ref_name }} :rocket:"
|
|
64
|
+
env:
|
|
65
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
66
|
+
|
|
67
|
+
- name: ๐ฌ Comment on PR (optional)
|
|
68
|
+
if: github.event.pull_request.number != ''
|
|
69
|
+
uses: peter-evans/create-or-update-comment@v4
|
|
70
|
+
with:
|
|
71
|
+
issue-number: ${{ github.event.pull_request.number }}
|
|
72
|
+
body: "๐ข Blog + Changelog updated for ${{ github.ref_name }} ๐"
|
|
73
|
+
|
package/.github/workflows/ci.yml
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
# .github/workflows/ci.yml
|
|
2
|
-
# Version: 1.
|
|
2
|
+
# Version: 1.1.0
|
|
3
3
|
# Description: Clean CI pipeline with lint, test, fixtures, coverage, and release
|
|
4
4
|
# Author: Ali Kahwaji
|
|
5
5
|
|
|
@@ -8,6 +8,7 @@ name: CI & Release
|
|
|
8
8
|
on:
|
|
9
9
|
push:
|
|
10
10
|
branches: [main]
|
|
11
|
+
tags: ['v*']
|
|
11
12
|
pull_request:
|
|
12
13
|
branches: [main]
|
|
13
14
|
|
|
@@ -30,7 +31,7 @@ jobs:
|
|
|
30
31
|
- name: ๐ฆ Install dependencies
|
|
31
32
|
run: npm ci
|
|
32
33
|
|
|
33
|
-
- name: ๐งน Lint
|
|
34
|
+
- name: ๐งน Lint codebase
|
|
34
35
|
run: npm run lint
|
|
35
36
|
|
|
36
37
|
- name: โ
Run tests with coverage
|
|
@@ -47,7 +48,8 @@ jobs:
|
|
|
47
48
|
|
|
48
49
|
- name: ๐ Semantic Release
|
|
49
50
|
env:
|
|
50
|
-
|
|
51
|
+
GH_TOKEN: ${{ secrets.GH_TOKEN }} # โ
Required by @semantic-release/github
|
|
52
|
+
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} # โ
Used by GitHub Actions
|
|
51
53
|
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
52
54
|
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
53
55
|
run: npx semantic-release
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
# .github/workflows/docs-ci.yml
|
|
2
|
-
# Version: 1.
|
|
3
|
-
# Description: CI pipeline for linting, testing, and building docs
|
|
2
|
+
# Version: 1.2.0
|
|
3
|
+
# Description: CI pipeline for linting, testing, and building docs with improved caching and consistency
|
|
4
4
|
# Author: Ali Kahwaji
|
|
5
5
|
|
|
6
|
-
name: Docs CI
|
|
6
|
+
name: ๐ Docs CI
|
|
7
7
|
|
|
8
8
|
on:
|
|
9
9
|
push:
|
|
@@ -12,37 +12,34 @@ on:
|
|
|
12
12
|
branches: [main]
|
|
13
13
|
|
|
14
14
|
jobs:
|
|
15
|
-
|
|
15
|
+
docs-ci:
|
|
16
16
|
runs-on: ubuntu-latest
|
|
17
|
-
defaults:
|
|
18
|
-
run:
|
|
19
|
-
working-directory: docs-site
|
|
20
17
|
|
|
21
18
|
steps:
|
|
22
|
-
- name: Checkout
|
|
19
|
+
- name: โฌ๏ธ Checkout code
|
|
23
20
|
uses: actions/checkout@v4
|
|
24
21
|
|
|
25
|
-
- name: Setup Node.js
|
|
22
|
+
- name: ๐ข Setup Node.js
|
|
26
23
|
uses: actions/setup-node@v4
|
|
27
24
|
with:
|
|
28
|
-
node-version:
|
|
25
|
+
node-version: 20
|
|
29
26
|
cache: 'npm'
|
|
30
27
|
cache-dependency-path: '**/package-lock.json'
|
|
31
28
|
|
|
32
|
-
- name: Install dependencies
|
|
29
|
+
- name: ๐ฆ Install dependencies
|
|
33
30
|
run: npm ci
|
|
34
31
|
|
|
35
|
-
- name: Lint codebase
|
|
32
|
+
- name: ๐งน Lint codebase
|
|
36
33
|
run: npm run lint
|
|
37
34
|
|
|
38
|
-
- name:
|
|
35
|
+
- name: ๐ Build documentation
|
|
39
36
|
run: npm run docs:build
|
|
40
37
|
|
|
41
|
-
- name: Run tests
|
|
38
|
+
- name: โ
Run tests
|
|
42
39
|
run: npm test
|
|
43
40
|
if: ${{ always() }}
|
|
44
41
|
|
|
45
|
-
- name: Upload
|
|
42
|
+
- name: ๐ฆ Upload built docs (optional)
|
|
46
43
|
uses: actions/upload-artifact@v4
|
|
47
44
|
with:
|
|
48
45
|
name: docusaurus-build
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# .github/workflows/docs-deploy.yml
|
|
2
|
-
# Version: 1.
|
|
3
|
-
# Description: Deploys Docusaurus docs site to GitHub Pages
|
|
2
|
+
# Version: 1.2.0
|
|
3
|
+
# Description: Deploys Docusaurus docs site to GitHub Pages with CNAME and post-release chaining
|
|
4
4
|
# Author: Ali Kahwaji
|
|
5
5
|
|
|
6
6
|
name: ๐ Deploy Docusaurus Docs
|
|
@@ -17,34 +17,48 @@ on:
|
|
|
17
17
|
- 'package.json'
|
|
18
18
|
|
|
19
19
|
permissions:
|
|
20
|
-
contents: write
|
|
20
|
+
contents: write
|
|
21
21
|
|
|
22
22
|
jobs:
|
|
23
23
|
deploy:
|
|
24
|
-
name:
|
|
24
|
+
name: ๐ Publish to GitHub Pages
|
|
25
25
|
runs-on: ubuntu-latest
|
|
26
26
|
|
|
27
27
|
steps:
|
|
28
|
-
- name: Checkout repository
|
|
28
|
+
- name: ๐ฅ Checkout repository
|
|
29
29
|
uses: actions/checkout@v4
|
|
30
|
+
with:
|
|
31
|
+
fetch-depth: 0 # โ
Full git history for tag diff or changelog sync
|
|
30
32
|
|
|
31
|
-
- name: Setup Node.js
|
|
33
|
+
- name: ๐งฐ Setup Node.js
|
|
32
34
|
uses: actions/setup-node@v4
|
|
33
35
|
with:
|
|
34
|
-
node-version:
|
|
36
|
+
node-version: 20
|
|
35
37
|
cache: 'npm'
|
|
36
38
|
|
|
37
|
-
- name: Install dependencies
|
|
39
|
+
- name: ๐ฆ Install dependencies
|
|
38
40
|
run: npm ci
|
|
39
41
|
|
|
40
|
-
- name:
|
|
42
|
+
- name: ๐ Git Identity
|
|
43
|
+
run: |
|
|
44
|
+
git config --global user.name "GitHub Actions"
|
|
45
|
+
git config --global user.email "github-actions@github.com"
|
|
46
|
+
|
|
47
|
+
- name: ๐ Build docs
|
|
41
48
|
run: npm run docs:build
|
|
42
49
|
|
|
43
|
-
- name:
|
|
50
|
+
- name: โ
Auto-generate release blog + changelog (if not triggered by tag)
|
|
51
|
+
run: |
|
|
52
|
+
TAG=$(git describe --tags --abbrev=0)
|
|
53
|
+
node scripts/generate-release-note.js "$TAG" || echo "๐ Skipped blog generation fallback"
|
|
54
|
+
if: success() && !startsWith(github.ref, 'refs/tags/')
|
|
55
|
+
|
|
56
|
+
- name: ๐ Deploy to GitHub Pages
|
|
44
57
|
uses: peaceiris/actions-gh-pages@v4
|
|
45
58
|
with:
|
|
46
59
|
github_token: ${{ secrets.GITHUB_TOKEN }}
|
|
47
60
|
publish_dir: docs-site/build
|
|
48
61
|
publish_branch: gh-pages
|
|
62
|
+
cname: docs.rag-utils.dev # ๐ง CHANGE THIS if you use a custom domain
|
|
49
63
|
user_name: github-actions[bot]
|
|
50
64
|
user_email: 41898282+github-actions[bot]@users.noreply.github.com
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# .github/workflows/enforce-release-review.yml
|
|
2
|
+
# Version: 1.1.0
|
|
3
|
+
# Description: Validates CHANGELOG.md and blog edits on PRs and tag pushes. Emits status badge.
|
|
4
|
+
# Author: Ali Kahwaji
|
|
5
|
+
|
|
6
|
+
name: ๐ก Release Review Passed
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
pull_request:
|
|
10
|
+
branches: [main]
|
|
11
|
+
push:
|
|
12
|
+
tags:
|
|
13
|
+
- 'v*.*.*'
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
|
|
16
|
+
permissions:
|
|
17
|
+
contents: read
|
|
18
|
+
pull-requests: write
|
|
19
|
+
|
|
20
|
+
jobs:
|
|
21
|
+
review:
|
|
22
|
+
name: ๐ Release Review Check
|
|
23
|
+
runs-on: ubuntu-latest
|
|
24
|
+
|
|
25
|
+
steps:
|
|
26
|
+
- name: ๐ฅ Checkout repo
|
|
27
|
+
uses: actions/checkout@v4
|
|
28
|
+
|
|
29
|
+
- name: ๐ Scan for changelog or blog edits
|
|
30
|
+
id: check
|
|
31
|
+
run: |
|
|
32
|
+
git fetch origin main --depth=1
|
|
33
|
+
CHANGED_FILES=$(git diff --name-only origin/main...HEAD || true)
|
|
34
|
+
|
|
35
|
+
echo "Changed files:"
|
|
36
|
+
echo "$CHANGED_FILES"
|
|
37
|
+
|
|
38
|
+
if echo "$CHANGED_FILES" | grep -qE 'CHANGELOG\.md|docs-site/blog/'; then
|
|
39
|
+
echo "โ
Changelog or blog post updated."
|
|
40
|
+
echo "result=pass" >> "$GITHUB_OUTPUT"
|
|
41
|
+
else
|
|
42
|
+
echo "โ No changelog or blog edits found."
|
|
43
|
+
echo "result=fail" >> "$GITHUB_OUTPUT"
|
|
44
|
+
fi
|
|
45
|
+
|
|
46
|
+
- name: ๐ซ Fail if missing changelog or blog
|
|
47
|
+
if: steps.check.outputs.result == 'fail'
|
|
48
|
+
run: |
|
|
49
|
+
echo "Missing required changelog or blog post for release."
|
|
50
|
+
exit 1
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
# .github/workflows/generate-blog-post.yml
|
|
2
|
+
# Version: 1.1.0
|
|
3
|
+
# Description: Auto-generates blog posts from release tags using generate-release-note.js
|
|
4
|
+
# Author: Ali Kahwaji
|
|
5
|
+
|
|
6
|
+
name: "๐ Auto Generate Blog Post"
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
release:
|
|
10
|
+
types: [published]
|
|
11
|
+
push:
|
|
12
|
+
tags:
|
|
13
|
+
- 'v*.*.*'
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: write
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
blog:
|
|
20
|
+
name: Generate Release Blog
|
|
21
|
+
runs-on: ubuntu-latest
|
|
22
|
+
|
|
23
|
+
steps:
|
|
24
|
+
- name: โฌ๏ธ Checkout code
|
|
25
|
+
uses: actions/checkout@v4
|
|
26
|
+
|
|
27
|
+
- name: ๐ Setup Node
|
|
28
|
+
uses: actions/setup-node@v4
|
|
29
|
+
with:
|
|
30
|
+
node-version: 20
|
|
31
|
+
|
|
32
|
+
- name: ๐ฆ Install dependencies
|
|
33
|
+
run: npm ci
|
|
34
|
+
|
|
35
|
+
- name: ๐ Generate blog post from tag
|
|
36
|
+
run: node scripts/generate-release-note.js ${{ github.ref_name }} <previous-tag>
|
|
37
|
+
env:
|
|
38
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
39
|
+
|
|
40
|
+
- name: ๐ Commit blog post
|
|
41
|
+
uses: stefanzweifel/git-auto-commit-action@v5
|
|
42
|
+
with:
|
|
43
|
+
commit_message: "docs(blog): auto-generate post for release ${{ github.ref_name }}"
|
|
44
|
+
file_pattern: "docs-site/blog/*.md"
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# .github/workflows/post-release-generate-blog.yml
|
|
2
|
+
# Version: 2.5.2
|
|
3
|
+
# Description: Auto-generates changelog + blog post from tag or GitHub release with dry-run safety and badge output
|
|
4
|
+
# Author: Ali Kahwaji
|
|
5
|
+
|
|
6
|
+
name: Auto Generate Blog + Changelog
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
release:
|
|
10
|
+
types: [published]
|
|
11
|
+
push:
|
|
12
|
+
tags:
|
|
13
|
+
- 'v*.*.*'
|
|
14
|
+
workflow_dispatch:
|
|
15
|
+
inputs:
|
|
16
|
+
dry_run:
|
|
17
|
+
description: 'Run generator in dry-run mode (no git push)'
|
|
18
|
+
required: false
|
|
19
|
+
default: 'false'
|
|
20
|
+
|
|
21
|
+
permissions:
|
|
22
|
+
contents: write
|
|
23
|
+
issues: write
|
|
24
|
+
pull-requests: write
|
|
25
|
+
|
|
26
|
+
jobs:
|
|
27
|
+
generate:
|
|
28
|
+
name: ๐ Generate Blog + Changelog
|
|
29
|
+
runs-on: ubuntu-latest
|
|
30
|
+
outputs:
|
|
31
|
+
blog_generated: ${{ steps.done.outputs.blog_generated }}
|
|
32
|
+
|
|
33
|
+
steps:
|
|
34
|
+
- name: ๐ฅ Checkout code
|
|
35
|
+
uses: actions/checkout@v4
|
|
36
|
+
with:
|
|
37
|
+
fetch-depth: 0
|
|
38
|
+
|
|
39
|
+
- name: ๐ Setup Git identity
|
|
40
|
+
run: |
|
|
41
|
+
git config --global user.name "GitHub Actions"
|
|
42
|
+
git config --global user.email "docs@autobot.local"
|
|
43
|
+
|
|
44
|
+
- name: ๐ฆ Install dependencies
|
|
45
|
+
run: npm ci
|
|
46
|
+
|
|
47
|
+
- name: ๐ท Extract version and dry_run mode
|
|
48
|
+
id: context
|
|
49
|
+
run: |
|
|
50
|
+
TAG=${GITHUB_REF#refs/tags/}
|
|
51
|
+
echo "tag=${TAG}" >> $GITHUB_OUTPUT
|
|
52
|
+
echo "dry_run=${{ github.event.inputs.dry_run == 'true' && 'true' || 'false' }}" >> $GITHUB_OUTPUT
|
|
53
|
+
|
|
54
|
+
- name: ๐ Generate release note
|
|
55
|
+
id: note
|
|
56
|
+
run: |
|
|
57
|
+
echo "๐ง Running release note generator..."
|
|
58
|
+
node scripts/generate-release-note.js "${{ steps.context.outputs.tag }}"
|
|
59
|
+
env:
|
|
60
|
+
DRY_RUN: ${{ steps.context.outputs.dry_run }}
|
|
61
|
+
|
|
62
|
+
- name: ๐ Commit blog & changelog
|
|
63
|
+
if: ${{ steps.context.outputs.dry_run != 'true' }}
|
|
64
|
+
uses: stefanzweifel/git-auto-commit-action@v5
|
|
65
|
+
with:
|
|
66
|
+
commit_message: "docs(release): blog + changelog for ${{ steps.context.outputs.tag }}"
|
|
67
|
+
file_pattern: "CHANGELOG.md docs-site/blog/*.md"
|
|
68
|
+
|
|
69
|
+
- name: โ
Output badge result
|
|
70
|
+
id: done
|
|
71
|
+
run: echo "blog_generated=true" >> "$GITHUB_OUTPUT"
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# .github/workflows/release-sync.yml
|
|
2
|
+
# Version: 1.0.0
|
|
3
|
+
# Description: Syncs changelog/tag to blog post
|
|
4
|
+
# Author: Ali Kahwaji
|
|
5
|
+
|
|
6
|
+
name: ๐ Release Sync
|
|
7
|
+
|
|
8
|
+
on:
|
|
9
|
+
push:
|
|
10
|
+
tags:
|
|
11
|
+
- 'v*' # any pushed Git tag
|
|
12
|
+
paths:
|
|
13
|
+
- 'CHANGELOG.md'
|
|
14
|
+
- 'scripts/**'
|
|
15
|
+
- '.github/workflows/release-sync.yml'
|
|
16
|
+
|
|
17
|
+
permissions:
|
|
18
|
+
contents: write
|
|
19
|
+
id-token: write
|
|
20
|
+
|
|
21
|
+
jobs:
|
|
22
|
+
publish-release-blog:
|
|
23
|
+
name: ๐ Create Blog Post from CHANGELOG + Tag
|
|
24
|
+
runs-on: ubuntu-latest
|
|
25
|
+
|
|
26
|
+
steps:
|
|
27
|
+
- name: ๐งพ Checkout Repo
|
|
28
|
+
uses: actions/checkout@v4
|
|
29
|
+
with:
|
|
30
|
+
fetch-depth: 0 # get full commit history for changelog diff
|
|
31
|
+
|
|
32
|
+
- name: ๐งฐ Setup Node
|
|
33
|
+
uses: actions/setup-node@v4
|
|
34
|
+
with:
|
|
35
|
+
node-version: 20
|
|
36
|
+
|
|
37
|
+
- name: ๐ฆ Install deps
|
|
38
|
+
run: npm ci
|
|
39
|
+
|
|
40
|
+
- name: ๐ Generate blog post
|
|
41
|
+
run: |
|
|
42
|
+
VERSION=${GITHUB_REF#refs/tags/}
|
|
43
|
+
PREV=$(git tag --sort=committerdate | grep -B1 $VERSION | head -n1)
|
|
44
|
+
node scripts/generate-release-note.js $VERSION $PREV
|
|
45
|
+
|
|
46
|
+
- name: ๐ฌ Commit release blog
|
|
47
|
+
uses: stefanzweifel/git-auto-commit-action@v5
|
|
48
|
+
with:
|
|
49
|
+
commit_message: "docs(blog): auto-publish release notes for ${{ github.ref_name }}"
|
|
50
|
+
file_pattern: "docs-site/blog/*.md"
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
name: ๐ Sync Roadmap Labels
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
paths:
|
|
6
|
+
- '.github/roadmap-labels.yml'
|
|
7
|
+
- 'scripts/sync-roadmap-labels.js'
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
|
|
10
|
+
permissions:
|
|
11
|
+
issues: write
|
|
12
|
+
contents: read
|
|
13
|
+
|
|
14
|
+
jobs:
|
|
15
|
+
sync-labels:
|
|
16
|
+
runs-on: ubuntu-latest
|
|
17
|
+
name: Sync Labels from Roadmap Config
|
|
18
|
+
|
|
19
|
+
steps:
|
|
20
|
+
- name: ๐ฅ Checkout repo
|
|
21
|
+
uses: actions/checkout@v4
|
|
22
|
+
|
|
23
|
+
- name: ๐ Setup Node.js
|
|
24
|
+
uses: actions/setup-node@v4
|
|
25
|
+
with:
|
|
26
|
+
node-version: 20
|
|
27
|
+
cache: 'npm'
|
|
28
|
+
|
|
29
|
+
- name: ๐ฆ Install dependencies
|
|
30
|
+
run: npm ci
|
|
31
|
+
|
|
32
|
+
- name: ๐ Run label sync script
|
|
33
|
+
run: node scripts/sync-roadmap-labels.js
|
|
34
|
+
env:
|
|
35
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
# Version: 1.0.0
|
|
2
|
+
# Description: Ensures roadmap labels (priority, group) exist in the repo
|
|
3
|
+
# Author: Ali Kahwaji
|
|
4
|
+
|
|
5
|
+
name: ๐ Sync Roadmap Labels
|
|
6
|
+
|
|
7
|
+
on:
|
|
8
|
+
workflow_dispatch:
|
|
9
|
+
push:
|
|
10
|
+
paths:
|
|
11
|
+
- '.github/workflows/roadmap-labels.yml'
|
|
12
|
+
|
|
13
|
+
jobs:
|
|
14
|
+
sync-labels:
|
|
15
|
+
runs-on: ubuntu-latest
|
|
16
|
+
|
|
17
|
+
steps:
|
|
18
|
+
- name: โฌ๏ธ Checkout repository
|
|
19
|
+
uses: actions/checkout@v4
|
|
20
|
+
|
|
21
|
+
- name: ๐ข Setup Node.js
|
|
22
|
+
uses: actions/setup-node@v4
|
|
23
|
+
with:
|
|
24
|
+
node-version: 20
|
|
25
|
+
|
|
26
|
+
- name: ๐ฆ Install octokit
|
|
27
|
+
run: npm install octokit
|
|
28
|
+
|
|
29
|
+
- name: ๐ Run label sync
|
|
30
|
+
env:
|
|
31
|
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
|
32
|
+
GITHUB_REPO: ${{ github.repository }}
|
|
33
|
+
run: |
|
|
34
|
+
node <<EOF
|
|
35
|
+
const { Octokit } = require("octokit");
|
|
36
|
+
|
|
37
|
+
const octokit = new Octokit({ auth: process.env.GITHUB_TOKEN });
|
|
38
|
+
const [owner, repo] = process.env.GITHUB_REPO.split("/");
|
|
39
|
+
|
|
40
|
+
const labels = [
|
|
41
|
+
{ name: "priority: high", color: "e11d48", description: "High priority roadmap item" },
|
|
42
|
+
{ name: "priority: medium", color: "f59e0b", description: "Medium priority roadmap item" },
|
|
43
|
+
{ name: "priority: low", color: "10b981", description: "Low priority roadmap item" },
|
|
44
|
+
{ name: "group: docs", color: "6366f1", description: "Documentation features" },
|
|
45
|
+
{ name: "group: devx", color: "06b6d4", description: "Developer experience improvements" },
|
|
46
|
+
{ name: "group: community", color: "ec4899", description: "Community tools & engagement" },
|
|
47
|
+
{ name: "group: blog", color: "f97316", description: "Blog & SEO enhancements" },
|
|
48
|
+
{ name: "group: infra", color: "64748b", description: "Infrastructure & deployment features" }
|
|
49
|
+
];
|
|
50
|
+
|
|
51
|
+
(async () => {
|
|
52
|
+
const existing = await octokit.rest.issues.listLabelsForRepo({ owner, repo });
|
|
53
|
+
const existingNames = new Set(existing.data.map(l => l.name));
|
|
54
|
+
|
|
55
|
+
for (const label of labels) {
|
|
56
|
+
if (!existingNames.has(label.name)) {
|
|
57
|
+
console.log(`โ Creating label: ${label.name}`);
|
|
58
|
+
await octokit.rest.issues.createLabel({ owner, repo, ...label });
|
|
59
|
+
} else {
|
|
60
|
+
console.log(`โ
Label already exists: ${label.name}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
})().catch(err => {
|
|
64
|
+
console.error("Label sync failed:", err);
|
|
65
|
+
process.exit(1);
|
|
66
|
+
});
|
|
67
|
+
EOF
|