@claude-flow/deployment 3.0.0-alpha.1
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/.agentic-flow/intelligence.json +16 -0
- package/QUICK_START.md +281 -0
- package/README.md +333 -0
- package/__tests__/coverage/base.css +224 -0
- package/__tests__/coverage/block-navigation.js +87 -0
- package/__tests__/coverage/coverage-final.json +4 -0
- package/__tests__/coverage/favicon.png +0 -0
- package/__tests__/coverage/index.html +146 -0
- package/__tests__/coverage/lcov-report/base.css +224 -0
- package/__tests__/coverage/lcov-report/block-navigation.js +87 -0
- package/__tests__/coverage/lcov-report/favicon.png +0 -0
- package/__tests__/coverage/lcov-report/index.html +146 -0
- package/__tests__/coverage/lcov-report/prettify.css +1 -0
- package/__tests__/coverage/lcov-report/prettify.js +2 -0
- package/__tests__/coverage/lcov-report/publisher.ts.html +811 -0
- package/__tests__/coverage/lcov-report/release-manager.ts.html +1120 -0
- package/__tests__/coverage/lcov-report/sort-arrow-sprite.png +0 -0
- package/__tests__/coverage/lcov-report/sorter.js +210 -0
- package/__tests__/coverage/lcov-report/validator.ts.html +940 -0
- package/__tests__/coverage/lcov.info +908 -0
- package/__tests__/coverage/prettify.css +1 -0
- package/__tests__/coverage/prettify.js +2 -0
- package/__tests__/coverage/publisher.ts.html +811 -0
- package/__tests__/coverage/release-manager.ts.html +1120 -0
- package/__tests__/coverage/sort-arrow-sprite.png +0 -0
- package/__tests__/coverage/sorter.js +210 -0
- package/__tests__/coverage/validator.ts.html +940 -0
- package/dist/__tests__/release-manager.test.d.ts +2 -0
- package/dist/__tests__/release-manager.test.d.ts.map +1 -0
- package/dist/__tests__/release-manager.test.js +62 -0
- package/dist/__tests__/release-manager.test.js.map +1 -0
- package/dist/index.d.ts +33 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +45 -0
- package/dist/index.js.map +1 -0
- package/dist/publisher.d.ts +58 -0
- package/dist/publisher.d.ts.map +1 -0
- package/dist/publisher.js +229 -0
- package/dist/publisher.js.map +1 -0
- package/dist/release-manager.d.ts +46 -0
- package/dist/release-manager.d.ts.map +1 -0
- package/dist/release-manager.js +282 -0
- package/dist/release-manager.js.map +1 -0
- package/dist/types.d.ts +168 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/validator.d.ts +46 -0
- package/dist/validator.d.ts.map +1 -0
- package/dist/validator.js +251 -0
- package/dist/validator.js.map +1 -0
- package/examples/basic-release.ts +92 -0
- package/examples/dry-run.ts +70 -0
- package/examples/prerelease-workflow.ts +98 -0
- package/package.json +27 -0
- package/src/__tests__/release-manager.test.ts +72 -0
- package/src/index.ts +88 -0
- package/src/publisher.ts +273 -0
- package/src/release-manager.ts +345 -0
- package/src/types.ts +159 -0
- package/src/validator.ts +285 -0
- package/tsconfig.json +9 -0
- package/tsconfig.tsbuildinfo +1 -0
package/QUICK_START.md
ADDED
|
@@ -0,0 +1,281 @@
|
|
|
1
|
+
# Quick Start Guide
|
|
2
|
+
|
|
3
|
+
## Installation
|
|
4
|
+
|
|
5
|
+
```bash
|
|
6
|
+
npm install @claude-flow/deployment
|
|
7
|
+
```
|
|
8
|
+
|
|
9
|
+
## Common Commands
|
|
10
|
+
|
|
11
|
+
### 1. Patch Release (1.0.0 → 1.0.1)
|
|
12
|
+
|
|
13
|
+
```typescript
|
|
14
|
+
import { prepareRelease, publishToNpm } from '@claude-flow/deployment';
|
|
15
|
+
|
|
16
|
+
await prepareRelease({ bumpType: 'patch' });
|
|
17
|
+
await publishToNpm({ tag: 'latest' });
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
### 2. Minor Release (1.0.0 → 1.1.0)
|
|
21
|
+
|
|
22
|
+
```typescript
|
|
23
|
+
await prepareRelease({ bumpType: 'minor' });
|
|
24
|
+
await publishToNpm({ tag: 'latest' });
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
### 3. Major Release (1.0.0 → 2.0.0)
|
|
28
|
+
|
|
29
|
+
```typescript
|
|
30
|
+
await prepareRelease({ bumpType: 'major' });
|
|
31
|
+
await publishToNpm({ tag: 'latest' });
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### 4. Alpha Release (1.0.0 → 1.0.0-alpha.1)
|
|
35
|
+
|
|
36
|
+
```typescript
|
|
37
|
+
await prepareRelease({ bumpType: 'prerelease', channel: 'alpha' });
|
|
38
|
+
await publishToNpm({ tag: 'alpha' });
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
### 5. Dry Run (Test without changes)
|
|
42
|
+
|
|
43
|
+
```typescript
|
|
44
|
+
await prepareRelease({ bumpType: 'minor', dryRun: true });
|
|
45
|
+
await publishToNpm({ tag: 'latest', dryRun: true });
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
### 6. Validate Package
|
|
49
|
+
|
|
50
|
+
```typescript
|
|
51
|
+
import { validate } from '@claude-flow/deployment';
|
|
52
|
+
|
|
53
|
+
const result = await validate();
|
|
54
|
+
if (!result.valid) {
|
|
55
|
+
console.error(result.errors);
|
|
56
|
+
}
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
## Complete Workflow
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import { validate, prepareRelease, publishToNpm } from '@claude-flow/deployment';
|
|
63
|
+
|
|
64
|
+
// 1. Validate
|
|
65
|
+
const validation = await validate();
|
|
66
|
+
if (!validation.valid) process.exit(1);
|
|
67
|
+
|
|
68
|
+
// 2. Prepare release
|
|
69
|
+
const release = await prepareRelease({
|
|
70
|
+
bumpType: 'minor',
|
|
71
|
+
generateChangelog: true,
|
|
72
|
+
createTag: true,
|
|
73
|
+
commit: true
|
|
74
|
+
});
|
|
75
|
+
|
|
76
|
+
// 3. Publish
|
|
77
|
+
const publish = await publishToNpm({
|
|
78
|
+
tag: 'latest',
|
|
79
|
+
access: 'public'
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
console.log(`Released ${publish.packageName}@${publish.version}`);
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Class-Based API
|
|
86
|
+
|
|
87
|
+
```typescript
|
|
88
|
+
import { Validator, ReleaseManager, Publisher } from '@claude-flow/deployment';
|
|
89
|
+
|
|
90
|
+
const validator = new Validator();
|
|
91
|
+
const manager = new ReleaseManager();
|
|
92
|
+
const publisher = new Publisher();
|
|
93
|
+
|
|
94
|
+
await validator.validate();
|
|
95
|
+
await manager.prepareRelease({ bumpType: 'patch' });
|
|
96
|
+
await publisher.publishToNpm({ tag: 'latest' });
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
## Options Reference
|
|
100
|
+
|
|
101
|
+
### ReleaseOptions
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
{
|
|
105
|
+
bumpType?: 'major' | 'minor' | 'patch' | 'prerelease',
|
|
106
|
+
version?: string, // Override version
|
|
107
|
+
channel?: 'alpha' | 'beta' | 'rc' | 'latest',
|
|
108
|
+
generateChangelog?: boolean, // Default: true
|
|
109
|
+
createTag?: boolean, // Default: true
|
|
110
|
+
commit?: boolean, // Default: true
|
|
111
|
+
dryRun?: boolean, // Default: false
|
|
112
|
+
skipValidation?: boolean, // Default: false
|
|
113
|
+
tagPrefix?: string, // Default: 'v'
|
|
114
|
+
changelogPath?: string // Default: 'CHANGELOG.md'
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### PublishOptions
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
{
|
|
122
|
+
tag?: string, // Default: 'latest'
|
|
123
|
+
access?: 'public' | 'restricted',
|
|
124
|
+
dryRun?: boolean, // Default: false
|
|
125
|
+
registry?: string, // Custom registry URL
|
|
126
|
+
otp?: string, // 2FA code
|
|
127
|
+
skipBuild?: boolean, // Default: false
|
|
128
|
+
buildCommand?: string // Default: 'npm run build'
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### ValidationOptions
|
|
133
|
+
|
|
134
|
+
```typescript
|
|
135
|
+
{
|
|
136
|
+
lint?: boolean, // Default: true
|
|
137
|
+
test?: boolean, // Default: true
|
|
138
|
+
build?: boolean, // Default: true
|
|
139
|
+
checkDependencies?: boolean, // Default: true
|
|
140
|
+
checkGitStatus?: boolean, // Default: true
|
|
141
|
+
lintCommand?: string, // Default: 'npm run lint'
|
|
142
|
+
testCommand?: string, // Default: 'npm test'
|
|
143
|
+
buildCommand?: string // Default: 'npm run build'
|
|
144
|
+
}
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
## Conventional Commits
|
|
148
|
+
|
|
149
|
+
Use conventional commit format for automatic changelog generation:
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
git commit -m "feat(api): add new endpoint"
|
|
153
|
+
git commit -m "fix(auth): resolve login issue"
|
|
154
|
+
git commit -m "docs(readme): update examples"
|
|
155
|
+
git commit -m "chore(deps): update dependencies"
|
|
156
|
+
```
|
|
157
|
+
|
|
158
|
+
Breaking changes:
|
|
159
|
+
```bash
|
|
160
|
+
git commit -m "feat(ui): redesign layout
|
|
161
|
+
|
|
162
|
+
BREAKING CHANGE: new layout requires migration"
|
|
163
|
+
```
|
|
164
|
+
|
|
165
|
+
## Common Patterns
|
|
166
|
+
|
|
167
|
+
### Prerelease to Release
|
|
168
|
+
|
|
169
|
+
```typescript
|
|
170
|
+
// 1. Alpha releases
|
|
171
|
+
await prepareRelease({ bumpType: 'prerelease', channel: 'alpha' });
|
|
172
|
+
await publishToNpm({ tag: 'alpha' });
|
|
173
|
+
|
|
174
|
+
// 2. Beta releases
|
|
175
|
+
await prepareRelease({ bumpType: 'prerelease', channel: 'beta' });
|
|
176
|
+
await publishToNpm({ tag: 'beta' });
|
|
177
|
+
|
|
178
|
+
// 3. Release candidate
|
|
179
|
+
await prepareRelease({ bumpType: 'prerelease', channel: 'rc' });
|
|
180
|
+
await publishToNpm({ tag: 'rc' });
|
|
181
|
+
|
|
182
|
+
// 4. Final release
|
|
183
|
+
await prepareRelease({ bumpType: 'patch' });
|
|
184
|
+
await publishToNpm({ tag: 'latest' });
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
### Check Before Release
|
|
188
|
+
|
|
189
|
+
```typescript
|
|
190
|
+
import { Publisher } from '@claude-flow/deployment';
|
|
191
|
+
|
|
192
|
+
const publisher = new Publisher();
|
|
193
|
+
|
|
194
|
+
// Check authentication
|
|
195
|
+
const authenticated = await publisher.verifyAuth();
|
|
196
|
+
if (!authenticated) {
|
|
197
|
+
console.error('Not logged in to npm');
|
|
198
|
+
process.exit(1);
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
// Check if version exists
|
|
202
|
+
const exists = await publisher.checkVersionExists('my-package', '1.0.0');
|
|
203
|
+
if (exists) {
|
|
204
|
+
console.error('Version already published');
|
|
205
|
+
process.exit(1);
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
// Get latest version
|
|
209
|
+
const latest = await publisher.getLatestVersion('my-package');
|
|
210
|
+
console.log('Latest version:', latest);
|
|
211
|
+
```
|
|
212
|
+
|
|
213
|
+
## Error Handling
|
|
214
|
+
|
|
215
|
+
```typescript
|
|
216
|
+
const result = await prepareRelease({ bumpType: 'minor' });
|
|
217
|
+
|
|
218
|
+
if (result.success) {
|
|
219
|
+
console.log('Success!', result.newVersion);
|
|
220
|
+
} else {
|
|
221
|
+
console.error('Failed:', result.error);
|
|
222
|
+
if (result.warnings) {
|
|
223
|
+
console.warn('Warnings:', result.warnings);
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Examples
|
|
229
|
+
|
|
230
|
+
See the `/examples` directory for complete working examples:
|
|
231
|
+
|
|
232
|
+
- `basic-release.ts` - Complete release workflow
|
|
233
|
+
- `prerelease-workflow.ts` - Alpha/Beta/RC workflow
|
|
234
|
+
- `dry-run.ts` - Test releases safely
|
|
235
|
+
|
|
236
|
+
Run examples:
|
|
237
|
+
```bash
|
|
238
|
+
npx tsx examples/basic-release.ts
|
|
239
|
+
npx tsx examples/prerelease-workflow.ts
|
|
240
|
+
npx tsx examples/dry-run.ts
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
## Tips
|
|
244
|
+
|
|
245
|
+
1. Always test with `dryRun: true` first
|
|
246
|
+
2. Use conventional commits for better changelogs
|
|
247
|
+
3. Run validation before releasing
|
|
248
|
+
4. Keep your git repo clean (no uncommitted changes)
|
|
249
|
+
5. Use prerelease tags for beta testing
|
|
250
|
+
6. Verify npm authentication before publishing
|
|
251
|
+
|
|
252
|
+
## Troubleshooting
|
|
253
|
+
|
|
254
|
+
**Problem**: "Not authenticated with npm"
|
|
255
|
+
```bash
|
|
256
|
+
npm login
|
|
257
|
+
```
|
|
258
|
+
|
|
259
|
+
**Problem**: "Uncommitted changes detected"
|
|
260
|
+
```bash
|
|
261
|
+
git status
|
|
262
|
+
git commit -am "your message"
|
|
263
|
+
```
|
|
264
|
+
|
|
265
|
+
**Problem**: "Package is private"
|
|
266
|
+
```json
|
|
267
|
+
// Remove from package.json
|
|
268
|
+
"private": true
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
**Problem**: "Version already exists"
|
|
272
|
+
```typescript
|
|
273
|
+
// Bump version first
|
|
274
|
+
await prepareRelease({ bumpType: 'patch' });
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
## Support
|
|
278
|
+
|
|
279
|
+
- [Full Documentation](./README.md)
|
|
280
|
+
- [Implementation Details](./IMPLEMENTATION.md)
|
|
281
|
+
- [Examples](./examples/)
|
package/README.md
ADDED
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
# @claude-flow/deployment
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@claude-flow/deployment)
|
|
4
|
+
[](https://www.npmjs.com/package/@claude-flow/deployment)
|
|
5
|
+
[](https://opensource.org/licenses/MIT)
|
|
6
|
+
[](https://www.typescriptlang.org/)
|
|
7
|
+
[](https://github.com/ruvnet/claude-flow)
|
|
8
|
+
[](https://semantic-release.gitbook.io/)
|
|
9
|
+
|
|
10
|
+
> Release management, CI/CD, and versioning module for Claude Flow v3.
|
|
11
|
+
|
|
12
|
+
## Features
|
|
13
|
+
|
|
14
|
+
- **Version Bumping**: Automatic version management (major, minor, patch, prerelease)
|
|
15
|
+
- **Changelog Generation**: Generate changelogs from conventional commits
|
|
16
|
+
- **Git Integration**: Automatic tagging and committing
|
|
17
|
+
- **NPM Publishing**: Publish packages with tag support (alpha, beta, latest)
|
|
18
|
+
- **Pre-Release Validation**: Lint, test, build, and dependency checks
|
|
19
|
+
- **Dry Run Mode**: Test releases without making changes
|
|
20
|
+
|
|
21
|
+
## Installation
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
npm install @claude-flow/deployment
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Quick Start
|
|
28
|
+
|
|
29
|
+
### Prepare a Release
|
|
30
|
+
|
|
31
|
+
```typescript
|
|
32
|
+
import { prepareRelease } from '@claude-flow/deployment';
|
|
33
|
+
|
|
34
|
+
// Bump patch version and generate changelog
|
|
35
|
+
const result = await prepareRelease({
|
|
36
|
+
bumpType: 'patch',
|
|
37
|
+
generateChangelog: true,
|
|
38
|
+
createTag: true,
|
|
39
|
+
commit: true
|
|
40
|
+
});
|
|
41
|
+
|
|
42
|
+
console.log(`Released ${result.newVersion}`);
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
### Publish to NPM
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { publishToNpm } from '@claude-flow/deployment';
|
|
49
|
+
|
|
50
|
+
// Publish with 'latest' tag
|
|
51
|
+
const result = await publishToNpm({
|
|
52
|
+
tag: 'latest',
|
|
53
|
+
access: 'public'
|
|
54
|
+
});
|
|
55
|
+
|
|
56
|
+
console.log(`Published ${result.packageName}@${result.version}`);
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Validate Package
|
|
60
|
+
|
|
61
|
+
```typescript
|
|
62
|
+
import { validate } from '@claude-flow/deployment';
|
|
63
|
+
|
|
64
|
+
// Run all validation checks
|
|
65
|
+
const result = await validate({
|
|
66
|
+
lint: true,
|
|
67
|
+
test: true,
|
|
68
|
+
build: true,
|
|
69
|
+
checkDependencies: true
|
|
70
|
+
});
|
|
71
|
+
|
|
72
|
+
if (!result.valid) {
|
|
73
|
+
console.error('Validation failed:', result.errors);
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## API Reference
|
|
78
|
+
|
|
79
|
+
### ReleaseManager
|
|
80
|
+
|
|
81
|
+
```typescript
|
|
82
|
+
import { ReleaseManager } from '@claude-flow/deployment';
|
|
83
|
+
|
|
84
|
+
const manager = new ReleaseManager();
|
|
85
|
+
|
|
86
|
+
// Prepare release with options
|
|
87
|
+
const result = await manager.prepareRelease({
|
|
88
|
+
bumpType: 'minor', // major | minor | patch | prerelease
|
|
89
|
+
version: '2.0.0', // Override version
|
|
90
|
+
channel: 'beta', // alpha | beta | rc | latest
|
|
91
|
+
generateChangelog: true, // Generate CHANGELOG.md
|
|
92
|
+
createTag: true, // Create git tag
|
|
93
|
+
commit: true, // Commit changes
|
|
94
|
+
dryRun: false, // Test without changes
|
|
95
|
+
skipValidation: false, // Skip validation checks
|
|
96
|
+
tagPrefix: 'v', // Tag prefix (v2.0.0)
|
|
97
|
+
changelogPath: 'CHANGELOG.md' // Changelog file path
|
|
98
|
+
});
|
|
99
|
+
```
|
|
100
|
+
|
|
101
|
+
#### Version Bumping
|
|
102
|
+
|
|
103
|
+
```typescript
|
|
104
|
+
// Bump patch: 1.0.0 -> 1.0.1
|
|
105
|
+
await manager.prepareRelease({ bumpType: 'patch' });
|
|
106
|
+
|
|
107
|
+
// Bump minor: 1.0.0 -> 1.1.0
|
|
108
|
+
await manager.prepareRelease({ bumpType: 'minor' });
|
|
109
|
+
|
|
110
|
+
// Bump major: 1.0.0 -> 2.0.0
|
|
111
|
+
await manager.prepareRelease({ bumpType: 'major' });
|
|
112
|
+
|
|
113
|
+
// Bump prerelease: 1.0.0 -> 1.0.0-alpha.1
|
|
114
|
+
await manager.prepareRelease({ bumpType: 'prerelease', channel: 'alpha' });
|
|
115
|
+
|
|
116
|
+
// Increment prerelease: 1.0.0-alpha.1 -> 1.0.0-alpha.2
|
|
117
|
+
await manager.prepareRelease({ bumpType: 'prerelease', channel: 'alpha' });
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
#### Changelog Generation
|
|
121
|
+
|
|
122
|
+
Generates changelog from conventional commits:
|
|
123
|
+
|
|
124
|
+
```bash
|
|
125
|
+
# Commit format: type(scope): message
|
|
126
|
+
git commit -m "feat(api): add new endpoint"
|
|
127
|
+
git commit -m "fix(auth): resolve login issue"
|
|
128
|
+
git commit -m "feat(ui): update design BREAKING CHANGE: new layout"
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
Generated changelog:
|
|
132
|
+
```markdown
|
|
133
|
+
## [2.0.0] - 2026-01-04
|
|
134
|
+
|
|
135
|
+
### BREAKING CHANGES
|
|
136
|
+
|
|
137
|
+
- **ui**: update design BREAKING CHANGE: new layout
|
|
138
|
+
|
|
139
|
+
### Features
|
|
140
|
+
|
|
141
|
+
- **api**: add new endpoint
|
|
142
|
+
- **ui**: update design
|
|
143
|
+
|
|
144
|
+
### Bug Fixes
|
|
145
|
+
|
|
146
|
+
- **auth**: resolve login issue
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
### Publisher
|
|
150
|
+
|
|
151
|
+
```typescript
|
|
152
|
+
import { Publisher } from '@claude-flow/deployment';
|
|
153
|
+
|
|
154
|
+
const publisher = new Publisher();
|
|
155
|
+
|
|
156
|
+
// Publish to npm
|
|
157
|
+
const result = await publisher.publishToNpm({
|
|
158
|
+
tag: 'latest', // npm tag (alpha, beta, latest)
|
|
159
|
+
access: 'public', // public | restricted
|
|
160
|
+
dryRun: false, // Test publish without actual publish
|
|
161
|
+
registry: 'https://registry.npmjs.org/',
|
|
162
|
+
otp: '123456', // 2FA OTP code
|
|
163
|
+
skipBuild: false, // Skip build step
|
|
164
|
+
buildCommand: 'npm run build' // Custom build command
|
|
165
|
+
});
|
|
166
|
+
|
|
167
|
+
// Check if version exists
|
|
168
|
+
const exists = await publisher.checkVersionExists('my-package', '1.0.0');
|
|
169
|
+
|
|
170
|
+
// Get latest version
|
|
171
|
+
const latest = await publisher.getLatestVersion('my-package', 'latest');
|
|
172
|
+
|
|
173
|
+
// Verify npm authentication
|
|
174
|
+
const authenticated = await publisher.verifyAuth();
|
|
175
|
+
|
|
176
|
+
// Pack to tarball
|
|
177
|
+
const tarball = await publisher.pack('./dist');
|
|
178
|
+
```
|
|
179
|
+
|
|
180
|
+
### Validator
|
|
181
|
+
|
|
182
|
+
```typescript
|
|
183
|
+
import { Validator } from '@claude-flow/deployment';
|
|
184
|
+
|
|
185
|
+
const validator = new Validator();
|
|
186
|
+
|
|
187
|
+
// Validate package
|
|
188
|
+
const result = await validator.validate({
|
|
189
|
+
lint: true, // Run linter
|
|
190
|
+
test: true, // Run tests
|
|
191
|
+
build: true, // Run build
|
|
192
|
+
checkDependencies: true, // Check dependencies
|
|
193
|
+
checkGitStatus: true, // Check uncommitted changes
|
|
194
|
+
lintCommand: 'npm run lint',
|
|
195
|
+
testCommand: 'npm test',
|
|
196
|
+
buildCommand: 'npm run build'
|
|
197
|
+
});
|
|
198
|
+
|
|
199
|
+
console.log('Valid:', result.valid);
|
|
200
|
+
console.log('Errors:', result.errors);
|
|
201
|
+
console.log('Warnings:', result.warnings);
|
|
202
|
+
console.log('Checks:', result.checks);
|
|
203
|
+
```
|
|
204
|
+
|
|
205
|
+
## Complete Release Workflow
|
|
206
|
+
|
|
207
|
+
```typescript
|
|
208
|
+
import { Validator, ReleaseManager, Publisher } from '@claude-flow/deployment';
|
|
209
|
+
|
|
210
|
+
async function release(version: string, tag: string) {
|
|
211
|
+
// 1. Validate package
|
|
212
|
+
console.log('Validating package...');
|
|
213
|
+
const validator = new Validator();
|
|
214
|
+
const validation = await validator.validate();
|
|
215
|
+
|
|
216
|
+
if (!validation.valid) {
|
|
217
|
+
console.error('Validation failed:', validation.errors);
|
|
218
|
+
process.exit(1);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
// 2. Prepare release
|
|
222
|
+
console.log('Preparing release...');
|
|
223
|
+
const manager = new ReleaseManager();
|
|
224
|
+
const release = await manager.prepareRelease({
|
|
225
|
+
version,
|
|
226
|
+
generateChangelog: true,
|
|
227
|
+
createTag: true,
|
|
228
|
+
commit: true
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
if (!release.success) {
|
|
232
|
+
console.error('Release preparation failed:', release.error);
|
|
233
|
+
process.exit(1);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// 3. Publish to npm
|
|
237
|
+
console.log('Publishing to npm...');
|
|
238
|
+
const publisher = new Publisher();
|
|
239
|
+
const publish = await publisher.publishToNpm({
|
|
240
|
+
tag,
|
|
241
|
+
access: 'public'
|
|
242
|
+
});
|
|
243
|
+
|
|
244
|
+
if (!publish.success) {
|
|
245
|
+
console.error('Publish failed:', publish.error);
|
|
246
|
+
process.exit(1);
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
console.log(`Successfully released ${publish.packageName}@${publish.version}`);
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// Run release
|
|
253
|
+
release('2.0.0', 'latest');
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
## CLI Usage
|
|
257
|
+
|
|
258
|
+
```bash
|
|
259
|
+
# Prepare release
|
|
260
|
+
npx @claude-flow/deployment release --version 2.0.0 --changelog --tag
|
|
261
|
+
|
|
262
|
+
# Publish to npm
|
|
263
|
+
npx @claude-flow/deployment publish --tag latest --access public
|
|
264
|
+
|
|
265
|
+
# Validate package
|
|
266
|
+
npx @claude-flow/deployment validate
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Dry Run Mode
|
|
270
|
+
|
|
271
|
+
Test releases without making changes:
|
|
272
|
+
|
|
273
|
+
```typescript
|
|
274
|
+
// Test release preparation
|
|
275
|
+
await prepareRelease({
|
|
276
|
+
bumpType: 'minor',
|
|
277
|
+
dryRun: true
|
|
278
|
+
});
|
|
279
|
+
|
|
280
|
+
// Test npm publish
|
|
281
|
+
await publishToNpm({
|
|
282
|
+
tag: 'beta',
|
|
283
|
+
dryRun: true
|
|
284
|
+
});
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
## Channel/Tag Strategy
|
|
288
|
+
|
|
289
|
+
- **`alpha`**: Early development versions (1.0.0-alpha.1)
|
|
290
|
+
- **`beta`**: Feature complete, testing (1.0.0-beta.1)
|
|
291
|
+
- **`rc`**: Release candidate (1.0.0-rc.1)
|
|
292
|
+
- **`latest`**: Stable production release (1.0.0)
|
|
293
|
+
|
|
294
|
+
```typescript
|
|
295
|
+
// Prerelease workflow
|
|
296
|
+
await prepareRelease({ bumpType: 'prerelease', channel: 'alpha' }); // 1.0.0-alpha.1
|
|
297
|
+
await publishToNpm({ tag: 'alpha' });
|
|
298
|
+
|
|
299
|
+
await prepareRelease({ bumpType: 'prerelease', channel: 'beta' }); // 1.0.0-beta.1
|
|
300
|
+
await publishToNpm({ tag: 'beta' });
|
|
301
|
+
|
|
302
|
+
await prepareRelease({ bumpType: 'patch' }); // 1.0.0
|
|
303
|
+
await publishToNpm({ tag: 'latest' });
|
|
304
|
+
```
|
|
305
|
+
|
|
306
|
+
## Environment Variables
|
|
307
|
+
|
|
308
|
+
```bash
|
|
309
|
+
# NPM authentication
|
|
310
|
+
export NPM_TOKEN="your-token"
|
|
311
|
+
|
|
312
|
+
# Custom registry
|
|
313
|
+
export NPM_CONFIG_REGISTRY="https://registry.npmjs.org/"
|
|
314
|
+
```
|
|
315
|
+
|
|
316
|
+
## Error Handling
|
|
317
|
+
|
|
318
|
+
```typescript
|
|
319
|
+
try {
|
|
320
|
+
const result = await prepareRelease({ bumpType: 'minor' });
|
|
321
|
+
|
|
322
|
+
if (!result.success) {
|
|
323
|
+
console.error('Release failed:', result.error);
|
|
324
|
+
console.warn('Warnings:', result.warnings);
|
|
325
|
+
}
|
|
326
|
+
} catch (error) {
|
|
327
|
+
console.error('Unexpected error:', error);
|
|
328
|
+
}
|
|
329
|
+
```
|
|
330
|
+
|
|
331
|
+
## License
|
|
332
|
+
|
|
333
|
+
MIT
|