super-release 1.5.2 → 1.6.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 +47 -45
- package/bin/super-release-darwin-aarch64.tar.gz.sha256 +1 -1
- package/bin/super-release-darwin-x86_64.tar.gz.sha256 +1 -1
- package/bin/super-release-linux-aarch64.tar.gz.sha256 +1 -1
- package/bin/super-release-linux-x86_64-musl.tar.gz.sha256 +1 -1
- package/bin/super-release-linux-x86_64.tar.gz.sha256 +1 -1
- package/bin/super-release-windows-x86_64.zip.sha256 +1 -1
- package/bin/super-release.js +29 -25
- package/config-schema.json +259 -0
- package/package.json +25 -24
package/README.md
CHANGED
|
@@ -103,7 +103,7 @@ In monorepos, use `--package` to select which package: `super-release --show-nex
|
|
|
103
103
|
## Conventional Commits
|
|
104
104
|
|
|
105
105
|
| Commit | Bump |
|
|
106
|
-
|
|
106
|
+
| ----------------------------------------------------- | ---------- |
|
|
107
107
|
| `fix: ...` | patch |
|
|
108
108
|
| `feat: ...` | minor |
|
|
109
109
|
| `feat!: ...` or `BREAKING CHANGE:` in footer | major |
|
|
@@ -121,38 +121,40 @@ to bypass validation.
|
|
|
121
121
|
For editor autocompletion:
|
|
122
122
|
|
|
123
123
|
```yaml
|
|
124
|
-
# yaml-language-server: $schema=https://raw.githubusercontent.com/bowlingx/super-release/
|
|
124
|
+
# yaml-language-server: $schema=https://raw.githubusercontent.com/bowlingx/super-release/v1.4.0/schema.json
|
|
125
125
|
```
|
|
126
126
|
|
|
127
127
|
```jsonc
|
|
128
128
|
// .release.jsonc
|
|
129
129
|
{
|
|
130
|
-
"$schema": "https://raw.githubusercontent.com/bowlingx/super-release/
|
|
130
|
+
"$schema": "https://raw.githubusercontent.com/bowlingx/super-release/v1.4.0/schema.json",
|
|
131
131
|
}
|
|
132
132
|
```
|
|
133
133
|
|
|
134
|
+
Or, if you installed it locally directly via `./node_modules/super-release/config-schema.json`
|
|
135
|
+
|
|
134
136
|
### Full Example
|
|
135
137
|
|
|
136
138
|
```yaml
|
|
137
139
|
branches:
|
|
138
140
|
- main
|
|
139
141
|
- name: next
|
|
140
|
-
channel: next
|
|
142
|
+
channel: next # publishes to "next" npm dist-tag
|
|
141
143
|
- name: next-major
|
|
142
144
|
channel: next-major
|
|
143
145
|
- name: beta
|
|
144
146
|
prerelease: beta
|
|
145
|
-
- name:
|
|
147
|
+
- name: 'test-*'
|
|
146
148
|
prerelease: true
|
|
147
|
-
packages: [
|
|
148
|
-
- name:
|
|
149
|
+
packages: ['@acme/core'] # only release core on test branches
|
|
150
|
+
- name: '1.x'
|
|
149
151
|
maintenance: true
|
|
150
152
|
|
|
151
|
-
tag_format:
|
|
152
|
-
tag_format_package:
|
|
153
|
+
tag_format: 'v{version}'
|
|
154
|
+
tag_format_package: '{name}/v{version}'
|
|
153
155
|
|
|
154
156
|
packages:
|
|
155
|
-
-
|
|
157
|
+
- '@acme/*'
|
|
156
158
|
|
|
157
159
|
exclude:
|
|
158
160
|
- my-monorepo-root
|
|
@@ -164,9 +166,9 @@ dependencies:
|
|
|
164
166
|
|
|
165
167
|
# Files to ignore -- commits touching only these won't trigger releases
|
|
166
168
|
ignore:
|
|
167
|
-
-
|
|
168
|
-
-
|
|
169
|
-
-
|
|
169
|
+
- 'README.md'
|
|
170
|
+
- 'docs/**'
|
|
171
|
+
- '**/*.md'
|
|
170
172
|
|
|
171
173
|
steps:
|
|
172
174
|
- name: changelog
|
|
@@ -175,13 +177,13 @@ steps:
|
|
|
175
177
|
provenance: true
|
|
176
178
|
- name: exec
|
|
177
179
|
options:
|
|
178
|
-
prepare_cmd:
|
|
180
|
+
prepare_cmd: 'sed -i'''' -e ''s/^version = .*/version = "{version}"/'' Cargo.toml'
|
|
179
181
|
files:
|
|
180
182
|
- Cargo.toml
|
|
181
183
|
- Cargo.lock
|
|
182
184
|
|
|
183
185
|
git:
|
|
184
|
-
commit_message:
|
|
186
|
+
commit_message: 'chore(release): {releases} [skip ci]'
|
|
185
187
|
push: false
|
|
186
188
|
remote: origin
|
|
187
189
|
```
|
|
@@ -194,7 +196,7 @@ Defines which branches can produce releases. Only configured branches are allowe
|
|
|
194
196
|
exits cleanly.
|
|
195
197
|
|
|
196
198
|
| Form | Type | Example versions |
|
|
197
|
-
|
|
199
|
+
| ----------------------------------------------- | ----------------------------------- | -------------------------------- |
|
|
198
200
|
| `- main` | Stable (primary) | `1.0.0`, `1.1.0`, `2.0.0` |
|
|
199
201
|
| `- name: next`<br>` channel: next` | Stable (next channel) | `1.1.0` on `next` dist-tag |
|
|
200
202
|
| `- name: next-major`<br>` channel: next-major` | Stable (next-major channel) | `2.0.0` on `next-major` dist-tag |
|
|
@@ -210,11 +212,11 @@ non-primary branch should set a `channel` so it publishes to a different npm dis
|
|
|
210
212
|
|
|
211
213
|
```yaml
|
|
212
214
|
branches:
|
|
213
|
-
- main
|
|
215
|
+
- main # primary: publishes to "latest"
|
|
214
216
|
- name: next
|
|
215
|
-
channel: next
|
|
217
|
+
channel: next # publishes to "next" dist-tag
|
|
216
218
|
- name: next-major
|
|
217
|
-
channel: next-major
|
|
219
|
+
channel: next-major # publishes to "next-major" dist-tag
|
|
218
220
|
```
|
|
219
221
|
|
|
220
222
|
**Version collision detection**: If a branch tries to release a version that already exists as a tag (e.g. `next`
|
|
@@ -234,7 +236,7 @@ If the branch name doesn't follow the `N.x` / `N.N.x` pattern, set `range` expli
|
|
|
234
236
|
branches:
|
|
235
237
|
- name: legacy-support
|
|
236
238
|
maintenance: true
|
|
237
|
-
range:
|
|
239
|
+
range: '1.5.x' # cap to 1.5.x patch range
|
|
238
240
|
```
|
|
239
241
|
|
|
240
242
|
In monorepos, packages whose version is outside the maintenance range are automatically skipped. For example, on branch
|
|
@@ -246,11 +248,11 @@ Branches can filter which packages they release with `packages`:
|
|
|
246
248
|
|
|
247
249
|
```yaml
|
|
248
250
|
branches:
|
|
249
|
-
- name:
|
|
251
|
+
- name: 'test-*'
|
|
250
252
|
prerelease: true
|
|
251
253
|
packages: # only release these on test branches
|
|
252
|
-
-
|
|
253
|
-
-
|
|
254
|
+
- '@acme/core'
|
|
255
|
+
- '@acme/utils'
|
|
254
256
|
```
|
|
255
257
|
|
|
256
258
|
**Tag filtering by branch**: Stable branches only see stable tags. Prerelease branches see their own channel's tags plus
|
|
@@ -277,7 +279,7 @@ dependencies:
|
|
|
277
279
|
- yarn.lock
|
|
278
280
|
- pnpm-lock.yaml
|
|
279
281
|
- package.json
|
|
280
|
-
-
|
|
282
|
+
- '.github/**'
|
|
281
283
|
```
|
|
282
284
|
|
|
283
285
|
#### `ignore`
|
|
@@ -287,10 +289,10 @@ both ignored and non-ignored files, only the non-ignored files determine which p
|
|
|
287
289
|
|
|
288
290
|
```yaml
|
|
289
291
|
ignore:
|
|
290
|
-
-
|
|
291
|
-
-
|
|
292
|
-
-
|
|
293
|
-
-
|
|
292
|
+
- 'README.md'
|
|
293
|
+
- 'docs/**'
|
|
294
|
+
- '**/*.md'
|
|
295
|
+
- '.prettierrc'
|
|
294
296
|
```
|
|
295
297
|
|
|
296
298
|
#### `packages` / `exclude`
|
|
@@ -299,7 +301,7 @@ Filter which packages are released. `packages` is an allow-list (glob patterns),
|
|
|
299
301
|
|
|
300
302
|
```yaml
|
|
301
303
|
packages:
|
|
302
|
-
-
|
|
304
|
+
- '@acme/*'
|
|
303
305
|
exclude:
|
|
304
306
|
- my-monorepo-root
|
|
305
307
|
```
|
|
@@ -317,23 +319,23 @@ steps:
|
|
|
317
319
|
preview_lines: 20
|
|
318
320
|
|
|
319
321
|
- name: npm
|
|
320
|
-
packages: [
|
|
321
|
-
branches: [
|
|
322
|
+
packages: ['@acme/*'] # only publish @acme packages
|
|
323
|
+
branches: ['main', 'beta'] # only run on main and beta branches
|
|
322
324
|
options:
|
|
323
325
|
access: public
|
|
324
326
|
provenance: true
|
|
325
327
|
registry: https://registry.npmjs.org
|
|
326
|
-
tag: next
|
|
327
|
-
publish_args: [
|
|
328
|
-
package_manager: yarn
|
|
329
|
-
check_registry: true
|
|
328
|
+
tag: next # dist-tag (default: auto from prerelease channel)
|
|
329
|
+
publish_args: ['--otp=123456']
|
|
330
|
+
package_manager: yarn # force specific PM (default: auto-detect)
|
|
331
|
+
check_registry: true # check if version exists before publishing (default: true)
|
|
330
332
|
|
|
331
333
|
- name: exec
|
|
332
|
-
packages: [
|
|
334
|
+
packages: ['my-rust-lib']
|
|
333
335
|
options:
|
|
334
|
-
prepare_cmd:
|
|
335
|
-
publish_cmd:
|
|
336
|
-
files: [
|
|
336
|
+
prepare_cmd: 'sed -i'''' -e ''s/^version = .*/version = "{version}"/'' Cargo.toml'
|
|
337
|
+
publish_cmd: 'cargo publish'
|
|
338
|
+
files: [Cargo.toml, Cargo.lock] # include in git commit
|
|
337
339
|
```
|
|
338
340
|
|
|
339
341
|
Each step can be scoped:
|
|
@@ -344,7 +346,7 @@ Each step can be scoped:
|
|
|
344
346
|
For example, `branches: ["main"]` ensures a step only runs on the main branch.
|
|
345
347
|
|
|
346
348
|
| Step | Prepare | Publish |
|
|
347
|
-
|
|
349
|
+
| ----------- | -------------------------------------------------- | ------------------------------------------------------ |
|
|
348
350
|
| `changelog` | Generates/updates changelog per package (parallel) | -- |
|
|
349
351
|
| `npm` | -- | Publishes packages (parallel within dependency levels) |
|
|
350
352
|
| `exec` | Runs custom shell command per package | Runs custom shell command per package |
|
|
@@ -360,8 +362,8 @@ Core git behavior after all steps run. Not a step -- always runs.
|
|
|
360
362
|
|
|
361
363
|
```yaml
|
|
362
364
|
git:
|
|
363
|
-
commit_message:
|
|
364
|
-
push: false
|
|
365
|
+
commit_message: 'chore(release): {releases} [skip ci]'
|
|
366
|
+
push: false # push commit + tags to remote
|
|
365
367
|
remote: origin
|
|
366
368
|
```
|
|
367
369
|
|
|
@@ -413,7 +415,7 @@ Use `packages` (allow-list) and `exclude` (deny-list) at the top level to contro
|
|
|
413
415
|
|
|
414
416
|
```yaml
|
|
415
417
|
packages:
|
|
416
|
-
-
|
|
418
|
+
- '@acme/*' # only release @acme-scoped packages
|
|
417
419
|
exclude:
|
|
418
420
|
- my-monorepo-root # skip the root package
|
|
419
421
|
```
|
|
@@ -445,10 +447,10 @@ You can also use per-branch `packages` filters for explicit control:
|
|
|
445
447
|
|
|
446
448
|
```yaml
|
|
447
449
|
branches:
|
|
448
|
-
- name:
|
|
450
|
+
- name: '1.x'
|
|
449
451
|
maintenance: true
|
|
450
452
|
packages:
|
|
451
|
-
-
|
|
453
|
+
- '@acme/utils' # only release utils on this maintenance branch
|
|
452
454
|
```
|
|
453
455
|
|
|
454
456
|
## Performance
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
242480267110c1c629f7ea7c0e5afb5f3d276cd3efd62e82113bd97abbbc93f5 super-release-darwin-aarch64.tar.gz
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
2554c2c39538522c7cef889222a913218ed2200b4224e7d5844827d7252575ab super-release-darwin-x86_64.tar.gz
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
f4db8a76a97105c97e6518a301eeb41157925a03c17791eac97f2a299cb9f765 super-release-linux-aarch64.tar.gz
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
70875b20523d5653becb8a3fae79af24c77c44b8cc8a07f1324b2a6c4f11e9f2 super-release-linux-x86_64-musl.tar.gz
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
50158b54b3833aa99cd0fc652d3e3b543f8d995a35f56be4b600aeb7623e7dae super-release-linux-x86_64.tar.gz
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
895C1A18BFC50973F32A909AAC9FCEEC12BFC2D479BF50D6379EBFD0B30512C8
|
package/bin/super-release.js
CHANGED
|
@@ -1,48 +1,52 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
|
|
3
|
-
import { spawnSync, execFileSync } from
|
|
4
|
-
import { existsSync } from
|
|
5
|
-
import { arch, platform } from
|
|
6
|
-
import { fileURLToPath } from
|
|
7
|
-
import pkg from
|
|
3
|
+
import { spawnSync, execFileSync } from 'node:child_process'
|
|
4
|
+
import { existsSync } from 'node:fs'
|
|
5
|
+
import { arch, platform } from 'node:os'
|
|
6
|
+
import { fileURLToPath } from 'node:url'
|
|
7
|
+
import pkg from '../package.json' with { type: 'json' }
|
|
8
8
|
|
|
9
9
|
function isMusl() {
|
|
10
10
|
try {
|
|
11
|
-
const result = execFileSync(
|
|
12
|
-
stdio: [
|
|
13
|
-
})
|
|
14
|
-
return result.toString().includes(
|
|
11
|
+
const result = execFileSync('ldd', ['--version'], {
|
|
12
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
13
|
+
})
|
|
14
|
+
return result.toString().includes('musl')
|
|
15
15
|
} catch (err) {
|
|
16
|
-
if (err.stderr && err.stderr.toString().includes(
|
|
17
|
-
return true
|
|
16
|
+
if (err.stderr && err.stderr.toString().includes('musl')) {
|
|
17
|
+
return true
|
|
18
18
|
}
|
|
19
19
|
return (
|
|
20
|
-
existsSync(
|
|
21
|
-
existsSync(
|
|
22
|
-
)
|
|
20
|
+
existsSync('/lib/ld-musl-x86_64.so.1') ||
|
|
21
|
+
existsSync('/lib/ld-musl-aarch64.so.1')
|
|
22
|
+
)
|
|
23
23
|
}
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
function getBinaryPath() {
|
|
27
|
-
const os = platform() ===
|
|
28
|
-
const cpu = arch()
|
|
29
|
-
const pkgName = `super-release-${os}-${cpu}
|
|
27
|
+
const os = platform() === 'win32' ? 'windows' : platform()
|
|
28
|
+
const cpu = arch()
|
|
29
|
+
const pkgName = `super-release-${os}-${cpu}`
|
|
30
30
|
|
|
31
31
|
try {
|
|
32
|
-
if (os ===
|
|
33
|
-
return fileURLToPath(import.meta.resolve(`${pkgName}/musl`))
|
|
32
|
+
if (os === 'linux' && isMusl()) {
|
|
33
|
+
return fileURLToPath(import.meta.resolve(`${pkgName}/musl`))
|
|
34
34
|
}
|
|
35
|
-
return fileURLToPath(import.meta.resolve(pkgName))
|
|
35
|
+
return fileURLToPath(import.meta.resolve(pkgName))
|
|
36
36
|
} catch {
|
|
37
37
|
throw new Error(
|
|
38
|
-
`Unsupported platform: ${os}-${cpu}. Install the platform-specific package "${pkgName}" manually
|
|
39
|
-
)
|
|
38
|
+
`Unsupported platform: ${os}-${cpu}. Install the platform-specific package "${pkgName}" manually.`,
|
|
39
|
+
)
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
const result = spawnSync(getBinaryPath(), process.argv.slice(2), {
|
|
44
|
-
stdio:
|
|
44
|
+
stdio: 'inherit',
|
|
45
45
|
env: { ...process.env, SUPER_RELEASE_VERSION: pkg.version },
|
|
46
|
-
})
|
|
46
|
+
})
|
|
47
47
|
|
|
48
|
-
|
|
48
|
+
if (result.error) {
|
|
49
|
+
console.error(result.error)
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
process.exit(result.status ?? 1)
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "http://json-schema.org/draft-07/schema#",
|
|
3
|
+
"$id": "https://raw.githubusercontent.com/bowlingx/super-release/main/schema.json",
|
|
4
|
+
"title": "super-release configuration",
|
|
5
|
+
"description": "Configuration file for super-release (.release.yaml)",
|
|
6
|
+
"type": "object",
|
|
7
|
+
"additionalProperties": false,
|
|
8
|
+
"properties": {
|
|
9
|
+
"branches": {
|
|
10
|
+
"description": "Branch configurations for release channels",
|
|
11
|
+
"type": ["array", "null"],
|
|
12
|
+
"default": ["main", "master"],
|
|
13
|
+
"items": {
|
|
14
|
+
"oneOf": [
|
|
15
|
+
{
|
|
16
|
+
"type": "string",
|
|
17
|
+
"description": "Simple branch name (stable releases)"
|
|
18
|
+
},
|
|
19
|
+
{
|
|
20
|
+
"$ref": "#/$defs/branchConfig"
|
|
21
|
+
}
|
|
22
|
+
]
|
|
23
|
+
}
|
|
24
|
+
},
|
|
25
|
+
"tag_format": {
|
|
26
|
+
"description": "Tag format template for root packages. Placeholders: {version}, {name}",
|
|
27
|
+
"type": "string",
|
|
28
|
+
"default": "v{version}",
|
|
29
|
+
"examples": ["v{version}", "{name}-v{version}", "release-{version}"]
|
|
30
|
+
},
|
|
31
|
+
"tag_format_package": {
|
|
32
|
+
"description": "Tag format template for sub-packages in monorepos. Placeholders: {version}, {name}",
|
|
33
|
+
"type": "string",
|
|
34
|
+
"default": "{name}/v{version}",
|
|
35
|
+
"examples": ["{name}/v{version}", "{name}@{version}"]
|
|
36
|
+
},
|
|
37
|
+
"packages": {
|
|
38
|
+
"description": "Glob patterns to include. Only matching packages are released. Default: all",
|
|
39
|
+
"type": ["array", "null"],
|
|
40
|
+
"items": { "type": "string" },
|
|
41
|
+
"examples": [["@acme/*"], ["@acme/core", "@acme/utils"]]
|
|
42
|
+
},
|
|
43
|
+
"exclude": {
|
|
44
|
+
"description": "Glob patterns to exclude from releasing",
|
|
45
|
+
"type": ["array", "null"],
|
|
46
|
+
"default": [],
|
|
47
|
+
"items": { "type": "string" },
|
|
48
|
+
"examples": [["my-monorepo-root", "@acme/internal-*"]]
|
|
49
|
+
},
|
|
50
|
+
"ignore": {
|
|
51
|
+
"description": "Glob patterns for files to ignore. Commits that only touch ignored files will not trigger a release.",
|
|
52
|
+
"type": ["array", "null"],
|
|
53
|
+
"default": [],
|
|
54
|
+
"items": { "type": "string" },
|
|
55
|
+
"examples": [["README.md", "docs/**", ".prettierrc", "**/*.md"]]
|
|
56
|
+
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"description": "Global file dependency patterns. When a commit changes any matching file, ALL packages are considered affected. Useful for lock files, shared configs, etc.",
|
|
59
|
+
"type": ["array", "null"],
|
|
60
|
+
"default": [],
|
|
61
|
+
"items": { "type": "string" },
|
|
62
|
+
"examples": [
|
|
63
|
+
["yarn.lock", "pnpm-lock.yaml", "package.json", ".github/**"]
|
|
64
|
+
]
|
|
65
|
+
},
|
|
66
|
+
"steps": {
|
|
67
|
+
"description": "Ordered list of steps to execute",
|
|
68
|
+
"type": ["array", "null"],
|
|
69
|
+
"default": [{ "name": "changelog" }, { "name": "npm" }],
|
|
70
|
+
"items": {
|
|
71
|
+
"$ref": "#/$defs/stepConfig"
|
|
72
|
+
}
|
|
73
|
+
},
|
|
74
|
+
"git": {
|
|
75
|
+
"description": "Git commit and tag behavior after steps run",
|
|
76
|
+
"$ref": "#/$defs/gitConfig"
|
|
77
|
+
}
|
|
78
|
+
},
|
|
79
|
+
"$defs": {
|
|
80
|
+
"branchConfig": {
|
|
81
|
+
"type": "object",
|
|
82
|
+
"required": ["name"],
|
|
83
|
+
"additionalProperties": false,
|
|
84
|
+
"properties": {
|
|
85
|
+
"name": {
|
|
86
|
+
"type": "string",
|
|
87
|
+
"description": "Branch name or glob pattern (e.g. \"main\", \"beta\", \"test-*\", \"1.x\")"
|
|
88
|
+
},
|
|
89
|
+
"prerelease": {
|
|
90
|
+
"description": "Prerelease channel. true = use branch name as channel, string = fixed channel name, false/absent = stable",
|
|
91
|
+
"oneOf": [{ "type": "boolean" }, { "type": "string" }],
|
|
92
|
+
"examples": [true, "beta", "next", "rc"]
|
|
93
|
+
},
|
|
94
|
+
"maintenance": {
|
|
95
|
+
"type": "boolean",
|
|
96
|
+
"default": false,
|
|
97
|
+
"description": "Maintenance branch. Version bumps are capped to the range inferred from the branch name (e.g. 1.x allows minor, 1.5.x allows only patch)"
|
|
98
|
+
},
|
|
99
|
+
"range": {
|
|
100
|
+
"type": "string",
|
|
101
|
+
"description": "Explicit version range for maintenance branches (e.g. \"1.x\", \"1.5.x\"). If omitted, inferred from branch name.",
|
|
102
|
+
"examples": ["1.x", "1.5.x", "2.x"]
|
|
103
|
+
},
|
|
104
|
+
"channel": {
|
|
105
|
+
"type": "string",
|
|
106
|
+
"description": "Distribution channel (npm dist-tag). Defaults to prerelease name for prerelease branches, branch name for maintenance branches, unset (latest) for the primary release branch.",
|
|
107
|
+
"examples": ["next", "next-major", "1.x"]
|
|
108
|
+
},
|
|
109
|
+
"packages": {
|
|
110
|
+
"type": "array",
|
|
111
|
+
"items": { "type": "string" },
|
|
112
|
+
"description": "Glob patterns to include. Only matching packages are released on this branch. Empty = all."
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
},
|
|
116
|
+
"stepConfig": {
|
|
117
|
+
"type": "object",
|
|
118
|
+
"required": ["name"],
|
|
119
|
+
"additionalProperties": false,
|
|
120
|
+
"properties": {
|
|
121
|
+
"name": {
|
|
122
|
+
"type": "string",
|
|
123
|
+
"enum": ["changelog", "npm", "exec"],
|
|
124
|
+
"description": "Step name"
|
|
125
|
+
},
|
|
126
|
+
"packages": {
|
|
127
|
+
"type": "array",
|
|
128
|
+
"items": { "type": "string" },
|
|
129
|
+
"description": "Glob patterns to filter which packages this step operates on. Empty = all."
|
|
130
|
+
},
|
|
131
|
+
"branches": {
|
|
132
|
+
"type": "array",
|
|
133
|
+
"items": { "type": "string" },
|
|
134
|
+
"description": "Glob patterns for branch names this step runs on. Empty = all branches."
|
|
135
|
+
},
|
|
136
|
+
"options": {
|
|
137
|
+
"description": "Step-specific options"
|
|
138
|
+
}
|
|
139
|
+
},
|
|
140
|
+
"allOf": [
|
|
141
|
+
{
|
|
142
|
+
"if": { "properties": { "name": { "const": "changelog" } } },
|
|
143
|
+
"then": {
|
|
144
|
+
"properties": { "options": { "$ref": "#/$defs/changelogOptions" } }
|
|
145
|
+
}
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
"if": { "properties": { "name": { "const": "npm" } } },
|
|
149
|
+
"then": {
|
|
150
|
+
"properties": { "options": { "$ref": "#/$defs/npmOptions" } }
|
|
151
|
+
}
|
|
152
|
+
},
|
|
153
|
+
{
|
|
154
|
+
"if": { "properties": { "name": { "const": "exec" } } },
|
|
155
|
+
"then": {
|
|
156
|
+
"properties": { "options": { "$ref": "#/$defs/execOptions" } }
|
|
157
|
+
}
|
|
158
|
+
}
|
|
159
|
+
]
|
|
160
|
+
},
|
|
161
|
+
"gitConfig": {
|
|
162
|
+
"type": "object",
|
|
163
|
+
"additionalProperties": false,
|
|
164
|
+
"properties": {
|
|
165
|
+
"commit_message": {
|
|
166
|
+
"type": "string",
|
|
167
|
+
"default": "chore(release): {releases} [skip ci]",
|
|
168
|
+
"description": "Commit message template. Placeholders: {releases}, {summary}, {count}"
|
|
169
|
+
},
|
|
170
|
+
"push": {
|
|
171
|
+
"type": "boolean",
|
|
172
|
+
"default": false,
|
|
173
|
+
"description": "Push commit and tags to remote after release"
|
|
174
|
+
},
|
|
175
|
+
"remote": {
|
|
176
|
+
"type": "string",
|
|
177
|
+
"default": "origin",
|
|
178
|
+
"description": "Git remote name"
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
},
|
|
182
|
+
"changelogOptions": {
|
|
183
|
+
"type": "object",
|
|
184
|
+
"additionalProperties": false,
|
|
185
|
+
"properties": {
|
|
186
|
+
"filename": {
|
|
187
|
+
"type": "string",
|
|
188
|
+
"default": "CHANGELOG.md",
|
|
189
|
+
"description": "Output filename per package"
|
|
190
|
+
},
|
|
191
|
+
"preview_lines": {
|
|
192
|
+
"type": "integer",
|
|
193
|
+
"default": 20,
|
|
194
|
+
"description": "Max lines shown in dry-run preview"
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
},
|
|
198
|
+
"npmOptions": {
|
|
199
|
+
"type": "object",
|
|
200
|
+
"additionalProperties": false,
|
|
201
|
+
"properties": {
|
|
202
|
+
"access": {
|
|
203
|
+
"type": "string",
|
|
204
|
+
"enum": ["public", "restricted"],
|
|
205
|
+
"description": "npm access level. If unset, npm's default applies (restricted for scoped, public for unscoped)."
|
|
206
|
+
},
|
|
207
|
+
"registry": {
|
|
208
|
+
"type": "string",
|
|
209
|
+
"description": "Custom registry URL",
|
|
210
|
+
"format": "uri"
|
|
211
|
+
},
|
|
212
|
+
"tag": {
|
|
213
|
+
"type": "string",
|
|
214
|
+
"description": "Dist-tag override. Default: auto from prerelease channel"
|
|
215
|
+
},
|
|
216
|
+
"provenance": {
|
|
217
|
+
"type": "boolean",
|
|
218
|
+
"default": false,
|
|
219
|
+
"description": "Enable npm provenance (--provenance). Requires npm 9.5+ and supported CI"
|
|
220
|
+
},
|
|
221
|
+
"publish_args": {
|
|
222
|
+
"type": "array",
|
|
223
|
+
"items": { "type": "string" },
|
|
224
|
+
"description": "Extra args passed to the publish command"
|
|
225
|
+
},
|
|
226
|
+
"check_registry": {
|
|
227
|
+
"type": "boolean",
|
|
228
|
+
"default": true,
|
|
229
|
+
"description": "Check the registry before publishing to skip already-published versions. Set to false to always attempt publish."
|
|
230
|
+
},
|
|
231
|
+
"package_manager": {
|
|
232
|
+
"type": "string",
|
|
233
|
+
"enum": ["npm", "yarn", "pnpm"],
|
|
234
|
+
"description": "Force specific package manager (default: auto-detect)"
|
|
235
|
+
}
|
|
236
|
+
}
|
|
237
|
+
},
|
|
238
|
+
"execOptions": {
|
|
239
|
+
"type": "object",
|
|
240
|
+
"additionalProperties": false,
|
|
241
|
+
"properties": {
|
|
242
|
+
"prepare_cmd": {
|
|
243
|
+
"type": "string",
|
|
244
|
+
"description": "Shell command for prepare phase. Placeholders: {version}, {name}, {channel}"
|
|
245
|
+
},
|
|
246
|
+
"publish_cmd": {
|
|
247
|
+
"type": "string",
|
|
248
|
+
"description": "Shell command for publish phase. Placeholders: {version}, {name}, {channel}"
|
|
249
|
+
},
|
|
250
|
+
"files": {
|
|
251
|
+
"type": "array",
|
|
252
|
+
"items": { "type": "string" },
|
|
253
|
+
"description": "Files to include in the git commit. Supports {version} and {name} placeholders.",
|
|
254
|
+
"examples": [["Cargo.toml", "Cargo.lock"]]
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
}
|
|
259
|
+
}
|
package/package.json
CHANGED
|
@@ -1,43 +1,44 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "super-release",
|
|
3
|
-
"
|
|
4
|
-
"
|
|
3
|
+
"version": "1.6.1",
|
|
4
|
+
"description": "A fast semantic-release alternative for monorepos, written in Rust",
|
|
5
|
+
"keywords": [
|
|
6
|
+
"changelog",
|
|
7
|
+
"conventional-commits",
|
|
8
|
+
"monorepo",
|
|
9
|
+
"release",
|
|
10
|
+
"semantic-release"
|
|
11
|
+
],
|
|
12
|
+
"license": "MIT",
|
|
13
|
+
"repository": {
|
|
14
|
+
"type": "git",
|
|
15
|
+
"url": "git+https://github.com/BowlingX/super-release.git"
|
|
16
|
+
},
|
|
5
17
|
"bin": {
|
|
6
18
|
"super-release": "bin/super-release.js"
|
|
7
19
|
},
|
|
8
|
-
"description": "A fast semantic-release alternative for monorepos, written in Rust",
|
|
9
|
-
"engines": {
|
|
10
|
-
"node": ">=20"
|
|
11
|
-
},
|
|
12
20
|
"files": [
|
|
13
21
|
"bin",
|
|
22
|
+
"config-schema.json",
|
|
14
23
|
"README.md"
|
|
15
24
|
],
|
|
16
|
-
"
|
|
17
|
-
"semantic-release",
|
|
18
|
-
"monorepo",
|
|
19
|
-
"release",
|
|
20
|
-
"changelog",
|
|
21
|
-
"conventional-commits"
|
|
22
|
-
],
|
|
23
|
-
"license": "MIT",
|
|
25
|
+
"type": "module",
|
|
24
26
|
"publishConfig": {
|
|
25
27
|
"access": "public",
|
|
26
28
|
"provenance": true
|
|
27
29
|
},
|
|
28
|
-
"repository": {
|
|
29
|
-
"type": "git",
|
|
30
|
-
"url": "git+https://github.com/BowlingX/super-release.git"
|
|
31
|
-
},
|
|
32
30
|
"optionalDependencies": {
|
|
33
|
-
"super-release-
|
|
34
|
-
"super-release-
|
|
35
|
-
"super-release-
|
|
36
|
-
"super-release-
|
|
37
|
-
"super-release-
|
|
31
|
+
"super-release-darwin-arm64": "1.4.1",
|
|
32
|
+
"super-release-darwin-x64": "1.4.1",
|
|
33
|
+
"super-release-linux-x64": "1.4.1",
|
|
34
|
+
"super-release-windows-x64": "1.4.1",
|
|
35
|
+
"super-release-linux-arm64": "1.4.1"
|
|
36
|
+
},
|
|
37
|
+
"engines": {
|
|
38
|
+
"node": ">=20"
|
|
38
39
|
},
|
|
39
40
|
"scripts": {
|
|
40
|
-
"prepublish": "cp ../../README.md README.md",
|
|
41
|
+
"prepublish": "cp ../../README.md README.md && cp ../../schema.json config-schema.json",
|
|
41
42
|
"super-release": "node bin/super-release.js"
|
|
42
43
|
}
|
|
43
44
|
}
|