zx-bulk-release 3.1.11 → 3.1.13
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/CHANGELOG.md +10 -0
- package/README.md +2 -2
- package/package.json +3 -3
- package/src/main/js/config.js +2 -1
- package/src/main/js/post/courier/channels/changelog.js +1 -1
- package/src/main/js/post/courier/channels/gh-pages.js +1 -1
- package/src/main/js/post/courier/channels/meta.js +1 -1
- package/src/main/js/post/release.js +1 -1
- package/src/main/js/util.js +17 -12
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
## [3.1.13](https://github.com/semrel-extra/zx-bulk-release/compare/v3.1.12...v3.1.13) (2026-04-20)
|
|
2
|
+
|
|
3
|
+
### Fixes & improvements
|
|
4
|
+
* fix(config): force using file urls for dynamic import (win issue) ([78d32e6](https://github.com/semrel-extra/zx-bulk-release/commit/78d32e6b5ac8b8dbbe359e829e1b498ef193c2e6))
|
|
5
|
+
|
|
6
|
+
## [3.1.12](https://github.com/semrel-extra/zx-bulk-release/compare/v3.1.11...v3.1.12) (2026-04-13)
|
|
7
|
+
|
|
8
|
+
### Fixes & improvements
|
|
9
|
+
* refactor: inline queuefy ([dcb3b36](https://github.com/semrel-extra/zx-bulk-release/commit/dcb3b3655a9200a861672be7a8d23e82110465a9))
|
|
10
|
+
|
|
1
11
|
## [3.1.11](https://github.com/semrel-extra/zx-bulk-release/compare/v3.1.10...v3.1.11) (2026-04-13)
|
|
2
12
|
|
|
3
13
|
### Fixes & improvements
|
package/README.md
CHANGED
|
@@ -437,8 +437,8 @@ See [DELIVER_SPEC.md](./docs/DELIVER_SPEC.md) for the full protocol specificatio
|
|
|
437
437
|
### Credential flow
|
|
438
438
|
```
|
|
439
439
|
depot (build phase) courier (deliver phase)
|
|
440
|
-
manifest: { token: '${{NPM_TOKEN}}' }
|
|
441
|
-
|
|
440
|
+
manifest: { token: '${{NPM_TOKEN}}' } -> resolveManifest(manifest, env)
|
|
441
|
+
-> { token: 'actual-secret' }
|
|
442
442
|
```
|
|
443
443
|
Template credentials (`${{ENV_VAR}}`) are written into manifests at pack time. Courier resolves them from `process.env` at delivery time. This means the build phase never sees real secrets — including git push credentials (`GH_TOKEN`, `GIT_COMMITTER_NAME`, `GIT_COMMITTER_EMAIL`) which are now resolved by the `git-tag` channel at delivery time.
|
|
444
444
|
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zx-bulk-release",
|
|
3
3
|
"alias": "bulk-release",
|
|
4
|
-
"version": "3.1.
|
|
4
|
+
"version": "3.1.13",
|
|
5
5
|
"description": "zx-based alternative for multi-semantic-release",
|
|
6
6
|
"type": "module",
|
|
7
7
|
"exports": {
|
|
@@ -21,6 +21,7 @@
|
|
|
21
21
|
"test": "npm run test:unit",
|
|
22
22
|
"test:unit": "vitest run --dir src/test/js --exclude '**/integration*' --exclude '**/fixtures/**' --exclude '**/utils/**'",
|
|
23
23
|
"test:it": "node ./src/test/js/integration.test.js",
|
|
24
|
+
"test:smoke": "node src/test/smoke/api.test.js && node src/test/smoke/cli.test.js",
|
|
24
25
|
"test:cov": "vitest run --coverage --dir src/test/js --exclude '**/fixtures/**' --exclude '**/utils/**'",
|
|
25
26
|
"docs": "mkdir -p docs && cp ./README.md ./docs/README.md",
|
|
26
27
|
"publish:beta": "npm publish --tag beta --no-git-tag-version",
|
|
@@ -28,14 +29,13 @@
|
|
|
28
29
|
},
|
|
29
30
|
"dependencies": {
|
|
30
31
|
"@semrel-extra/topo": "^1.14.1",
|
|
31
|
-
"queuefy": "^1.2.1",
|
|
32
32
|
"tar-stream": "^3.1.8",
|
|
33
33
|
"zx-extra": "4.0.20"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@vitest/coverage-v8": "^4.1.4",
|
|
37
37
|
"esbuild": "^0.28.0",
|
|
38
|
-
"verdaccio": "6.5.
|
|
38
|
+
"verdaccio": "6.5.2",
|
|
39
39
|
"vitest": "^4.1.4"
|
|
40
40
|
},
|
|
41
41
|
"publishConfig": {
|
package/src/main/js/config.js
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { pathToFileURL } from 'node:url'
|
|
1
2
|
import { fs, path, YAML } from 'zx'
|
|
2
3
|
import { asArray, camelize, memoizeBy } from './util.js'
|
|
3
4
|
import { GH_URL, resolveGhApiUrl } from './post/api/gh.js'
|
|
@@ -32,7 +33,7 @@ export const getPkgConfig = async (cwd, env) =>
|
|
|
32
33
|
export const cosmiconfig = (name, {searchPlaces}) => {
|
|
33
34
|
const load = async (filePath) => {
|
|
34
35
|
if (filePath.endsWith('.js') || filePath.endsWith('.cjs'))
|
|
35
|
-
return (await import(filePath)).default
|
|
36
|
+
return (await import(pathToFileURL(filePath).href)).default
|
|
36
37
|
const raw = await fs.readFile(filePath, 'utf8')
|
|
37
38
|
if (filePath.endsWith('.yaml') || filePath.endsWith('.yml'))
|
|
38
39
|
return YAML.parse(raw)
|
package/src/main/js/util.js
CHANGED
|
@@ -73,18 +73,23 @@ export const camelize = s => s.replace(/-./g, x => x[1].toUpperCase())
|
|
|
73
73
|
|
|
74
74
|
export const asArray = v => Array.isArray(v) ? v : [v]
|
|
75
75
|
|
|
76
|
-
export const
|
|
77
|
-
const
|
|
78
|
-
let
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
76
|
+
export const queuefy = (fn, concurrency = 1) => {
|
|
77
|
+
const queue = []
|
|
78
|
+
let active = 0
|
|
79
|
+
const next = () => {
|
|
80
|
+
if (active >= concurrency || queue.length === 0) return
|
|
81
|
+
active++
|
|
82
|
+
const {args, resolve, reject} = queue.shift()
|
|
83
|
+
Promise.resolve().then(() => fn(...args)).then(
|
|
84
|
+
v => { active--; resolve(v); next() },
|
|
85
|
+
e => { active--; reject(e); next() }
|
|
86
|
+
)
|
|
87
|
+
}
|
|
88
|
+
return (...args) => new Promise((resolve, reject) => {
|
|
89
|
+
queue.push({args, resolve, reject})
|
|
88
90
|
next()
|
|
89
91
|
})
|
|
90
92
|
}
|
|
93
|
+
|
|
94
|
+
export const pool = async (tasks, concurrency, fn) =>
|
|
95
|
+
Promise.all(tasks.map(queuefy(fn, concurrency)))
|