@mannyc1/ts-release 0.0.7 → 0.2.2

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.
Files changed (635) hide show
  1. package/ARCHITECTURE.md +124 -92
  2. package/CHANGELOG.md +115 -0
  3. package/LICENSE +21 -0
  4. package/README.md +278 -324
  5. package/SPEC.md +206 -310
  6. package/apps/release-ts/README.md +32 -0
  7. package/apps/release-ts/src/cli/command.ts +164 -0
  8. package/apps/release-ts/src/cli/commands.ts +351 -0
  9. package/apps/release-ts/src/cli/main.ts +43 -0
  10. package/apps/release-ts/src/cli/node-main.ts +49 -0
  11. package/apps/ts-release-agents/LICENSE +21 -0
  12. package/apps/ts-release-agents/README.md +21 -0
  13. package/apps/ts-release-agents/evals/cases.json +11 -0
  14. package/apps/ts-release-agents/manifests/claude.json +5 -0
  15. package/apps/ts-release-agents/manifests/codex.json +5 -0
  16. package/apps/ts-release-agents/package.json +11 -0
  17. package/apps/ts-release-agents/skills/release/SKILL.md +48 -0
  18. package/apps/ts-release-agents/skills/release/references/configuration.md +18 -0
  19. package/apps/ts-release-agents/skills/release/references/recovery.md +10 -0
  20. package/apps/ts-release-agents/skills/release/references/staged-workflow.md +12 -0
  21. package/apps/ts-release-agents/skills/release/references/target-selection.md +13 -0
  22. package/apps/ts-release-agents/skills/release/references/verification.md +14 -0
  23. package/apps/ts-release-agents/src/build.ts +105 -0
  24. package/apps/ts-release-agents/src/check.ts +117 -0
  25. package/apps/ts-release-agents/src/install.ts +121 -0
  26. package/apps/ts-release-agents/test/contract.test.ts +56 -0
  27. package/apps/ts-release-agents/tsconfig.json +5 -0
  28. package/dist/api/api.d.ts +15 -0
  29. package/dist/api/api.d.ts.map +1 -0
  30. package/dist/api/api.js +244 -0
  31. package/dist/api/api.js.map +1 -0
  32. package/dist/api/errors.d.ts +39 -0
  33. package/dist/api/errors.d.ts.map +1 -0
  34. package/dist/api/errors.js +32 -0
  35. package/dist/api/errors.js.map +1 -0
  36. package/dist/api/input.d.ts +10 -0
  37. package/dist/api/input.d.ts.map +1 -0
  38. package/dist/api/input.js +73 -0
  39. package/dist/api/input.js.map +1 -0
  40. package/dist/api/runtime.d.ts +18 -0
  41. package/dist/api/runtime.d.ts.map +1 -0
  42. package/dist/api/runtime.js +7 -0
  43. package/dist/api/runtime.js.map +1 -0
  44. package/dist/api/types.d.ts +76 -0
  45. package/dist/api/types.d.ts.map +1 -0
  46. package/dist/api/types.js +17 -0
  47. package/dist/api/types.js.map +1 -0
  48. package/dist/bin/ts-release.js +39239 -0
  49. package/dist/capabilities/bun-targets.d.ts +3 -0
  50. package/dist/capabilities/bun-targets.d.ts.map +1 -0
  51. package/dist/capabilities/bun-targets.js +3 -0
  52. package/dist/capabilities/bun-targets.js.map +1 -0
  53. package/dist/capabilities/field-ownership.d.ts +17 -0
  54. package/dist/capabilities/field-ownership.d.ts.map +1 -0
  55. package/dist/capabilities/field-ownership.js +40 -0
  56. package/dist/capabilities/field-ownership.js.map +1 -0
  57. package/dist/capabilities/module.d.ts +91 -0
  58. package/dist/capabilities/module.d.ts.map +1 -0
  59. package/dist/capabilities/module.js +2 -0
  60. package/dist/capabilities/module.js.map +1 -0
  61. package/dist/capabilities/registry.d.ts +829 -0
  62. package/dist/capabilities/registry.d.ts.map +1 -0
  63. package/dist/capabilities/registry.js +291 -0
  64. package/dist/capabilities/registry.js.map +1 -0
  65. package/dist/config/config.d.ts +6 -0
  66. package/dist/config/config.d.ts.map +1 -0
  67. package/dist/config/config.js +42 -0
  68. package/dist/config/config.js.map +1 -0
  69. package/dist/correction/coordinator.d.ts +248 -0
  70. package/dist/correction/coordinator.d.ts.map +1 -0
  71. package/dist/correction/coordinator.js +274 -0
  72. package/dist/correction/coordinator.js.map +1 -0
  73. package/dist/correction/index.d.ts +3 -0
  74. package/dist/correction/index.d.ts.map +1 -0
  75. package/dist/correction/index.js +3 -0
  76. package/dist/correction/index.js.map +1 -0
  77. package/dist/correction/intent.d.ts +111 -0
  78. package/dist/correction/intent.d.ts.map +1 -0
  79. package/dist/correction/intent.js +146 -0
  80. package/dist/correction/intent.js.map +1 -0
  81. package/dist/drivers/archive.d.ts +8 -0
  82. package/dist/drivers/archive.d.ts.map +1 -0
  83. package/dist/drivers/archive.js +101 -0
  84. package/dist/drivers/archive.js.map +1 -0
  85. package/dist/drivers/contain.d.ts +6 -0
  86. package/dist/drivers/contain.d.ts.map +1 -0
  87. package/dist/drivers/contain.js +17 -0
  88. package/dist/drivers/contain.js.map +1 -0
  89. package/dist/drivers/environment.d.ts +4 -0
  90. package/dist/drivers/environment.d.ts.map +1 -0
  91. package/dist/drivers/environment.js +18 -0
  92. package/dist/drivers/environment.js.map +1 -0
  93. package/dist/drivers/errors.d.ts +9 -0
  94. package/dist/drivers/errors.d.ts.map +1 -0
  95. package/dist/drivers/errors.js +6 -0
  96. package/dist/drivers/errors.js.map +1 -0
  97. package/dist/drivers/glob.d.ts +2 -0
  98. package/dist/drivers/glob.d.ts.map +1 -0
  99. package/dist/drivers/glob.js +162 -0
  100. package/dist/drivers/glob.js.map +1 -0
  101. package/dist/drivers/process.d.ts +48 -0
  102. package/dist/drivers/process.d.ts.map +1 -0
  103. package/dist/drivers/process.js +257 -0
  104. package/dist/drivers/process.js.map +1 -0
  105. package/dist/drivers/redact.d.ts +4 -0
  106. package/dist/drivers/redact.d.ts.map +1 -0
  107. package/dist/drivers/redact.js +24 -0
  108. package/dist/drivers/redact.js.map +1 -0
  109. package/dist/drivers/seccomp-helper-source.d.ts +7 -0
  110. package/dist/drivers/seccomp-helper-source.d.ts.map +1 -0
  111. package/dist/drivers/seccomp-helper-source.js +121 -0
  112. package/dist/drivers/seccomp-helper-source.js.map +1 -0
  113. package/dist/drivers/utils.d.ts +4 -0
  114. package/dist/drivers/utils.d.ts.map +1 -0
  115. package/dist/drivers/utils.js +5 -0
  116. package/dist/drivers/utils.js.map +1 -0
  117. package/dist/drivers/workspace.d.ts +6 -0
  118. package/dist/drivers/workspace.d.ts.map +1 -0
  119. package/dist/drivers/workspace.js +49 -0
  120. package/dist/drivers/workspace.js.map +1 -0
  121. package/dist/extensions/provider-adapter.d.ts +48 -0
  122. package/dist/extensions/provider-adapter.d.ts.map +1 -0
  123. package/dist/extensions/provider-adapter.js +64 -0
  124. package/dist/extensions/provider-adapter.js.map +1 -0
  125. package/dist/host.d.ts +33 -0
  126. package/dist/host.d.ts.map +1 -0
  127. package/dist/host.js +20 -0
  128. package/dist/host.js.map +1 -0
  129. package/dist/index.d.ts +19 -1
  130. package/dist/index.d.ts.map +1 -1
  131. package/dist/index.js +12 -1
  132. package/dist/index.js.map +1 -1
  133. package/dist/model/artifact-collection.d.ts +84 -0
  134. package/dist/model/artifact-collection.d.ts.map +1 -0
  135. package/dist/model/artifact-collection.js +185 -0
  136. package/dist/model/artifact-collection.js.map +1 -0
  137. package/dist/model/authority.d.ts +89 -0
  138. package/dist/model/authority.d.ts.map +1 -0
  139. package/dist/model/authority.js +80 -0
  140. package/dist/model/authority.js.map +1 -0
  141. package/dist/model/bun-targets.d.ts +34 -0
  142. package/dist/model/bun-targets.d.ts.map +1 -0
  143. package/dist/model/bun-targets.js +17 -0
  144. package/dist/model/bun-targets.js.map +1 -0
  145. package/dist/model/canonical.d.ts +8 -0
  146. package/dist/model/canonical.d.ts.map +1 -0
  147. package/dist/model/canonical.js +205 -0
  148. package/dist/model/canonical.js.map +1 -0
  149. package/dist/model/catalog.d.ts +76 -0
  150. package/dist/model/catalog.d.ts.map +1 -0
  151. package/dist/model/catalog.js +174 -0
  152. package/dist/model/catalog.js.map +1 -0
  153. package/dist/model/digest.d.ts +53 -0
  154. package/dist/model/digest.d.ts.map +1 -0
  155. package/dist/model/digest.js +127 -0
  156. package/dist/model/digest.js.map +1 -0
  157. package/dist/model/errors.d.ts +14 -0
  158. package/dist/model/errors.d.ts.map +1 -0
  159. package/dist/model/errors.js +8 -0
  160. package/dist/model/errors.js.map +1 -0
  161. package/dist/model/primitives.d.ts +19 -0
  162. package/dist/model/primitives.d.ts.map +1 -0
  163. package/dist/model/primitives.js +18 -0
  164. package/dist/model/primitives.js.map +1 -0
  165. package/dist/model/pypi.d.ts +12 -0
  166. package/dist/model/pypi.d.ts.map +1 -0
  167. package/dist/model/pypi.js +20 -0
  168. package/dist/model/pypi.js.map +1 -0
  169. package/dist/model/python-distribution.d.ts +33 -0
  170. package/dist/model/python-distribution.d.ts.map +1 -0
  171. package/dist/model/python-distribution.js +367 -0
  172. package/dist/model/python-distribution.js.map +1 -0
  173. package/dist/model/secret-patterns.d.ts +2 -0
  174. package/dist/model/secret-patterns.d.ts.map +1 -0
  175. package/dist/model/secret-patterns.js +12 -0
  176. package/dist/model/secret-patterns.js.map +1 -0
  177. package/dist/platform/bun.d.ts +7 -0
  178. package/dist/platform/bun.d.ts.map +1 -0
  179. package/dist/platform/bun.js +15 -0
  180. package/dist/platform/bun.js.map +1 -0
  181. package/dist/platform/credentials.d.ts +32 -0
  182. package/dist/platform/credentials.d.ts.map +1 -0
  183. package/dist/platform/credentials.js +772 -0
  184. package/dist/platform/credentials.js.map +1 -0
  185. package/dist/platform/host-support.d.ts +2 -0
  186. package/dist/platform/host-support.d.ts.map +1 -0
  187. package/dist/platform/host-support.js +4 -0
  188. package/dist/platform/host-support.js.map +1 -0
  189. package/dist/platform/node.d.ts +7 -0
  190. package/dist/platform/node.d.ts.map +1 -0
  191. package/dist/platform/node.js +15 -0
  192. package/dist/platform/node.js.map +1 -0
  193. package/dist/platform/release-runtime.d.ts +11 -0
  194. package/dist/platform/release-runtime.d.ts.map +1 -0
  195. package/dist/platform/release-runtime.js +34 -0
  196. package/dist/platform/release-runtime.js.map +1 -0
  197. package/dist/platform/services.d.ts +15 -0
  198. package/dist/platform/services.d.ts.map +1 -0
  199. package/dist/platform/services.js +30 -0
  200. package/dist/platform/services.js.map +1 -0
  201. package/dist/platform/source-observer.d.ts +5 -0
  202. package/dist/platform/source-observer.d.ts.map +1 -0
  203. package/dist/platform/source-observer.js +159 -0
  204. package/dist/platform/source-observer.js.map +1 -0
  205. package/dist/provider-sdk.d.ts +14 -0
  206. package/dist/provider-sdk.d.ts.map +1 -0
  207. package/dist/provider-sdk.js +10 -0
  208. package/dist/provider-sdk.js.map +1 -0
  209. package/dist/publication/adapter.d.ts +212 -0
  210. package/dist/publication/adapter.d.ts.map +1 -0
  211. package/dist/publication/adapter.js +83 -0
  212. package/dist/publication/adapter.js.map +1 -0
  213. package/dist/publication/authority.d.ts +137 -0
  214. package/dist/publication/authority.d.ts.map +1 -0
  215. package/dist/publication/authority.js +233 -0
  216. package/dist/publication/authority.js.map +1 -0
  217. package/dist/publication/catalog-git.d.ts +37 -0
  218. package/dist/publication/catalog-git.d.ts.map +1 -0
  219. package/dist/publication/catalog-git.js +451 -0
  220. package/dist/publication/catalog-git.js.map +1 -0
  221. package/dist/publication/claim.d.ts +39 -0
  222. package/dist/publication/claim.d.ts.map +1 -0
  223. package/dist/publication/claim.js +31 -0
  224. package/dist/publication/claim.js.map +1 -0
  225. package/dist/publication/coordinator.d.ts +246 -0
  226. package/dist/publication/coordinator.d.ts.map +1 -0
  227. package/dist/publication/coordinator.js +370 -0
  228. package/dist/publication/coordinator.js.map +1 -0
  229. package/dist/publication/github.d.ts +36 -0
  230. package/dist/publication/github.d.ts.map +1 -0
  231. package/dist/publication/github.js +644 -0
  232. package/dist/publication/github.js.map +1 -0
  233. package/dist/publication/http.d.ts +69 -0
  234. package/dist/publication/http.d.ts.map +1 -0
  235. package/dist/publication/http.js +29 -0
  236. package/dist/publication/http.js.map +1 -0
  237. package/dist/publication/index.d.ts +5 -0
  238. package/dist/publication/index.d.ts.map +1 -0
  239. package/dist/publication/index.js +5 -0
  240. package/dist/publication/index.js.map +1 -0
  241. package/dist/publication/npm.d.ts +40 -0
  242. package/dist/publication/npm.d.ts.map +1 -0
  243. package/dist/publication/npm.js +359 -0
  244. package/dist/publication/npm.js.map +1 -0
  245. package/dist/publication/profiles.d.ts +136 -0
  246. package/dist/publication/profiles.d.ts.map +1 -0
  247. package/dist/publication/profiles.js +90 -0
  248. package/dist/publication/profiles.js.map +1 -0
  249. package/dist/publication/publisher.d.ts +82 -0
  250. package/dist/publication/publisher.d.ts.map +1 -0
  251. package/dist/publication/publisher.js +53 -0
  252. package/dist/publication/publisher.js.map +1 -0
  253. package/dist/publication/pypi.d.ts +45 -0
  254. package/dist/publication/pypi.d.ts.map +1 -0
  255. package/dist/publication/pypi.js +369 -0
  256. package/dist/publication/pypi.js.map +1 -0
  257. package/dist/publication/recovery.d.ts +663 -0
  258. package/dist/publication/recovery.d.ts.map +1 -0
  259. package/dist/publication/recovery.js +252 -0
  260. package/dist/publication/recovery.js.map +1 -0
  261. package/dist/publication/report.d.ts +1061 -0
  262. package/dist/publication/report.d.ts.map +1 -0
  263. package/dist/publication/report.js +441 -0
  264. package/dist/publication/report.js.map +1 -0
  265. package/dist/recipes/config.d.ts +296 -0
  266. package/dist/recipes/config.d.ts.map +1 -0
  267. package/dist/recipes/config.js +325 -0
  268. package/dist/recipes/config.js.map +1 -0
  269. package/dist/release/capabilities.d.ts +12 -0
  270. package/dist/release/capabilities.d.ts.map +1 -0
  271. package/dist/release/capabilities.js +395 -0
  272. package/dist/release/capabilities.js.map +1 -0
  273. package/dist/release/compiler.d.ts +5 -0
  274. package/dist/release/compiler.d.ts.map +1 -0
  275. package/dist/release/compiler.js +19 -0
  276. package/dist/release/compiler.js.map +1 -0
  277. package/dist/release/config.d.ts +5 -0
  278. package/dist/release/config.d.ts.map +1 -0
  279. package/dist/release/config.js +10 -0
  280. package/dist/release/config.js.map +1 -0
  281. package/dist/release/context.d.ts +96 -0
  282. package/dist/release/context.d.ts.map +1 -0
  283. package/dist/release/context.js +168 -0
  284. package/dist/release/context.js.map +1 -0
  285. package/dist/release/graph.d.ts +271 -0
  286. package/dist/release/graph.d.ts.map +1 -0
  287. package/dist/release/graph.js +766 -0
  288. package/dist/release/graph.js.map +1 -0
  289. package/dist/release/inspect.d.ts +88 -0
  290. package/dist/release/inspect.d.ts.map +1 -0
  291. package/dist/release/inspect.js +75 -0
  292. package/dist/release/inspect.js.map +1 -0
  293. package/dist/release/prepare.d.ts +24 -0
  294. package/dist/release/prepare.d.ts.map +1 -0
  295. package/dist/release/prepare.js +1116 -0
  296. package/dist/release/prepare.js.map +1 -0
  297. package/dist/release/prepared-ref.d.ts +60 -0
  298. package/dist/release/prepared-ref.d.ts.map +1 -0
  299. package/dist/release/prepared-ref.js +131 -0
  300. package/dist/release/prepared-ref.js.map +1 -0
  301. package/dist/release/prepared-store.d.ts +90 -0
  302. package/dist/release/prepared-store.d.ts.map +1 -0
  303. package/dist/release/prepared-store.js +337 -0
  304. package/dist/release/prepared-store.js.map +1 -0
  305. package/dist/release/prepared.d.ts +172 -0
  306. package/dist/release/prepared.d.ts.map +1 -0
  307. package/dist/release/prepared.js +268 -0
  308. package/dist/release/prepared.js.map +1 -0
  309. package/dist/release/staging.d.ts +31 -0
  310. package/dist/release/staging.d.ts.map +1 -0
  311. package/dist/release/staging.js +218 -0
  312. package/dist/release/staging.js.map +1 -0
  313. package/dist/resolve/authored.d.ts +53 -0
  314. package/dist/resolve/authored.d.ts.map +1 -0
  315. package/dist/resolve/authored.js +55 -0
  316. package/dist/resolve/authored.js.map +1 -0
  317. package/dist/resolve/encode.d.ts +3 -0
  318. package/dist/resolve/encode.d.ts.map +1 -0
  319. package/dist/resolve/encode.js +21 -0
  320. package/dist/resolve/encode.js.map +1 -0
  321. package/dist/resolve/errors.d.ts +7 -0
  322. package/dist/resolve/errors.d.ts.map +1 -0
  323. package/dist/resolve/errors.js +17 -0
  324. package/dist/resolve/errors.js.map +1 -0
  325. package/dist/resolve/facts.d.ts +12 -0
  326. package/dist/resolve/facts.d.ts.map +1 -0
  327. package/dist/resolve/facts.js +18 -0
  328. package/dist/resolve/facts.js.map +1 -0
  329. package/dist/resolve/resolve.d.ts +10 -0
  330. package/dist/resolve/resolve.d.ts.map +1 -0
  331. package/dist/resolve/resolve.js +242 -0
  332. package/dist/resolve/resolve.js.map +1 -0
  333. package/dist/store.d.ts +11 -0
  334. package/dist/store.d.ts.map +1 -0
  335. package/dist/store.js +9 -0
  336. package/dist/store.js.map +1 -0
  337. package/examples/README.md +20 -30
  338. package/examples/github-release/release.config.json +11 -18
  339. package/examples/homebrew-tap/README.md +11 -0
  340. package/examples/homebrew-tap/release.config.json +40 -28
  341. package/examples/multi-target/release.config.json +28 -53
  342. package/examples/npm-first-publish/release.config.json +23 -25
  343. package/examples/npm-only/release.config.json +22 -30
  344. package/examples/portable-cli/README.md +17 -0
  345. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-arm64 +1 -0
  346. package/examples/portable-cli/artifacts/portable-example-0.1.0-darwin-x64 +1 -0
  347. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-arm64 +1 -0
  348. package/examples/portable-cli/artifacts/portable-example-0.1.0-linux-x64 +1 -0
  349. package/examples/portable-cli/artifacts/portable-example-0.1.0-windows-x64.exe +1 -0
  350. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_10_15_x86_64.whl +1 -0
  351. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-macosx_11_0_arm64.whl +1 -0
  352. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_aarch64.whl +1 -0
  353. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-manylinux2014_x86_64.whl +1 -0
  354. package/examples/portable-cli/artifacts/portable_example-0.1.0-py3-none-win_amd64.whl +1 -0
  355. package/examples/portable-cli/package.json +9 -0
  356. package/examples/portable-cli/release.config.json +53 -0
  357. package/examples/portable-cli/src/cli.ts +3 -0
  358. package/examples/pypi-registry/README.md +8 -0
  359. package/examples/scoop-bucket/README.md +10 -0
  360. package/examples/scoop-bucket/release.config.json +40 -30
  361. package/package.json +60 -156
  362. package/src/api/api.ts +365 -0
  363. package/src/api/errors.ts +36 -0
  364. package/src/api/input.ts +92 -0
  365. package/src/api/runtime.ts +14 -0
  366. package/src/api/types.ts +103 -0
  367. package/src/capabilities/bun-targets.ts +2 -0
  368. package/src/capabilities/field-ownership.ts +60 -0
  369. package/src/capabilities/module.ts +158 -0
  370. package/src/capabilities/registry.ts +333 -0
  371. package/src/config/config.ts +48 -0
  372. package/src/correction/coordinator.ts +336 -0
  373. package/src/correction/index.ts +2 -0
  374. package/src/correction/intent.ts +172 -0
  375. package/src/drivers/archive.ts +102 -0
  376. package/src/drivers/contain.ts +20 -0
  377. package/src/drivers/environment.ts +28 -0
  378. package/src/drivers/errors.ts +6 -0
  379. package/src/drivers/glob.ts +137 -0
  380. package/src/drivers/process.ts +340 -0
  381. package/src/drivers/redact.ts +31 -0
  382. package/src/drivers/seccomp-helper-source.ts +121 -0
  383. package/src/drivers/utils.ts +10 -0
  384. package/src/drivers/workspace.ts +40 -0
  385. package/src/extensions/provider-adapter.ts +99 -0
  386. package/src/host.ts +140 -0
  387. package/src/index.ts +64 -0
  388. package/src/model/artifact-collection.ts +237 -0
  389. package/src/model/authority.ts +116 -0
  390. package/src/model/bun-targets.ts +34 -0
  391. package/src/model/canonical.ts +205 -0
  392. package/src/model/catalog.ts +220 -0
  393. package/src/model/digest.ts +172 -0
  394. package/src/model/errors.ts +6 -0
  395. package/src/model/primitives.ts +37 -0
  396. package/src/model/pypi.ts +30 -0
  397. package/src/model/python-distribution.ts +360 -0
  398. package/src/model/secret-patterns.ts +11 -0
  399. package/src/platform/bun.ts +38 -0
  400. package/src/platform/credentials.ts +1083 -0
  401. package/src/platform/host-support.ts +4 -0
  402. package/src/platform/node.ts +38 -0
  403. package/src/platform/release-runtime.ts +47 -0
  404. package/src/platform/services.ts +57 -0
  405. package/src/platform/source-observer.ts +193 -0
  406. package/src/provider-sdk.ts +48 -0
  407. package/src/publication/adapter.ts +132 -0
  408. package/src/publication/authority.ts +397 -0
  409. package/src/publication/catalog-git.ts +603 -0
  410. package/src/publication/claim.ts +51 -0
  411. package/src/publication/coordinator.ts +578 -0
  412. package/src/publication/github.ts +954 -0
  413. package/src/publication/http.ts +101 -0
  414. package/src/publication/index.ts +4 -0
  415. package/src/publication/npm.ts +525 -0
  416. package/src/publication/profiles.ts +94 -0
  417. package/src/publication/publisher.ts +130 -0
  418. package/src/publication/pypi.ts +463 -0
  419. package/src/publication/recovery.ts +349 -0
  420. package/src/publication/report.ts +628 -0
  421. package/src/recipes/config.ts +395 -0
  422. package/src/release/capabilities.ts +459 -0
  423. package/src/release/compiler.ts +28 -0
  424. package/src/release/config.ts +12 -0
  425. package/src/release/context.ts +223 -0
  426. package/src/release/graph.ts +866 -0
  427. package/src/release/inspect.ts +83 -0
  428. package/src/release/prepare.ts +1331 -0
  429. package/src/release/prepared-ref.ts +193 -0
  430. package/src/release/prepared-store.ts +377 -0
  431. package/src/release/prepared.ts +299 -0
  432. package/src/release/staging.ts +257 -0
  433. package/src/resolve/authored.ts +64 -0
  434. package/src/resolve/encode.ts +22 -0
  435. package/src/resolve/errors.ts +15 -0
  436. package/src/resolve/facts.ts +18 -0
  437. package/src/resolve/resolve.ts +328 -0
  438. package/src/store.ts +28 -0
  439. package/templates/README.md +55 -72
  440. package/templates/bun-cli-github/README.md +7 -9
  441. package/templates/bun-cli-github/release.config.json +35 -73
  442. package/templates/github-actions/release.yml +57 -0
  443. package/templates/github-actions/reviewed-release.yml +80 -0
  444. package/templates/multi-target-homebrew/README.md +10 -0
  445. package/templates/multi-target-homebrew/release.config.json +43 -60
  446. package/templates/multi-target-scoop/README.md +10 -0
  447. package/templates/multi-target-scoop/release.config.json +43 -62
  448. package/templates/npm-github/release.config.json +25 -38
  449. package/templates/npm-github/reviewed-release.config.json +37 -0
  450. package/templates/npm-only/README.md +10 -0
  451. package/templates/npm-only/release.config.json +15 -30
  452. package/templates/portable-cli/README.md +13 -0
  453. package/templates/portable-cli/release.config.json +53 -0
  454. package/dist/artifacts/adapter.d.ts +0 -39
  455. package/dist/artifacts/adapter.d.ts.map +0 -1
  456. package/dist/artifacts/adapter.js +0 -23
  457. package/dist/artifacts/adapter.js.map +0 -1
  458. package/dist/artifacts/registry.d.ts +0 -21
  459. package/dist/artifacts/registry.d.ts.map +0 -1
  460. package/dist/artifacts/registry.js +0 -21
  461. package/dist/artifacts/registry.js.map +0 -1
  462. package/dist/config/errors.d.ts +0 -24
  463. package/dist/config/errors.d.ts.map +0 -1
  464. package/dist/config/errors.js +0 -19
  465. package/dist/config/errors.js.map +0 -1
  466. package/dist/config/load.d.ts +0 -9
  467. package/dist/config/load.d.ts.map +0 -1
  468. package/dist/config/load.js +0 -29
  469. package/dist/config/load.js.map +0 -1
  470. package/dist/config/schema.d.ts +0 -12
  471. package/dist/config/schema.d.ts.map +0 -1
  472. package/dist/config/schema.js +0 -19
  473. package/dist/config/schema.js.map +0 -1
  474. package/dist/domain/artifact.d.ts +0 -118
  475. package/dist/domain/artifact.d.ts.map +0 -1
  476. package/dist/domain/artifact.js +0 -197
  477. package/dist/domain/artifact.js.map +0 -1
  478. package/dist/domain/evidence.d.ts +0 -59
  479. package/dist/domain/evidence.d.ts.map +0 -1
  480. package/dist/domain/evidence.js +0 -51
  481. package/dist/domain/evidence.js.map +0 -1
  482. package/dist/domain/operation.d.ts +0 -143
  483. package/dist/domain/operation.d.ts.map +0 -1
  484. package/dist/domain/operation.js +0 -198
  485. package/dist/domain/operation.js.map +0 -1
  486. package/dist/domain/release.d.ts +0 -93
  487. package/dist/domain/release.d.ts.map +0 -1
  488. package/dist/domain/release.js +0 -82
  489. package/dist/domain/release.js.map +0 -1
  490. package/dist/domain/remote-state.d.ts +0 -58
  491. package/dist/domain/remote-state.d.ts.map +0 -1
  492. package/dist/domain/remote-state.js +0 -55
  493. package/dist/domain/remote-state.js.map +0 -1
  494. package/dist/domain/target.d.ts +0 -148
  495. package/dist/domain/target.d.ts.map +0 -1
  496. package/dist/domain/target.js +0 -151
  497. package/dist/domain/target.js.map +0 -1
  498. package/dist/host/host.d.ts +0 -32
  499. package/dist/host/host.d.ts.map +0 -1
  500. package/dist/host/host.js +0 -24
  501. package/dist/host/host.js.map +0 -1
  502. package/dist/host/http-live.d.ts +0 -6
  503. package/dist/host/http-live.d.ts.map +0 -1
  504. package/dist/host/http-live.js +0 -86
  505. package/dist/host/http-live.js.map +0 -1
  506. package/dist/host/http.d.ts +0 -43
  507. package/dist/host/http.d.ts.map +0 -1
  508. package/dist/host/http.js +0 -59
  509. package/dist/host/http.js.map +0 -1
  510. package/dist/host/platform.d.ts +0 -10
  511. package/dist/host/platform.d.ts.map +0 -1
  512. package/dist/host/platform.js +0 -114
  513. package/dist/host/platform.js.map +0 -1
  514. package/dist/host/test.d.ts +0 -23
  515. package/dist/host/test.d.ts.map +0 -1
  516. package/dist/host/test.js +0 -222
  517. package/dist/host/test.js.map +0 -1
  518. package/dist/internal/workspace-path.d.ts +0 -15
  519. package/dist/internal/workspace-path.d.ts.map +0 -1
  520. package/dist/internal/workspace-path.js +0 -36
  521. package/dist/internal/workspace-path.js.map +0 -1
  522. package/dist/planner/artifact-inventory.d.ts +0 -9
  523. package/dist/planner/artifact-inventory.d.ts.map +0 -1
  524. package/dist/planner/artifact-inventory.js +0 -86
  525. package/dist/planner/artifact-inventory.js.map +0 -1
  526. package/dist/planner/create-release-plan.d.ts +0 -5
  527. package/dist/planner/create-release-plan.d.ts.map +0 -1
  528. package/dist/planner/create-release-plan.js +0 -25
  529. package/dist/planner/create-release-plan.js.map +0 -1
  530. package/dist/planner/errors.d.ts +0 -67
  531. package/dist/planner/errors.d.ts.map +0 -1
  532. package/dist/planner/errors.js +0 -58
  533. package/dist/planner/errors.js.map +0 -1
  534. package/dist/planner/evidence-recorder.d.ts +0 -28
  535. package/dist/planner/evidence-recorder.d.ts.map +0 -1
  536. package/dist/planner/evidence-recorder.js +0 -362
  537. package/dist/planner/evidence-recorder.js.map +0 -1
  538. package/dist/planner/executor.d.ts +0 -58
  539. package/dist/planner/executor.d.ts.map +0 -1
  540. package/dist/planner/executor.js +0 -147
  541. package/dist/planner/executor.js.map +0 -1
  542. package/dist/planner/normalize-release.d.ts +0 -19
  543. package/dist/planner/normalize-release.d.ts.map +0 -1
  544. package/dist/planner/normalize-release.js +0 -342
  545. package/dist/planner/normalize-release.js.map +0 -1
  546. package/dist/planner/reconcile.d.ts +0 -17
  547. package/dist/planner/reconcile.d.ts.map +0 -1
  548. package/dist/planner/reconcile.js +0 -259
  549. package/dist/planner/reconcile.js.map +0 -1
  550. package/dist/planner/render-plan.d.ts +0 -15
  551. package/dist/planner/render-plan.d.ts.map +0 -1
  552. package/dist/planner/render-plan.js +0 -231
  553. package/dist/planner/render-plan.js.map +0 -1
  554. package/dist/targets/adapter-helpers.d.ts +0 -79
  555. package/dist/targets/adapter-helpers.d.ts.map +0 -1
  556. package/dist/targets/adapter-helpers.js +0 -194
  557. package/dist/targets/adapter-helpers.js.map +0 -1
  558. package/dist/targets/adapter.d.ts +0 -17
  559. package/dist/targets/adapter.d.ts.map +0 -1
  560. package/dist/targets/adapter.js +0 -2
  561. package/dist/targets/adapter.js.map +0 -1
  562. package/dist/targets/github-release.d.ts +0 -25
  563. package/dist/targets/github-release.d.ts.map +0 -1
  564. package/dist/targets/github-release.js +0 -82
  565. package/dist/targets/github-release.js.map +0 -1
  566. package/dist/targets/github.d.ts +0 -11
  567. package/dist/targets/github.d.ts.map +0 -1
  568. package/dist/targets/github.js +0 -117
  569. package/dist/targets/github.js.map +0 -1
  570. package/dist/targets/homebrew.d.ts +0 -11
  571. package/dist/targets/homebrew.d.ts.map +0 -1
  572. package/dist/targets/homebrew.js +0 -210
  573. package/dist/targets/homebrew.js.map +0 -1
  574. package/dist/targets/live.d.ts +0 -5
  575. package/dist/targets/live.d.ts.map +0 -1
  576. package/dist/targets/live.js +0 -50
  577. package/dist/targets/live.js.map +0 -1
  578. package/dist/targets/npm.d.ts +0 -10
  579. package/dist/targets/npm.d.ts.map +0 -1
  580. package/dist/targets/npm.js +0 -112
  581. package/dist/targets/npm.js.map +0 -1
  582. package/dist/targets/pypi.d.ts +0 -11
  583. package/dist/targets/pypi.d.ts.map +0 -1
  584. package/dist/targets/pypi.js +0 -141
  585. package/dist/targets/pypi.js.map +0 -1
  586. package/dist/targets/registry.d.ts +0 -25
  587. package/dist/targets/registry.d.ts.map +0 -1
  588. package/dist/targets/registry.js +0 -34
  589. package/dist/targets/registry.js.map +0 -1
  590. package/dist/targets/scoop.d.ts +0 -11
  591. package/dist/targets/scoop.d.ts.map +0 -1
  592. package/dist/targets/scoop.js +0 -88
  593. package/dist/targets/scoop.js.map +0 -1
  594. package/dist/types/effect-internal.d.ts +0 -5
  595. package/dist/types/effect-internal.d.ts.map +0 -1
  596. package/dist/types/effect-internal.js +0 -2
  597. package/dist/types/effect-internal.js.map +0 -1
  598. package/dist/workflows/config.d.ts +0 -202
  599. package/dist/workflows/config.d.ts.map +0 -1
  600. package/dist/workflows/config.js +0 -420
  601. package/dist/workflows/config.js.map +0 -1
  602. package/dist/workflows/diagnostics.d.ts +0 -62
  603. package/dist/workflows/diagnostics.d.ts.map +0 -1
  604. package/dist/workflows/diagnostics.js +0 -530
  605. package/dist/workflows/diagnostics.js.map +0 -1
  606. package/dist/workflows/distribution.d.ts +0 -25
  607. package/dist/workflows/distribution.d.ts.map +0 -1
  608. package/dist/workflows/distribution.js +0 -24
  609. package/dist/workflows/distribution.js.map +0 -1
  610. package/dist/workflows/evidence.d.ts +0 -17
  611. package/dist/workflows/evidence.d.ts.map +0 -1
  612. package/dist/workflows/evidence.js +0 -32
  613. package/dist/workflows/evidence.js.map +0 -1
  614. package/dist/workflows/index.d.ts +0 -8
  615. package/dist/workflows/index.d.ts.map +0 -1
  616. package/dist/workflows/index.js +0 -7
  617. package/dist/workflows/index.js.map +0 -1
  618. package/dist/workflows/init.d.ts +0 -84
  619. package/dist/workflows/init.d.ts.map +0 -1
  620. package/dist/workflows/init.js +0 -487
  621. package/dist/workflows/init.js.map +0 -1
  622. package/dist/workflows/live.d.ts +0 -9
  623. package/dist/workflows/live.d.ts.map +0 -1
  624. package/dist/workflows/live.js +0 -7
  625. package/dist/workflows/live.js.map +0 -1
  626. package/dist/workflows/options.d.ts +0 -30
  627. package/dist/workflows/options.d.ts.map +0 -1
  628. package/dist/workflows/options.js +0 -16
  629. package/dist/workflows/options.js.map +0 -1
  630. package/examples/non-strict-skips/artifacts/release-example-skips-0.1.0.tgz +0 -1
  631. package/examples/non-strict-skips/release.config.json +0 -31
  632. package/examples/pypi-registry/release.config.json +0 -31
  633. package/templates/github-actions/plan-and-approved-execute.yml +0 -58
  634. package/templates/github-actions/plan-only.yml +0 -33
  635. package/templates/github-actions/trusted-publishing.yml +0 -61
@@ -0,0 +1,395 @@
1
+ import * as Schema from "effect/Schema"
2
+ import * as Semver from "semver"
3
+ import { bunArtifactTargetIds } from "../model/bun-targets.js"
4
+ import { CredentialRef } from "../model/authority.js"
5
+ import {
6
+ ArtifactCollectionContract,
7
+ ArtifactCollectionSelector
8
+ } from "../model/artifact-collection.js"
9
+ import { NonEmptyName, OutputId, SafeRelativePath, Version } from "../model/primitives.js"
10
+ import {
11
+ PyPiProjectName,
12
+ PyPiRepository,
13
+ normalizePyPiProjectName,
14
+ pypiRepositoryEndpoints
15
+ } from "../model/pypi.js"
16
+ import {
17
+ CatalogArchitecture,
18
+ CatalogRepositoryPath,
19
+ GitBranchName,
20
+ GitHubRepositoryCoordinate
21
+ } from "../model/catalog.js"
22
+ export {
23
+ PyPiProjectName,
24
+ PyPiRepository,
25
+ normalizePyPiProjectName,
26
+ pypiRepositoryEndpoints
27
+ } from "../model/pypi.js"
28
+ export type { PyPiRepositoryEndpoints } from "../model/pypi.js"
29
+
30
+ const optional = Schema.optionalKey
31
+ const nonempty = Schema.NonEmptyString
32
+ const target = Schema.Literals(bunArtifactTargetIds)
33
+
34
+ export class CandidateProject extends Schema.Class<CandidateProject>("CandidateProject")({
35
+ name: NonEmptyName,
36
+ packageName: optional(nonempty),
37
+ version: Version,
38
+ repository: optional(nonempty),
39
+ tag: NonEmptyName
40
+ }) {}
41
+
42
+ export class CandidateArtifact extends Schema.Class<CandidateArtifact>("CandidateArtifact")({
43
+ id: OutputId,
44
+ path: SafeRelativePath,
45
+ format: Schema.Literals(["tarball", "zip", "file", "executable"])
46
+ }) {}
47
+
48
+ export class CandidateChecksum extends Schema.Class<CandidateChecksum>("CandidateChecksum")({
49
+ algorithm: Schema.Literals(["sha256", "sha512"])
50
+ }) {}
51
+
52
+ const build = {
53
+ id: optional(nonempty),
54
+ targets: Schema.NonEmptyArray(target),
55
+ output: optional(SafeRelativePath),
56
+ binary: optional(NonEmptyName)
57
+ }
58
+
59
+ export class CandidateBunBuild extends Schema.Class<CandidateBunBuild>("CandidateBunBuild")({
60
+ ...build,
61
+ builder: Schema.Literal("bun"),
62
+ entry: SafeRelativePath,
63
+ minify: optional(Schema.Literal(true))
64
+ }) {}
65
+
66
+ export class CandidateCommandBuild extends Schema.Class<CandidateCommandBuild>("CandidateCommandBuild")({
67
+ ...build,
68
+ builder: Schema.Literal("command"),
69
+ output: SafeRelativePath,
70
+ run: Schema.NonEmptyArray(Schema.String)
71
+ }) {}
72
+
73
+ export class CandidatePrebuiltBuild extends Schema.Class<CandidatePrebuiltBuild>("CandidatePrebuiltBuild")({
74
+ ...build,
75
+ builder: Schema.Literal("prebuilt"),
76
+ output: SafeRelativePath
77
+ }) {}
78
+
79
+ export const CandidateBuild = Schema.Union([
80
+ CandidateBunBuild,
81
+ CandidateCommandBuild,
82
+ CandidatePrebuiltBuild
83
+ ])
84
+
85
+ export class CandidateArchive extends Schema.Class<CandidateArchive>("CandidateArchive")({
86
+ id: optional(nonempty),
87
+ ids: optional(Schema.NonEmptyArray(OutputId)),
88
+ nameTemplate: optional(nonempty),
89
+ formats: optional(Schema.NonEmptyArray(Schema.Literals(["tar.gz", "zip"])))
90
+ }) {}
91
+
92
+ const preparationBase = {
93
+ id: NonEmptyName,
94
+ run: Schema.NonEmptyArray(Schema.String),
95
+ cwd: optional(SafeRelativePath),
96
+ inputs: optional(Schema.Array(OutputId))
97
+ }
98
+
99
+ export class CandidateCheckPreparation extends Schema.Class<CandidateCheckPreparation>("CandidateCheckPreparation")({
100
+ kind: Schema.Literal("check"), ...preparationBase
101
+ }) {}
102
+
103
+ export class CandidateArtifactPreparation extends Schema.Class<CandidateArtifactPreparation>("CandidateArtifactPreparation")({
104
+ kind: Schema.Literal("artifact"), ...preparationBase,
105
+ outputs: Schema.NonEmptyArray(Schema.Struct({
106
+ id: OutputId, path: SafeRelativePath,
107
+ kind: optional(Schema.Literals(["file", "archive", "executable", "digest"])),
108
+ mediaType: optional(nonempty)
109
+ }))
110
+ }) {}
111
+
112
+ const {
113
+ id: _collectionId,
114
+ producer: _collectionProducer,
115
+ ...candidateCollectionFields
116
+ } = ArtifactCollectionContract.fields
117
+
118
+ /** Runtime-discovered outputs for one CommandArtifact preparation. */
119
+ export class CandidateArtifactCollection
120
+ extends Schema.Class<CandidateArtifactCollection>("CandidateArtifactCollection")({
121
+ ...candidateCollectionFields
122
+ }) {}
123
+
124
+ export class CandidateCollectionPreparation
125
+ extends Schema.Class<CandidateCollectionPreparation>("CandidateCollectionPreparation")({
126
+ kind: Schema.Literal("artifact"), ...preparationBase,
127
+ collection: CandidateArtifactCollection
128
+ }) {}
129
+
130
+ export const CandidatePreparation = Schema.Union([
131
+ CandidateCheckPreparation, CandidateArtifactPreparation, CandidateCollectionPreparation
132
+ ])
133
+
134
+ export interface NpmRegistryEndpointPolicy {
135
+ /** Test servers must opt in; production-authored config never enables this. */
136
+ readonly allowInsecureLoopback?: true
137
+ }
138
+
139
+ /** Parse and normalize the complete npm credential audience, including base path. */
140
+ export const canonicalizeNpmRegistryEndpoint = (
141
+ value: string,
142
+ policy: NpmRegistryEndpointPolicy = {}
143
+ ): string => {
144
+ let endpoint: URL
145
+ try { endpoint = new URL(value) } catch {
146
+ throw new Error("npm registry must be an absolute HTTPS URL.")
147
+ }
148
+ const loopback = endpoint.hostname === "localhost" || endpoint.hostname === "127.0.0.1" ||
149
+ endpoint.hostname === "[::1]"
150
+ if (endpoint.host.length === 0 || (endpoint.protocol !== "https:" &&
151
+ !(policy.allowInsecureLoopback === true && loopback && endpoint.protocol === "http:"))) {
152
+ throw new Error("npm registry must be HTTPS; HTTP is reserved for explicitly enabled loopback tests.")
153
+ }
154
+ if (endpoint.username.length > 0 || endpoint.password.length > 0) {
155
+ throw new Error("npm registry must not contain credentials.")
156
+ }
157
+ if (endpoint.search.length > 0 || endpoint.hash.length > 0) {
158
+ throw new Error("npm registry must not contain a query or fragment.")
159
+ }
160
+ endpoint.pathname = endpoint.pathname.replace(/\/{2,}/gu, "/").replace(/\/+$/u, "") || "/"
161
+ return `${endpoint.origin}${endpoint.pathname === "/" ? "/" : `${endpoint.pathname}/`}`
162
+ }
163
+
164
+ /** Canonical npm registry audience, including its normalized base path. */
165
+ export const CanonicalNpmRegistryEndpoint = Schema.NonEmptyString.check(
166
+ Schema.makeFilter((value: string) => {
167
+ try {
168
+ return canonicalizeNpmRegistryEndpoint(value) === value
169
+ ? undefined
170
+ : "npm registry endpoint must be canonical."
171
+ } catch (cause) {
172
+ return cause instanceof Error ? cause.message : String(cause)
173
+ }
174
+ })
175
+ ).pipe(Schema.brand("CanonicalNpmRegistryEndpoint"))
176
+ export type CanonicalNpmRegistryEndpoint = typeof CanonicalNpmRegistryEndpoint.Type
177
+
178
+ /** npm distribution tags are URI-safe names that do not parse as SemVer ranges. */
179
+ export const NpmDistTag = Schema.NonEmptyString.check(Schema.makeFilter((value: string) => {
180
+ if (Semver.validRange(value) !== null) {
181
+ return "npm dist-tag must not be a valid SemVer range."
182
+ }
183
+ if (value.trim() !== value || encodeURIComponent(value) !== value) {
184
+ return "npm dist-tag must be a nonempty URI-safe name without surrounding whitespace."
185
+ }
186
+ return undefined
187
+ })).pipe(Schema.brand("NpmDistTag"))
188
+ export type NpmDistTag = typeof NpmDistTag.Type
189
+
190
+ export const NpmAccess = Schema.Literals(["public", "restricted"])
191
+ export type NpmAccess = typeof NpmAccess.Type
192
+
193
+ export const NpmProvenancePolicy = Schema.Literals(["automatic", "required", "disabled"])
194
+ export type NpmProvenancePolicy = typeof NpmProvenancePolicy.Type
195
+
196
+ const environmentName = Schema.NonEmptyString.check(Schema.makeFilter((value: string) =>
197
+ /^[A-Za-z_][A-Za-z0-9_]*$/u.test(value)
198
+ ? undefined
199
+ : "Credential references must be portable environment variable names."))
200
+
201
+ export class NpmTokenAuthentication
202
+ extends Schema.Class<NpmTokenAuthentication>("NpmTokenAuthentication")({
203
+ strategy: Schema.Literal("token"),
204
+ credential: CredentialRef.check(Schema.makeFilter((value: string) =>
205
+ /^[A-Za-z_][A-Za-z0-9_]*$/u.test(value)
206
+ ? undefined
207
+ : "npm token credential must be a portable environment variable name."))
208
+ }) {}
209
+
210
+ export const NpmTrustedPublisherRepository = Schema.NonEmptyString.check(Schema.makeFilter(
211
+ (value: string) => /^[A-Za-z0-9._-]+\/[A-Za-z0-9._-]+$/u.test(value)
212
+ ? undefined
213
+ : "npm trusted-publisher repository must be an owner/repository coordinate."
214
+ ))
215
+
216
+ export const NpmTrustedPublisherWorkflow = Schema.NonEmptyString.check(Schema.makeFilter(
217
+ (value: string) => /^[A-Za-z0-9_.-]+\.ya?ml$/u.test(value)
218
+ ? undefined
219
+ : "npm trusted-publisher workflow must be one YAML filename from .github/workflows/."
220
+ ))
221
+
222
+ export const NpmTrustedPublisherWorkflowRef = Schema.NonEmptyString.check(Schema.makeFilter(
223
+ (value: string) => {
224
+ if (/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/u.test(value)) return undefined
225
+ if (!/^refs\/(?:heads|tags)\/[A-Za-z0-9][A-Za-z0-9._/-]*$/u.test(value) ||
226
+ value.endsWith("/") || value.endsWith(".") || value.endsWith(".lock") ||
227
+ value.includes("..") || value.includes("//") || value.includes("@{")) {
228
+ return "npm trusted-publisher workflowRef must be an exact heads/tags ref or lowercase 40/64-hex commit SHA."
229
+ }
230
+ return undefined
231
+ }
232
+ ))
233
+
234
+ /** Operator-attested npm package trust relationship for one GitHub workflow. */
235
+ export class NpmTrustedPublisherAttestation
236
+ extends Schema.Class<NpmTrustedPublisherAttestation>("NpmTrustedPublisherAttestation")({
237
+ provider: Schema.Literal("github-actions"),
238
+ runner: Schema.Literal("github-hosted"),
239
+ repository: NpmTrustedPublisherRepository,
240
+ workflow: NpmTrustedPublisherWorkflow,
241
+ workflowRef: NpmTrustedPublisherWorkflowRef,
242
+ allowedAction: Schema.Literal("npm-publish-direct")
243
+ }) {}
244
+
245
+ export class NpmTrustedPublishingAuthentication
246
+ extends Schema.Class<NpmTrustedPublishingAuthentication>("NpmTrustedPublishingAuthentication")({
247
+ strategy: Schema.Literal("trusted-publishing"),
248
+ attestation: NpmTrustedPublisherAttestation
249
+ }) {}
250
+
251
+ export const NpmAuthentication = Schema.Union([
252
+ NpmTokenAuthentication,
253
+ NpmTrustedPublishingAuthentication
254
+ ])
255
+ export type NpmAuthentication = typeof NpmAuthentication.Type
256
+
257
+ /** Fully resolved npm intent. Every field is durable and behavior-affecting. */
258
+ export class CandidateNpmPublish extends Schema.Class<CandidateNpmPublish>("CandidateNpmPublish")({
259
+ packageArtifact: OutputId,
260
+ packageName: NonEmptyName,
261
+ registry: CanonicalNpmRegistryEndpoint,
262
+ distTag: NpmDistTag,
263
+ access: NpmAccess,
264
+ authentication: NpmAuthentication,
265
+ provenance: NpmProvenancePolicy
266
+ }) {}
267
+
268
+ /** Closed PyPI destination set with standards-defined Simple and upload APIs. */
269
+ export class PyPiTokenAuthentication
270
+ extends Schema.Class<PyPiTokenAuthentication>("PyPiTokenAuthentication")({
271
+ strategy: Schema.Literal("token"),
272
+ credential: CredentialRef.check(Schema.makeFilter((value: string) =>
273
+ /^[A-Za-z_][A-Za-z0-9_]*$/u.test(value)
274
+ ? undefined
275
+ : "PyPI token credential must be a portable environment variable name.")),
276
+ /** PyPI project-scoped tokens are the only token authority admitted here. */
277
+ scope: Schema.Literal("project")
278
+ }) {}
279
+
280
+ /**
281
+ * Durable description of the supported external Trusted Publisher owner.
282
+ * ts-release observes these publications but never exchanges OIDC assertions
283
+ * or dispatches their upload itself.
284
+ */
285
+ export class PyPiExternalTrustedPublishingAuthentication
286
+ extends Schema.Class<PyPiExternalTrustedPublishingAuthentication>("PyPiExternalTrustedPublishingAuthentication")({
287
+ strategy: Schema.Literal("trusted-publishing"),
288
+ owner: Schema.Literal("external"),
289
+ action: Schema.Literal("pypa/gh-action-pypi-publish@release/v1"),
290
+ repository: NpmTrustedPublisherRepository,
291
+ workflow: NpmTrustedPublisherWorkflow,
292
+ workflowRef: NpmTrustedPublisherWorkflowRef,
293
+ environment: nonempty,
294
+ /** Complete bundled authority set for the configured publisher identity. */
295
+ projects: Schema.NonEmptyArray(nonempty)
296
+ }) {}
297
+
298
+ export const PyPiAuthentication = Schema.Union([
299
+ PyPiTokenAuthentication,
300
+ PyPiExternalTrustedPublishingAuthentication
301
+ ])
302
+ export type PyPiAuthentication = typeof PyPiAuthentication.Type
303
+
304
+ /** Fully resolved prebuilt-distribution publication intent. */
305
+ export class CandidatePyPiPublish extends Schema.Class<CandidatePyPiPublish>("CandidatePyPiPublish")({
306
+ artifacts: Schema.NonEmptyArray(OutputId),
307
+ project: PyPiProjectName,
308
+ version: Version,
309
+ repository: PyPiRepository,
310
+ authentication: PyPiAuthentication
311
+ }) {}
312
+
313
+ export class CandidateCatalogSource extends Schema.Class<CandidateCatalogSource>("CandidateCatalogSource")({
314
+ artifact: OutputId,
315
+ architecture: CatalogArchitecture
316
+ }) {}
317
+
318
+ const catalogRendererFields = {
319
+ id: NonEmptyName,
320
+ description: nonempty,
321
+ homepage: nonempty,
322
+ license: optional(nonempty),
323
+ sources: Schema.NonEmptyArray(CandidateCatalogSource)
324
+ }
325
+
326
+ export class CandidateHomebrewCatalog extends Schema.Class<CandidateHomebrewCatalog>("CandidateHomebrewCatalog")({
327
+ ...catalogRendererFields,
328
+ formulaName: NonEmptyName,
329
+ installPath: NonEmptyName
330
+ }) {}
331
+
332
+ export class CandidateScoopCatalog extends Schema.Class<CandidateScoopCatalog>("CandidateScoopCatalog")({
333
+ ...catalogRendererFields,
334
+ manifestName: NonEmptyName,
335
+ bin: NonEmptyName
336
+ }) {}
337
+
338
+ export class CandidateCatalogs extends Schema.Class<CandidateCatalogs>("CandidateCatalogs")({
339
+ homebrew: optional(Schema.NonEmptyArray(CandidateHomebrewCatalog)),
340
+ scoop: optional(Schema.NonEmptyArray(CandidateScoopCatalog))
341
+ }) {}
342
+
343
+ export class CandidateCatalogGitDestination
344
+ extends Schema.Class<CandidateCatalogGitDestination>("CandidateCatalogGitDestination")({
345
+ catalog: NonEmptyName,
346
+ repository: GitHubRepositoryCoordinate,
347
+ branch: GitBranchName,
348
+ targetPath: CatalogRepositoryPath,
349
+ statePath: CatalogRepositoryPath,
350
+ tokenEnv: environmentName
351
+ }) {}
352
+
353
+ export class CandidateGitHubPublish extends Schema.Class<CandidateGitHubPublish>("CandidateGitHubPublish")({
354
+ repository: optional(nonempty),
355
+ tokenEnv: optional(environmentName),
356
+ draft: optional(Schema.Boolean),
357
+ prerelease: optional(Schema.Union([Schema.Boolean, Schema.Literal("auto")])),
358
+ body: optional(Schema.String),
359
+ bodyArtifact: optional(OutputId),
360
+ ids: optional(Schema.Array(OutputId)),
361
+ collections: optional(Schema.NonEmptyArray(ArtifactCollectionSelector))
362
+ }) {}
363
+
364
+ export class CandidatePublish extends Schema.Class<CandidatePublish>("CandidatePublish")({
365
+ npm: optional(CandidateNpmPublish),
366
+ pypi: optional(CandidatePyPiPublish),
367
+ catalogGit: optional(Schema.NonEmptyArray(CandidateCatalogGitDestination)),
368
+ github: optional(CandidateGitHubPublish)
369
+ }) {}
370
+
371
+ /** Closed package build performed in private verified staging before npm pack. */
372
+ export class CandidateNpmPackageBuild
373
+ extends Schema.Class<CandidateNpmPackageBuild>("CandidateNpmPackageBuild")({
374
+ run: Schema.NonEmptyArray(Schema.NonEmptyString),
375
+ outputRoots: Schema.NonEmptyArray(SafeRelativePath)
376
+ }) {}
377
+
378
+ export class CandidateNpmPackage
379
+ extends Schema.Class<CandidateNpmPackage>("CandidateNpmPackage")({
380
+ path: optional(SafeRelativePath),
381
+ build: optional(CandidateNpmPackageBuild)
382
+ }) {}
383
+
384
+ export class CandidateConfig extends Schema.Class<CandidateConfig>("CandidateConfig")({
385
+ "$schema": optional(Schema.String),
386
+ project: CandidateProject,
387
+ builds: optional(Schema.NonEmptyArray(CandidateBuild)),
388
+ preparations: optional(Schema.NonEmptyArray(CandidatePreparation)),
389
+ npmPackage: optional(CandidateNpmPackage),
390
+ artifacts: optional(Schema.NonEmptyArray(CandidateArtifact)),
391
+ archives: optional(Schema.NonEmptyArray(CandidateArchive)),
392
+ checksum: optional(CandidateChecksum),
393
+ catalogs: optional(CandidateCatalogs),
394
+ publish: optional(CandidatePublish)
395
+ }) {}