relizy 0.3.0 → 1.0.0-beta.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/README.md +111 -1093
- package/dist/cli.mjs +18 -3
- package/dist/index.d.mts +394 -23
- package/dist/index.d.ts +394 -23
- package/dist/index.mjs +2 -2
- package/dist/shared/{relizy.B4guss__.mjs → relizy.Bpj1yhpn.mjs} +2136 -1470
- package/package.json +20 -3
package/README.md
CHANGED
|
@@ -7,11 +7,30 @@
|
|
|
7
7
|
A tool to manage releases for monorepos and single packages.
|
|
8
8
|
</strong>
|
|
9
9
|
</p>
|
|
10
|
-
|
|
10
|
+
|
|
11
|
+
<p>
|
|
12
|
+
<a href="https://codecov.io/gh/LouisMazel/relizy">
|
|
13
|
+
<img src="https://codecov.io/gh/LouisMazel/relizy/graph/badge.svg?token=KLWVQUN37O" alt="codecov" />
|
|
14
|
+
</a>
|
|
15
|
+
<a href="https://github.com/LouisMazel/relizy/actions/workflows/test-unit.yml">
|
|
16
|
+
<img src="https://github.com/LouisMazel/relizy/actions/workflows/test-unit.yml/badge.svg" alt="Unit Tests" />
|
|
17
|
+
</a>
|
|
18
|
+
<a href="https://www.npmjs.com/package/relizy">
|
|
19
|
+
<img src="https://img.shields.io/npm/v/relizy.svg" alt="npm version" />
|
|
20
|
+
</a>
|
|
21
|
+
<a href="https://www.npmjs.com/package/relizy">
|
|
22
|
+
<img src="https://img.shields.io/npm/dm/relizy.svg" alt="npm downloads" />
|
|
23
|
+
</a>
|
|
24
|
+
</p>
|
|
25
|
+
|
|
26
|
+
<a href="https://louismazel.github.io/relizy/">Documentation</a>
|
|
27
|
+
|
|
11
28
|
</div>
|
|
12
29
|
|
|
13
30
|
---
|
|
14
31
|
|
|
32
|
+

|
|
33
|
+
|
|
15
34
|
Seamless and automated release manager with elegant changelog generation based on Conventional Commits, supporting both monorepos and single packages. Handles version bumping, changelog generation, Git tagging, and publishing to npm, GitHub & GitLab effortlessly.
|
|
16
35
|
|
|
17
36
|
## 🎯 Why use this tool?
|
|
@@ -22,6 +41,7 @@ Imagine you have multiple packages in your project (like a box with several toys
|
|
|
22
41
|
2. **Create changelogs** to explain what changed
|
|
23
42
|
3. **Publish your packages** to npm so others can use them
|
|
24
43
|
4. **Create releases** on GitHub or GitLab
|
|
44
|
+
5. **Announce releases** automatically on Twitter and Slack
|
|
25
45
|
|
|
26
46
|
## ✨ Features
|
|
27
47
|
|
|
@@ -32,11 +52,12 @@ Imagine you have multiple packages in your project (like a box with several toys
|
|
|
32
52
|
- 🏷️ Pre-release support (alpha, beta, rc)
|
|
33
53
|
- 📢 NPM publish with smart tag detection
|
|
34
54
|
- 🔗 Automatic dependency bumping for workspace dependencies
|
|
35
|
-
- 🐙 GitHub &
|
|
55
|
+
- 🐙 GitHub, GitLab & Bitbucket support
|
|
36
56
|
- 🔐 2FA/OTP support for npm publishing
|
|
37
57
|
- 🎛️ Custom registry support (private registries, GitHub Packages, etc.)
|
|
38
58
|
- ⚙️ Multiple configuration files support for different release workflows
|
|
39
59
|
- 🔧 Support for npm, yarn, pnpm, and bun (auto-detected)
|
|
60
|
+
- 📱 Social media integration (Twitter & Slack) for release announcements
|
|
40
61
|
|
|
41
62
|
## 📚 Documentation
|
|
42
63
|
|
|
@@ -48,1189 +69,186 @@ You can [find the documentation here](https://louismazel.github.io/relizy/).
|
|
|
48
69
|
pnpm add -D relizy
|
|
49
70
|
```
|
|
50
71
|
|
|
51
|
-
##
|
|
52
|
-
|
|
53
|
-
This tool automatically detects your package manager and uses the appropriate commands:
|
|
54
|
-
|
|
55
|
-
- **npm** - Standard npm registry commands
|
|
56
|
-
- **yarn** - Supports both Yarn Classic and Yarn Berry
|
|
57
|
-
- **pnpm** - Optimized for pnpm workspaces
|
|
58
|
-
- **bun** - Full support for bun package manager
|
|
59
|
-
|
|
60
|
-
Detection is automatic based on:
|
|
61
|
-
|
|
62
|
-
1. `packageManager` field in package.json
|
|
63
|
-
2. Lock file presence (pnpm-lock.yaml, yarn.lock, package-lock.json, bun.lockb)
|
|
64
|
-
3. npm_config_user_agent environment variable
|
|
65
|
-
|
|
66
|
-
## ⚙️ Minimal configuration
|
|
67
|
-
|
|
68
|
-
Create a configuration file in the root of your project. The config file is loaded using [c12](https://github.com/unjs/c12), which supports multiple formats.
|
|
69
|
-
|
|
70
|
-
### Supported Configuration Formats
|
|
72
|
+
## 🚀 Quick Start
|
|
71
73
|
|
|
72
|
-
|
|
74
|
+
Install Relizy in your project:
|
|
73
75
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
-
|
|
78
|
-
|
|
79
|
-
**Examples:**
|
|
80
|
-
|
|
81
|
-
- `relizy.config.ts` (TypeScript - recommended)
|
|
82
|
-
- `relizy.config.js` (JavaScript)
|
|
83
|
-
- `relizy.config.json` (JSON)
|
|
84
|
-
- `relizy.config.yaml` (YAML)
|
|
85
|
-
|
|
86
|
-
### Minimal Configuration Example
|
|
76
|
+
```bash
|
|
77
|
+
pnpm add -D relizy
|
|
78
|
+
# or npm install -D relizy
|
|
79
|
+
# or yarn add -D relizy
|
|
80
|
+
```
|
|
87
81
|
|
|
88
|
-
|
|
82
|
+
Create a simple configuration file `relizy.config.ts`:
|
|
89
83
|
|
|
90
84
|
```typescript
|
|
91
|
-
// relizy.config.ts
|
|
92
85
|
import { defineConfig } from 'relizy'
|
|
93
86
|
|
|
94
87
|
export default defineConfig({
|
|
95
88
|
monorepo: {
|
|
96
|
-
versionMode: 'selective',
|
|
97
|
-
packages: ['packages/*'],
|
|
89
|
+
versionMode: 'selective',
|
|
90
|
+
packages: ['packages/*'],
|
|
98
91
|
},
|
|
99
92
|
})
|
|
100
93
|
```
|
|
101
94
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
```json
|
|
105
|
-
{
|
|
106
|
-
"monorepo": {
|
|
107
|
-
"versionMode": "selective",
|
|
108
|
-
"packages": ["packages/*"]
|
|
109
|
-
}
|
|
110
|
-
}
|
|
111
|
-
```
|
|
112
|
-
|
|
113
|
-
**YAML:**
|
|
114
|
-
|
|
115
|
-
```yaml
|
|
116
|
-
monorepo:
|
|
117
|
-
versionMode: selective
|
|
118
|
-
packages:
|
|
119
|
-
- packages/*
|
|
120
|
-
```
|
|
121
|
-
|
|
122
|
-
Check all options in the [configuration section](#configuration-options).
|
|
123
|
-
|
|
124
|
-
## 🚀 Usage
|
|
125
|
-
|
|
126
|
-
### Available commands
|
|
127
|
-
|
|
128
|
-
The CLI uses the `relizy` command:
|
|
95
|
+
That's it! Now you can release with a single command:
|
|
129
96
|
|
|
130
97
|
```bash
|
|
131
|
-
relizy <command> [options]
|
|
132
|
-
```
|
|
133
|
-
|
|
134
|
-
#### 1. `release` - Complete release workflow
|
|
135
|
-
|
|
136
|
-
Executes the entire release workflow in one command:
|
|
137
|
-
|
|
138
|
-
1. Bump versions
|
|
139
|
-
2. Generate changelogs
|
|
140
|
-
3. Commit changes
|
|
141
|
-
4. Create git tag
|
|
142
|
-
5. Push to remote
|
|
143
|
-
6. Publish to npm
|
|
144
|
-
7. Create GitHub or GitLab release
|
|
145
|
-
|
|
146
|
-
```bash
|
|
147
|
-
# Complete release
|
|
148
98
|
relizy release
|
|
149
|
-
|
|
150
|
-
# Release with pre-release
|
|
151
|
-
relizy release --prerelease --preid beta --tag beta
|
|
152
|
-
|
|
153
|
-
# Release with custom suffix (see bump --suffix)
|
|
154
|
-
relizy release --prerelease --preid beta --suffix abc123
|
|
155
|
-
|
|
156
|
-
# Without push to remote
|
|
157
|
-
relizy release --patch --no-push
|
|
158
|
-
|
|
159
|
-
# Without GitHub/GitLab release creation
|
|
160
|
-
relizy release --patch --no-provider-release
|
|
161
|
-
|
|
162
|
-
# Without npm publish
|
|
163
|
-
relizy release --patch --no-publish
|
|
164
|
-
|
|
165
|
-
# Without git verification (skip hooks)
|
|
166
|
-
relizy release --patch --no-verify
|
|
167
|
-
|
|
168
|
-
# With npm options
|
|
169
|
-
relizy release --patch --registry https://npm.pkg.github.com --access public --otp 123456
|
|
170
|
-
|
|
171
|
-
# Force even without commits
|
|
172
|
-
relizy release --patch --force
|
|
173
99
|
```
|
|
174
100
|
|
|
175
|
-
|
|
101
|
+
This will automatically:
|
|
176
102
|
|
|
177
|
-
|
|
103
|
+
- Detect the version bump from your commits
|
|
104
|
+
- Update all package versions
|
|
105
|
+
- Generate changelogs
|
|
106
|
+
- Commit and tag your changes
|
|
107
|
+
- Push to your git repository
|
|
108
|
+
- Create a release on GitHub/GitLab
|
|
109
|
+
- Publish to npm
|
|
178
110
|
|
|
179
|
-
|
|
180
|
-
- `--no-provider-release` - Don't create GitHub/GitLab release
|
|
181
|
-
- `--no-publish` - Don't publish to npm
|
|
182
|
-
- `--no-verify` - Skip git hooks during commit
|
|
183
|
-
- `--no-commit` - Skip commit and tag creation
|
|
184
|
-
- `--no-changelog` - Skip changelog generation
|
|
185
|
-
- `--no-clean` - Skip working directory clean check
|
|
186
|
-
- `--token <token>` - Git token (GitHub or GitLab)
|
|
187
|
-
- `--force` - Force bump even without commits
|
|
188
|
-
- `--yes` - Skip confirmation prompt
|
|
189
|
-
- `--build-cmd <cmd>` - Command to build packages before publish
|
|
190
|
-
- `--suffix <suffix>` - Custom suffix for prerelease versions (see [bump --suffix](#--suffix))
|
|
111
|
+
## 💡 What Can You Use This For?
|
|
191
112
|
|
|
192
|
-
|
|
113
|
+
Relizy isn't just for publishing npm packages. You can use it for any project where you need version tracking and changelogs:
|
|
193
114
|
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
```bash
|
|
197
|
-
# Auto-detect bump type from commits
|
|
198
|
-
relizy bump
|
|
199
|
-
|
|
200
|
-
# Specify bump type
|
|
201
|
-
relizy bump --patch # 1.0.0 → 1.0.1
|
|
202
|
-
relizy bump --minor # 1.0.0 → 1.1.0
|
|
203
|
-
relizy bump --major # 1.0.0 → 2.0.0
|
|
204
|
-
|
|
205
|
-
# Pre-releases
|
|
206
|
-
relizy bump --prerelease --preid beta # 1.0.0 → 1.0.1-beta.0
|
|
207
|
-
relizy bump --premajor --preid alpha # 1.0.0 → 2.0.0-alpha.0
|
|
208
|
-
relizy bump --preminor --preid rc # 1.0.0 → 1.1.0-rc.0
|
|
209
|
-
relizy bump --prepatch --preid beta # 1.0.0 → 1.0.1-beta.0
|
|
210
|
-
|
|
211
|
-
# Pre-releases with custom suffix
|
|
212
|
-
relizy bump --prepatch --preid beta --suffix abc123 # 1.0.0 → 1.0.1-beta.abc123
|
|
213
|
-
relizy bump --prerelease --preid alpha --suffix 20241106 # 1.0.0-alpha.0 → 1.0.0-alpha.20241106
|
|
214
|
-
|
|
215
|
-
# Options
|
|
216
|
-
relizy bump --force # Force bump even without commits
|
|
217
|
-
relizy bump --yes # Skip confirmation prompt
|
|
218
|
-
relizy bump --no-clean # Skip working directory clean check
|
|
219
|
-
```
|
|
115
|
+
### Publishing npm Packages
|
|
220
116
|
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
- `--major` - Bump major version
|
|
224
|
-
- `--minor` - Bump minor version
|
|
225
|
-
- `--patch` - Bump patch version
|
|
226
|
-
- `--prerelease` - Bump prerelease version
|
|
227
|
-
- `--premajor` - Bump premajor version
|
|
228
|
-
- `--preminor` - Bump preminor version
|
|
229
|
-
- `--prepatch` - Bump prepatch version
|
|
230
|
-
- `--preid <id>` - Prerelease identifier (alpha, beta, rc, etc.)
|
|
231
|
-
- `--suffix <suffix>` - Custom suffix for prerelease versions
|
|
232
|
-
- `--force` - Force bump even without commits
|
|
233
|
-
- `--yes` - Skip confirmation prompt
|
|
234
|
-
- `--no-clean` - Skip working directory clean check
|
|
235
|
-
|
|
236
|
-
##### `--suffix`
|
|
237
|
-
|
|
238
|
-
The `--suffix` option allows you to customize the prerelease version number with a custom identifier instead of an auto-incremented number. This is particularly useful for CI/CD pipelines where you want to include build metadata in your version.
|
|
239
|
-
|
|
240
|
-
**How it works:**
|
|
241
|
-
|
|
242
|
-
When you use a prerelease bump type (`prepatch`, `preminor`, `premajor`, or `prerelease`) with the `--suffix` option, the version number's prerelease suffix will be replaced with your custom value instead of an auto-incremented number.
|
|
243
|
-
|
|
244
|
-
**Examples:**
|
|
117
|
+
Perfect for managing npm packages in a monorepo or single package repository. Automate the entire release workflow and let your team focus on building features.
|
|
245
118
|
|
|
246
119
|
```bash
|
|
247
|
-
|
|
248
|
-
relizy bump --prepatch --preid beta
|
|
249
|
-
# 1.0.0 → 1.0.1-beta.0
|
|
250
|
-
|
|
251
|
-
# With custom suffix
|
|
252
|
-
relizy bump --prepatch --preid beta --suffix abc123
|
|
253
|
-
# 1.0.0 → 1.0.1-beta.abc123
|
|
254
|
-
|
|
255
|
-
# Incrementing an existing prerelease with suffix
|
|
256
|
-
relizy bump --prerelease --preid beta --suffix xyz789
|
|
257
|
-
# 1.0.1-beta.0 → 1.0.1-beta.xyz789
|
|
258
|
-
|
|
259
|
-
# Common CI/CD use case: Git commit SHA
|
|
260
|
-
relizy bump --prerelease --preid alpha --suffix $(git rev-parse --short HEAD)
|
|
261
|
-
# 1.0.0-alpha.5 → 1.0.0-alpha.a1b2c3d
|
|
262
|
-
|
|
263
|
-
# Common CI/CD use case: Build number
|
|
264
|
-
relizy bump --prepatch --preid rc --suffix ${CI_PIPELINE_ID}
|
|
265
|
-
# 2.5.0 → 2.5.1-rc.12345
|
|
266
|
-
|
|
267
|
-
# Common CI/CD use case: Timestamp
|
|
268
|
-
relizy bump --preminor --preid beta --suffix $(date +%Y%m%d%H%M%S)
|
|
269
|
-
# 1.0.0 → 1.1.0-beta.20241106153045
|
|
120
|
+
relizy release --minor
|
|
270
121
|
```
|
|
271
122
|
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
- The `--suffix` option **only works with prerelease bump types** (`prepatch`, `preminor`, `premajor`, `prerelease`)
|
|
275
|
-
- It has **no effect on stable release types** (`patch`, `minor`, `major`)
|
|
276
|
-
- The suffix can contain letters, numbers, or hyphens
|
|
277
|
-
- Suffix values follow semantic versioning rules for prerelease identifiers
|
|
278
|
-
|
|
279
|
-
**Use cases:**
|
|
123
|
+
### Versioning Private Applications
|
|
280
124
|
|
|
281
|
-
|
|
282
|
-
2. **Feature Branches**: Create unique prerelease versions for different branches
|
|
283
|
-
3. **Testing**: Generate identifiable test releases
|
|
284
|
-
4. **Reproducible Builds**: Track exact build metadata in version numbers
|
|
285
|
-
|
|
286
|
-
**Example in CI/CD (GitHub Actions):**
|
|
287
|
-
|
|
288
|
-
```yaml
|
|
289
|
-
- name: Bump prerelease version
|
|
290
|
-
run: |
|
|
291
|
-
pnpm relizy bump --prerelease --preid beta --suffix ${{ github.sha }}
|
|
292
|
-
```
|
|
293
|
-
|
|
294
|
-
**Example in CI/CD (GitLab CI):**
|
|
295
|
-
|
|
296
|
-
```yaml
|
|
297
|
-
bump:
|
|
298
|
-
script:
|
|
299
|
-
- pnpm relizy bump --prepatch --preid rc --suffix $CI_COMMIT_SHORT_SHA
|
|
300
|
-
```
|
|
301
|
-
|
|
302
|
-
#### 3. `changelog` - Generate changelogs
|
|
303
|
-
|
|
304
|
-
Generates CHANGELOG.md files for each package and at the root.
|
|
125
|
+
Use Relizy to version your private web applications, mobile apps, or internal tools. Keep track of what changed in each version with automatic changelog generation.
|
|
305
126
|
|
|
306
127
|
```bash
|
|
307
|
-
|
|
308
|
-
relizy changelog
|
|
309
|
-
|
|
310
|
-
# Specify commit range
|
|
311
|
-
relizy changelog --from v1.0.0
|
|
312
|
-
relizy changelog --from v1.0.0 --to v1.1.0
|
|
313
|
-
|
|
314
|
-
# Format after generation
|
|
315
|
-
relizy changelog --format-cmd "pnpm lint:fix"
|
|
316
|
-
|
|
317
|
-
# Without root changelog
|
|
318
|
-
relizy changelog --no-root-changelog
|
|
319
|
-
```
|
|
320
|
-
|
|
321
|
-
**Available options:**
|
|
322
|
-
|
|
323
|
-
- `--from <ref>` - Start commit reference
|
|
324
|
-
- `--to <ref>` - End commit reference
|
|
325
|
-
- `--format-cmd <cmd>` - Command to format CHANGELOGs after generation
|
|
326
|
-
- `--no-root-changelog` - Skip root changelog generation
|
|
327
|
-
|
|
328
|
-
#### 4. `publish` - Publish to npm
|
|
329
|
-
|
|
330
|
-
Publishes packages to npm registry (or other registry).
|
|
331
|
-
|
|
332
|
-
```bash
|
|
333
|
-
# Simple publish
|
|
334
|
-
relizy publish
|
|
335
|
-
|
|
336
|
-
# With custom registry
|
|
337
|
-
relizy publish --registry https://npm.pkg.github.com
|
|
338
|
-
|
|
339
|
-
# With custom tag
|
|
340
|
-
relizy publish --tag next
|
|
341
|
-
|
|
342
|
-
# For scoped packages (public access)
|
|
343
|
-
relizy publish --access public
|
|
344
|
-
|
|
345
|
-
# With 2FA
|
|
346
|
-
relizy publish --otp 123456
|
|
347
|
-
|
|
348
|
-
# Build before publish
|
|
349
|
-
relizy publish --build-cmd "pnpm build"
|
|
128
|
+
relizy release --patch --no-publish
|
|
350
129
|
```
|
|
351
130
|
|
|
352
|
-
|
|
131
|
+
### Release Announcements
|
|
353
132
|
|
|
354
|
-
|
|
355
|
-
- `--tag <tag>` - Publish tag (default: `latest` for stable, `next` for prerelease)
|
|
356
|
-
- `--access <type>` - Access level (`public` or `restricted`)
|
|
357
|
-
- `--otp <code>` - OTP code for 2FA
|
|
358
|
-
- `--build-cmd <cmd>` - Command to build packages before publish
|
|
359
|
-
|
|
360
|
-
**Automatic tag detection:**
|
|
361
|
-
|
|
362
|
-
- Stable version (e.g., `1.2.3`) → tag `latest`
|
|
363
|
-
- Prerelease version (e.g., `1.2.3-beta.0`) → tag `next`
|
|
364
|
-
|
|
365
|
-
#### 5. `provider-release` - Publish a release to git provider (github or gitlab)
|
|
366
|
-
|
|
367
|
-
Publishes a release for the latest tag.
|
|
133
|
+
Automatically post release announcements to Twitter and Slack when you ship new versions. Keep your users and team informed without manual work.
|
|
368
134
|
|
|
369
135
|
```bash
|
|
370
|
-
#
|
|
371
|
-
relizy provider-release
|
|
372
|
-
|
|
373
|
-
# With custom token
|
|
374
|
-
relizy provider-release --token YOUR_GITHUB_TOKEN
|
|
375
|
-
|
|
376
|
-
# Force git provider
|
|
377
|
-
relizy provider-release --provider github
|
|
378
|
-
|
|
379
|
-
# Specify range
|
|
380
|
-
relizy provider-release --from v1.0.0 --to v1.1.0
|
|
136
|
+
relizy release --minor # Automatically posts to configured social channels
|
|
381
137
|
```
|
|
382
138
|
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
- `--from <ref>` - Start commit reference
|
|
386
|
-
- `--to <ref>` - End commit reference
|
|
387
|
-
- `--token <token>` - Git provider token
|
|
388
|
-
- `--provider <provider>` - Git provider (github or gitlab)
|
|
139
|
+
## 📖 Learn More
|
|
389
140
|
|
|
390
|
-
|
|
141
|
+
This README covers the basics to get you started quickly. For detailed documentation, configuration options, and advanced features, visit our full documentation:
|
|
391
142
|
|
|
392
|
-
|
|
143
|
+
**[📚 Full Documentation](https://louismazel.github.io/relizy/)**
|
|
393
144
|
|
|
394
|
-
|
|
395
|
-
- Configuration file (see [tokens](#tokens) section)
|
|
396
|
-
- Environment variables (checked in order):
|
|
397
|
-
- **GitHub:** `RELIZY_GITHUB_TOKEN`, `GITHUB_TOKEN`, `GH_TOKEN`
|
|
398
|
-
- **GitLab:** `RELIZY_GITLAB_TOKEN`, `GITLAB_TOKEN`, `GITLAB_API_TOKEN`, `CI_JOB_TOKEN`
|
|
145
|
+
Topics covered in the documentation:
|
|
399
146
|
|
|
400
|
-
|
|
147
|
+
- Complete configuration reference
|
|
148
|
+
- Monorepo versioning strategies (unified, selective, independent)
|
|
149
|
+
- CI/CD integration (GitHub Actions, GitLab CI)
|
|
150
|
+
- Social media integration (Twitter & Slack)
|
|
151
|
+
- Custom registries and private packages
|
|
152
|
+
- Multiple configuration files
|
|
153
|
+
- And much more...
|
|
401
154
|
|
|
402
|
-
|
|
155
|
+
## 🎨 Common Use Cases
|
|
403
156
|
|
|
404
|
-
|
|
157
|
+
Here are some quick examples to get you started:
|
|
405
158
|
|
|
406
|
-
|
|
159
|
+
### Release a Patch Version
|
|
407
160
|
|
|
408
161
|
```bash
|
|
409
|
-
|
|
410
|
-
relizy bump --patch
|
|
411
|
-
|
|
412
|
-
# Use custom config (relizy.standalone.config.{ts,js,json,yaml,...})
|
|
413
|
-
relizy bump --config relizy.standalone --patch
|
|
414
|
-
|
|
415
|
-
# Use another config (relizy.experimental.config.{ts,js,json,yaml,...})
|
|
416
|
-
relizy release --config relizy.experimental --minor
|
|
162
|
+
relizy release --patch
|
|
417
163
|
```
|
|
418
164
|
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
- The config file name must follow the pattern: `<name>.config.<ext>` (e.g., `myconfig.config.ts`, `myconfig.config.json`)
|
|
422
|
-
- In the `--config` option, you only specify the `<name>` part (without `.config.<ext>`)
|
|
423
|
-
- Supported extensions: `.ts`, `.js`, `.mjs`, `.cjs`, `.mts`, `.cts`, `.json`, `.jsonc`, `.json5`, `.yaml`, `.yml`, `.toml`
|
|
424
|
-
|
|
425
|
-
#### Dry Run
|
|
165
|
+
This bumps the version (e.g., 1.0.0 → 1.0.1), generates the changelog, commits, tags, pushes, and publishes to npm.
|
|
426
166
|
|
|
427
|
-
|
|
167
|
+
### Try Before You Commit (Dry Run)
|
|
428
168
|
|
|
429
169
|
```bash
|
|
430
|
-
# Preview bump
|
|
431
|
-
relizy bump --patch --dry-run
|
|
432
|
-
|
|
433
|
-
# Preview entire release workflow
|
|
434
170
|
relizy release --minor --dry-run
|
|
435
|
-
|
|
436
|
-
# Preview publish
|
|
437
|
-
relizy publish --dry-run
|
|
438
171
|
```
|
|
439
172
|
|
|
440
|
-
|
|
173
|
+
Preview exactly what will happen without making any changes.
|
|
441
174
|
|
|
442
|
-
|
|
175
|
+
### Skip Publishing for Private Apps
|
|
443
176
|
|
|
444
177
|
```bash
|
|
445
|
-
|
|
446
|
-
relizy bump
|
|
447
|
-
|
|
448
|
-
# Debug level (detailed information)
|
|
449
|
-
relizy release --patch --log-level debug
|
|
450
|
-
|
|
451
|
-
# Silent level (errors only)
|
|
452
|
-
relizy publish --log-level silent
|
|
178
|
+
relizy release --patch --no-publish
|
|
453
179
|
```
|
|
454
180
|
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
- `silent` - Errors only
|
|
458
|
-
- `error` - Errors and critical warnings
|
|
459
|
-
- `warning` - Warnings and above
|
|
460
|
-
- `normal` - Normal information
|
|
461
|
-
- `default` - Essential information (default)
|
|
462
|
-
- `debug` - Detailed debugging information
|
|
463
|
-
- `trace` - Very detailed trace information
|
|
464
|
-
- `verbose` - Show everything
|
|
181
|
+
Perfect for versioning private applications where you don't need to publish to npm.
|
|
465
182
|
|
|
466
|
-
|
|
183
|
+
### Pre-release Versions
|
|
467
184
|
|
|
468
185
|
```bash
|
|
469
|
-
|
|
470
|
-
$ relizy bump --patch
|
|
471
|
-
ℹ 4.2.0 → 4.2.1 (unified mode)
|
|
472
|
-
✔ All 3 package(s) bumped to 4.2.1
|
|
473
|
-
|
|
474
|
-
# Detailed output for debugging
|
|
475
|
-
$ relizy bump --patch --log-level debug
|
|
476
|
-
● Loading monorepo configuration
|
|
477
|
-
● Version mode: unified
|
|
478
|
-
● From: v4.2.0, To: HEAD
|
|
479
|
-
● Package patterns: packages/*
|
|
480
|
-
● Found 3 package(s)
|
|
481
|
-
● Starting bump in unified mode
|
|
482
|
-
● Fetching commits from v4.2.0 to HEAD
|
|
483
|
-
● Found 5 commits since v4.2.0
|
|
484
|
-
● Detected release type from commits: patch
|
|
485
|
-
ℹ 4.2.0 → 4.2.1 (unified mode)
|
|
486
|
-
● Writing version to 3 package(s)
|
|
487
|
-
● Updating lerna.json version
|
|
488
|
-
✔ All 3 package(s) bumped to 4.2.1
|
|
489
|
-
```
|
|
490
|
-
|
|
491
|
-
## ⚙️ Configuration
|
|
492
|
-
|
|
493
|
-
This tool extends [changelogen](https://github.com/unjs/changelogen) configuration with additional monorepo-specific options. Some options from changelogen are overridden to provide better monorepo support.
|
|
494
|
-
|
|
495
|
-
Create a `relizy.config.ts` file at the root of your project:
|
|
496
|
-
|
|
497
|
-
```typescript
|
|
498
|
-
import { defineConfig } from 'relizy'
|
|
499
|
-
|
|
500
|
-
export default defineConfig({
|
|
501
|
-
// Standard changelogen configuration
|
|
502
|
-
types: {
|
|
503
|
-
feat: { title: '🚀 Features', semver: 'minor' },
|
|
504
|
-
fix: { title: '🩹 Fixes', semver: 'patch' },
|
|
505
|
-
},
|
|
506
|
-
|
|
507
|
-
// Monorepo configuration
|
|
508
|
-
monorepo: {
|
|
509
|
-
versionMode: 'selective',
|
|
510
|
-
packages: ['packages/*'],
|
|
511
|
-
ignorePackageNames: [],
|
|
512
|
-
},
|
|
513
|
-
|
|
514
|
-
// Optional configuration
|
|
515
|
-
changelog: {
|
|
516
|
-
formatCmd: 'pnpm lint:fix',
|
|
517
|
-
rootChangelog: true,
|
|
518
|
-
},
|
|
519
|
-
|
|
520
|
-
bump: {
|
|
521
|
-
type: 'release',
|
|
522
|
-
preid: undefined,
|
|
523
|
-
},
|
|
524
|
-
|
|
525
|
-
publish: {
|
|
526
|
-
private: false,
|
|
527
|
-
tag: 'latest',
|
|
528
|
-
args: [],
|
|
529
|
-
},
|
|
530
|
-
|
|
531
|
-
release: {
|
|
532
|
-
push: true,
|
|
533
|
-
release: true,
|
|
534
|
-
publish: true,
|
|
535
|
-
noVerify: false,
|
|
536
|
-
},
|
|
537
|
-
})
|
|
538
|
-
```
|
|
539
|
-
|
|
540
|
-
### Configuration options
|
|
541
|
-
|
|
542
|
-
The configuration extends [ChangelogConfig](https://github.com/unjs/changelogen#configuration) from changelogen with additional monorepo-specific options.
|
|
543
|
-
|
|
544
|
-
#### `types`
|
|
545
|
-
|
|
546
|
-
**Type:** `Record<string, { title: string, semver?: 'major' | 'minor' | 'patch' } | false>`
|
|
547
|
-
|
|
548
|
-
**Description:** Defines commit types and their impact on versioning.
|
|
549
|
-
|
|
550
|
-
- With `semver`: Triggers a version bump
|
|
551
|
-
- `'major'`: Breaking changes → 1.0.0 → 2.0.0
|
|
552
|
-
- `'minor'`: New features → 1.0.0 → 1.1.0
|
|
553
|
-
- `'patch'`: Bug fixes → 1.0.0 → 1.0.1
|
|
554
|
-
- Without `semver`: Appears in changelog but doesn't trigger a bump
|
|
555
|
-
- `false`: Completely ignored (no changelog, no bump)
|
|
556
|
-
|
|
557
|
-
**Example:**
|
|
558
|
-
|
|
559
|
-
```typescript
|
|
560
|
-
export default defineConfig({
|
|
561
|
-
types: {
|
|
562
|
-
// Trigger a bump
|
|
563
|
-
feat: { title: '🚀 Features', semver: 'minor' },
|
|
564
|
-
fix: { title: '🩹 Fixes', semver: 'patch' },
|
|
565
|
-
perf: { title: '🔥 Performance', semver: 'patch' },
|
|
566
|
-
|
|
567
|
-
// Appear in changelog but no bump
|
|
568
|
-
docs: { title: '📖 Documentation' },
|
|
569
|
-
chore: { title: '🏡 Chore' },
|
|
570
|
-
|
|
571
|
-
// Completely ignored
|
|
572
|
-
ci: false,
|
|
573
|
-
test: false,
|
|
574
|
-
},
|
|
575
|
-
})
|
|
576
|
-
```
|
|
577
|
-
|
|
578
|
-
#### `monorepo`
|
|
579
|
-
|
|
580
|
-
Monorepo-specific configuration (required).
|
|
581
|
-
|
|
582
|
-
| Property | Type | Default | Description |
|
|
583
|
-
| -------------------- | ----------------------------------------------- | ---------------- | ---------------------------------------- |
|
|
584
|
-
| `versionMode` | `'unified'` \| `'selective'` \| `'independent'` | `'selective'` | How versions are managed across packages |
|
|
585
|
-
| `packages` | `string[]` | `['packages/*']` | Glob patterns to locate packages |
|
|
586
|
-
| `ignorePackageNames` | `string[]` | `[]` | Package names to ignore |
|
|
587
|
-
|
|
588
|
-
**Version modes:**
|
|
589
|
-
|
|
590
|
-
| Mode | Version | Scope | Root & Lerna | Best for |
|
|
591
|
-
| ------------------ | ----------- | -------------------------- | ------------ | ------------------------------ |
|
|
592
|
-
| **`selective`** ⭐ | Unified | Only packages with commits | ✅ Updated | Most monorepos |
|
|
593
|
-
| **`unified`** | Unified | ALL packages | ✅ Updated | Keep all packages synchronized |
|
|
594
|
-
| **`independent`** | Independent | Only packages with commits | ❌ Unchanged | Collections of unrelated tools |
|
|
595
|
-
|
|
596
|
-
**Examples:**
|
|
597
|
-
|
|
598
|
-
```typescript
|
|
599
|
-
export default defineConfig({
|
|
600
|
-
// Selective mode (recommended) - Only bump packages with commits
|
|
601
|
-
monorepo: {
|
|
602
|
-
versionMode: 'selective',
|
|
603
|
-
packages: ['packages/*'],
|
|
604
|
-
},
|
|
605
|
-
|
|
606
|
-
// Unified mode - Bump ALL packages together
|
|
607
|
-
// monorepo: {
|
|
608
|
-
// versionMode: 'unified',
|
|
609
|
-
// packages: ['packages/*', 'tools/*'],
|
|
610
|
-
// },
|
|
611
|
-
|
|
612
|
-
// Independent mode - Each package has its own version
|
|
613
|
-
// monorepo: {
|
|
614
|
-
// versionMode: 'independent',
|
|
615
|
-
// packages: ['packages/*'],
|
|
616
|
-
// ignorePackageNames: ['@myorg/internal-utils'],
|
|
617
|
-
// },
|
|
618
|
-
})
|
|
619
|
-
```
|
|
620
|
-
|
|
621
|
-
#### `changelog`
|
|
622
|
-
|
|
623
|
-
Changelog generation configuration.
|
|
624
|
-
|
|
625
|
-
| Property | Type | Default | Description |
|
|
626
|
-
| ------------------- | --------- | ----------- | -------------------------------------------------- |
|
|
627
|
-
| `formatCmd` | `string` | `undefined` | Command to format changelogs after generation |
|
|
628
|
-
| `rootChangelog` | `boolean` | `true` | Generate root CHANGELOG.md with aggregated changes |
|
|
629
|
-
| `includeCommitBody` | `boolean` | `false` | Include full commit bodies in changelog entries |
|
|
630
|
-
|
|
631
|
-
**Example:**
|
|
632
|
-
|
|
633
|
-
```typescript
|
|
634
|
-
export default defineConfig({
|
|
635
|
-
changelog: {
|
|
636
|
-
formatCmd: 'pnpm lint:fix',
|
|
637
|
-
rootChangelog: true,
|
|
638
|
-
includeCommitBody: true,
|
|
639
|
-
},
|
|
640
|
-
})
|
|
641
|
-
```
|
|
642
|
-
|
|
643
|
-
#### `bump`
|
|
644
|
-
|
|
645
|
-
Version bump configuration.
|
|
646
|
-
|
|
647
|
-
| Property | Type | Default | Description |
|
|
648
|
-
| ----------------- | --------------------------------------------------------------------------- | ------------------ | ------------------------------------------------------- |
|
|
649
|
-
| `type` | `'release'` \| `'major'` \| `'minor'` \| `'patch'` \| `'prerelease'` \| ... | `'release'` | Default bump type ('release' auto-detects from commits) |
|
|
650
|
-
| `preid` | `string` | `undefined` | Pre-release identifier (alpha, beta, rc, etc.) |
|
|
651
|
-
| `clean` | `boolean` | `true` | Check if working directory is clean before bumping |
|
|
652
|
-
| `dependencyTypes` | `Array<'dependencies' \| 'devDependencies' \| 'peerDependencies'>` | `['dependencies']` | Which dependency types trigger a version bump |
|
|
653
|
-
| `yes` | `boolean` | `true` | Skip confirmation prompt |
|
|
654
|
-
|
|
655
|
-
**Dependency types:** When a package is updated, this decides which dependent packages should also be bumped:
|
|
656
|
-
|
|
657
|
-
- `dependencies` - Packages that need it to work
|
|
658
|
-
- `devDependencies` - Packages that need it for building/testing
|
|
659
|
-
- `peerDependencies` - Packages that work alongside it
|
|
660
|
-
|
|
661
|
-
**Example:**
|
|
662
|
-
|
|
663
|
-
```typescript
|
|
664
|
-
export default defineConfig({
|
|
665
|
-
bump: {
|
|
666
|
-
type: 'release',
|
|
667
|
-
dependencyTypes: ['dependencies', 'devDependencies'],
|
|
668
|
-
clean: true,
|
|
669
|
-
yes: true,
|
|
670
|
-
},
|
|
671
|
-
})
|
|
672
|
-
```
|
|
673
|
-
|
|
674
|
-
#### `publish`
|
|
675
|
-
|
|
676
|
-
npm publishing configuration.
|
|
677
|
-
|
|
678
|
-
| Property | Type | Default | Description |
|
|
679
|
-
| ---------- | ---------------------------- | ----------- | --------------------------------------------------- |
|
|
680
|
-
| `private` | `boolean` | `false` | Don't publish packages |
|
|
681
|
-
| `tag` | `string` | `'latest'` | npm tag (auto: 'latest' for stable, 'next' for pre) |
|
|
682
|
-
| `registry` | `string` | `undefined` | Custom registry URL |
|
|
683
|
-
| `access` | `'public'` \| `'restricted'` | `undefined` | Package access level |
|
|
684
|
-
| `otp` | `string` | `undefined` | One-time password for 2FA |
|
|
685
|
-
| `buildCmd` | `string` | `undefined` | Command to build packages before publish |
|
|
686
|
-
| `args` | `string[]` | `[]` | Additional arguments for publish command |
|
|
687
|
-
|
|
688
|
-
**Example:**
|
|
689
|
-
|
|
690
|
-
```typescript
|
|
691
|
-
export default defineConfig({
|
|
692
|
-
publish: {
|
|
693
|
-
private: false,
|
|
694
|
-
tag: 'latest',
|
|
695
|
-
registry: 'https://registry.npmjs.org',
|
|
696
|
-
access: 'public',
|
|
697
|
-
buildCmd: 'pnpm build',
|
|
698
|
-
},
|
|
699
|
-
})
|
|
700
|
-
```
|
|
701
|
-
|
|
702
|
-
#### `release`
|
|
703
|
-
|
|
704
|
-
Release workflow configuration.
|
|
705
|
-
|
|
706
|
-
| Property | Type | Default | Description |
|
|
707
|
-
| ----------- | --------- | ------- | ----------------------------------- |
|
|
708
|
-
| `commit` | `boolean` | `true` | Commit changes and create tag |
|
|
709
|
-
| `push` | `boolean` | `true` | Push changes and tags to remote |
|
|
710
|
-
| `changelog` | `boolean` | `true` | Generate changelog files |
|
|
711
|
-
| `release` | `boolean` | `true` | Create release on GitHub/GitLab |
|
|
712
|
-
| `publish` | `boolean` | `true` | Publish to npm |
|
|
713
|
-
| `clean` | `boolean` | `true` | Check if working directory is clean |
|
|
714
|
-
| `noVerify` | `boolean` | `false` | Skip git hooks during commit |
|
|
715
|
-
| `force` | `boolean` | `false` | Force bump even without commits |
|
|
716
|
-
|
|
717
|
-
**Example:**
|
|
718
|
-
|
|
719
|
-
```typescript
|
|
720
|
-
export default defineConfig({
|
|
721
|
-
release: {
|
|
722
|
-
commit: true,
|
|
723
|
-
push: true,
|
|
724
|
-
changelog: true,
|
|
725
|
-
release: true,
|
|
726
|
-
publish: true,
|
|
727
|
-
noVerify: false,
|
|
728
|
-
},
|
|
729
|
-
})
|
|
730
|
-
```
|
|
731
|
-
|
|
732
|
-
#### `repo`
|
|
733
|
-
|
|
734
|
-
Git repository configuration (auto-detected by default).
|
|
735
|
-
|
|
736
|
-
| Property | Type | Default | Description |
|
|
737
|
-
| ---------- | ------------------------ | ------------- | -------------------------------------- |
|
|
738
|
-
| `provider` | `'github'` \| `'gitlab'` | Auto-detected | Git provider (auto from remote URL) |
|
|
739
|
-
| `domain` | `string` | `undefined` | Custom domain for self-hosted instance |
|
|
740
|
-
| `repo` | `string` | Auto-detected | Repository in 'owner/repo' format |
|
|
741
|
-
| `token` | `string` | From env vars | Authentication token |
|
|
742
|
-
|
|
743
|
-
**Auto-detection:**
|
|
744
|
-
|
|
745
|
-
- Provider: Detected from git remote URL (github.com → GitHub, gitlab.com → GitLab)
|
|
746
|
-
- Repository: Parsed from git remote URL
|
|
747
|
-
- Token: Read from environment variables (see [tokens](#tokens) section)
|
|
748
|
-
|
|
749
|
-
**Example:**
|
|
750
|
-
|
|
751
|
-
```typescript
|
|
752
|
-
export default defineConfig({
|
|
753
|
-
// For self-hosted GitLab
|
|
754
|
-
repo: {
|
|
755
|
-
provider: 'gitlab',
|
|
756
|
-
domain: 'gitlab.mycompany.com',
|
|
757
|
-
},
|
|
758
|
-
})
|
|
759
|
-
```
|
|
760
|
-
|
|
761
|
-
#### `tokens`
|
|
762
|
-
|
|
763
|
-
Authentication tokens for git providers (read from environment variables by default).
|
|
764
|
-
|
|
765
|
-
| Property | Type | Default | Description |
|
|
766
|
-
| -------- | -------- | ------------- | --------------------------- |
|
|
767
|
-
| `github` | `string` | From env vars | GitHub authentication token |
|
|
768
|
-
| `gitlab` | `string` | From env vars | GitLab authentication token |
|
|
769
|
-
|
|
770
|
-
**Environment variables checked (in order):**
|
|
771
|
-
|
|
772
|
-
- GitHub: `RELIZY_GITHUB_TOKEN`, `GITHUB_TOKEN`, `GH_TOKEN`
|
|
773
|
-
- GitLab: `RELIZY_GITLAB_TOKEN`, `GITLAB_TOKEN`, `GITLAB_API_TOKEN`, `CI_JOB_TOKEN`
|
|
774
|
-
|
|
775
|
-
**Example:**
|
|
776
|
-
|
|
777
|
-
```typescript
|
|
778
|
-
export default defineConfig({
|
|
779
|
-
tokens: {
|
|
780
|
-
github: process.env.GITHUB_TOKEN,
|
|
781
|
-
gitlab: process.env.GITLAB_TOKEN,
|
|
782
|
-
},
|
|
783
|
-
})
|
|
784
|
-
```
|
|
785
|
-
|
|
786
|
-
#### `templates`
|
|
787
|
-
|
|
788
|
-
Templates for commit and tag messages.
|
|
789
|
-
|
|
790
|
-
| Property | Type | Default | Description |
|
|
791
|
-
| ----------------------- | -------- | -------------------------------------------------- | ------------------------------------------- |
|
|
792
|
-
| `commitMessage` | `string` | `'chore(release): bump version to {{newVersion}}'` | Commit message template |
|
|
793
|
-
| `tagMessage` | `string` | `'Bump version to v{{newVersion}}'` | Git tag message template |
|
|
794
|
-
| `tagBody` | `string` | `'v{{newVersion}}'` | Git tag body (not used in independent mode) |
|
|
795
|
-
| `emptyChangelogContent` | `string` | `'No relevant changes for this release'` | Changelog content when no changes |
|
|
796
|
-
|
|
797
|
-
**Available variables:** `{{newVersion}}`, `{{oldVersion}}`, `{{packageName}}`
|
|
798
|
-
|
|
799
|
-
**Example:**
|
|
800
|
-
|
|
801
|
-
```typescript
|
|
802
|
-
export default defineConfig({
|
|
803
|
-
templates: {
|
|
804
|
-
commitMessage: 'chore(release): v{{newVersion}} [skip ci]',
|
|
805
|
-
tagMessage: 'Release {{newVersion}}',
|
|
806
|
-
tagBody: 'Version {{newVersion}}',
|
|
807
|
-
},
|
|
808
|
-
})
|
|
186
|
+
relizy release --prerelease --preid beta
|
|
809
187
|
```
|
|
810
188
|
|
|
811
|
-
|
|
189
|
+
Creates beta versions like 1.0.0-beta.0 for testing before stable releases.
|
|
812
190
|
|
|
813
|
-
Control
|
|
814
|
-
|
|
815
|
-
**Type:** `'silent' | 'error' | 'warning' | 'normal' | 'default' | 'debug' | 'trace' | 'verbose'`
|
|
816
|
-
|
|
817
|
-
**Default:** `'default'`
|
|
818
|
-
|
|
819
|
-
See [Log Level](#log-level) section for details.
|
|
820
|
-
|
|
821
|
-
#### Inherited from Changelogen
|
|
822
|
-
|
|
823
|
-
The following options are inherited from [changelogen configuration](https://github.com/unjs/changelogen#configuration):
|
|
824
|
-
|
|
825
|
-
| Property | Type | Default | Description |
|
|
826
|
-
| ---------------- | ------------------------ | --------------- | ----------------------------------------- |
|
|
827
|
-
| `cwd` | `string` | `process.cwd()` | Working directory |
|
|
828
|
-
| `from` | `string` | Last git tag | Start reference for changelog |
|
|
829
|
-
| `to` | `string` | `HEAD` | End reference for changelog |
|
|
830
|
-
| `excludeAuthors` | `string[]` | `[]` | List of authors to exclude from changelog |
|
|
831
|
-
| `noAuthors` | `boolean` | `false` | Don't include authors in changelog |
|
|
832
|
-
| `scopeMap` | `Record<string, string>` | `{}` | Map scopes to custom names |
|
|
833
|
-
|
|
834
|
-
**Example:**
|
|
835
|
-
|
|
836
|
-
```typescript
|
|
837
|
-
export default defineConfig({
|
|
838
|
-
cwd: process.cwd(),
|
|
839
|
-
from: 'v1.0.0',
|
|
840
|
-
to: 'HEAD',
|
|
841
|
-
excludeAuthors: ['bot[bot]', 'dependabot'],
|
|
842
|
-
noAuthors: false,
|
|
843
|
-
scopeMap: {
|
|
844
|
-
ui: 'User Interface',
|
|
845
|
-
api: 'API',
|
|
846
|
-
},
|
|
847
|
-
})
|
|
848
|
-
```
|
|
849
|
-
|
|
850
|
-
### Configuration Examples
|
|
851
|
-
|
|
852
|
-
#### Simple configuration (selective mode)
|
|
853
|
-
|
|
854
|
-
```typescript
|
|
855
|
-
import { defineConfig } from 'relizy'
|
|
856
|
-
|
|
857
|
-
export default defineConfig({
|
|
858
|
-
types: {
|
|
859
|
-
feat: { title: '🚀 Features', semver: 'minor' },
|
|
860
|
-
fix: { title: '🩹 Fixes', semver: 'patch' },
|
|
861
|
-
},
|
|
862
|
-
monorepo: {
|
|
863
|
-
versionMode: 'selective',
|
|
864
|
-
packages: ['packages/*'],
|
|
865
|
-
},
|
|
866
|
-
})
|
|
867
|
-
```
|
|
868
|
-
|
|
869
|
-
#### Advanced configuration
|
|
870
|
-
|
|
871
|
-
```typescript
|
|
872
|
-
import { defineConfig } from 'relizy'
|
|
873
|
-
|
|
874
|
-
export default defineConfig({
|
|
875
|
-
types: {
|
|
876
|
-
feat: { title: '🚀 Features', semver: 'minor' },
|
|
877
|
-
fix: { title: '🩹 Fixes', semver: 'patch' },
|
|
878
|
-
perf: { title: '🔥 Performance', semver: 'patch' },
|
|
879
|
-
docs: { title: '📖 Documentation' },
|
|
880
|
-
chore: { title: '🏡 Chore' },
|
|
881
|
-
ci: false,
|
|
882
|
-
test: false,
|
|
883
|
-
},
|
|
884
|
-
|
|
885
|
-
monorepo: {
|
|
886
|
-
versionMode: 'selective',
|
|
887
|
-
packages: ['packages/*', 'tools/*'],
|
|
888
|
-
ignorePackageNames: ['@myorg/eslint-config'],
|
|
889
|
-
},
|
|
890
|
-
|
|
891
|
-
changelog: {
|
|
892
|
-
formatCmd: 'pnpm lint:fix',
|
|
893
|
-
rootChangelog: true,
|
|
894
|
-
},
|
|
895
|
-
|
|
896
|
-
bump: {
|
|
897
|
-
type: 'release',
|
|
898
|
-
},
|
|
899
|
-
|
|
900
|
-
publish: {
|
|
901
|
-
private: false,
|
|
902
|
-
tag: 'latest',
|
|
903
|
-
},
|
|
904
|
-
|
|
905
|
-
release: {
|
|
906
|
-
push: true,
|
|
907
|
-
release: true,
|
|
908
|
-
publish: true,
|
|
909
|
-
noVerify: false,
|
|
910
|
-
},
|
|
911
|
-
|
|
912
|
-
templates: {
|
|
913
|
-
commitMessage: 'chore(release): v{{newVersion}}',
|
|
914
|
-
},
|
|
915
|
-
})
|
|
916
|
-
```
|
|
917
|
-
|
|
918
|
-
#### Configuration for self-hosted GitLab
|
|
919
|
-
|
|
920
|
-
```typescript
|
|
921
|
-
import { defineConfig } from 'relizy'
|
|
922
|
-
|
|
923
|
-
export default defineConfig({
|
|
924
|
-
repo: {
|
|
925
|
-
domain: 'gitlab.mycompany.com',
|
|
926
|
-
provider: 'gitlab',
|
|
927
|
-
},
|
|
928
|
-
monorepo: {
|
|
929
|
-
versionMode: 'selective',
|
|
930
|
-
packages: ['packages/*'],
|
|
931
|
-
},
|
|
932
|
-
})
|
|
933
|
-
```
|
|
934
|
-
|
|
935
|
-
## 📁 Multiple Configuration Files
|
|
936
|
-
|
|
937
|
-
You can create multiple configuration files to manage different release workflows in your monorepo. This is useful when you have packages with different versioning strategies or release cadences.
|
|
938
|
-
|
|
939
|
-
### Use Cases
|
|
940
|
-
|
|
941
|
-
**Common scenarios for multiple configs:**
|
|
942
|
-
|
|
943
|
-
1. **Separate core packages from standalone utilities** - Core UI packages use `selective` mode together, while standalone utilities use `independent` mode
|
|
944
|
-
2. **Different release cadences** - Stable packages vs experimental packages
|
|
945
|
-
3. **Different registries** - Public npm vs private registry
|
|
946
|
-
4. **Different package groups** - Apps vs libraries vs tools
|
|
947
|
-
|
|
948
|
-
### How to Create Multiple Configs
|
|
949
|
-
|
|
950
|
-
Create multiple configuration files following this naming pattern: `<name>.config.<ext>`
|
|
951
|
-
|
|
952
|
-
**Example file structure:**
|
|
953
|
-
|
|
954
|
-
```text
|
|
955
|
-
/
|
|
956
|
-
├── relizy.config.ts # Main config (core packages)
|
|
957
|
-
├── relizy.standalone.config.ts # Standalone utilities config
|
|
958
|
-
└── relizy.experimental.config.json # Experimental packages config
|
|
959
|
-
```
|
|
960
|
-
|
|
961
|
-
You can use any supported format (`.ts`, `.js`, `.json`, `.yaml`, etc.) for each config file.
|
|
962
|
-
|
|
963
|
-
### Example: Core UI Packages vs Standalone Utilities
|
|
964
|
-
|
|
965
|
-
This is a real-world example where you want to separate UI components (which should be released together) from standalone utilities (which can evolve independently).
|
|
966
|
-
|
|
967
|
-
**`relizy.config.ts`** - Core UI packages (selective mode):
|
|
968
|
-
|
|
969
|
-
```typescript
|
|
970
|
-
import { defineConfig } from 'relizy'
|
|
971
|
-
|
|
972
|
-
export default defineConfig({
|
|
973
|
-
types: {
|
|
974
|
-
feat: { title: '🚀 Features', semver: 'minor' },
|
|
975
|
-
fix: { title: '🩹 Fixes', semver: 'patch' },
|
|
976
|
-
},
|
|
977
|
-
monorepo: {
|
|
978
|
-
versionMode: 'selective',
|
|
979
|
-
packages: [
|
|
980
|
-
'packages/lib',
|
|
981
|
-
'packages/icons',
|
|
982
|
-
'packages/themes',
|
|
983
|
-
'packages/nuxt',
|
|
984
|
-
'packages/translations',
|
|
985
|
-
],
|
|
986
|
-
},
|
|
987
|
-
templates: {
|
|
988
|
-
commitMessage: 'chore(release): v{{newVersion}}',
|
|
989
|
-
},
|
|
990
|
-
})
|
|
991
|
-
```
|
|
992
|
-
|
|
993
|
-
**`relizy.standalone.config.ts`** - Standalone utilities (independent mode):
|
|
994
|
-
|
|
995
|
-
```typescript
|
|
996
|
-
import { defineConfig } from 'relizy'
|
|
997
|
-
|
|
998
|
-
export default defineConfig({
|
|
999
|
-
types: {
|
|
1000
|
-
feat: { title: '🚀 Features', semver: 'minor' },
|
|
1001
|
-
fix: { title: '🩹 Fixes', semver: 'patch' },
|
|
1002
|
-
},
|
|
1003
|
-
monorepo: {
|
|
1004
|
-
versionMode: 'independent',
|
|
1005
|
-
packages: [
|
|
1006
|
-
'packages/utils',
|
|
1007
|
-
'packages/node',
|
|
1008
|
-
'packages/changelogen-monorepo',
|
|
1009
|
-
'packages/eslint-config',
|
|
1010
|
-
],
|
|
1011
|
-
},
|
|
1012
|
-
templates: {
|
|
1013
|
-
commitMessage: 'chore(release): {{packageName}}@{{newVersion}}',
|
|
1014
|
-
},
|
|
1015
|
-
changelog: {
|
|
1016
|
-
rootChangelog: false, // No root changelog for independent packages
|
|
1017
|
-
},
|
|
1018
|
-
})
|
|
1019
|
-
```
|
|
1020
|
-
|
|
1021
|
-
### Usage with Multiple Configs
|
|
191
|
+
### Control What Runs
|
|
1022
192
|
|
|
1023
193
|
```bash
|
|
1024
|
-
#
|
|
1025
|
-
|
|
1026
|
-
# or explicitly
|
|
1027
|
-
pnpm relizy release --config relizy --patch
|
|
1028
|
-
|
|
1029
|
-
# Release standalone utilities independently
|
|
1030
|
-
pnpm relizy release --config relizy.standalone --patch
|
|
1031
|
-
|
|
1032
|
-
# You can also use different configs for different commands
|
|
1033
|
-
pnpm relizy bump --config relizy.standalone --minor
|
|
1034
|
-
pnpm relizy changelog --config relizy.standalone
|
|
1035
|
-
pnpm relizy publish --config relizy.standalone
|
|
1036
|
-
```
|
|
1037
|
-
|
|
1038
|
-
### Example: Different Registries
|
|
1039
|
-
|
|
1040
|
-
**`relizy.config.ts`** - Public packages (npm registry):
|
|
1041
|
-
|
|
1042
|
-
```typescript
|
|
1043
|
-
import { defineConfig } from 'relizy'
|
|
1044
|
-
|
|
1045
|
-
export default defineConfig({
|
|
1046
|
-
monorepo: {
|
|
1047
|
-
versionMode: 'selective',
|
|
1048
|
-
packages: ['packages/public/*'],
|
|
1049
|
-
},
|
|
1050
|
-
publish: {
|
|
1051
|
-
registry: 'https://registry.npmjs.org',
|
|
1052
|
-
access: 'public',
|
|
1053
|
-
},
|
|
1054
|
-
})
|
|
1055
|
-
```
|
|
1056
|
-
|
|
1057
|
-
**`relizy.private.config.ts`** - Private packages (GitHub Packages):
|
|
1058
|
-
|
|
1059
|
-
```typescript
|
|
1060
|
-
import { defineConfig } from 'relizy'
|
|
1061
|
-
|
|
1062
|
-
export default defineConfig({
|
|
1063
|
-
monorepo: {
|
|
1064
|
-
versionMode: 'independent',
|
|
1065
|
-
packages: ['packages/private/*'],
|
|
1066
|
-
},
|
|
1067
|
-
publish: {
|
|
1068
|
-
registry: 'https://npm.pkg.github.com',
|
|
1069
|
-
access: 'restricted',
|
|
1070
|
-
},
|
|
1071
|
-
})
|
|
1072
|
-
```
|
|
194
|
+
# Skip git push
|
|
195
|
+
relizy release --patch --no-push
|
|
1073
196
|
|
|
1074
|
-
|
|
1075
|
-
|
|
1076
|
-
pnpm relizy publish
|
|
197
|
+
# Skip GitHub/GitLab release
|
|
198
|
+
relizy release --patch --no-provider-release
|
|
1077
199
|
|
|
1078
|
-
#
|
|
1079
|
-
|
|
200
|
+
# Just bump and commit
|
|
201
|
+
relizy release --patch --no-publish --no-push
|
|
1080
202
|
```
|
|
1081
203
|
|
|
1082
|
-
|
|
1083
|
-
|
|
1084
|
-
1. **Use descriptive config names** - `relizy.standalone.config.ts` is better than `relizy.alt.config.ts`
|
|
1085
|
-
2. **Document your workflow** - Add comments in your config files explaining the purpose
|
|
1086
|
-
3. **Keep it simple** - Don't create too many configs unless necessary
|
|
1087
|
-
4. **Version control** - Commit all config files to your repository
|
|
1088
|
-
5. **CI/CD integration** - Use different configs in different CI jobs if needed
|
|
1089
|
-
|
|
1090
|
-
### Tips
|
|
1091
|
-
|
|
1092
|
-
- The default config is `relizy.config.<ext>` where c12 will auto-detect the extension (you don't need `--config` flag)
|
|
1093
|
-
- Config files must follow the pattern `<name>.config.<ext>` (c12 requirement)
|
|
1094
|
-
- Supported formats: `.ts`, `.js`, `.mjs`, `.cjs`, `.mts`, `.cts`, `.json`, `.jsonc`, `.json5`, `.yaml`, `.yml`, `.toml`
|
|
1095
|
-
- All commands support the `--config` option
|
|
1096
|
-
- You can combine `--config` with `--dry-run` to preview different workflows
|
|
1097
|
-
|
|
1098
|
-
## 🔗 Dependency Management
|
|
204
|
+
For detailed CLI reference, configuration options, and advanced features, check out the [full documentation](https://louismazel.github.io/relizy/).
|
|
1099
205
|
|
|
1100
|
-
|
|
206
|
+
## 🧑💻 Development & Contributing
|
|
1101
207
|
|
|
1102
|
-
###
|
|
1103
|
-
|
|
1104
|
-
**Automatic detection:**
|
|
1105
|
-
|
|
1106
|
-
- When package B is updated, all packages that depend on B are automatically identified
|
|
1107
|
-
- By default only `dependencies` are considered (not `devDependencies` or `peerDependencies`). You can change this behavior using the [dependencyTypes](#bump) option.
|
|
1108
|
-
- Transitive dependencies are handled: if A→B→C and C is updated, both B and A are bumped
|
|
1109
|
-
|
|
1110
|
-
**Bump types by mode:**
|
|
1111
|
-
|
|
1112
|
-
- **Selective/unified mode:** Dependent packages get the same unified version as the root
|
|
1113
|
-
- **Independent mode:** Dependent packages get a minimum `patch` bump (can be higher if they also have commits)
|
|
1114
|
-
|
|
1115
|
-
**Example:**
|
|
208
|
+
### Running Tests
|
|
1116
209
|
|
|
1117
210
|
```bash
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
- @maz-ui/components@2.0.0 (depends on @maz-ui/utils)
|
|
1121
|
-
- @maz-ui/forms@1.5.0 (depends on @maz-ui/components)
|
|
1122
|
-
|
|
1123
|
-
Commit: feat(utils): add new utility
|
|
211
|
+
# Run all tests
|
|
212
|
+
pnpm test:unit
|
|
1124
213
|
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
- @maz-ui/components: 2.0.0 → 2.0.1 (patch - dependency updated)
|
|
1128
|
-
- @maz-ui/forms: 1.5.0 → 1.5.1 (patch - transitive dependency)
|
|
214
|
+
# Run tests in watch mode
|
|
215
|
+
pnpm test:unit:watch
|
|
1129
216
|
|
|
1130
|
-
|
|
1131
|
-
|
|
1132
|
-
- Root version: 2.0.0 → 2.1.0
|
|
217
|
+
# Run tests with coverage
|
|
218
|
+
pnpm test:unit:coverage
|
|
1133
219
|
```
|
|
1134
220
|
|
|
1135
|
-
|
|
221
|
+
### Code Coverage
|
|
1136
222
|
|
|
1137
|
-
|
|
223
|
+
This project uses [Codecov](https://codecov.io) to track code coverage. Coverage reports are automatically generated and uploaded when you push to `main` or `develop` branches, or when you create a pull request.
|
|
1138
224
|
|
|
1139
|
-
|
|
225
|
+
**Coverage Requirements:**
|
|
1140
226
|
|
|
1141
|
-
**
|
|
227
|
+
- **Overall project**: Coverage should not decrease by more than 0.5%
|
|
228
|
+
- **New code (patches)**: Must have at least 80% coverage
|
|
1142
229
|
|
|
1143
|
-
|
|
230
|
+
You can view detailed coverage reports on [Codecov](https://codecov.io/gh/LouisMazel/relizy).
|
|
1144
231
|
|
|
1145
|
-
|
|
1146
|
-
| --------------------------------------- | ------------------------------------------ |
|
|
1147
|
-
| `lerna version patch` | `relizy release --patch` |
|
|
1148
|
-
| `lerna version minor` | `relizy release --minor` |
|
|
1149
|
-
| `lerna version major` | `relizy release --major` |
|
|
1150
|
-
| `lerna version prerelease --preid beta` | `relizy release --prerelease --preid beta` |
|
|
1151
|
-
| `lerna publish from-package` | Not needed (use `pnpm publish -r`) |
|
|
1152
|
-
|
|
1153
|
-
### Migration from Lerna
|
|
1154
|
-
|
|
1155
|
-
1. Keep your existing `lerna.json` (optional)
|
|
1156
|
-
2. Create a `relizy.config.ts` with your versioning strategy
|
|
1157
|
-
3. Replace `lerna version` with `relizy release`
|
|
1158
|
-
4. Use your package manager to publish (e.g., `pnpm publish -r`)
|
|
1159
|
-
|
|
1160
|
-
## 🦊 GitLab CI/CD Configuration
|
|
1161
|
-
|
|
1162
|
-
### Personal Access Token
|
|
1163
|
-
|
|
1164
|
-
1. Go to GitLab → Settings → Access Tokens
|
|
1165
|
-
2. Create a token with `api` scope
|
|
1166
|
-
3. Set the environment variable:
|
|
232
|
+
To see coverage locally:
|
|
1167
233
|
|
|
1168
234
|
```bash
|
|
1169
|
-
|
|
1170
|
-
|
|
1171
|
-
|
|
1172
|
-
### CI/CD Pipeline
|
|
1173
|
-
|
|
1174
|
-
GitLab CI automatically provides `CI_JOB_TOKEN` which can be used for releases:
|
|
1175
|
-
|
|
1176
|
-
```yaml
|
|
1177
|
-
release:
|
|
1178
|
-
stage: deploy
|
|
1179
|
-
script:
|
|
1180
|
-
- pnpm install
|
|
1181
|
-
- pnpm relizy release --yes
|
|
1182
|
-
only:
|
|
1183
|
-
- main
|
|
235
|
+
pnpm test:unit:coverage
|
|
236
|
+
# Open coverage/index.html in your browser
|
|
1184
237
|
```
|
|
1185
238
|
|
|
1186
|
-
|
|
1187
|
-
|
|
1188
|
-
You can also use the tool programmatically:
|
|
1189
|
-
|
|
1190
|
-
```typescript
|
|
1191
|
-
import {
|
|
1192
|
-
bump,
|
|
1193
|
-
changelog,
|
|
1194
|
-
providerRelease,
|
|
1195
|
-
publish,
|
|
1196
|
-
release,
|
|
1197
|
-
} from 'relizy'
|
|
1198
|
-
|
|
1199
|
-
// Bump versions
|
|
1200
|
-
await bump({
|
|
1201
|
-
type: 'prerelease',
|
|
1202
|
-
preid: 'beta',
|
|
1203
|
-
})
|
|
239
|
+
### Pull Request Guidelines
|
|
1204
240
|
|
|
1205
|
-
|
|
1206
|
-
await changelog({
|
|
1207
|
-
from: 'v1.0.0',
|
|
1208
|
-
to: 'v1.1.0',
|
|
1209
|
-
})
|
|
241
|
+
When submitting a PR:
|
|
1210
242
|
|
|
1211
|
-
|
|
1212
|
-
|
|
1213
|
-
|
|
1214
|
-
|
|
1215
|
-
|
|
243
|
+
1. Ensure all tests pass (`pnpm test:unit`)
|
|
244
|
+
2. Check TypeScript types (`pnpm typecheck`)
|
|
245
|
+
3. Lint your code (`pnpm lint:all`)
|
|
246
|
+
4. Add tests for new features
|
|
247
|
+
5. Maintain or improve code coverage (Codecov will comment on your PR)
|
|
1216
248
|
|
|
1217
|
-
|
|
1218
|
-
// Git provider is detected automatically but you can also specify it explicitly
|
|
1219
|
-
await providerRelease({
|
|
1220
|
-
provider: 'github',
|
|
1221
|
-
})
|
|
249
|
+
The Codecov bot will automatically comment on your PR with coverage details and changes.
|
|
1222
250
|
|
|
1223
|
-
|
|
1224
|
-
await release({
|
|
1225
|
-
type: 'prerelease',
|
|
1226
|
-
preid: 'beta',
|
|
1227
|
-
tag: 'beta',
|
|
1228
|
-
registry: 'https://registry.npmjs.org',
|
|
1229
|
-
push: true,
|
|
1230
|
-
release: true,
|
|
1231
|
-
publish: true,
|
|
1232
|
-
})
|
|
1233
|
-
```
|
|
251
|
+
For detailed contribution guidelines, including development setup, testing workflows, commit conventions, and the complete PR process, please read our **[Contributing Guide](CONTRIBUTING.md)**.
|
|
1234
252
|
|
|
1235
253
|
## License
|
|
1236
254
|
|