@programinglive/commiter 1.2.17 โ 1.2.20
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/workflows/publish.yml +1 -1
- package/CHANGELOG.md +43 -0
- package/README.md +53 -3
- package/commitlint.config.cjs +1 -1
- package/docs/PRD.md +44 -96
- package/docs/release-notes/RELEASE_NOTES.md +30 -0
- package/index.js +14 -0
- package/package.json +4 -3
- package/scripts/release-complete.cjs +115 -0
- package/scripts/release.cjs +17 -1
- package/web/index.html +44 -4
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,49 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file. See [standard-version](https://github.com/conventional-changelog/standard-version) for commit guidelines.
|
|
4
4
|
|
|
5
|
+
### [1.2.20](https://github.com/programinglive/commiter/compare/v1.2.19...v1.2.20) (2026-01-01)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
### ๐ Documentation
|
|
9
|
+
|
|
10
|
+
* update release notes for v1.2.19 ๐ ([87759c1](https://github.com/programinglive/commiter/commit/87759c13f3c2f76b8e381c0b2f3ab3338f07f422))
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
### โ
Tests
|
|
14
|
+
|
|
15
|
+
* add comment for complete release test ([b87d0f5](https://github.com/programinglive/commiter/commit/b87d0f5c12e1d2ff18ec791d3f7acbfa121a26a8))
|
|
16
|
+
|
|
17
|
+
### [1.2.19](https://github.com/programinglive/commiter/compare/v1.2.18...v1.2.19) (2026-01-01)
|
|
18
|
+
|
|
19
|
+
|
|
20
|
+
### ๐ Documentation
|
|
21
|
+
|
|
22
|
+
* finalize v1.2.18 release notes and website update ([034faa5](https://github.com/programinglive/commiter/commit/034faa5dcae1294b57fbaf2773ce14a085259724))
|
|
23
|
+
* update README, restore PRD, and enhance website features ([451ef7b](https://github.com/programinglive/commiter/commit/451ef7bf0fff925e3589fa7a6c7dbe8e76c3e93d))
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
### โจ Features
|
|
27
|
+
|
|
28
|
+
* enhance release process with clear git operation guidance and auto-commit option ([91171e2](https://github.com/programinglive/commiter/commit/91171e2d426650a2e74250b6b9a3c9a9b8bb875e))
|
|
29
|
+
|
|
30
|
+
### [1.2.18](https://github.com/programinglive/commiter/compare/v1.2.17...v1.2.18) (2026-01-01)
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
### ๐ Documentation
|
|
34
|
+
|
|
35
|
+
* **release-notes:** add 1.2.17 entry ([0a79779](https://github.com/programinglive/commiter/commit/0a7977964e9231a53d7d006cec5e847daeee2033))
|
|
36
|
+
* **web:** refresh homepage content for v1.2.17 ([2fc6666](https://github.com/programinglive/commiter/commit/2fc6666369e18a0dbda9488d9ed0ac6a09298f95))
|
|
37
|
+
|
|
38
|
+
|
|
39
|
+
### โจ Features
|
|
40
|
+
|
|
41
|
+
* add usage warning and MCP dev-workflow tip ([df7bc00](https://github.com/programinglive/commiter/commit/df7bc0078f75780f3daaeb703b6fe2b248910446))
|
|
42
|
+
|
|
43
|
+
|
|
44
|
+
### โ
Tests
|
|
45
|
+
|
|
46
|
+
* add automated tests for usage warnings ([af6283e](https://github.com/programinglive/commiter/commit/af6283edfa4e1e677fc20bfc5e6b243db192867f))
|
|
47
|
+
|
|
5
48
|
### [1.2.17](https://github.com/programinglive/commiter/compare/v1.2.16...v1.2.17) (2025-12-26)
|
|
6
49
|
|
|
7
50
|
|
package/README.md
CHANGED
|
@@ -14,6 +14,8 @@ A standardized commit convention and release management tool for your repository
|
|
|
14
14
|
- ๐ **Changelog Generation** - Automatic CHANGELOG.md with icons
|
|
15
15
|
- ๐ **Git Hooks** - Pre-commit and commit-msg validation via Husky
|
|
16
16
|
- ๐จ **Icon Support** - Each commit type has a dedicated icon in releases
|
|
17
|
+
- ๐ฏ **Enhanced Release Process** - Clear console guidance and optional auto-commit for release notes
|
|
18
|
+
- ๐ค **AI-Optimized Workflow** - Built-in guidance for AI assistants with clear next steps and automated git operations
|
|
17
19
|
|
|
18
20
|
## Installation
|
|
19
21
|
|
|
@@ -116,6 +118,20 @@ For breaking changes:
|
|
|
116
118
|
npm run release:major
|
|
117
119
|
```
|
|
118
120
|
|
|
121
|
+
### Complete Release (Auto-commit & Push)
|
|
122
|
+
|
|
123
|
+
For fully automated release with git operations:
|
|
124
|
+
|
|
125
|
+
```bash
|
|
126
|
+
npm run release:complete
|
|
127
|
+
```
|
|
128
|
+
|
|
129
|
+
This command:
|
|
130
|
+
- Runs the standard release process
|
|
131
|
+
- Automatically commits release notes with versioned message
|
|
132
|
+
- Pushes changes to remote
|
|
133
|
+
- Provides success confirmation
|
|
134
|
+
|
|
119
135
|
### Automatic Release
|
|
120
136
|
|
|
121
137
|
Let `standard-version` determine the version bump based on commits:
|
|
@@ -124,6 +140,8 @@ Let `standard-version` determine the version bump based on commits:
|
|
|
124
140
|
npm run release
|
|
125
141
|
```
|
|
126
142
|
|
|
143
|
+
**Note**: This command shows clear guidance for git operations needed after release notes generation.
|
|
144
|
+
|
|
127
145
|
## What Happens During Release?
|
|
128
146
|
|
|
129
147
|
1. ๐งช **Runs tests** - Detects your package manager and runs the `test` script automatically (tests only run during release, not on commit)
|
|
@@ -131,17 +149,49 @@ npm run release
|
|
|
131
149
|
3. ๐ **Verifies documentation** โ Warns if `docs/PRD.md` is missing so every project keeps an up-to-date PRD
|
|
132
150
|
4. ๐ข **Bumps version** - Updates version in `package.json`
|
|
133
151
|
5. ๐ **Updates changelog** - Generates `CHANGELOG.md` with icons
|
|
134
|
-
6.
|
|
135
|
-
7.
|
|
152
|
+
6. ๐ **Generates release notes** - Creates and stages release notes entry
|
|
153
|
+
7. ๐ท๏ธ **Creates tag** - Creates a git tag for the release
|
|
154
|
+
8. ๐พ **Commits release** - Commits changes with format: `chore(release): v1.2.3 ๐`
|
|
155
|
+
9. ๐ฏ **Shows next steps** - Provides clear guidance for git operations needed
|
|
156
|
+
|
|
157
|
+
## Release Notes Management
|
|
158
|
+
|
|
159
|
+
### Standard Release (Manual Git Operations)
|
|
160
|
+
|
|
161
|
+
When using `npm run release`, the tool provides clear console guidance:
|
|
162
|
+
|
|
163
|
+
```
|
|
164
|
+
๐ฏ Release notes generated and staged successfully!
|
|
165
|
+
|
|
166
|
+
๐ NEXT STEPS REQUIRED:
|
|
167
|
+
โ
Release notes have been staged for commit
|
|
168
|
+
๐ You need to commit and push the release notes:
|
|
169
|
+
git commit -m "docs: update release notes for version"
|
|
170
|
+
git push
|
|
171
|
+
|
|
172
|
+
๐ก AI ASSISTANCE:
|
|
173
|
+
๐ค Use the dev-workflow MCP server to handle the commit and push automatically
|
|
174
|
+
๐ The release notes are now staged and ready for commit
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
### Complete Release (Automated Git Operations)
|
|
178
|
+
|
|
179
|
+
Use `npm run release:complete` for full automation:
|
|
180
|
+
- โ
Release completed
|
|
181
|
+
- โ
Release notes generated
|
|
182
|
+
- โ
Changes committed
|
|
183
|
+
- โ
Changes pushed
|
|
136
184
|
|
|
137
185
|
## Push Your Release
|
|
138
186
|
|
|
139
|
-
After running a release command, push to remote:
|
|
187
|
+
After running a standard release command, push to remote:
|
|
140
188
|
|
|
141
189
|
```bash
|
|
142
190
|
git push --follow-tags origin main
|
|
143
191
|
```
|
|
144
192
|
|
|
193
|
+
For complete releases, pushing is handled automatically.
|
|
194
|
+
|
|
145
195
|
## Pre-commit Hooks
|
|
146
196
|
|
|
147
197
|
The following hooks are automatically enforced:
|
package/commitlint.config.cjs
CHANGED
package/docs/PRD.md
CHANGED
|
@@ -1,96 +1,44 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
##
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
##
|
|
10
|
-
-
|
|
11
|
-
-
|
|
12
|
-
-
|
|
13
|
-
-
|
|
14
|
-
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
-
|
|
34
|
-
|
|
35
|
-
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
- Run the projectโs tests (if defined) with the correct package manager.
|
|
46
|
-
- Execute `standard-version`, passing the preload script via `NODE_OPTIONS`.
|
|
47
|
-
- Exit with non-zero status if tests or standard-version commands fail.
|
|
48
|
-
3. CLI should provide friendly console output (status icons, instructions).
|
|
49
|
-
4. The preload script must eliminate `[DEP0176] fs.F_OK` warnings on supported Node versions.
|
|
50
|
-
5. Documentation (README, PRD, release notes) remains shipped with the package. Each project integrating Commiter must keep a `docs/PRD.md` file present in the repository. The release helper enforces this by warning when the PRD is missing so maintainers remember to author or update the document before tagging releases.
|
|
51
|
-
|
|
52
|
-
## 7. Non-Functional Requirements
|
|
53
|
-
- **Compatibility**: Supports Node.js 18+ (aligning with dependencies); tested on Windows/macOS/Linux.
|
|
54
|
-
- **Maintainability**: Avoid direct edits to dependencies; wrap behavior in Commiter-controlled modules.
|
|
55
|
-
- **Performance**: Release command overhead minimal (<1s additional startup time) beyond running tests and standard-version.
|
|
56
|
-
- **Security**: No network requests during CLI execution beyond npm installs triggered by the user.
|
|
57
|
-
|
|
58
|
-
## 8. User Journeys
|
|
59
|
-
1. **Initial Setup**
|
|
60
|
-
- Run `npx @programinglive/commiter`.
|
|
61
|
-
- Tool installs dependencies, updates `package.json`, and scaffolds Husky hooks.
|
|
62
|
-
- Maintainer confirms success message and new scripts.
|
|
63
|
-
2. **First Release**
|
|
64
|
-
- Developer runs `npm run release:first` for new projects.
|
|
65
|
-
- Commiter sets version to 0.0.1, runs tests, creates initial changelog and git tag.
|
|
66
|
-
- Project foundation established with proper semantic versioning.
|
|
67
|
-
3. **Standard Release**
|
|
68
|
-
- Developer runs `npm run release minor` or `npm run release` (defaults to patch).
|
|
69
|
-
- Commiter runs tests, ensures preload patch prevents deprecation warnings, executes `standard-version`.
|
|
70
|
-
- Release completes with updated changelog and git tag.
|
|
71
|
-
4. **CI Pipeline**
|
|
72
|
-
- CI job executes `npm run release -- --prerelease beta`.
|
|
73
|
-
- Logs show tests executed, no deprecation warnings, and release artifacts generated.
|
|
74
|
-
|
|
75
|
-
## 9. Milestones & Roadmap
|
|
76
|
-
- **v1.1.x** (current)
|
|
77
|
-
- Deprecation warning mitigation, enhanced tests, PRD + release documentation.
|
|
78
|
-
- **Future Considerations**
|
|
79
|
-
- Support for monorepo detection (Lerna/Nx) to run scoped releases.
|
|
80
|
-
- Optional lint/test command customization via config file.
|
|
81
|
-
- Telemetry opt-in for release statistics (downloads, success rates).
|
|
82
|
-
|
|
83
|
-
## 10. Risks & Mitigations
|
|
84
|
-
- **Dependency API Changes**: Upstream packages may alter file paths. Mitigate with targeted module resolution and tests.
|
|
85
|
-
- **User Customization Conflicts**: Custom scripts might skip tests. Provide documentation for overriding behavior.
|
|
86
|
-
- **Platform Differences**: Windows path quoting; addressed via `buildPreloadFlag` helper.
|
|
87
|
-
|
|
88
|
-
## 11. Release & QA Checklist
|
|
89
|
-
- [x] `npm test` (alias for `node --test`) passes.
|
|
90
|
-
- [x] Manual run of `node scripts/release.js --help` shows no `[DEP0176]` warning.
|
|
91
|
-
- [ ] Update `CHANGELOG.md` (handled by standard-version during actual release).
|
|
92
|
-
- [ ] Verify README reflects latest setup instructions before shipping.
|
|
93
|
-
|
|
94
|
-
## 12. Appendices
|
|
95
|
-
- **Release Notes**: See `docs/release-notes/` for per-change summaries.
|
|
96
|
-
- **Testing Artifacts**: `test/` directory contains Node test runner suites.
|
|
1
|
+
# PRD: Enhanced Release Process and AI-Optimized Workflow
|
|
2
|
+
|
|
3
|
+
## Overview
|
|
4
|
+
Enhance the release process with clear console guidance for git operations and optional auto-commit functionality. Improve AI assistant workflow with explicit next steps and automated git operations for release notes management.
|
|
5
|
+
|
|
6
|
+
## Problem
|
|
7
|
+
After running `npm run release`, release notes are generated but users and AI assistants don't understand that manual git operations (add, commit, push) are required. The process needs clear console output to guide the next steps and optional automation for complete releases.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Enhanced standard release script with clear console guidance for git operations
|
|
11
|
+
- New complete release script that handles git operations automatically
|
|
12
|
+
- AI-friendly workflow with explicit next steps and MCP server guidance
|
|
13
|
+
- Clear visual indicators and structured console output
|
|
14
|
+
- Version-aware commit messages for release notes
|
|
15
|
+
- Error handling and fallback options
|
|
16
|
+
|
|
17
|
+
## Features Added
|
|
18
|
+
|
|
19
|
+
### Enhanced Standard Release (`npm run release`)
|
|
20
|
+
- Clear console output showing release notes generation status
|
|
21
|
+
- Structured "NEXT STEPS REQUIRED" section
|
|
22
|
+
- Exact git commands needed for manual operations
|
|
23
|
+
- AI assistance guidance with MCP server recommendations
|
|
24
|
+
- Visual indicators with emojis for better readability
|
|
25
|
+
|
|
26
|
+
### Complete Release (`npm run release:complete`)
|
|
27
|
+
- Full automation of release process including git operations
|
|
28
|
+
- Automatic detection of staged release notes changes
|
|
29
|
+
- Version-aware commit messages (e.g., "docs: update release notes for v1.2.20 ๐")
|
|
30
|
+
- Automatic push to remote repository
|
|
31
|
+
- Success confirmation with detailed status
|
|
32
|
+
|
|
33
|
+
### AI-Optimized Workflow
|
|
34
|
+
- Built-in guidance for AI assistants
|
|
35
|
+
- Clear instructions for manual vs automated workflows
|
|
36
|
+
- MCP server integration recommendations
|
|
37
|
+
- Prevents confusion about required git operations
|
|
38
|
+
|
|
39
|
+
## Verification
|
|
40
|
+
- Manual testing of both release workflows
|
|
41
|
+
- Verification of console output clarity and accuracy
|
|
42
|
+
- Testing of complete release automation
|
|
43
|
+
- Validation of AI-friendly guidance messages
|
|
44
|
+
- Error handling verification for git operation failures
|
|
@@ -4,6 +4,9 @@ This document summarizes every published version of `@programinglive/commiter`.
|
|
|
4
4
|
|
|
5
5
|
| Version | Date | Highlights |
|
|
6
6
|
|---------|------|------------|
|
|
7
|
+
| 1.2.20 | 2026-01-01 | update release notes for v1.2.19 ๐ (87759c1) |
|
|
8
|
+
| 1.2.19 | 2026-01-01 | finalize v1.2.18 release notes and website update (034faa5) |
|
|
9
|
+
| 1.2.18 | 2026-01-01 | Add usage safety warnings and MCP workflow tips |
|
|
7
10
|
| 1.2.17 | 2025-12-26 | **web:** update homepage for v1.2.16 release (c4ba36e) |
|
|
8
11
|
| 1.2.16 | 2025-12-13 | upgrade to node 20 and update npm for OIDC (5f7d9a0) |
|
|
9
12
|
| 1.2.15 | 2025-12-13 | remove registry-url to fix OIDC auth conflict (c49b6e8) |
|
|
@@ -75,6 +78,33 @@ This document summarizes every published version of `@programinglive/commiter`.
|
|
|
75
78
|
|
|
76
79
|
|
|
77
80
|
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
## 1.2.20 โ ๐ Documentation
|
|
86
|
+
|
|
87
|
+
Released on **2026-01-01**.
|
|
88
|
+
|
|
89
|
+
- update release notes for v1.2.19 ๐ (87759c1)
|
|
90
|
+
- add comment for complete release test (b87d0f5)
|
|
91
|
+
|
|
92
|
+
## 1.2.19 โ ๐ Documentation
|
|
93
|
+
|
|
94
|
+
Released on **2026-01-01**.
|
|
95
|
+
|
|
96
|
+
- finalize v1.2.18 release notes and website update (034faa5)
|
|
97
|
+
- update README, restore PRD, and enhance website features (451ef7b)
|
|
98
|
+
- enhance release process with clear git operation guidance and auto-commit option (91171e2)
|
|
99
|
+
|
|
100
|
+
## 1.2.18 โ ๐ Documentation
|
|
101
|
+
|
|
102
|
+
Released on **2026-01-01**.
|
|
103
|
+
|
|
104
|
+
- **release-notes:** add 1.2.17 entry (0a79779)
|
|
105
|
+
- **web:** refresh homepage content for v1.2.17 (2fc6666)
|
|
106
|
+
- add usage warning and MCP dev-workflow tip (df7bc00)
|
|
107
|
+
- add automated tests for usage warnings (af6283e)
|
|
78
108
|
|
|
79
109
|
## 1.2.17 โ ๐ Documentation
|
|
80
110
|
|
package/index.js
CHANGED
|
@@ -37,6 +37,19 @@ function copyRecursiveSync(src, dest) {
|
|
|
37
37
|
}
|
|
38
38
|
|
|
39
39
|
function setupCommiter() {
|
|
40
|
+
const args = process.argv.slice(2);
|
|
41
|
+
|
|
42
|
+
// If arguments are passed, it's likely someone is trying to use this as a commit tool
|
|
43
|
+
if (args.length > 0) {
|
|
44
|
+
console.error('\nโ ๏ธ WARNING: @programinglive/commiter is a SETUP and RELEASE tool, NOT a commit tool.');
|
|
45
|
+
console.error('๐ To commit your changes, please use standard git commands:');
|
|
46
|
+
console.error(' git add .');
|
|
47
|
+
console.error(' git commit -m "your message"\n');
|
|
48
|
+
console.error('๐ก TIP for AI: Use the `@programinglive/dev-workflow-mcp-server` to handle commits and releases properly.');
|
|
49
|
+
console.error('โ If you meant to setup this project, run without arguments.\n');
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
|
|
40
53
|
console.log('๐ Setting up Commiter...\n');
|
|
41
54
|
|
|
42
55
|
// Check if package.json exists
|
|
@@ -197,3 +210,4 @@ if (require.main === module) {
|
|
|
197
210
|
}
|
|
198
211
|
|
|
199
212
|
module.exports = { setupCommiter, ensureSafeTestScript };
|
|
213
|
+
// Test change for complete release
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@programinglive/commiter",
|
|
3
|
-
"version": "1.2.
|
|
3
|
+
"version": "1.2.20",
|
|
4
4
|
"description": "Commiter keeps repositories release-ready by enforcing conventional commits, generating icon-rich changelog entries, and orchestrating semantic version bumps without manual toil. It bootstraps Husky hooks, commitlint rules, and release scripts that inspect history, detect framework-specific test commands, run them automatically, tag git releases, coordinate npm publishing, surface release metrics, enforce project-specific checks, and give maintainers observability across distributed teams. Plus!",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"bin": {
|
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
"release:minor": "node scripts/release.cjs minor",
|
|
15
15
|
"release:patch": "node scripts/release.cjs patch",
|
|
16
16
|
"release:first": "node scripts/release.cjs --first-release",
|
|
17
|
+
"release:complete": "node scripts/release-complete.cjs",
|
|
17
18
|
"web": "npx serve web"
|
|
18
19
|
},
|
|
19
20
|
"keywords": [
|
|
@@ -88,8 +89,8 @@
|
|
|
88
89
|
]
|
|
89
90
|
},
|
|
90
91
|
"devDependencies": {
|
|
91
|
-
"@commitlint/cli": "^20.
|
|
92
|
-
"@commitlint/config-conventional": "^20.
|
|
92
|
+
"@commitlint/cli": "^20.5.3",
|
|
93
|
+
"@commitlint/config-conventional": "^20.5.3",
|
|
93
94
|
"husky": "^9.1.7",
|
|
94
95
|
"standard-version": "^9.5.0"
|
|
95
96
|
}
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
const { spawnSync } = require('child_process');
|
|
4
|
+
const path = require('path');
|
|
5
|
+
const fs = require('fs');
|
|
6
|
+
|
|
7
|
+
const { runRelease } = require('./release.cjs');
|
|
8
|
+
|
|
9
|
+
function runCompleteRelease({
|
|
10
|
+
argv = process.argv,
|
|
11
|
+
cwd = process.cwd(),
|
|
12
|
+
spawn = spawnSync
|
|
13
|
+
} = {}) {
|
|
14
|
+
console.log('๐ Starting complete release process...');
|
|
15
|
+
console.log(' This will run the release and automatically commit/push release notes\n');
|
|
16
|
+
|
|
17
|
+
// Run the standard release process
|
|
18
|
+
const releaseResult = runRelease({ argv, cwd, spawn });
|
|
19
|
+
|
|
20
|
+
if (releaseResult && typeof releaseResult.status === 'number' && releaseResult.status !== 0) {
|
|
21
|
+
console.error('โ Release failed. Aborting complete release process.');
|
|
22
|
+
return releaseResult;
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
// Get the current version for commit message
|
|
26
|
+
const packageJsonPath = path.join(cwd, 'package.json');
|
|
27
|
+
let version = 'unknown';
|
|
28
|
+
|
|
29
|
+
try {
|
|
30
|
+
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
|
|
31
|
+
version = packageJson.version;
|
|
32
|
+
} catch (error) {
|
|
33
|
+
console.warn('โ ๏ธ Could not read version from package.json');
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// Check if there are staged changes to commit
|
|
37
|
+
const statusResult = spawn('git', ['status', '--porcelain'], {
|
|
38
|
+
cwd,
|
|
39
|
+
encoding: 'utf8'
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
if (statusResult.error || (statusResult.status !== 0)) {
|
|
43
|
+
console.warn('โ ๏ธ Could not check git status. Please commit manually.');
|
|
44
|
+
return releaseResult;
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
const stagedChanges = statusResult.stdout.split('\n').filter(line =>
|
|
48
|
+
line.trim() && line.startsWith('A ') || line.startsWith('M ')
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
if (stagedChanges.length === 0) {
|
|
52
|
+
console.log('โ
No release notes changes to commit. Release complete!');
|
|
53
|
+
return releaseResult;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
console.log(`๐ Found ${stagedChanges.length} staged change(s) to commit:`);
|
|
57
|
+
stagedChanges.forEach(change => {
|
|
58
|
+
const [status, ...filePathParts] = change.trim().split(' ');
|
|
59
|
+
const filePath = filePathParts.join(' ');
|
|
60
|
+
console.log(` ${status} ${filePath}`);
|
|
61
|
+
});
|
|
62
|
+
|
|
63
|
+
// Commit the staged changes
|
|
64
|
+
const commitMessage = `docs: update release notes for v${version} ๐`;
|
|
65
|
+
console.log(`\n๐ Committing with message: "${commitMessage}"`);
|
|
66
|
+
|
|
67
|
+
const commitResult = spawn('git', ['commit', '-m', commitMessage], {
|
|
68
|
+
stdio: 'inherit',
|
|
69
|
+
cwd
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (commitResult.status !== 0) {
|
|
73
|
+
console.error('โ Failed to commit release notes. Please commit manually.');
|
|
74
|
+
return commitResult;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
console.log('โ
Release notes committed successfully!');
|
|
78
|
+
|
|
79
|
+
// Push the changes
|
|
80
|
+
console.log('\n๐ค Pushing changes to remote...');
|
|
81
|
+
const pushResult = spawn('git', ['push'], {
|
|
82
|
+
stdio: 'inherit',
|
|
83
|
+
cwd
|
|
84
|
+
});
|
|
85
|
+
|
|
86
|
+
if (pushResult.status !== 0) {
|
|
87
|
+
console.error('โ Failed to push changes. Please push manually.');
|
|
88
|
+
return pushResult;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
console.log('\n๐ Complete release process finished successfully!');
|
|
92
|
+
console.log(' โ
Release completed');
|
|
93
|
+
console.log(' โ
Release notes generated');
|
|
94
|
+
console.log(' โ
Changes committed');
|
|
95
|
+
console.log(' โ
Changes pushed');
|
|
96
|
+
console.log(`\n๐ฆ Version ${version} is now live!`);
|
|
97
|
+
|
|
98
|
+
return pushResult;
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
if (require.main === module) {
|
|
102
|
+
try {
|
|
103
|
+
const result = runCompleteRelease();
|
|
104
|
+
if (result.status !== 0) {
|
|
105
|
+
process.exit(result.status ?? 1);
|
|
106
|
+
}
|
|
107
|
+
} catch (error) {
|
|
108
|
+
console.error(`โ Complete release failed: ${error.message}`);
|
|
109
|
+
process.exit(1);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
module.exports = {
|
|
114
|
+
runCompleteRelease
|
|
115
|
+
};
|
package/scripts/release.cjs
CHANGED
|
@@ -63,7 +63,7 @@ function getNpmRunArgument(env = process.env) {
|
|
|
63
63
|
|
|
64
64
|
function buildStandardVersionArgs({ releaseType, extraArgs }) {
|
|
65
65
|
const args = [];
|
|
66
|
-
|
|
66
|
+
|
|
67
67
|
// Handle --first-release flag
|
|
68
68
|
const isFirstRelease = Array.isArray(extraArgs) && extraArgs.includes('--first-release');
|
|
69
69
|
if (isFirstRelease) {
|
|
@@ -75,6 +75,11 @@ function buildStandardVersionArgs({ releaseType, extraArgs }) {
|
|
|
75
75
|
const isValid = VALID_RELEASE_TYPES.has(normalized) || SEMVER_REGEX.test(normalized);
|
|
76
76
|
if (!isValid) {
|
|
77
77
|
const allowed = Array.from(VALID_RELEASE_TYPES).join(', ');
|
|
78
|
+
console.error('\nโ ๏ธ WARNING: Unknown release type or command detected.');
|
|
79
|
+
console.error('๐ If you are trying to commit changes, please use standard git commands:');
|
|
80
|
+
console.error(' git add .');
|
|
81
|
+
console.error(' git commit -m "your message"\n');
|
|
82
|
+
console.error('๐ก TIP for AI: Use the `@programinglive/dev-workflow-mcp-server` to handle commits and releases properly.');
|
|
78
83
|
throw new Error(`Unknown release type "${normalized}". Use one of ${allowed} or a valid semver version.`);
|
|
79
84
|
}
|
|
80
85
|
args.push('--release-as', normalized);
|
|
@@ -197,6 +202,17 @@ function runRelease({
|
|
|
197
202
|
const gitAddResult = spawnSync('git', ['add', releaseNotesPath], { stdio: 'inherit', cwd });
|
|
198
203
|
if (!gitAddResult || typeof gitAddResult.status !== 'number' || gitAddResult.status !== 0) {
|
|
199
204
|
console.warn('โ ๏ธ Release notes updated but failed to stage. Please add manually: git add ' + releaseNotesPath);
|
|
205
|
+
} else {
|
|
206
|
+
console.log('\n๐ฏ Release notes generated and staged successfully!');
|
|
207
|
+
console.log('\n๐ NEXT STEPS REQUIRED:');
|
|
208
|
+
console.log(' โ
Release notes have been staged for commit');
|
|
209
|
+
console.log(' ๐ You need to commit and push the release notes:');
|
|
210
|
+
console.log(' git commit -m "docs: update release notes for version"');
|
|
211
|
+
console.log(' git push');
|
|
212
|
+
console.log('\n๐ก AI ASSISTANCE:');
|
|
213
|
+
console.log(' ๐ค Use the dev-workflow MCP server to handle the commit and push automatically');
|
|
214
|
+
console.log(' ๐ The release notes are now staged and ready for commit');
|
|
215
|
+
console.log('');
|
|
200
216
|
}
|
|
201
217
|
}
|
|
202
218
|
|
package/web/index.html
CHANGED
|
@@ -66,7 +66,7 @@
|
|
|
66
66
|
<div class="hero-content">
|
|
67
67
|
<div class="hero-badge">
|
|
68
68
|
<span class="badge-dot"></span>
|
|
69
|
-
<span>v1.2.
|
|
69
|
+
<span>v1.2.20 - Latest Release</span>
|
|
70
70
|
</div>
|
|
71
71
|
<h1 class="hero-title">
|
|
72
72
|
Ship Releases with <span class="gradient-text">Confidence</span>
|
|
@@ -90,7 +90,7 @@
|
|
|
90
90
|
</div>
|
|
91
91
|
<div class="hero-stats">
|
|
92
92
|
<div class="stat-item">
|
|
93
|
-
<div class="stat-value">1.2.
|
|
93
|
+
<div class="stat-value">1.2.20</div>
|
|
94
94
|
<div class="stat-label">Latest Version</div>
|
|
95
95
|
</div>
|
|
96
96
|
<div class="stat-item">
|
|
@@ -121,9 +121,9 @@
|
|
|
121
121
|
<div class="code-line output success">๐ Setup complete! Ready to release.</div>
|
|
122
122
|
<div class="code-line"><span class="prompt">$</span> npm run release:patch</div>
|
|
123
123
|
<div class="code-line output">โ Running tests...</div>
|
|
124
|
-
<div class="code-line output">โ Bumping version to 1.2.
|
|
124
|
+
<div class="code-line output">โ Bumping version to 1.2.18...</div>
|
|
125
125
|
<div class="code-line output">โ Updating CHANGELOG.md...</div>
|
|
126
|
-
<div class="code-line output success">๐ Release v1.2.
|
|
126
|
+
<div class="code-line output success">๐ Release v1.2.20 ready!</div>
|
|
127
127
|
<div class="code-line cursor">_</div>
|
|
128
128
|
</div>
|
|
129
129
|
</div>
|
|
@@ -167,11 +167,21 @@
|
|
|
167
167
|
<h3>Test Integration</h3>
|
|
168
168
|
<p>Automatically runs your test suite before releasing to prevent broken releases</p>
|
|
169
169
|
</div>
|
|
170
|
+
<div class="feature-card">
|
|
171
|
+
<div class="feature-icon">๐ฏ</div>
|
|
172
|
+
<h3>Enhanced Release Process</h3>
|
|
173
|
+
<p>Clear console guidance and optional auto-commit for release notes with AI-friendly workflow</p>
|
|
174
|
+
</div>
|
|
170
175
|
<div class="feature-card">
|
|
171
176
|
<div class="feature-icon">โก</div>
|
|
172
177
|
<h3>Zero Config</h3>
|
|
173
178
|
<p>One command setup with sensible defaults. Works with npm, yarn, and pnpm out of the box</p>
|
|
174
179
|
</div>
|
|
180
|
+
<div class="feature-card">
|
|
181
|
+
<div class="feature-icon">๐ค</div>
|
|
182
|
+
<h3>AI-Optimized Workflow</h3>
|
|
183
|
+
<p>Built-in guidance for AI assistants with clear next steps and automated git operations</p>
|
|
184
|
+
</div>
|
|
175
185
|
</div>
|
|
176
186
|
</div>
|
|
177
187
|
</section>
|
|
@@ -275,6 +285,9 @@
|
|
|
275
285
|
<div class="step-content">
|
|
276
286
|
<h3>Release Your Changes</h3>
|
|
277
287
|
<p>Run the appropriate release command based on your changes</p>
|
|
288
|
+
<div class="code-block">
|
|
289
|
+
<code>npm run release # Standard release with git guidance</code>
|
|
290
|
+
</div>
|
|
278
291
|
<div class="code-block">
|
|
279
292
|
<code>npm run release:first # New project โ 0.0.1</code>
|
|
280
293
|
</div>
|
|
@@ -287,6 +300,9 @@
|
|
|
287
300
|
<div class="code-block">
|
|
288
301
|
<code>npm run release:major # 1.0.0 โ 2.0.0</code>
|
|
289
302
|
</div>
|
|
303
|
+
<div class="code-block">
|
|
304
|
+
<code>npm run release:complete # Auto-commit & push release notes</code>
|
|
305
|
+
</div>
|
|
290
306
|
</div>
|
|
291
307
|
</div>
|
|
292
308
|
</div>
|
|
@@ -388,6 +404,24 @@
|
|
|
388
404
|
<!-- RELEASES_TIMELINE:START -->
|
|
389
405
|
<div class="release-item">
|
|
390
406
|
<div class="release-badge">Latest</div>
|
|
407
|
+
<div class="release-version">v1.2.20</div>
|
|
408
|
+
<div class="release-date">January 01, 2026</div>
|
|
409
|
+
<div class="release-type">โจ Features</div>
|
|
410
|
+
<p class="release-description">Enhance release process with clear git operation guidance and auto-commit option</p>
|
|
411
|
+
</div>
|
|
412
|
+
<div class="release-item">
|
|
413
|
+
<div class="release-version">v1.2.19</div>
|
|
414
|
+
<div class="release-date">January 01, 2026</div>
|
|
415
|
+
<div class="release-type">๐ Documentation</div>
|
|
416
|
+
<p class="release-description">Update release notes for version 1.2.19</p>
|
|
417
|
+
</div>
|
|
418
|
+
<div class="release-item">
|
|
419
|
+
<div class="release-version">v1.2.17</div>
|
|
420
|
+
<div class="release-date">December 26, 2025</div>
|
|
421
|
+
<div class="release-type">๐ Documentation</div>
|
|
422
|
+
<p class="release-description">web: update homepage for the v1.2.16 release spotlight</p>
|
|
423
|
+
</div>
|
|
424
|
+
<div class="release-item">
|
|
391
425
|
<div class="release-version">v1.2.16</div>
|
|
392
426
|
<div class="release-date">December 13, 2025</div>
|
|
393
427
|
<div class="release-type">๐ท Continuous Integration</div>
|
|
@@ -417,6 +451,12 @@
|
|
|
417
451
|
<div class="release-type">๐งน Chores</div>
|
|
418
452
|
<p class="release-description">cleanup and add deployment scripts</p>
|
|
419
453
|
</div>
|
|
454
|
+
<div class="release-item">
|
|
455
|
+
<div class="release-version">v1.2.11</div>
|
|
456
|
+
<div class="release-date">December 11, 2025</div>
|
|
457
|
+
<div class="release-type">๐งน Chores</div>
|
|
458
|
+
<p class="release-description">cleanup and add deployment scripts</p>
|
|
459
|
+
</div>
|
|
420
460
|
<!-- RELEASES_TIMELINE:END -->
|
|
421
461
|
</div>
|
|
422
462
|
<div class="releases-cta">
|