@anolilab/multi-semantic-release 3.0.0-alpha.2 → 3.0.0-alpha.4
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 +69 -138
- package/README.md +30 -0
- package/dist/bin/cli.js +1 -1
- package/dist/multi-semantic-release.d.ts +9 -7
- package/dist/multi-semantic-release.js +1 -1
- package/dist/packem_shared/multi-semantic-release-BA6wsQZa.js +4 -0
- package/package.json +5 -5
- package/dist/packem_shared/multi-semantic-release-CD0fW8rP.js +0 -4
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,48 @@
|
|
|
1
|
+
## @anolilab/multi-semantic-release [3.0.0-alpha.4](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@3.0.0-alpha.3...@anolilab/multi-semantic-release@3.0.0-alpha.4) (2025-11-20)
|
|
2
|
+
|
|
3
|
+
### Features
|
|
4
|
+
|
|
5
|
+
* add debug logging for branch and release channel information in create-inline-plugin-creator.ts ([c67aa85](https://github.com/anolilab/semantic-release/commit/c67aa85c612b4e5525b95ca9249ffc74f03570f3))
|
|
6
|
+
* Implemented catalog change detection in `create-inline-plugin-creator.ts` to trigger releases based on catalog version changes. ([b8716f5](https://github.com/anolilab/semantic-release/commit/b8716f59bc84723418dbe2873fcec42bd17fbd42))
|
|
7
|
+
|
|
8
|
+
### Bug Fixes
|
|
9
|
+
|
|
10
|
+
* **#232:** await getTagHead in createInlinePluginCreator for proper async handling ([2b813cf](https://github.com/anolilab/semantic-release/commit/2b813cf745e69386fc89c38f1c144c16778bf2d8)), closes [#232](https://github.com/anolilab/semantic-release/issues/232)
|
|
11
|
+
* Ensure context.cwd is set to package directory for all plugin hooks ([877d314](https://github.com/anolilab/semantic-release/commit/877d3143a5c75787640454ee42aa450e59538922))
|
|
12
|
+
|
|
13
|
+
### Miscellaneous Chores
|
|
14
|
+
|
|
15
|
+
* add '@types/env-ci' dependency and refine type handling ([f897d6c](https://github.com/anolilab/semantic-release/commit/f897d6c26436790504bcb8ca98095e4ab3f2bd61))
|
|
16
|
+
* **release:** update changelogs for multi-semantic-release, rc, clean-package-json, and preset packages ([a0073c4](https://github.com/anolilab/semantic-release/commit/a0073c4ef4c582dc3514afc42b4ffbd07bf07761))
|
|
17
|
+
* update '@actions/core' dependency to production in pnpm configuration ([bfec287](https://github.com/anolilab/semantic-release/commit/bfec287c74f048f41bcb0517353d3d4dede451a0))
|
|
18
|
+
* update ESLint configuration and refactor validation logic ([a604dc7](https://github.com/anolilab/semantic-release/commit/a604dc7bd7cb16ec90130e7c48a48a1ed4a9e60c))
|
|
19
|
+
* update Node.js version and refine dependencies in pnpm-workspace ([cbd6172](https://github.com/anolilab/semantic-release/commit/cbd617234ac6e5f5a14b70fbf6d6aec3bcd38fe0))
|
|
20
|
+
* update Node.js version matrix in GitHub Actions workflow ([c558222](https://github.com/anolilab/semantic-release/commit/c558222a6114286227d47d2a766ae6958caeb18c))
|
|
21
|
+
|
|
22
|
+
### Code Refactoring
|
|
23
|
+
|
|
24
|
+
* clean up comments in multi-semantic-release files ([9672b6e](https://github.com/anolilab/semantic-release/commit/9672b6e9635514e94750ddef78aa42247f301d0f))
|
|
25
|
+
* clean up whitespace and comments in get-config.ts and verify-auth.ts ([26dc037](https://github.com/anolilab/semantic-release/commit/26dc037917f281f24d096d9790b671262f432b24))
|
|
26
|
+
* enhance inline plugin creator with consistent git root handling ([4ebaea4](https://github.com/anolilab/semantic-release/commit/4ebaea46d35bb89a0adcb4bf58c6df559e35f107))
|
|
27
|
+
* enhance type handling and improve test clarity in multi-semantic-release ([6243828](https://github.com/anolilab/semantic-release/commit/62438283c017512572714d90fbaf6ccafc7d3769))
|
|
28
|
+
* Ensure consistent cwd handling across all plugin hooks ([3028b71](https://github.com/anolilab/semantic-release/commit/3028b71f6f16244968bd6646b042ac893ffa5bb9))
|
|
29
|
+
* improve test clarity and type handling in update-deps and CLI tests ([eb43625](https://github.com/anolilab/semantic-release/commit/eb436256e2801ef3beafb397a7aaaa216721f6ab))
|
|
30
|
+
* improve type handling in create-inline-plugin-creator.ts ([fe8f579](https://github.com/anolilab/semantic-release/commit/fe8f57986a3fe5abd3597c35e089c91b87ff8a99))
|
|
31
|
+
* Simplify plugin configuration and enhance cwd handling ([7f15f47](https://github.com/anolilab/semantic-release/commit/7f15f47a1f6cb87f3db7a1042b7605493e848aa2))
|
|
32
|
+
* update test cases and improve type handling ([328c392](https://github.com/anolilab/semantic-release/commit/328c39278c609fd9169df79f3f48bbd8038d2e64))
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
### Dependencies
|
|
36
|
+
|
|
37
|
+
* **@anolilab/semantic-release-clean-package-json:** upgraded to 4.0.0-alpha.3
|
|
38
|
+
* **@anolilab/semantic-release-pnpm:** upgraded to 3.0.0-alpha.3
|
|
39
|
+
|
|
40
|
+
## @anolilab/multi-semantic-release [3.0.0-alpha.3](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@3.0.0-alpha.2...@anolilab/multi-semantic-release@3.0.0-alpha.3) (2025-10-22)
|
|
41
|
+
|
|
42
|
+
### Bug Fixes
|
|
43
|
+
|
|
44
|
+
* dryRun flag support in multiSemanticRelease ([3262190](https://github.com/anolilab/semantic-release/commit/3262190273db749884e03a5821177ecd25bacef6))
|
|
45
|
+
|
|
1
46
|
## @anolilab/multi-semantic-release [3.0.0-alpha.2](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@3.0.0-alpha.1...@anolilab/multi-semantic-release@3.0.0-alpha.2) (2025-10-21)
|
|
2
47
|
|
|
3
48
|
### Features
|
|
@@ -32,6 +77,30 @@
|
|
|
32
77
|
* **@anolilab/semantic-release-clean-package-json:** upgraded to 4.0.0-alpha.1
|
|
33
78
|
* **@anolilab/semantic-release-pnpm:** upgraded to 3.0.0-alpha.1
|
|
34
79
|
|
|
80
|
+
## @anolilab/multi-semantic-release [2.0.9](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@2.0.8...@anolilab/multi-semantic-release@2.0.9) (2025-11-10)
|
|
81
|
+
|
|
82
|
+
### Bug Fixes
|
|
83
|
+
|
|
84
|
+
* run commit filtering from git root ([#230](https://github.com/anolilab/semantic-release/issues/230)) ([ee0b3d8](https://github.com/anolilab/semantic-release/commit/ee0b3d8211a364eecfa0fd29bcf1947c1e663345))
|
|
85
|
+
|
|
86
|
+
## @anolilab/multi-semantic-release [2.0.8](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@2.0.7...@anolilab/multi-semantic-release@2.0.8) (2025-11-01)
|
|
87
|
+
|
|
88
|
+
### Bug Fixes
|
|
89
|
+
|
|
90
|
+
* update package dependencies and configurations ([d94ebd8](https://github.com/anolilab/semantic-release/commit/d94ebd8869c34106aa0c11beb0f7410bbc86367f))
|
|
91
|
+
|
|
92
|
+
|
|
93
|
+
### Dependencies
|
|
94
|
+
|
|
95
|
+
* **@anolilab/semantic-release-clean-package-json:** upgraded to 3.0.5
|
|
96
|
+
* **@anolilab/semantic-release-pnpm:** upgraded to 2.0.5
|
|
97
|
+
|
|
98
|
+
## @anolilab/multi-semantic-release [2.0.7](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@2.0.6...@anolilab/multi-semantic-release@2.0.7) (2025-11-01)
|
|
99
|
+
|
|
100
|
+
### Bug Fixes
|
|
101
|
+
|
|
102
|
+
* **deps:** update dependencies and package manager version ([732159f](https://github.com/anolilab/semantic-release/commit/732159f1f0dbbae3446aec900abd90e63cf0d563))
|
|
103
|
+
|
|
35
104
|
## @anolilab/multi-semantic-release [2.0.6](https://github.com/anolilab/semantic-release/compare/@anolilab/multi-semantic-release@2.0.5...@anolilab/multi-semantic-release@2.0.6) (2025-10-07)
|
|
36
105
|
|
|
37
106
|
### Bug Fixes
|
|
@@ -345,144 +414,6 @@
|
|
|
345
414
|
* various synchronizer optimizations ([87a7602](https://github.com/anolilab/multi-semantic-release/commit/87a760293fd97ab3aeaf361a256659897c96af9c))
|
|
346
415
|
|
|
347
416
|
|
|
348
|
-
### Code Refactoring
|
|
349
|
-
|
|
350
|
-
* move to ESM ([99fffa9](https://github.com/anolilab/multi-semantic-release/commit/99fffa9c82b21a1578d376ac206e46d32e6b7ae3))
|
|
351
|
-
|
|
352
|
-
## 1.0.0 (2023-09-28)
|
|
353
|
-
|
|
354
|
-
|
|
355
|
-
### ⚠ BREAKING CHANGES
|
|
356
|
-
|
|
357
|
-
* https://github.com/semantic-release/semantic-release/compare/v19.0.5...v21.0.5
|
|
358
|
-
* drop support for cycled monorepos
|
|
359
|
-
* require Node.js v12
|
|
360
|
-
* sequentialPrepare is set to true, to disable pass `--no-sequential-prepare` option
|
|
361
|
-
* semrel npm plugin calls local npm version https://github.com/semantic-release/npm/pull/445
|
|
362
|
-
* **engine:** the latest semantic-release requires Node.js 10.18
|
|
363
|
-
* drop nodejs v8
|
|
364
|
-
|
|
365
|
-
### Features
|
|
366
|
-
|
|
367
|
-
* add --tag-version-format flag ([259864c](https://github.com/anolilab/multi-semantic-release/commit/259864c2860b651435b4a8e1f01c3cfab350c590))
|
|
368
|
-
* add debugger ([d2c090d](https://github.com/anolilab/multi-semantic-release/commit/d2c090daa104d19d71a09e54c7ff396d0f5824df))
|
|
369
|
-
* add dependencies updating controller ([0c9b040](https://github.com/anolilab/multi-semantic-release/commit/0c9b0406c35cedb264ac321805da4e93b9f2d5d8))
|
|
370
|
-
* add execa queued hook ([042933e](https://github.com/anolilab/multi-semantic-release/commit/042933eb619e3fb7111a8e1d4a41e3593e2729ca))
|
|
371
|
-
* add execasync CLI flag to make execa calls be always synchronous ([693438c](https://github.com/anolilab/multi-semantic-release/commit/693438caeb64af083a6db4e6634aaac74da112ad)), closes [#1](https://github.com/anolilab/multi-semantic-release/issues/1)
|
|
372
|
-
* add meow as cli provider ([6de93b9](https://github.com/anolilab/multi-semantic-release/commit/6de93b9d7d5f818cccf5a376222e091d3be34065))
|
|
373
|
-
* add pnpm and bolt support ([91465de](https://github.com/anolilab/multi-semantic-release/commit/91465de637524b109aa4f6b898ff0e451ef39c36))
|
|
374
|
-
* add process.spawn arg watcher ([7699b6f](https://github.com/anolilab/multi-semantic-release/commit/7699b6f4058934cbcf51b196d7f6aaa13372b35a))
|
|
375
|
-
* add sequential-init flag to avoid hypothetical concurrent initialization collisions ([348678e](https://github.com/anolilab/multi-semantic-release/commit/348678ef1997ec914c0471bd60e47b987244ba54))
|
|
376
|
-
* add some debug messages ([ec792e1](https://github.com/anolilab/multi-semantic-release/commit/ec792e15a4223880054186035571f8ca647add0e))
|
|
377
|
-
* added declarative config support ([c98ff10](https://github.com/anolilab/multi-semantic-release/commit/c98ff10a5f6993d9bdc46a51a5077525b93e127e))
|
|
378
|
-
* allow to run prepare steps sequentially ([299748a](https://github.com/anolilab/multi-semantic-release/commit/299748adc7d6ca4f25db70557d90a124dd7d9f47))
|
|
379
|
-
* apply --first-parent filter to commits ([14a896b](https://github.com/anolilab/multi-semantic-release/commit/14a896b5e501e6c900b8d89ee16ff17289c1d3a1))
|
|
380
|
-
* apply queuefy to plugin methods instead of execa ([9ae7d0d](https://github.com/anolilab/multi-semantic-release/commit/9ae7d0d8c1cc9300517733fe9e4edcb557069dff))
|
|
381
|
-
* bump semrel to v19 ([e6b8acb](https://github.com/anolilab/multi-semantic-release/commit/e6b8acb937e43ef28f311922e84434c75c8ad844))
|
|
382
|
-
* check that sequentialPrepare is not enabled on cyclic projects ([68c1198](https://github.com/anolilab/multi-semantic-release/commit/68c1198c395fb00c05fa97db66399f940575c9ee))
|
|
383
|
-
* **debug:** attach pkg prefixes to debug notes ([25e111f](https://github.com/anolilab/multi-semantic-release/commit/25e111f4b85e20c06d518abc1245918788f730a5))
|
|
384
|
-
* **debug:** log manifest deps changes ([88b4077](https://github.com/anolilab/multi-semantic-release/commit/88b40770d2cdaaf30912745f4fc4eee44357d9ea)), closes [#27](https://github.com/anolilab/multi-semantic-release/issues/27)
|
|
385
|
-
* **debug:** print passed cli flags ([d720cd7](https://github.com/anolilab/multi-semantic-release/commit/d720cd717b2b99fa32a2d6a438a5142ebc453c26))
|
|
386
|
-
* drop nodejs v8 support ([80f0a24](https://github.com/anolilab/multi-semantic-release/commit/80f0a242e195c6b4f7d6a68cdcbff9a25cd5577f))
|
|
387
|
-
* enable `sequentialPrepare` flag by default ([ad7e81f](https://github.com/anolilab/multi-semantic-release/commit/ad7e81f2e30b7673444dc31f39381b20afdf54bc))
|
|
388
|
-
* enable first-parent commits filtering by cli flag ([33306cc](https://github.com/anolilab/multi-semantic-release/commit/33306cce3e6e7d118a74690ecf3b33ac4154eac9))
|
|
389
|
-
* **engine:** up nodejs version ([10af385](https://github.com/anolilab/multi-semantic-release/commit/10af3850de9cc04a1f4a85c505752b659e3f47ff))
|
|
390
|
-
* handle .cjs configs ([38f657a](https://github.com/anolilab/multi-semantic-release/commit/38f657aea29097f55e5eafe0bd3f82790eded7f1))
|
|
391
|
-
* ignore packages to be released with workspaces and CLI ([#42](https://github.com/anolilab/multi-semantic-release/issues/42)) ([b98e181](https://github.com/anolilab/multi-semantic-release/commit/b98e181978294bbca7ae7f1a9ab7a9ecf0819847))
|
|
392
|
-
* Initial commit ([942ef94](https://github.com/anolilab/multi-semantic-release/commit/942ef94c47dba66fc732b605ad6fb999a178549c))
|
|
393
|
-
* introduce `deps.prefix` flag to inject carets ([c3f4529](https://github.com/anolilab/multi-semantic-release/commit/c3f452976ac6642f8a285f2e9faa6521a5bba919))
|
|
394
|
-
* introduce `ignorePrivate` flag ([e4891c9](https://github.com/anolilab/multi-semantic-release/commit/e4891c9f754afcc7fe87e84c390560a3fc5feef8)), closes [#66](https://github.com/anolilab/multi-semantic-release/issues/66)
|
|
395
|
-
* introduce `log-level` config option ([3fb6584](https://github.com/anolilab/multi-semantic-release/commit/3fb6584eeb19d4401dbdb85ae41d5a48d978d88c))
|
|
396
|
-
* introduce a silent mode([#88](https://github.com/anolilab/multi-semantic-release/issues/88)) ([47a27d8](https://github.com/anolilab/multi-semantic-release/commit/47a27d82f4639281fc7fbbd53c074ac40014c17f))
|
|
397
|
-
* let publish step run in parallel ([4d5c451](https://github.com/anolilab/multi-semantic-release/commit/4d5c451e9400437820002a54a297a3c031856997))
|
|
398
|
-
* log filtered commits in debug ([c64b8e1](https://github.com/anolilab/multi-semantic-release/commit/c64b8e1a4e97b7164b80f267d631dbccb459a64d))
|
|
399
|
-
* log manifest path ([db451e8](https://github.com/anolilab/multi-semantic-release/commit/db451e877e53e54487019978ee20bd03c64fa992))
|
|
400
|
-
* new updated version of the multi-semantic-release lib ([54be8b7](https://github.com/anolilab/multi-semantic-release/commit/54be8b7a0b65c48ca60cd3caef83225e61f705bb))
|
|
401
|
-
* prefer nested CLI flags ([1bf08cc](https://github.com/anolilab/multi-semantic-release/commit/1bf08ccbc722858febcaaaac2f8e0ba72638460c))
|
|
402
|
-
* provide pre-release flow ([6a9ce16](https://github.com/anolilab/multi-semantic-release/commit/6a9ce165c44aba3b8ef787cdfa575ad8b0dc3f05)), closes [#25](https://github.com/anolilab/multi-semantic-release/issues/25)
|
|
403
|
-
* replace synchronizer with @semrel-extra/topo ([ddd1032](https://github.com/anolilab/multi-semantic-release/commit/ddd10320487f5367aff15dd36c03c5bd60046b16))
|
|
404
|
-
* support `${version}+${name}` tag format ([c53fefb](https://github.com/anolilab/multi-semantic-release/commit/c53fefb6e7ae8b3d16dbc235320c4f99d6ed4afc)), closes [#71](https://github.com/anolilab/multi-semantic-release/issues/71)
|
|
405
|
-
* support `release.config.cjs` ([a6b9370](https://github.com/anolilab/multi-semantic-release/commit/a6b93706964fc5c60986392c21404ccdef4ad01b))
|
|
406
|
-
* support workspace.packages notation ([4a606b2](https://github.com/anolilab/multi-semantic-release/commit/4a606b2ceffcd70e18c015d51e62cda78f4cf58e))
|
|
407
|
-
* tech release ([828a82d](https://github.com/anolilab/multi-semantic-release/commit/828a82d88d0692aa3bc19dd8dae5674a46a719ce))
|
|
408
|
-
* update semver from v19 to v21 ([6e4c378](https://github.com/anolilab/multi-semantic-release/commit/6e4c378cd97edd08a6da7de8e5894493bc6f9b34))
|
|
409
|
-
* uphold the prev package.json indents ([ac5832f](https://github.com/anolilab/multi-semantic-release/commit/ac5832f20c8218c95fc46719cbd532732db53419))
|
|
410
|
-
|
|
411
|
-
|
|
412
|
-
### Bug Fixes
|
|
413
|
-
|
|
414
|
-
* add flag to enable sequentialPrepare mode ([70c2dc5](https://github.com/anolilab/multi-semantic-release/commit/70c2dc54b393a9f0b9d7fca82a1f83a22bd2ff54))
|
|
415
|
-
* add sync point for publish step ([adc823e](https://github.com/anolilab/multi-semantic-release/commit/adc823e1c4d2a952c58c8cf2f4fc00db7325ec53))
|
|
416
|
-
* allow any `todo` package to run the `generateNotes` queue ([26a87d7](https://github.com/anolilab/multi-semantic-release/commit/26a87d7f88c09417b47b55fe6e21edb6d13f5520)), closes [#9](https://github.com/anolilab/multi-semantic-release/issues/9)
|
|
417
|
-
* apply deps update before npm's plugin prepare ([77b6ee2](https://github.com/anolilab/multi-semantic-release/commit/77b6ee2e8d1a281d359520fe12e548ea79776b5e))
|
|
418
|
-
* avoid non-updated local dependencies bump ([#33](https://github.com/anolilab/multi-semantic-release/issues/33)) ([9faeef6](https://github.com/anolilab/multi-semantic-release/commit/9faeef65538535a5611730e016a3cbd3f454052b))
|
|
419
|
-
* beautify log labels ([78cbc8a](https://github.com/anolilab/multi-semantic-release/commit/78cbc8a773076c370f43894d35423a0a23b0cafb))
|
|
420
|
-
* bump-up of pre-version ([02ef270](https://github.com/anolilab/multi-semantic-release/commit/02ef270865c45e06bf8d2761359fd53b08cadb70))
|
|
421
|
-
* **cli:** fix inner spawnhook call ([70aa292](https://github.com/anolilab/multi-semantic-release/commit/70aa2927cd52a374f1626ab514a836bc9d98edaa))
|
|
422
|
-
* **cli:** restore watchspawn context ([56145aa](https://github.com/anolilab/multi-semantic-release/commit/56145aaae5b43065c9925ed661302216e649112f))
|
|
423
|
-
* **config:** fix `options` and `plugins` resolver ([56e974c](https://github.com/anolilab/multi-semantic-release/commit/56e974cec12f47d50f967d681506a84418b4e6bb))
|
|
424
|
-
* correct global config use ([8e5fb99](https://github.com/anolilab/multi-semantic-release/commit/8e5fb99efd54c9d6d03036c80a991f9e07d5550d))
|
|
425
|
-
* dont fetch tags if tags arg is empty array ([3a79558](https://github.com/anolilab/multi-semantic-release/commit/3a7955861d7782dd2257661d955a2adbf319627f))
|
|
426
|
-
* ensure msr cli flags take precedence over their semrel equivalents ([2be75fa](https://github.com/anolilab/multi-semantic-release/commit/2be75fa0e38169f2c8233bbef0891e2e00f9fdb0))
|
|
427
|
-
* filter only tags that are valid ([59b61ad](https://github.com/anolilab/multi-semantic-release/commit/59b61ad1a5823c24d7ff4237edf821fffb04abff))
|
|
428
|
-
* filter queued packages on generateNotes stage ([e0625ce](https://github.com/anolilab/multi-semantic-release/commit/e0625ced9c52d027246b58305d8206c949b4958c)), closes [#6](https://github.com/anolilab/multi-semantic-release/issues/6)
|
|
429
|
-
* fix cascade bumping when some dep belongs to several levels of the dep tree ([cf20dea](https://github.com/anolilab/multi-semantic-release/commit/cf20deac25982d98fe795c507253ef389c0ecb81))
|
|
430
|
-
* fix debug logging ([71527b2](https://github.com/anolilab/multi-semantic-release/commit/71527b2578a0a559ac1b175936d72e043258fe04))
|
|
431
|
-
* fix export point ([cf31425](https://github.com/anolilab/multi-semantic-release/commit/cf314259697d8c7492c3c63da380b4207aae665a))
|
|
432
|
-
* fix getNextVersion resolver ([7275ae7](https://github.com/anolilab/multi-semantic-release/commit/7275ae75799ad3cb3bca34c9cfa2978fed092794))
|
|
433
|
-
* fix globbing on Windows ([#57](https://github.com/anolilab/multi-semantic-release/issues/57)) ([1d71d21](https://github.com/anolilab/multi-semantic-release/commit/1d71d21bc0f95a921e390d59b80d0e2f4a3bd611))
|
|
434
|
-
* fix internal flag ref filterParent → firstParent ([8c7400f](https://github.com/anolilab/multi-semantic-release/commit/8c7400fe2f639f5d7abfc9219efb1b331c585fc8))
|
|
435
|
-
* fix logger path ([232d2dc](https://github.com/anolilab/multi-semantic-release/commit/232d2dc62ce440bf58ff7d05df5d27f72f24cfe6))
|
|
436
|
-
* fix nextType resolver ([606914b](https://github.com/anolilab/multi-semantic-release/commit/606914b43fc657340e243ca86430a7fff799210b))
|
|
437
|
-
* fix pkgOptions resolver ([2a2f0cf](https://github.com/anolilab/multi-semantic-release/commit/2a2f0cf43888f2d6acfc174f12993948947f0111))
|
|
438
|
-
* force a release ([1e3ece5](https://github.com/anolilab/multi-semantic-release/commit/1e3ece5e03a5e39a2e100edaf8bead26245d0a12))
|
|
439
|
-
* getVersionFromTag tests to fix release process ([e7f1646](https://github.com/anolilab/multi-semantic-release/commit/e7f16466bccc39311da8017dd5f0f7a8ae57686d))
|
|
440
|
-
* local dependencies correct bump from release to prerelease ([#34](https://github.com/anolilab/multi-semantic-release/issues/34)) ([6481a59](https://github.com/anolilab/multi-semantic-release/commit/6481a590e52224405793ea375fbd689120341a42))
|
|
441
|
-
* make logger to be singleton ([1790794](https://github.com/anolilab/multi-semantic-release/commit/179079420368d4a33505adca3079c06eddad928d))
|
|
442
|
-
* missing @ in tagFormat ([3faa0f1](https://github.com/anolilab/multi-semantic-release/commit/3faa0f1f7b856a44e98e170927748369dae7f647))
|
|
443
|
-
* more robust stream rescoping (to fix bug in npm module) ([34c7c62](https://github.com/anolilab/multi-semantic-release/commit/34c7c6291ffd2c52b36e3a40bfa49eec222c6cbb))
|
|
444
|
-
* override env.TRAVIS_PULL_REQUEST_BRANCH to fix PR checks on travis-ci ([e4b1929](https://github.com/anolilab/multi-semantic-release/commit/e4b192971f3cba0ad8e341cdc64116285a9de220)), closes [#11](https://github.com/anolilab/multi-semantic-release/issues/11)
|
|
445
|
-
* **package:** add missed sem-rel plugins ([f3c9318](https://github.com/anolilab/multi-semantic-release/commit/f3c9318aa76ac7ec10c4bb45782d8d775b1885d9))
|
|
446
|
-
* **package:** up deps, fix some vuls ([d8905b0](https://github.com/anolilab/multi-semantic-release/commit/d8905b09152972a30d906ac18fca686b65e61591))
|
|
447
|
-
* **package:** up deps, fix vulns ([5a4d91e](https://github.com/anolilab/multi-semantic-release/commit/5a4d91e879397acc0d8b08af6337817f66491739))
|
|
448
|
-
* **package:** update execa to be compatible with sem-rel 15.13.28 ([069bb4e](https://github.com/anolilab/multi-semantic-release/commit/069bb4e943223a712398b35f78abcfc2a43b6323)), closes [#7](https://github.com/anolilab/multi-semantic-release/issues/7)
|
|
449
|
-
* pass stderr and stdout into semantic's getConfig (bug in npm) ([cf596cb](https://github.com/anolilab/multi-semantic-release/commit/cf596cbe550cedb58cd17de1e2eab740060d6fb4))
|
|
450
|
-
* pin npm as peer dep ([67d8b80](https://github.com/anolilab/multi-semantic-release/commit/67d8b8095018b5d979795703f36d874a174baf07))
|
|
451
|
-
* pin npm version to v8.4.1 ([22c89d1](https://github.com/anolilab/multi-semantic-release/commit/22c89d164ca6e4fb8fe5e9b7e3164685d543d5bd)), closes [#60](https://github.com/anolilab/multi-semantic-release/issues/60)
|
|
452
|
-
* preserve trailing whitespace in manifest ([06426ec](https://github.com/anolilab/multi-semantic-release/commit/06426ec05f04cdcdf1561a4d1220890cf8ab1421))
|
|
453
|
-
* print queued pkg count instead of total ([d893a7f](https://github.com/anolilab/multi-semantic-release/commit/d893a7ff9f6f4d85377a1b61144842f3d07657a7))
|
|
454
|
-
* process optional deps during manifest update ([4b7066c](https://github.com/anolilab/multi-semantic-release/commit/4b7066c9b78169638baed7f7faefbbcd3705f5a4))
|
|
455
|
-
* provide partial release ([898998a](https://github.com/anolilab/multi-semantic-release/commit/898998a25f100e3450b14dd55ea6c468d3a02432))
|
|
456
|
-
* publish updated deps ([791f55a](https://github.com/anolilab/multi-semantic-release/commit/791f55a34574f5e6531ed69f182ffd54b68e2450)), closes [#1](https://github.com/anolilab/multi-semantic-release/issues/1)
|
|
457
|
-
* rm npm from peer deps ([307e505](https://github.com/anolilab/multi-semantic-release/commit/307e5057f12a9f616bdb432db2708e5193c34d4f))
|
|
458
|
-
* **sequential-prepare:** do not wait forever when a child package has no change ([713046a](https://github.com/anolilab/multi-semantic-release/commit/713046a251e9da435dad99ce7d5c7745aeff1871))
|
|
459
|
-
* specify used but forgotten dependencies ([73def7f](https://github.com/anolilab/multi-semantic-release/commit/73def7f4dcfccf12c9cf3a0d998889ea1cd53b10))
|
|
460
|
-
* sync pkg version after running the npm plugin ([1d24e45](https://github.com/anolilab/multi-semantic-release/commit/1d24e45c7ebba1b6b97ef259e98ea17fbb5d9d35))
|
|
461
|
-
* trigger next pkg `prepare` after the prev `publish` ([f74d185](https://github.com/anolilab/multi-semantic-release/commit/f74d185c268567585393b977817ab69f3225532a))
|
|
462
|
-
* try to prevent deps update rollback ([9108350](https://github.com/anolilab/multi-semantic-release/commit/910835046bc6dc5e63d637d83276d945df6f1943))
|
|
463
|
-
* up deps, fix some vuls ([2d5cf86](https://github.com/anolilab/multi-semantic-release/commit/2d5cf8660c0ebb2f97fa7476df1cd4fed63d07d1))
|
|
464
|
-
* update deps, fix some vuls ([f3cafc8](https://github.com/anolilab/multi-semantic-release/commit/f3cafc812ad58fb03c87065b477860ff5e58023c))
|
|
465
|
-
* update manifest version before npm plugin prepare step ([a1ae4c3](https://github.com/anolilab/multi-semantic-release/commit/a1ae4c3785498a3b22afcac278e431aaf99a1232)), closes [#58](https://github.com/anolilab/multi-semantic-release/issues/58)
|
|
466
|
-
* **update-deps:** properly resolve next pre-versions ([62b348e](https://github.com/anolilab/multi-semantic-release/commit/62b348eb87ccbccf21380ea0153036ef9792dcaa))
|
|
467
|
-
* wrong context.commits when have multiple releases commit ([f82f125](https://github.com/anolilab/multi-semantic-release/commit/f82f1258255b7016c45405cc91e3056a1701e92d))
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
### Performance Improvements
|
|
471
|
-
|
|
472
|
-
* deps revision ([4f62817](https://github.com/anolilab/multi-semantic-release/commit/4f628175669ef025f91b2c2cdacafd37252a7f87))
|
|
473
|
-
* log improvements ([c45dccc](https://github.com/anolilab/multi-semantic-release/commit/c45dcccd3e81b9ce0489a920ce16f9616b4ebda0))
|
|
474
|
-
* log multi-sem-rel flags ([75389e0](https://github.com/anolilab/multi-semantic-release/commit/75389e06b97f39bfd3e5a797677ee835bc569557))
|
|
475
|
-
* log yarn paths ([3896d5c](https://github.com/anolilab/multi-semantic-release/commit/3896d5ca4e97870e37d2f254e3586cb5b9165b84))
|
|
476
|
-
* **package:** up deps ([506a0e8](https://github.com/anolilab/multi-semantic-release/commit/506a0e80d9152427eb8dca5c9032754fce4e8a22))
|
|
477
|
-
* **package:** up deps ([6b903a7](https://github.com/anolilab/multi-semantic-release/commit/6b903a7e318326c53cbd9cfb201546d84e650c32))
|
|
478
|
-
* **package:** up deps & tech release ([bf00b41](https://github.com/anolilab/multi-semantic-release/commit/bf00b41662805ba87d67865830c7b0d8d88e20b9))
|
|
479
|
-
* refactor nextPreVersion to reduce cognitive complexity ([#35](https://github.com/anolilab/multi-semantic-release/issues/35)) ([601bbd3](https://github.com/anolilab/multi-semantic-release/commit/601bbd35d969167c5b54cb0e8bad2be0a2165705))
|
|
480
|
-
* straighten plugins execution pipeline ([e57fe2f](https://github.com/anolilab/multi-semantic-release/commit/e57fe2fc3274d66520fbeacdac488b1a29430835)), closes [#4](https://github.com/anolilab/multi-semantic-release/issues/4)
|
|
481
|
-
* up deps ([f9e0c8a](https://github.com/anolilab/multi-semantic-release/commit/f9e0c8ac19aa986d6f4ce808b0520c33699564e0))
|
|
482
|
-
* up deps, minor code improvements ([a7aa625](https://github.com/anolilab/multi-semantic-release/commit/a7aa625f6325c5fd8cb1a0ca8e1029b5ea082950))
|
|
483
|
-
* various synchronizer optimizations ([87a7602](https://github.com/anolilab/multi-semantic-release/commit/87a760293fd97ab3aeaf361a256659897c96af9c))
|
|
484
|
-
|
|
485
|
-
|
|
486
417
|
### Code Refactoring
|
|
487
418
|
|
|
488
419
|
* move to ESM ([99fffa9](https://github.com/anolilab/multi-semantic-release/commit/99fffa9c82b21a1578d376ac206e46d32e6b7ae3))
|
package/README.md
CHANGED
|
@@ -44,6 +44,7 @@ written into `package.json` at release time. This means there's no need to hard-
|
|
|
44
44
|
- Supports npm (v7+), yarn, pnpm, bolt-based monorepos
|
|
45
45
|
- Optional packages ignoring
|
|
46
46
|
- Linux/MacOs/Windows support
|
|
47
|
+
- **Automatic catalog change detection** - Automatically triggers releases when pnpm or Yarn catalog versions change
|
|
47
48
|
|
|
48
49
|
## Install
|
|
49
50
|
|
|
@@ -108,6 +109,35 @@ packages:
|
|
|
108
109
|
- "!packages/c/**"
|
|
109
110
|
```
|
|
110
111
|
|
|
112
|
+
#### Catalog Change Detection (pnpm)
|
|
113
|
+
|
|
114
|
+
Multi-semantic-release automatically detects changes in pnpm catalogs defined in `pnpm-workspace.yaml` and triggers releases for packages that use those catalogs. When a catalog version changes, the release type (major/minor/patch) is determined by comparing the old and new versions using semantic versioning.
|
|
115
|
+
|
|
116
|
+
Example `pnpm-workspace.yaml` with catalogs:
|
|
117
|
+
|
|
118
|
+
```yaml
|
|
119
|
+
packages:
|
|
120
|
+
- "packages/*"
|
|
121
|
+
|
|
122
|
+
catalogs:
|
|
123
|
+
cli:
|
|
124
|
+
semantic-release: ^25.0.0
|
|
125
|
+
"@semantic-release/changelog": ^6.0.0
|
|
126
|
+
dev:
|
|
127
|
+
typescript: ^5.1.0
|
|
128
|
+
eslint: ^9.0.0
|
|
129
|
+
prod:
|
|
130
|
+
lodash-es: ^4.17.1
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
When you update a catalog version (e.g., `lodash-es: ^4.17.0` → `^4.17.1`), any package using `catalog:prod` for `lodash-es` will automatically get a patch release. The release type is determined by the version change:
|
|
134
|
+
|
|
135
|
+
- **Major change** (e.g., `^1.0.0` → `^2.0.0`) triggers a major release
|
|
136
|
+
- **Minor change** (e.g., `^1.0.0` → `^1.1.0`) triggers a minor release
|
|
137
|
+
- **Patch change** (e.g., `^1.0.0` → `^1.0.1`) triggers a patch release
|
|
138
|
+
|
|
139
|
+
Catalog changes are combined with commit-based releases - if both trigger a release, the highest severity is used.
|
|
140
|
+
|
|
111
141
|
### bolt
|
|
112
142
|
|
|
113
143
|
Make sure to have a `bolt.workspaces` attribute inside your `package.json` project file.
|
package/dist/bin/cli.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
var
|
|
2
|
+
var l=Object.defineProperty;var n=(o,e)=>l(o,"name",{value:e,configurable:!0});import{createRequire as d}from"node:module";import g from"yargs";import{hideBin as b}from"yargs/helpers";import{q as f,u as s}from"../packem_shared/multi-semantic-release-BA6wsQZa.js";const _=d(import.meta.url),u=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,{exit:t}=u;var m=Object.defineProperty,y=n((o,e)=>m(o,"name",{value:e,configurable:!0}),"n");const a={array:!0,coerce:y(o=>{if(o.length===1&&o[0]?.trim()==="false")return[];const e=[];for(const i of o)e.push(...i.split(",").map(r=>r.trim()));return e},"coerce"),type:"array"};await(async()=>{const o=g(b(process.argv)).usage("$0 [args]").scriptName("multi-semantic-release").option("d",{alias:"dry-run",default:!1,describe:"Skip publishing",group:"Options",type:"boolean"}).option("h",{alias:"help",group:"Options"}).option("debug",{describe:"Output debugging information.",type:"boolean"}).option("silent",{describe:"Do not print configuration information.",type:"boolean"}).option("sequential-init",{describe:"Avoid hypothetical concurrent initialization collisions.",type:"boolean"}).option("sequential-prepare",{describe:"Avoid hypothetical concurrent preparation collisions. Do not use if your project have cyclic dependencies.",type:"boolean"}).option("first-parent",{describe:"Apply commit filtering to current branch only.",type:"boolean"}).option("deps.bump",{describe:"Define deps version updating rule. Allowed: override, satisfy, inherit.",type:"string"}).option("deps.release",{describe:"Define release type for dependent package if any of its deps changes. Supported values: patch, minor, major, inherit.",type:"string"}).option("deps.prefix",{describe:"Optional prefix to be attached to the next dep version if '--deps.bump' set to 'override'. Supported values: '^' | '~' | '' (empty string as default).",type:"string"}).option("b",{alias:"branches",describe:"Git branches to release from",...a,group:"Options"}).option("ci",{describe:"Toggle CI verifications",group:"Options",type:"boolean"}).option("ignore-packages",{...a,describe:"Packages list to be ignored on bumping process"}).option("ignore-private",{describe:"Exclude private packages. Enabled by default, pass 'no-ignore-private' to disable.",type:"boolean"}).option("tag-format",{describe:'Format to use for creating tag names. Should include "name" and "version" vars. Default: "${name}@${version}" generates "package-name@1.0.0"',type:"string"}).strict(!1).exitProcess(!1);try{const e=o.parse(process.argv.slice(2)),{help:i,version:r,...p}=e;(i||r)&&t(0),f(null,{},{},p).then(()=>{t(0)},c=>{s.error("[multi-semantic-release]:",c),t(1)})}catch(e){s.error("[multi-semantic-release]:",e),t(1)}})();
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Writable } from 'node:stream';
|
|
2
|
+
import { ReleaseType } from 'semver';
|
|
2
3
|
|
|
3
4
|
interface PackageManifest {
|
|
4
5
|
[key: string]: unknown;
|
|
@@ -24,7 +25,7 @@ interface Package {
|
|
|
24
25
|
_depsUpdated?: boolean;
|
|
25
26
|
_lastRelease?: Release;
|
|
26
27
|
_nextRelease?: Release;
|
|
27
|
-
_nextType?:
|
|
28
|
+
_nextType?: ReleaseType | null;
|
|
28
29
|
_prepared?: boolean;
|
|
29
30
|
_preRelease?: string | null;
|
|
30
31
|
_published?: boolean;
|
|
@@ -59,11 +60,12 @@ interface ReleaseResult {
|
|
|
59
60
|
releases?: Release[];
|
|
60
61
|
}
|
|
61
62
|
interface PluginFunctions {
|
|
62
|
-
analyzeCommits?: (
|
|
63
|
-
generateNotes?: (
|
|
64
|
-
prepare?: (
|
|
65
|
-
publish?: (
|
|
66
|
-
verifyConditions?: (
|
|
63
|
+
analyzeCommits?: (context: SemanticReleaseContext) => Promise<string | null | undefined>;
|
|
64
|
+
generateNotes?: (context: SemanticReleaseContext) => Promise<string>;
|
|
65
|
+
prepare?: (context: SemanticReleaseContext) => Promise<void>;
|
|
66
|
+
publish?: (context: SemanticReleaseContext) => Promise<unknown>;
|
|
67
|
+
verifyConditions?: (context: SemanticReleaseContext) => Promise<void>;
|
|
68
|
+
verifyRelease?: (context: SemanticReleaseContext) => Promise<void>;
|
|
67
69
|
}
|
|
68
70
|
interface SemanticReleaseContext {
|
|
69
71
|
[key: string]: unknown;
|
|
@@ -117,6 +119,6 @@ declare const multiSemanticRelease: (paths?: string[] | null, inputOptions?: Inp
|
|
|
117
119
|
env?: NodeJS.ProcessEnv;
|
|
118
120
|
stderr?: NodeJS.WriteStream;
|
|
119
121
|
stdout?: NodeJS.WriteStream;
|
|
120
|
-
},
|
|
122
|
+
}, flags?: Flags) => Promise<Package[]>;
|
|
121
123
|
|
|
122
124
|
export { multiSemanticRelease as default };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{createRequire as e}from"node:module";import"@semrel-extra/topo";import"lodash-es";import"semantic-release";import"semantic-release/package.json"with{type:"json"};import{
|
|
1
|
+
import{createRequire as e}from"node:module";import"@semrel-extra/topo";import"lodash-es";import"semantic-release";import"semantic-release/package.json"with{type:"json"};import{q as _}from"./packem_shared/multi-semantic-release-BA6wsQZa.js";const t=e(import.meta.url),i=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process;export{_ as default};
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
var $e=Object.defineProperty;var y=(e,t)=>$e(e,"name",{value:t,configurable:!0});import{createRequire as je}from"node:module";import{topo as Te}from"@semrel-extra/topo";import{transform as De,isEqual as Ee,isObject as Z,pickBy as ee,castArray as L,sortBy as Ce,template as Se}from"lodash-es";import Me from"semantic-release";import Ne from"semantic-release/package.json"with{type:"json"};import{execa as oe}from"execa";import{getTagHead as Ae}from"semantic-release/lib/git.js";import te from"git-log-parser";import F from"debug";import ie from"signale";import{WritableStreamBuffer as le}from"stream-buffers";import $,{gt as He,prerelease as Le,rcompare as qe}from"semver";import Be from"detect-indent";import{detectNewline as ze}from"detect-newline";import{isAccessibleSync as pe,readJson as We}from"@visulima/fs";import{readYamlSync as Ie}from"@visulima/fs/yaml";import{resolve as de}from"@visulima/path";import{cosmiconfig as ue}from"cosmiconfig";import Ue from"resolve-from";import Ge from"semantic-release/lib/get-config.js";const _e=je(import.meta.url),A=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,B=y(e=>{if(typeof A<"u"&&A.versions&&A.versions.node){const[t,r]=A.versions.node.split(".").map(Number);if(t>22||t===22&&r>=3||t===20&&r>=16)return A.getBuiltinModule(e)}return _e(e)},"__cjs_getBuiltinModule"),{isAbsolute:Y,normalize:ke,join:Oe,parse:Re,relative:xe,dirname:Pe}=B("node:path"),{existsSync:Q,lstatSync:X,readFileSync:Ve,writeFileSync:Fe}=B("node:fs"),{Writable:ce}=B("node:stream"),{createRequire:Je}=B("node:module");var Ke="3.0.0-alpha.3";const Ye={version:Ke};var Qe=Object.defineProperty,Xe=y((e,t)=>Qe(e,"name",{value:t,configurable:!0}),"g$3");const{Signale:Ze}=ie,U=["error","warn","info","debug","trace"],W=Xe((e,t)=>{const r=U.indexOf(e),a=U.indexOf(t);return r!==-1&&a!==-1&&r<=a},"assertLevel"),re={complete:"info",failure:"error",log:"info",success:"info"},j={config:{_level:"info",_signale:{},_stderr:process.stderr,_stdout:process.stdout,set level(e){e&&(W(e,"debug")&&F.enable("msr:"),W(e,"trace")&&F.enable("semantic-release:"),this._level=e)},get level(){return this._level},set stdio([e,t]){this._stdout=t,this._stderr=e,this._signale=new Ze({config:{displayLabel:!1,displayTimestamp:!0},stream:t,types:{complete:{badge:"🎉",color:"green",label:"",stream:[t]},error:{badge:"✖",color:"red",label:"",stream:[e]},log:{badge:"•",color:"magenta",label:"",stream:[t]},success:{badge:"✔",color:"green",label:"",stream:[t]}}})},get stdio(){return[this._stderr,this._stdout]}},prefix:"msr:",withScope(e){return{...this,debug:F(e||this.prefix),prefix:e}},...[...U,...Object.keys(re)].reduce((e,t)=>(e[t]=function(...r){W(re[t]||t,this.config.level)&&(this.config._signale[t]||console[t]||(()=>{}))(this.prefix,...r)},e),{}),debug:F("msr:")};var et=Object.defineProperty,tt=y((e,t)=>et(e,"name",{value:t,configurable:!0}),"t$3");class Sr extends Error{static{y(this,"ValueError")}static{tt(this,"ValueError")}constructor(t){super(t),this.name="ValueError"}}var rt=Object.defineProperty,T=y((e,t)=>rt(e,"name",{value:t,configurable:!0}),"t$2");const nt=T(e=>Y(e)&&Q(e)&&X(e).isDirectory(),"isDirectory"),at=T(e=>e instanceof ce||e instanceof le,"isStream"),st=T(e=>Y(e),"isAbsolute"),ot=T(e=>typeof e=="string"&&e.length>0,"isPath"),it=T(e=>e!==null&&typeof e=="object"&&!Array.isArray(e),"isObjectLike"),ct=T(e=>e===void 0?!0:typeof e=="string"&&/^[a-f0-9]{40}$/i.test(e),"isAlphanumeric40"),lt=T(e=>typeof e=="string"&&e.length>0,"isStringPlus"),pt=T(e=>typeof e=="string"&&/^[a-z0-9]+(?:-[a-z0-9]+)*$/.test(e),"isKebab"),dt=T(e=>typeof e=="string"&&e===e.toLowerCase(),"isLower"),ut=T(e=>Number.isInteger(e),"isInteger"),k=T((e,t)=>{const[r,a]=t.split(":").map(i=>i.trim()),s=a?.endsWith("?"),o=s&&a?a.slice(0,-1):a;if(!(s&&e==null)){if(o?.endsWith("[]")){const i=o.slice(0,-2);if(!Array.isArray(e))throw new TypeError(`${r}: Must be an array`);for(const p of e)k(p,`${r}[item]: ${i}`);return}switch(o){case"absolute":{if(!(typeof e=="string"&&st(e)))throw new TypeError(`${r}: Must be an absolute path`);break}case"alphanumeric{40}":{if(!ct(e))throw new TypeError(`${r}: Must be alphanumeric string with size 40 or empty`);break}case"directory":{if(!(typeof e=="string"&&nt(e)))throw new TypeError(`${r}: Must be directory that exists in the filesystem`);break}case"integer":{if(!(typeof e=="number"&&ut(e)))throw new TypeError(`${r}: Must be an integer`);break}case"kebab":{if(!(typeof e=="string"&&pt(e)))throw new TypeError(`${r}: Must be a kebab-case string`);break}case"lower":{if(!(typeof e=="string"&&dt(e)))throw new TypeError(`${r}: Must be a lowercase string`);break}case"objectlike":{if(!it(e))throw new TypeError(`${r}: Must be an object`);break}case"path":{if(!(typeof e=="string"&&ot(e)))throw new TypeError(`${r}: Must be valid path`);break}case"stream":{if(!at(e))throw new TypeError(`${r}: Must be an instance of stream.Writable or WritableStreamBuffer`);break}case"string":{if(typeof e!="string")throw new TypeError(`${r}: Must be a string`);break}case"string+":{if(!lt(e))throw new TypeError(`${r}: Must be a non-empty string`);break}default:if(e==null)throw new TypeError(`${r}: Must not be null or undefined`)}}},"validate");var gt=Object.defineProperty,ft=y((e,t)=>gt(e,"name",{value:t,configurable:!0}),"r$3");const S=ft((e,t=process.cwd())=>{k(e,"path: path"),k(t,"cwd: absolute");const r=ke(Y(e)?e:Oe(t,e)),{root:a}=Re(r);let s=r.length;for(;s>a.length&&(r[s-1]==="/"||r[s-1]==="\\");)s-=1;return s===r.length?r:r.slice(0,s)},"cleanPath");var mt=Object.defineProperty,M=y((e,t)=>mt(e,"name",{value:t,configurable:!0}),"n");const ht=M(e=>e.readable?new Promise((t,r)=>{if(!e.readable){t([]);return}let a=[];const s=M(()=>{a=[],e.removeListener("data",o),e.removeListener("end",i),e.removeListener("error",p),e.removeListener("close",l)},"cleanup"),o=M(d=>{a.push(d)},"onData"),i=M(()=>{t(a),s()},"onEnd"),p=M(d=>{r(d),s()},"onError"),l=M(()=>{t(a),s()},"onClose");e.on("data",o),e.on("end",i),e.on("error",p),e.on("close",l)}):Promise.resolve([]),"streamToArray");var bt=Object.defineProperty,yt=y((e,t)=>bt(e,"name",{value:t,configurable:!0}),"f");const{debug:ne}=j.withScope("msr:commitsFilter"),I=yt(async(e,t,r,a,s)=>{if(k(e,"cwd: directory"),e=S(e),k(t,"dir: path"),t=S(t,e),!Q(t)||!X(t).isDirectory())throw new TypeError("dir: Must be a path to an existing directory");if(k(r,"lastRelease: alphanumeric{40}?"),k(a,"nextRelease: alphanumeric{40}?"),t.indexOf(e)!==0)throw new TypeError("dir: Must be inside cwd");if(t===e)throw new TypeError("dir: Must not be equal to cwd");const o=await oe("git",["rev-parse","--show-toplevel"],{cwd:e}),i=S(o.stdout);Object.assign(te.fields,{committerDate:{key:"ci",type:Date},gitTags:"d",hash:"H",message:"B"});const p=xe(i,t),l=s?["--first-parent",s]:[],d=(r?`${r}..`:"")+(a||"HEAD"),c=[...l,d,"--",p],f=te.parse({_:c},{cwd:i,env:process.env}),g=await ht(f);return g.forEach(n=>{n.message=n.message.trim(),n.gitTags=n.gitTags.trim()}),ne("git log filter query: %o",c),ne("filtered commits: %O",g),g},"getCommitsFiltered");var vt=Object.defineProperty,G=y((e,t)=>vt(e,"name",{value:t,configurable:!0}),"a$2");const wt=G(e=>{if(!Q(e))throw new ReferenceError(`package.json file not found: "${e}"`);let t;try{t=X(e)}catch{throw new ReferenceError(`package.json cannot be read: "${e}"`)}if(!t.isFile())throw new ReferenceError(`package.json is not a file: "${e}"`);try{return Ve(e,"utf8")}catch{throw new ReferenceError(`package.json cannot be read: "${e}"`)}},"readManifest"),ge=G(e=>{const t=wt(e);let r;try{r=JSON.parse(t)}catch{throw new SyntaxError(`package.json could not be parsed: "${e}"`)}if(typeof r!="object"||r===null)throw new SyntaxError(`package.json was not an object: "${e}"`);const a=r;if(typeof a.name!="string"||a.name.length===0)throw new SyntaxError(`Package name must be non-empty string: "${e}"`);const s=G(o=>{if(Object.prototype.hasOwnProperty.call(a,o)&&typeof a[o]!="object")throw new SyntaxError(`Package ${o} must be object: "${e}"`)},"checkDeps");return s("dependencies"),s("devDependencies"),s("peerDependencies"),s("optionalDependencies"),Object.defineProperty(a,"__contents__",{enumerable:!1,value:t}),a},"getManifest");var $t=Object.defineProperty,fe=y((e,t)=>$t(e,"name",{value:t,configurable:!0}),"r$2");const jt=fe((e,t,r)=>e&&t&&r?e(t,r)?t:r:t||r,"selectVersionBy"),_t=jt.bind(null,He),kt=fe((e,t)=>e.filter(r=>t||!Le(r)).toSorted(qe)[0],"getLatestVersion");var Ot=Object.defineProperty,Rt=y((e,t)=>Ot(e,"name",{value:t,configurable:!0}),"e$1");const xt=Rt(e=>({indent:Be(e).indent,trailingWhitespace:ze(e)||""}),"recognizeFormat");var Pt=Object.defineProperty,R=y((e,t)=>Pt(e,"name",{value:t,configurable:!0}),"o$2");const{debug:J}=j.withScope("msr:updateDeps"),Tt=R((e,t,r)=>{const a=e?$.inc(e,"prerelease",r):void 0,s=$.inc(t,"prerelease",r)||void 0;return a?_t(s,a):s},"nextPreHighestVersion"),Dt=R((e,t,r,a)=>{if(!$.prerelease(t)){if(!$.parse(t))return;const o=$.inc(t,r||"patch");return o?`${o}-${a}.1`:void 0}const s=kt(e,!0);return Tt(s,t,a)},"nextPreVersionCases"),K=R((e,t,r,a,s)=>{const o=["patch","minor","major"],{localDeps:i,manifest:p={}}=e,l=e._lastRelease?.version,{dependencies:d={},devDependencies:c={},optionalDependencies:f={},peerDependencies:g={}}=p,n=[d,c,g,f],v=R((m,h,w)=>{const O=m[h];if(!w||!O)return!1;const V=At(O,w,t,s);return O!==V?(m[h]=V,!0):!1},"bumpDependency");let b;const u=i.filter(m=>!a.includes(m)).reduce((m,h)=>{const w=he(h,t,r,[...a,e],s);let O;if(w?O=(h._preRelease?Nt(h):St(h))||void 0:O=h._lastRelease?.version,!w&&h.localDeps&&h.localDeps.length>0){const N=K(h,t,r,[...a,e],s);if(N){const z=o.indexOf(N),we=b?o.indexOf(b):-1;z>we&&(b=N)}}if(!n.reduce((N,z)=>v(z,h.name,O)||N,!l)||!w)return m;if(!m)return w;const V=o.indexOf(w),ve=o.indexOf(m);return V>ve?w:m},void 0);return!u&&b?b:u},"getDependentRelease"),Et=R((e,t)=>{if(e.startsWith("workspace:")){const r=/^workspace:(([\^~*])?.*)$/u.exec(e);if(!r)return e;const[,a,s]=r;return s===a?s==="*"?t:s+t:a}return e},"substituteWorkspaceVersion"),me=R((e,t)=>De(e,(r,a,s)=>{Ee(a,t[s])||(r[s]=Z(a)&&Z(t[s])?JSON.stringify(me(a,t[s])):`${t[s]} → ${a}`)})||{},"difference"),Ct=R((e,t)=>{const r=`[${e.name}]`,a=ge(t),s=["dependencies","devDependencies","peerDependencies","optionalDependencies"].reduce((o,i)=>{const p=me(e[i],a[i]);return Object.keys(p).length>0&&(o[i]=p),o},{});return J(r,"package.json path=",t),Object.keys(s).length>0?(J(r,"changes=",s),!0):(J(r,"no deps changes"),!1)},"auditManifestChanges"),St=R(e=>{const t=e._lastRelease?.version;return t&&typeof e._nextType=="string"?$.inc(t,e._nextType):t||"1.0.0"},"getNextVersion"),Mt=R(e=>{const t=$.parse(e);if(!t)return null;const r=t.prerelease[0];return r==null?null:String(r)},"getPreReleaseTag"),Nt=R(e=>{const t=e._lastRelease?.version,r=Mt(t||"");return r!==null&&r!==e._preRelease||!t?`1.0.0-${e._preRelease}.1`:Dt([],t||"",e._nextType||"patch",e._preRelease||"")},"getNextPreVersion"),he=R((e,t="override",r="patch",a=[],s="")=>{const o=K(e,t,r,a,s);if(e._nextType)return e._nextType;if(!o&&e.localDeps&&e.localDeps.length>0&&e.manifest){const i=e.manifest,{dependencies:p={},devDependencies:l={},optionalDependencies:d={},peerDependencies:c={}}=i,f={...p,...l,...d,...c};if(e.localDeps.some(g=>!g.name||f[g.name]===void 0?!1:g._nextType?!0:g.localDeps&&g.localDeps.length>0?K(g,t,r,[...a,e],s)!==void 0:!1)&&r!=="inherit")return e._nextType=r,e._nextType}if(o)return e._nextType=r==="inherit"?o:r,e._nextType},"resolveReleaseType"),At=R((e,t,r="override",a="")=>{if(e=Et(e,t),r==="ignore"||e===t||(r==="satisfy"||r==="inherit")&&$.satisfies(t,e))return e;if(r==="inherit"){const s=t.split(".");return e.split(".").map((o,i)=>s[i]?o.replace(/\d+/u,s[i]):o).join(".")}return a+t},"resolveNextVersion"),Vt=R(e=>{const{manifest:t,path:r}=e,{indent:a,trailingWhitespace:s}=xt(t.__contents__);t.version=e?._nextRelease?.version||t.version,e.localDeps.forEach(o=>{const i=o._nextRelease||o._lastRelease;if(!i||!i.version)throw new Error(`Cannot release ${e.name} because dependency ${o.name} has not been released yet`)}),Ct(t,r)&&Fe(r,JSON.stringify(t,null,a)+s)},"updateManifestDeps");var Ft=Object.defineProperty,D=y((e,t)=>Ft(e,"name",{value:t,configurable:!0}),"c$2");const{debug:C}=j.withScope("msr:catalogChanges"),Ht=D(e=>{const t=de(e,"pnpm-workspace.yaml");if(!pe(t))return null;try{return Ie(t).catalogs||null}catch(r){return C("Failed to parse pnpm-workspace.yaml:",r),null}},"parsePnpmCatalog"),Lt=D(async e=>{const t=de(e,"package.json");if(!pe(t))return null;try{return(await We(t)).catalogs||null}catch(r){return C("Failed to parse package.json for yarn catalog:",r),null}},"parseYarnCatalog"),qt=D(async e=>Ht(e)||Lt(e),"getCatalogDefinitions"),Bt=D(async(e,t)=>{const{execa:r}=await import("execa");try{try{const a=await r("git",["show",`${t}:pnpm-workspace.yaml`],{cwd:e,reject:!1});if(a.exitCode===0&&a.stdout){const{parse:s}=await import("yaml"),o=s(a.stdout);if(o?.catalogs)return o.catalogs}}catch{}try{const a=await r("git",["show",`${t}:package.json`],{cwd:e,reject:!1});if(a.exitCode===0&&a.stdout)return JSON.parse(a.stdout).catalogs||null}catch{}}catch(a){C(`Failed to get catalog definitions at commit ${t}:`,a)}return null},"getCatalogDefinitionsAtCommit"),zt=D((e,t)=>{const r=D(o=>o.replace(/^[\^~]/,"").trim(),"extractVersion"),a=r(e),s=r(t);return!$.valid(a)||!$.valid(s)||$.eq(a,s)?null:$.major(a)!==$.major(s)?"major":$.minor(a)!==$.minor(s)?"minor":$.patch(a)!==$.patch(s)?"patch":null},"getReleaseTypeFromVersionChange"),Wt=D(async(e,t,r)=>{e=S(e);const a=await qt(e);if(!a)return C("No catalog definitions found"),{};if(!t)return C("No last release found, skipping catalog change detection"),{};const s=await Bt(e,t);if(!s)return C("No old catalog definitions found at last release"),{};const o={};for(const[i,p]of Object.entries(a)){const l=s[i];if(l)for(const[d,c]of Object.entries(p)){const f=l[d];if(f&&f!==c){const g=zt(f,c);g&&(o[i]||(o[i]={}),o[i][d]={newVersion:c,oldVersion:f,releaseType:g},C(`Catalog change detected: ${i}:${d} ${f} -> ${c} (${g})`))}}}return o},"detectCatalogChanges"),It=D((e,t,r)=>{const a=`catalog:${t}`,s=[];for(const o of e){const{manifest:i}=o,p=[i.dependencies,i.devDependencies,i.peerDependencies,i.optionalDependencies].filter(Boolean);for(const l of p)for(const[d,c]of Object.entries(l))if(c===a){if(r&&d!==r)continue;s.push(o);break}}return s},"findPackagesUsingCatalog"),Jt=D((e,t)=>{const r=new Map;for(const[a,s]of Object.entries(t))for(const[o,i]of Object.entries(s)){const p=It(e,a,o);for(const l of p){const d=r.get(l.name),c=i.releaseType;if(c)if(d){const f={major:3,minor:2,patch:1},g=f[d];f[c]>g&&r.set(l.name,c)}else r.set(l.name,c)}}return r},"getAffectedPackagesFromCatalogChanges");var Ut=Object.defineProperty,E=y((e,t)=>Ut(e,"name",{value:t,configurable:!0}),"p$2");const{debug:_}=j.withScope("msr:inlinePlugin"),Gt=E((e,t,r)=>{const{cwd:a}=t;let s=null,o=!1;return E(i=>{const{dir:p,name:l,plugins:d}=i,c=`[${l}]`,f={analyzeCommits:E(async(g,n)=>{if(!n.branch)throw new Error("context.branch is required");n.options||(n.options={}),Object.assign(n.options,i.options),Object.assign(n.options,n.options._pkgOptions||{}),i._preRelease=n.branch.prerelease||null,i._branch=n.branch.name,n.branch.channel&&_(c,`Branch channel: ${n.branch.channel}`),n.cwd=p;const v=r.firstParent?n.branch.name:void 0;if(n.commits=await I(a,p,n.lastRelease?n.lastRelease.gitHead:void 0,n.nextRelease?n.nextRelease.gitHead:void 0,v),i._lastRelease=n.lastRelease,!o&&n.lastRelease?.gitHead)try{const m=await Wt(a,n.lastRelease.gitHead,n.nextRelease?.gitHead);Object.keys(m).length>0?(s=Jt(e,m),o=!0,_(c,`Detected catalog changes affecting ${s.size} packages`)):o=!0}catch(m){_(c,"Failed to detect catalog changes:",m),o=!0}let b;s&&s.has(i.name)&&(b=s.get(i.name),_(c,`Catalog change triggers ${b} release`));let u;if(d.analyzeCommits&&(u=await d.analyzeCommits(n)||void 0),!u&&b)u=b;else if(u&&b){const m={major:3,minor:2,patch:1},h=m[u]||0;(m[b]||0)>h&&(u=b)}return i._nextType=u,i._analyzed=!0,r.deps&&(i._nextType=he(i,r.deps.bump,r.deps.release,[],r.deps.prefix)),_(c,"commits analyzed"),_(c,`release type: ${i._nextType}`),i._nextType},"analyzeCommits"),generateNotes:E(async(g,n)=>{n.options||(n.options={}),Object.assign(n.options,i.options),Object.assign(n.options,n.options._pkgOptions||{}),n.cwd=p,i._nextRelease=n.nextRelease,n.nextRelease?.channel&&_(c,`Release channel: ${n.nextRelease.channel}`);const v=[];if(n.lastRelease&&n.lastRelease.gitTag&&(!n.lastRelease.gitHead||n.lastRelease.gitHead===n.lastRelease.gitTag)){const h=await oe("git",["rev-parse","--show-toplevel"],{cwd:n.cwd}),w=S(h.stdout);n.lastRelease.gitHead=await Ae(n.lastRelease.gitTag,{cwd:w,env:n.env})}if(!n.branch)throw new Error("context.branch is required");const b=r.firstParent?n.branch.name:void 0;n.commits=await I(a,p,n.lastRelease?n.lastRelease.gitHead:void 0,n.nextRelease?n.nextRelease.gitHead:void 0,b);let u;d.generateNotes&&(u=await d.generateNotes(n)),u&&v.push(u.replace(/^(#+) (\[?\d+\.\d+\.\d+\]?)/u,`$1 ${l} $2`));const m=i.localDeps.filter(h=>h._nextRelease);if(m.length>0){v.push("### Dependencies");const h=m.map(w=>{const O=w._nextRelease;return O?`* **${w.name}:** upgraded to ${O.version}`:""}).filter(Boolean);v.push(h.join(`
|
|
2
|
+
`))}return _(c,"notes generated"),v.join(`
|
|
3
|
+
|
|
4
|
+
`)},"generateNotes"),prepare:E(async(g,n)=>{if(n.options||(n.options={}),Object.assign(n.options,i.options),Object.assign(n.options,n.options._pkgOptions||{}),r.dryRun){_(c,"skipping prepare in dry-run mode");return}if(Vt(i),i._depsUpdated=!0,n.cwd=p,!n.branch)throw new Error("context.branch is required");const v=r.firstParent?n.branch.name:void 0;n.commits=await I(a,p,n.lastRelease?n.lastRelease.gitHead:void 0,n.nextRelease?n.nextRelease.gitHead:void 0,v),d.prepare&&await d.prepare(n),i._prepared=!0,_(c,"prepared")},"prepare"),publish:E(async(g,n)=>{if(n.options||(n.options={}),Object.assign(n.options,i.options),Object.assign(n.options,n.options._pkgOptions||{}),r.dryRun)return _(c,"skipping publish in dry-run mode"),[];n.cwd=p;let v=[];if(d.publish){const b=await d.publish?.(n);b!==void 0&&(v=Array.isArray(b)?b:[b])}return i._published=!0,_(c,"published"),v.length>0?v[0]:{}},"publish"),verifyConditions:E(async(g,n)=>{n.options||(n.options={}),Object.assign(n.options,i.options),Object.assign(n.options,n.options._pkgOptions||{}),Object.assign(i.fakeLogger,n.logger||{}),n.cwd=p,d.verifyConditions&&await d.verifyConditions(n),i._ready=!0,_(c,"verified conditions")},"verifyConditions"),verifyRelease:E(async(g,n)=>{n.options||(n.options={}),Object.assign(n.options,i.options),Object.assign(n.options,n.options._pkgOptions||{}),n.cwd=p,await d?.verifyRelease?.(n),_(c,"release verified")},"verifyRelease")};return Object.keys(f).forEach(g=>Reflect.defineProperty(f[g],"pluginName",{enumerable:!0,value:"Inline plugin",writable:!1})),_(c,"inlinePlugin created"),f},"createInlinePlugin")},"createInlinePluginCreator");var Kt=Object.defineProperty,Yt=y((e,t)=>Kt(e,"name",{value:t,configurable:!0}),"o$1");const x="release",Qt=["package.json",`.${x}rc`,`.${x}rc.json`,`.${x}rc.yaml`,`.${x}rc.yml`,`.${x}rc.js`,`.${x}rc.cjs`,`.${x}rc.mjs`,`${x}.config.js`,`${x}.config.cjs`,`${x}.config.mjs`],be=Yt(async e=>(await ue(x,{mergeSearchPlaces:!1,searchPlaces:Qt}).search(e))?.config??{},"getConfig");var Xt=Object.defineProperty,ye=y((e,t)=>Xt(e,"name",{value:t,configurable:!0}),"r");const ae=ye(e=>e==null,"isNil"),H=ye((e={},t={})=>({...e,...ee(t,r=>!ae(r)),deps:{...e.deps,...ee(t.deps,r=>!ae(r))},ignorePackages:[...new Set([...L(e.ignorePackages||[]),...L(t.ignorePackages||[])])]}),"mergeConfig");var Zt=Object.defineProperty,er=y((e,t)=>Zt(e,"name",{value:t,configurable:!0}),"o");const P="multi-release",tr=["package.json",`.${P}rc`,`.${P}rc.json`,`.${P}rc.yaml`,`.${P}rc.yml`,`.${P}rc.js`,`.${P}rc.cjs`,`.${P}rc.mjs`,`${P}.config.js`,`${P}.config.cjs`,`${P}.config.mjs`],rr=er(async(e,t)=>{const{config:r}=await ue(P,{searchPlaces:tr}).search(e)||{},{extends:a,...s}={...r};let o=s;if(a){const i=Je(import.meta.url),p=L(a).reduce((l,d)=>{const c=i(Ue(e,d));return H(l,c)},{});o=H(o,p)}return o=H({branches:void 0,ci:void 0,debug:!1,deps:{bump:"override",prefix:"",release:"patch"},dryRun:void 0,firstParent:!1,ignorePackages:[],ignorePrivate:!0,sequentialInit:!1,sequentialPrepare:!0,silent:!1,tagFormat:"${name}@${version}"},o),H(o,t)},"getConfigMultiSemrel");var nr=Object.defineProperty,ar=y((e,t)=>nr(e,"name",{value:t,configurable:!0}),"t");const{Signale:sr}=ie,or=ar(async({cwd:e,env:t,stderr:r,stdout:a},s)=>{try{const o=new le,i=new sr({stream:o});return await Ge({cwd:e,env:t,logger:i,stderr:r,stdout:a},s)}catch(o){throw j.failure("Error in semantic-release getConfig(): %0",o),o}},"getConfigSemantic");var ir=Object.defineProperty,cr=y((e,t)=>ir(e,"name",{value:t,configurable:!0}),"s");class se extends ce{static{y(this,"p")}static{cr(this,"RescopedStream")}_stream;_scope;constructor(t,r){super(),k(r,"scope: string"),k(t,"stream: stream"),this._stream=t,this._scope=r}write(t){return k(t,"msg: string"),this._stream.write(t.replace("[semantic-release]",`[${this._scope}]`))}}var lr=Object.defineProperty,q=y((e,t)=>lr(e,"name",{value:t,configurable:!0}),"v");const pr=q(async(e,{cwd:t,env:r,globalOptions:a,inputOptions:s,stderr:o,stdout:i})=>{e=S(e,t);const p=Pe(e),l=ge(e),{name:d}=l,c=Object.keys({...l.dependencies,...l.devDependencies,...l.peerDependencies,...l.optionalDependencies}),f=await be(p),g={...a,...f,...s},n={error(){},log(){}},v=Object.fromEntries(Object.entries(r).filter(([,m])=>m!==void 0).map(([m,h])=>[m,String(h)])),{options:b,plugins:u}=await or({cwd:p,env:v,stderr:o,stdout:i},g);return{deps:c,dir:p,fakeLogger:n,localDeps:[],manifest:l,name:d,options:b,path:e,plugins:u}},"getPackage"),dr=q(async(e,t,r,a)=>{const{dir:s,name:o,options:i}=e,{env:p,stderr:l,stdout:d}=r,c=t(e),f={...i,...c},g={name:o,version:"${version}"},n="${name}@${version}";return f.tagFormat=Se(a.tagFormat||n)(g),f.debug=a.debug,f.dryRun=a.dryRun===void 0?f.dryRun:a.dryRun,f.ci=a.ci===void 0?f.ci:a.ci,f.branches=a.branches?L(a.branches):f.branches,f._pkgOptions=i,e.result=await Me(f,{cwd:s,env:p,stderr:new se(l,o),stdout:new se(d,o)}),e},"releasePackage"),Mr=q(async(e,t={},{cwd:r=process.cwd(),env:a=process.env,stderr:s=process.stderr,stdout:o=process.stdout}={},i={})=>{e&&k(e,"paths: string[]"),k(r,"cwd: directory"),k(a,"env: objectlike"),k(o,"stdout: stream"),k(s,"stderr: stream"),r=S(r);const p=await rr(r,i),l={deps:{},...p,...i};j.config.stdio=[s,o],j.config.level=l.logLevel,l.silent&&(j.config.level="silent"),l.debug&&(j.config.level="debug"),j.info(`multi-semantic-release version: ${Ye.version}`),j.info(`semantic-release version: ${Ne.version}`),l.debug&&j.info(`flags: ${JSON.stringify(l,null,2)}`);const d=await be(r),c={cwd:r,env:a,globalOptions:d,inputOptions:t,stderr:s,stdout:o},{packages:f,queue:g}=await Te({cwd:r,filter:q((u=>{const m=u.manifest;return(!l.ignorePrivate||!m.private)&&(e?e.includes(u.manifestAbsPath)||e.includes(u.manifestRelPath):!0)}),"filter"),workspacesExtra:Array.isArray(l.ignorePackages)?l.ignorePackages.map(u=>`!${u}`):[]});e=e||Object.values(f).map(u=>u.manifestPath),j.complete(`Started multirelease! Loading ${e.length} packages...`);let n=await Promise.all(e.map(u=>pr(u,c)));n=n.filter(u=>u!==void 0),n.forEach(u=>{u.localDeps=[...new Set(u.deps.map(m=>n.find(h=>m===h.name)).filter(Boolean))],j.success(`Loaded package ${u.name}`)}),j.complete(`Queued ${g.length} packages! Starting release...`);const v=Gt(n,c,l),b=await g.reduce(async(u,m)=>{const h=await u,w=n.find(({name:O})=>O===m);if(w){const{result:O}=await dr(w,v,c,l);if(O)return h+1}return h},Promise.resolve(0));return j.complete(`Released ${b} of ${g.length} packages, semantically!`),Ce(n,({name:u})=>g.indexOf(u))},"multiSemanticRelease");export{Mr as q,j as u};
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@anolilab/multi-semantic-release",
|
|
3
|
-
"version": "3.0.0-alpha.
|
|
3
|
+
"version": "3.0.0-alpha.4",
|
|
4
4
|
"description": "A multi semantic release tool for a monorepo.",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -9,9 +9,7 @@
|
|
|
9
9
|
},
|
|
10
10
|
"license": "0BSD",
|
|
11
11
|
"author": "Dave Houlbrooke <dave@shax.com>",
|
|
12
|
-
"sideEffects": [
|
|
13
|
-
"src/utils/blork.ts"
|
|
14
|
-
],
|
|
12
|
+
"sideEffects": [],
|
|
15
13
|
"type": "module",
|
|
16
14
|
"exports": {
|
|
17
15
|
".": {
|
|
@@ -30,7 +28,8 @@
|
|
|
30
28
|
],
|
|
31
29
|
"dependencies": {
|
|
32
30
|
"@semrel-extra/topo": "^1.14.1",
|
|
33
|
-
"
|
|
31
|
+
"@visulima/fs": "^4.0.4",
|
|
32
|
+
"@visulima/path": "^2.0.3",
|
|
34
33
|
"cosmiconfig": "^9.0.0",
|
|
35
34
|
"debug": "^4.4.3",
|
|
36
35
|
"detect-indent": "^7.0.2",
|
|
@@ -42,6 +41,7 @@
|
|
|
42
41
|
"semver": "^7.7.3",
|
|
43
42
|
"signale": "^1.4.0",
|
|
44
43
|
"stream-buffers": "^3.0.3",
|
|
44
|
+
"yaml": "^2.8.1",
|
|
45
45
|
"yargs": "18.0.0"
|
|
46
46
|
},
|
|
47
47
|
"peerDependencies": {
|
|
@@ -1,4 +0,0 @@
|
|
|
1
|
-
var ie=Object.defineProperty;var f=(e,t)=>ie(e,"name",{value:t,configurable:!0});import{createRequire as ce}from"node:module";import{topo as me}from"@semrel-extra/topo";import{transform as fe,isEqual as ve,isObject as I,pickBy as J,castArray as H,sortBy as be,template as he}from"lodash-es";import ye from"semantic-release";import $e from"semantic-release/package.json"with{type:"json"};import{getTagHead as we}from"semantic-release/lib/git.js";import{execa as Re}from"execa";import Oe from"detect-indent";import{detectNewline as De}from"detect-newline";import Ee from"semantic-release/lib/get-config.js";const R=ce(import.meta.url),V=f(e=>{if(process.versions?.node){const[t,r]=process.versions.node.split(".").map(Number);if(t>22||t===22&&r>=3||t===20&&r>=16)return process.getBuiltinModule(e)}return R(e)},"__cjs_getBuiltinModule"),Ct=typeof globalThis<"u"&&typeof globalThis.process<"u"?globalThis.process:process,{normalize:le,join:de,isAbsolute:pe,relative:ue,dirname:ge}=V("node:path"),{existsSync:F,lstatSync:z,readFileSync:_e,writeFileSync:je}=V("node:fs"),G=R("git-log-parser"),E=R("debug"),Y=R("signale"),{check:h,ValueError:C}=R("blork"),j=R("semver"),{gt:Pe,prerelease:xe,rcompare:ke}=j,{cosmiconfig:Z}=R("cosmiconfig"),{createRequire:Te}=V("node:module"),Se=R("resolve-from"),{WritableStreamBuffer:Ce}=R("stream-buffers"),{Writable:Ne}=V("node:stream"),He="3.0.0-alpha.1",Le={version:He};var Ve=Object.defineProperty,Me=f((e,t)=>Ve(e,"name",{value:t,configurable:!0}),"i$4");const{Signale:qe}=Y,W=["error","warn","info","debug","trace"],M=Me((e,t)=>W.indexOf(e)<=W.indexOf(t),"assertLevel"),Q={complete:"info",failure:"error",log:"info",success:"info"},b={config:{_level:"info",_signale:{},_stderr:process.stderr,_stdout:process.stdout,set level(e){e&&(M(e,"debug")&&E.enable("msr:"),M(e,"trace")&&E.enable("semantic-release:"),this._level=e)},get level(){return this._level},set stdio([e,t]){this._stdout=t,this._stderr=e,this._signale=new qe({config:{displayLabel:!1,displayTimestamp:!0},stream:t,types:{complete:{badge:"🎉",color:"green",label:"",stream:[t]},error:{color:"red",label:"",stream:[e]},log:{badge:"•",color:"magenta",label:"",stream:[t]},success:{color:"green",label:"",stream:[t]}}})},get stdio(){return[this._stderr,this._stdout]}},prefix:"msr:",withScope(e){return{...this,debug:E(e||this.prefix),prefix:e}},...[...W,...Object.keys(Q)].reduce((e,t)=>(e[t]=function(...r){M(Q[t]||t,this.config.level)&&(this.config._signale[t]||console[t]||(()=>{}))(this.prefix,...r)},e),{}),debug:E("msr:")};var Be=Object.defineProperty,Fe=f((e,t)=>Be(e,"name",{value:t,configurable:!0}),"o$4");const S=Fe((e,t=process.cwd())=>(h(e,"path: path"),h(t,"cwd: absolute"),le(pe(e)?e:de(t,e)).replace(/[/\\]+$/u,"")),"cleanPath");var ze=Object.defineProperty,T=f((e,t)=>ze(e,"name",{value:t,configurable:!0}),"o$3");const We=T(e=>e.readable?new Promise((t,r)=>{if(!e.readable){t([]);return}let n=[];const s=T(()=>{n=[],e.removeListener("data",o),e.removeListener("end",c),e.removeListener("error",i),e.removeListener("close",d)},"cleanup"),o=T(u=>{n.push(u)},"onData"),c=T(()=>{t(n),s()},"onEnd"),i=T(u=>{r(u),s()},"onError"),d=T(()=>{t(n),s()},"onClose");e.on("data",o),e.on("end",c),e.on("error",i),e.on("close",d)}):Promise.resolve([]),"default");var Ae=Object.defineProperty,Ie=f((e,t)=>Ae(e,"name",{value:t,configurable:!0}),"f");const{debug:U}=b.withScope("msr:commitsFilter"),q=Ie(async(e,t,r,n,s)=>{if(h(e,"cwd: directory"),!F(e)||!z(e).isDirectory())throw new C("cwd: Must be an absolute path to an existing directory",e);if(h(t,"dir: path"),t=S(t,e),!F(t)||!z(t).isDirectory())throw new C("dir: Must be a path to an existing directory",t);if(e=S(e),t=S(t,e),h(t,"dir: directory"),h(r,"lastRelease: alphanumeric{40}?"),h(n,"nextRelease: alphanumeric{40}?"),t.indexOf(e)!==0)throw new C("dir: Must be inside cwd",t);if(t===e)throw new C("dir: Must not be equal to cwd",t);const o=await Re("git",["rev-parse","--show-toplevel"],{cwd:e});Object.assign(G.fields,{committerDate:{key:"ci",type:Date},gitTags:"d",hash:"H",message:"B"});const c=ue(o.stdout,t),i=s?["--first-parent",s]:[],d=(r?`${r}..`:"")+(n||"HEAD"),u=[...i,d,"--",c],m=G.parse({_:u},{cwd:e,env:process.env}),a=await We(m);return a.forEach(l=>{l.message=l.message.trim(),l.gitTags=l.gitTags.trim()}),U("git log filter query: %o",u),U("filtered commits: %O",a),a},"getCommitsFiltered");var Je=Object.defineProperty,A=f((e,t)=>Je(e,"name",{value:t,configurable:!0}),"r$2");const Ge=A(e=>{if(!F(e))throw new ReferenceError(`package.json file not found: "${e}"`);let t;try{t=z(e)}catch{throw new ReferenceError(`package.json cannot be read: "${e}"`)}if(!t.isFile())throw new ReferenceError(`package.json is not a file: "${e}"`);try{return _e(e,"utf8")}catch{throw new ReferenceError(`package.json cannot be read: "${e}"`)}},"readManifest"),ee=A(e=>{const t=Ge(e);let r;try{r=JSON.parse(t)}catch{throw new SyntaxError(`package.json could not be parsed: "${e}"`)}if(typeof r!="object"||r===null)throw new SyntaxError(`package.json was not an object: "${e}"`);if(typeof r.name!="string"||r.name.length===0)throw new SyntaxError(`Package name must be non-empty string: "${e}"`);const n=A(s=>{if(r.hasOwnProperty(s)&&typeof r[s]!="object")throw new SyntaxError(`Package ${s} must be object: "${e}"`)},"checkDeps");return n("dependencies"),n("devDependencies"),n("peerDependencies"),n("optionalDependencies"),Object.defineProperty(r,"__contents__",{enumerable:!1,value:t}),r},"default");var Qe=Object.defineProperty,te=f((e,t)=>Qe(e,"name",{value:t,configurable:!0}),"r$1");const Ue=te((e,t,r)=>e&&t&&r?e(t,r)?t:r:t||r,"_selectVersionBy"),Ke=Ue.bind(null,Pe),Xe=te((e,t)=>e.filter(r=>t||!xe(r)).sort(ke)[0],"getLatestVersion");var Ye=Object.defineProperty,Ze=f((e,t)=>Ye(e,"name",{value:t,configurable:!0}),"e$1");const et=Ze(e=>({indent:Oe(e).indent,trailingWhitespace:De(e)||""}),"recognizeFormat");var tt=Object.defineProperty,y=f((e,t)=>tt(e,"name",{value:t,configurable:!0}),"o$2");const{debug:B}=b.withScope("msr:updateDeps"),rt=y((e,t,r)=>{const n=e?j.inc(e,"prerelease",r):null,s=j.inc(t,"prerelease",r);return n?Ke(s,n):s},"_nextPreHighestVersion"),st=y((e,t,r,n)=>{if(!j.prerelease(t)){const o=j.parse(t);if(!o)return;const{major:c,minor:i,patch:d}=o;return`${j.inc(`${c}.${i}.${d}`,r||"patch")}-${n}.1`}const s=Xe(e,!0);return rt(s,t,n)},"_nextPreVersionCases"),at=y((e,t,r,n,s)=>{const o=["patch","minor","major"],{localDeps:c,manifest:i={}}=e,d=e._lastRelease?.version,{dependencies:u={},devDependencies:m={},optionalDependencies:a={},peerDependencies:l={}}=i,$=[u,m,l,a],P=y((p,g,v)=>{const x=p[g];if(!v||!x)return!1;const k=dt(x,v,t,s);return x!==k?(p[g]=k,!0):!1},"bumpDependency");return c.filter(p=>!n.includes(p)).reduce((p,g)=>{const v=se(g,t,r,[...n,e],s),x=v?g._preRelease?lt(g):it(g):g._lastRelease?.version;return $.reduce((k,oe)=>P(oe,g.name,x)||k,!d)&&o.indexOf(v)>o.indexOf(p)?v:p},void 0)},"getDependentRelease"),nt=y((e,t)=>{if(e.startsWith("workspace:")){const r=/^workspace:(([\^~*])?.*)$/u.exec(e);if(!r)return e;const[,n,s]=r;return s===n?s==="*"?t:s+t:n}return e},"substituteWorkspaceVersion"),re=y((e,t)=>fe(e,(r,n,s)=>{ve(n,t[s])||(r[s]=I(n)&&I(t[s])?re(n,t[s]):`${t[s]} → ${n}`)}),"difference"),ot=y((e,t)=>{const r=`[${e.name}]`,n=ee(t),s=["dependencies","devDependencies","peerDependencies","optionalDependencies"].reduce((o,c)=>{const i=re(e[c],n[c]);return Object.keys(i).length>0&&(o[c]=i),o},{});return B(r,"package.json path=",t),Object.keys(s).length>0?(B(r,"changes=",s),!0):(B(r,"no deps changes"),!1)},"auditManifestChanges"),it=y(e=>{const t=e._lastRelease?.version;return t&&typeof e._nextType=="string"?j.inc(t,e._nextType):t||"1.0.0"},"getNextVersion"),ct=y(e=>{const t=j.parse(e);return t&&t.prerelease[0]||null},"getPreReleaseTag"),lt=y(e=>{const t=e._lastRelease?.version,r=ct(t||"");return r!==null&&r!==e._preRelease||!t?`1.0.0-${e._preRelease}.1`:st([],t||"",e._nextType||"patch",e._preRelease||"")},"getNextPreVersion"),se=y((e,t="override",r="patch",n=[],s="")=>{const o=at(e,t,r,n,s);if(e._nextType)return e._nextType;if(o)return e._nextType=r==="inherit"?o:r,e._nextType},"resolveReleaseType"),dt=y((e,t,r="override",n="")=>{if(e=nt(e,t),r==="ignore"||e===t||(r==="satisfy"||r==="inherit")&&j.satisfies(t,e))return e;if(r==="inherit"){const s=t.split(".");return e.split(".").map((o,c)=>s[c]?o.replace(/\d+/u,s[c]):o).join(".")}return n+t},"resolveNextVersion"),pt=y(e=>{const{manifest:t,path:r}=e,{indent:n,trailingWhitespace:s}=et(t.__contents__);t.version=e._nextRelease.version||t.version,e.localDeps.forEach(o=>{const c=o._nextRelease||o._lastRelease;if(!c||!c.version)throw new Error(`Cannot release ${e.name} because dependency ${o.name} has not been released yet`)}),ot(t,r)&&je(r,JSON.stringify(t,null,n)+s)},"updateManifestDeps");var ut=Object.defineProperty,O=f((e,t)=>ut(e,"name",{value:t,configurable:!0}),"i$1");const{debug:D}=b.withScope("msr:inlinePlugin"),gt=O((e,t,r)=>{const{cwd:n}=t;return O(s=>{const{dir:o,name:c,plugins:i}=s,d=`[${c}]`,u={analyzeCommits:O(async(m,a)=>{s._preRelease=a.branch.prerelease||null,s._branch=a.branch.name;const l=r.firstParent?a.branch.name:void 0;return a.commits=await q(n,o,a.lastRelease?a.lastRelease.gitHead:void 0,a.nextRelease?a.nextRelease.gitHead:void 0,l),s._lastRelease=a.lastRelease,s._nextType=await i.analyzeCommits(a),s._analyzed=!0,s._nextType=se(s,r.deps.bump,r.deps.release,[],r.deps.prefix),D(d,"commits analyzed"),D(d,`release type: ${s._nextType}`),s._nextType},"analyzeCommits"),generateNotes:O(async(m,a)=>{s._nextRelease=a.nextRelease;const l=[];a.lastRelease&&a.lastRelease.gitTag&&(!a.lastRelease.gitHead||a.lastRelease.gitHead===a.lastRelease.gitTag)&&(a.lastRelease.gitHead=we(a.lastRelease.gitTag,{cwd:a.cwd,env:a.env}));const $=r.firstParent?a.branch.name:void 0;a.commits=await q(n,o,a.lastRelease?a.lastRelease.gitHead:void 0,a.nextRelease?a.nextRelease.gitHead:void 0,$);const P=await i.generateNotes(a);P&&l.push(P.replace(/^(#+) (\[?\d+\.\d+\.\d+\]?)/u,`$1 ${c} $2`));const p=s.localDeps.filter(g=>g._nextRelease);if(p.length>0){l.push("### Dependencies");const g=p.map(v=>`* **${v.name}:** upgraded to ${v._nextRelease.version}`);l.push(g.join(`
|
|
2
|
-
`))}return D(d,"notes generated"),l.join(`
|
|
3
|
-
|
|
4
|
-
`)},"generateNotes"),prepare:O(async(m,a)=>{pt(s),s._depsUpdated=!0;const l=r.firstParent?a.branch.name:void 0;a.commits=await q(n,o,a.lastRelease?a.lastRelease.gitHead:void 0,a.nextRelease?a.nextRelease.gitHead:void 0,l);const $=await i.prepare(a);return s._prepared=!0,D(d,"prepared"),$},"prepare"),publish:O(async(m,a)=>{const l=await i.publish(a);return s._published=!0,D(d,"published"),l.length>0?l[0]:{}},"publish"),verifyConditions:O(async(m,a)=>{Object.assign(a.options,a.options._pkgOptions),Object.assign(s.fakeLogger,a.logger);const l=await i.verifyConditions(a);return s._ready=!0,D(d,"verified conditions"),l},"verifyConditions")};return Object.keys(u).forEach(m=>Reflect.defineProperty(u[m],"pluginName",{enumerable:!0,value:"Inline plugin",writable:!1})),D(d,"inlinePlugin created"),u},"createInlinePlugin")},"createInlinePluginCreator");var mt=Object.defineProperty,ft=f((e,t)=>mt(e,"name",{value:t,configurable:!0}),"n$1");const w="release",vt=["package.json",`.${w}rc`,`.${w}rc.json`,`.${w}rc.yaml`,`.${w}rc.yml`,`.${w}rc.js`,`.${w}rc.cjs`,`.${w}rc.mjs`,`${w}.config.js`,`${w}.config.cjs`,`${w}.config.mjs`],ae=ft(async e=>(await Z(w,{mergeSearchPlaces:!1,searchPlaces:vt}).search(e))?.config??{},"default");var bt=Object.defineProperty,ne=f((e,t)=>bt(e,"name",{value:t,configurable:!0}),"r");const K=ne(e=>e==null,"isNil"),N=ne((e={},t={})=>({...e,...J(t,r=>!K(r)),deps:{...e.deps,...J(t.deps,r=>!K(r))},ignorePackages:[...new Set([...H(e.ignorePackages||[]),...H(t.ignorePackages||[])])]}),"mergeConfig");var ht=Object.defineProperty,yt=f((e,t)=>ht(e,"name",{value:t,configurable:!0}),"o");const _="multi-release",$t=["package.json",`.${_}rc`,`.${_}rc.json`,`.${_}rc.yaml`,`.${_}rc.yml`,`.${_}rc.js`,`.${_}rc.cjs`,`.${_}rc.mjs`,`${_}.config.js`,`${_}.config.cjs`,`${_}.config.mjs`],wt=yt(async(e,t)=>{const{config:r}=await Z(_,{searchPlaces:$t}).search(e)||{},{extends:n,...s}={...r};let o=s;if(n){const c=Te(import.meta.url),i=H(n).reduce((d,u)=>{const m=c(Se(e,u));return N(d,m)},{});o=N(o,i)}return o=N({branches:void 0,ci:void 0,debug:!1,deps:{bump:"override",prefix:"",release:"patch"},dryRun:void 0,firstParent:!1,ignorePackages:[],ignorePrivate:!0,sequentialInit:!1,sequentialPrepare:!0,silent:!1,tagFormat:"${name}@${version}"},o),N(o,t)},"default");var _t=Object.defineProperty,jt=f((e,t)=>_t(e,"name",{value:t,configurable:!0}),"n");const{Signale:Rt}=Y,Pt=jt(async({cwd:e,env:t,stderr:r,stdout:n},s)=>{try{const o=new Rt({stream:new Ce});return await Ee({cwd:e,env:t,logger:o,stderr:r,stdout:n},s)}catch(o){throw b.failure("Error in semantic-release getConfig(): %0",o),o}},"getConfigSemantic");var xt=Object.defineProperty,kt=f((e,t)=>xt(e,"name",{value:t,configurable:!0}),"i");class X extends Ne{static{f(this,"m")}static{kt(this,"RescopedStream")}_stream;_scope;constructor(t,r){super(),h(r,"scope: string"),h(t,"stream: stream"),this._stream=t,this._scope=r}write(t){h(t,"msg: string"),this._stream.write(t.replace("[semantic-release]",`[${this._scope}]`))}}var Ot=Object.defineProperty,L=f((e,t)=>Ot(e,"name",{value:t,configurable:!0}),"v");const Dt=L(async(e,{cwd:t,env:r,globalOptions:n,inputOptions:s,stderr:o,stdout:c})=>{e=S(e,t);const i=ge(e),d=ee(e),{name:u}=d,m=Object.keys({...d.dependencies,...d.devDependencies,...d.peerDependencies,...d.optionalDependencies}),a=await ae(i),l={...n,...a,...s},$={error(){},log(){}},{options:P,plugins:p}=await Pt({cwd:i,env:r,stderr:o,stdout:c},l);return{deps:m,dir:i,fakeLogger:$,manifest:d,name:u,options:P,path:e,plugins:p}},"getPackage"),Tt=L(async(e,t,r,n)=>{const{dir:s,name:o,options:c}=e,{env:i,stderr:d,stdout:u}=r,m=t(e),a={...c,...m},l={name:o,version:"${version}"},$="${name}@${version}";return a.tagFormat=he(n.tagFormat||$)(l),a.debug=n.debug,a.dryRun=n.dryRun===void 0?a.dryRun:n.dryRun,a.ci=n.ci===void 0?a.ci:n.ci,a.branches=n.branches?H(n.branches):a.branches,a._pkgOptions=c,e.result=await ye(a,{cwd:s,env:i,stderr:new X(d,o),stdout:new X(u,o)}),e},"releasePackage"),Wt=L(async(e,t={},{cwd:r=process.cwd(),env:n=process.env,stderr:s=process.stderr,stdout:o=process.stdout}={},c={})=>{e&&h(e,"paths: string[]"),h(r,"cwd: directory"),h(n,"env: objectlike"),h(o,"stdout: stream"),h(s,"stderr: stream"),r=S(r);const i={deps:{},...await wt(r,c)};b.config.stdio=[s,o],b.config.level=i.logLevel,i.silent&&(b.config.level="silent"),i.debug&&(b.config.level="debug"),b.info(`multi-semantic-release version: ${Le.version}`),b.info(`semantic-release version: ${$e.version}`),i.debug&&b.info(`flags: ${JSON.stringify(i,null,2)}`);const d=await ae(r),u={cwd:r,env:n,globalOptions:d,inputOptions:t,stderr:s,stdout:o},{packages:m,queue:a}=await me({cwd:r,filter:L(({manifest:p,manifestAbsPath:g,manifestRelPath:v})=>(!i.ignorePrivate||!p.private)&&(e?e.includes(g)||e.includes(v):!0),"filter"),workspacesExtra:Array.isArray(i.ignorePackages)?i.ignorePackages.map(p=>`!${p}`):[]});e=e||Object.values(m).map(p=>p.manifestPath),b.complete(`Started multirelease! Loading ${e.length} packages...`);const l=await Promise.all(e.map(p=>Dt(p,u)));l.forEach(p=>{p.localDeps=[...new Set(p.deps.map(g=>l.find(v=>g===v.name)).filter(Boolean))],b.success(`Loaded package ${p.name}`)}),b.complete(`Queued ${a.length} packages! Starting release...`);const $=gt(l,u,i),P=await a.reduce(async(p,g)=>{const v=await p,x=l.find(({name:k})=>k===g);if(x){const{result:k}=await Tt(x,$,u,i);if(k)return v+1}return v},Promise.resolve(0));return b.complete(`Released ${P} of ${a.length} packages, semantically!`),be(l,({name:p})=>a.indexOf(p))},"multiSemanticRelease");export{Wt as B,b as d};
|