@mannyc1/ts-release 0.0.6 → 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 (639) hide show
  1. package/ARCHITECTURE.md +124 -87
  2. package/CHANGELOG.md +115 -0
  3. package/LICENSE +21 -0
  4. package/README.md +272 -540
  5. package/SPEC.md +206 -305
  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 +61 -154
  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 -59
  440. package/templates/bun-cli-github/README.md +12 -0
  441. package/templates/bun-cli-github/release.config.json +51 -0
  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/config/errors.d.ts +0 -24
  455. package/dist/config/errors.d.ts.map +0 -1
  456. package/dist/config/errors.js +0 -19
  457. package/dist/config/errors.js.map +0 -1
  458. package/dist/config/load.d.ts +0 -9
  459. package/dist/config/load.d.ts.map +0 -1
  460. package/dist/config/load.js +0 -29
  461. package/dist/config/load.js.map +0 -1
  462. package/dist/config/schema.d.ts +0 -12
  463. package/dist/config/schema.d.ts.map +0 -1
  464. package/dist/config/schema.js +0 -19
  465. package/dist/config/schema.js.map +0 -1
  466. package/dist/domain/artifact.d.ts +0 -36
  467. package/dist/domain/artifact.d.ts.map +0 -1
  468. package/dist/domain/artifact.js +0 -29
  469. package/dist/domain/artifact.js.map +0 -1
  470. package/dist/domain/evidence.d.ts +0 -108
  471. package/dist/domain/evidence.d.ts.map +0 -1
  472. package/dist/domain/evidence.js +0 -96
  473. package/dist/domain/evidence.js.map +0 -1
  474. package/dist/domain/operation.d.ts +0 -153
  475. package/dist/domain/operation.d.ts.map +0 -1
  476. package/dist/domain/operation.js +0 -320
  477. package/dist/domain/operation.js.map +0 -1
  478. package/dist/domain/release.d.ts +0 -141
  479. package/dist/domain/release.d.ts.map +0 -1
  480. package/dist/domain/release.js +0 -127
  481. package/dist/domain/release.js.map +0 -1
  482. package/dist/domain/remote-state.d.ts +0 -85
  483. package/dist/domain/remote-state.d.ts.map +0 -1
  484. package/dist/domain/remote-state.js +0 -77
  485. package/dist/domain/remote-state.js.map +0 -1
  486. package/dist/domain/status.d.ts +0 -43
  487. package/dist/domain/status.d.ts.map +0 -1
  488. package/dist/domain/status.js +0 -51
  489. package/dist/domain/status.js.map +0 -1
  490. package/dist/domain/target.d.ts +0 -135
  491. package/dist/domain/target.d.ts.map +0 -1
  492. package/dist/domain/target.js +0 -137
  493. package/dist/domain/target.js.map +0 -1
  494. package/dist/host/host.d.ts +0 -32
  495. package/dist/host/host.d.ts.map +0 -1
  496. package/dist/host/host.js +0 -24
  497. package/dist/host/host.js.map +0 -1
  498. package/dist/host/http-live.d.ts +0 -6
  499. package/dist/host/http-live.d.ts.map +0 -1
  500. package/dist/host/http-live.js +0 -86
  501. package/dist/host/http-live.js.map +0 -1
  502. package/dist/host/http.d.ts +0 -43
  503. package/dist/host/http.d.ts.map +0 -1
  504. package/dist/host/http.js +0 -59
  505. package/dist/host/http.js.map +0 -1
  506. package/dist/host/platform.d.ts +0 -10
  507. package/dist/host/platform.d.ts.map +0 -1
  508. package/dist/host/platform.js +0 -114
  509. package/dist/host/platform.js.map +0 -1
  510. package/dist/host/test.d.ts +0 -23
  511. package/dist/host/test.d.ts.map +0 -1
  512. package/dist/host/test.js +0 -222
  513. package/dist/host/test.js.map +0 -1
  514. package/dist/internal/workflow-phases.d.ts +0 -3
  515. package/dist/internal/workflow-phases.d.ts.map +0 -1
  516. package/dist/internal/workflow-phases.js +0 -2
  517. package/dist/internal/workflow-phases.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 -84
  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 -81
  531. package/dist/planner/errors.d.ts.map +0 -1
  532. package/dist/planner/errors.js +0 -70
  533. package/dist/planner/errors.js.map +0 -1
  534. package/dist/planner/evidence-recorder.d.ts +0 -26
  535. package/dist/planner/evidence-recorder.d.ts.map +0 -1
  536. package/dist/planner/evidence-recorder.js +0 -330
  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 -159
  541. package/dist/planner/executor.js.map +0 -1
  542. package/dist/planner/normalize-release.d.ts +0 -16
  543. package/dist/planner/normalize-release.d.ts.map +0 -1
  544. package/dist/planner/normalize-release.js +0 -218
  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 -261
  549. package/dist/planner/reconcile.js.map +0 -1
  550. package/dist/planner/release-eligibility.d.ts +0 -39
  551. package/dist/planner/release-eligibility.d.ts.map +0 -1
  552. package/dist/planner/release-eligibility.js +0 -578
  553. package/dist/planner/release-eligibility.js.map +0 -1
  554. package/dist/planner/render-plan.d.ts +0 -15
  555. package/dist/planner/render-plan.d.ts.map +0 -1
  556. package/dist/planner/render-plan.js +0 -238
  557. package/dist/planner/render-plan.js.map +0 -1
  558. package/dist/planner/status.d.ts +0 -40
  559. package/dist/planner/status.d.ts.map +0 -1
  560. package/dist/planner/status.js +0 -313
  561. package/dist/planner/status.js.map +0 -1
  562. package/dist/targets/adapter-helpers.d.ts +0 -64
  563. package/dist/targets/adapter-helpers.d.ts.map +0 -1
  564. package/dist/targets/adapter-helpers.js +0 -124
  565. package/dist/targets/adapter-helpers.js.map +0 -1
  566. package/dist/targets/adapter.d.ts +0 -17
  567. package/dist/targets/adapter.d.ts.map +0 -1
  568. package/dist/targets/adapter.js +0 -2
  569. package/dist/targets/adapter.js.map +0 -1
  570. package/dist/targets/github-release.d.ts +0 -25
  571. package/dist/targets/github-release.d.ts.map +0 -1
  572. package/dist/targets/github-release.js +0 -82
  573. package/dist/targets/github-release.js.map +0 -1
  574. package/dist/targets/github.d.ts +0 -11
  575. package/dist/targets/github.d.ts.map +0 -1
  576. package/dist/targets/github.js +0 -125
  577. package/dist/targets/github.js.map +0 -1
  578. package/dist/targets/homebrew.d.ts +0 -11
  579. package/dist/targets/homebrew.d.ts.map +0 -1
  580. package/dist/targets/homebrew.js +0 -97
  581. package/dist/targets/homebrew.js.map +0 -1
  582. package/dist/targets/live.d.ts +0 -5
  583. package/dist/targets/live.d.ts.map +0 -1
  584. package/dist/targets/live.js +0 -50
  585. package/dist/targets/live.js.map +0 -1
  586. package/dist/targets/npm.d.ts +0 -10
  587. package/dist/targets/npm.d.ts.map +0 -1
  588. package/dist/targets/npm.js +0 -118
  589. package/dist/targets/npm.js.map +0 -1
  590. package/dist/targets/pypi.d.ts +0 -11
  591. package/dist/targets/pypi.d.ts.map +0 -1
  592. package/dist/targets/pypi.js +0 -103
  593. package/dist/targets/pypi.js.map +0 -1
  594. package/dist/targets/registry.d.ts +0 -25
  595. package/dist/targets/registry.d.ts.map +0 -1
  596. package/dist/targets/registry.js +0 -34
  597. package/dist/targets/registry.js.map +0 -1
  598. package/dist/targets/scoop.d.ts +0 -11
  599. package/dist/targets/scoop.d.ts.map +0 -1
  600. package/dist/targets/scoop.js +0 -78
  601. package/dist/targets/scoop.js.map +0 -1
  602. package/dist/types/effect-internal.d.ts +0 -5
  603. package/dist/types/effect-internal.d.ts.map +0 -1
  604. package/dist/types/effect-internal.js +0 -2
  605. package/dist/types/effect-internal.js.map +0 -1
  606. package/dist/workflows/config.d.ts +0 -252
  607. package/dist/workflows/config.d.ts.map +0 -1
  608. package/dist/workflows/config.js +0 -465
  609. package/dist/workflows/config.js.map +0 -1
  610. package/dist/workflows/diagnostics.d.ts +0 -62
  611. package/dist/workflows/diagnostics.d.ts.map +0 -1
  612. package/dist/workflows/diagnostics.js +0 -527
  613. package/dist/workflows/diagnostics.js.map +0 -1
  614. package/dist/workflows/evidence.d.ts +0 -26
  615. package/dist/workflows/evidence.d.ts.map +0 -1
  616. package/dist/workflows/evidence.js +0 -44
  617. package/dist/workflows/evidence.js.map +0 -1
  618. package/dist/workflows/index.d.ts +0 -7
  619. package/dist/workflows/index.d.ts.map +0 -1
  620. package/dist/workflows/index.js +0 -6
  621. package/dist/workflows/index.js.map +0 -1
  622. package/dist/workflows/init.d.ts +0 -84
  623. package/dist/workflows/init.d.ts.map +0 -1
  624. package/dist/workflows/init.js +0 -441
  625. package/dist/workflows/init.js.map +0 -1
  626. package/dist/workflows/live.d.ts +0 -9
  627. package/dist/workflows/live.d.ts.map +0 -1
  628. package/dist/workflows/live.js +0 -7
  629. package/dist/workflows/live.js.map +0 -1
  630. package/dist/workflows/options.d.ts +0 -30
  631. package/dist/workflows/options.d.ts.map +0 -1
  632. package/dist/workflows/options.js +0 -16
  633. package/dist/workflows/options.js.map +0 -1
  634. package/examples/non-strict-skips/artifacts/release-example-skips-0.1.0.tgz +0 -1
  635. package/examples/non-strict-skips/release.config.json +0 -31
  636. package/examples/pypi-registry/release.config.json +0 -31
  637. package/templates/github-actions/plan-and-approved-execute.yml +0 -58
  638. package/templates/github-actions/plan-only.yml +0 -33
  639. package/templates/github-actions/trusted-publishing.yml +0 -61
@@ -0,0 +1,55 @@
1
+ // The shape a HUMAN writes. It is the canonical config with the facts a
2
+ // repository already knows made optional, plus the two directives that say how
3
+ // to fill them. Nothing here is inferred at plan time: resolution happens at
4
+ // the application boundary and produces a canonical value before `plan` runs.
5
+ //
6
+ // The field lists are REUSED from the canonical classes, never restated — a
7
+ // hand-mirrored schema is a drift machine.
8
+ import * as Schema from "effect/Schema";
9
+ import { NonEmptyName, Version } from "../model/primitives.js";
10
+ import { CandidateConfig, CandidatePublish, CandidateProject, NpmAccess, NpmAuthentication, NpmProvenancePolicy, PyPiAuthentication, PyPiRepository } from "../recipes/config.js";
11
+ const optional = Schema.optionalKey;
12
+ export class AuthoredProject extends Schema.Class("AuthoredProject")({
13
+ ...CandidateProject.fields,
14
+ // Filled from the package manifest's name when omitted; still required if
15
+ // nothing observes one.
16
+ name: optional(NonEmptyName),
17
+ // Observed or derived when omitted: version from a manifest or the tag at
18
+ // HEAD, and tag from the template. Source commit is always observed; a
19
+ // human-authored commit expectation would only validate and then disappear.
20
+ version: optional(Version),
21
+ tag: optional(NonEmptyName),
22
+ // `{version}` is the only token, and it is the only one this repo will ever
23
+ // accept: a template grammar is the rejected direction.
24
+ tagTemplate: optional(Schema.NonEmptyString)
25
+ }) {
26
+ }
27
+ /** Human-authored npm policy. Resolution fills only documented deterministic defaults. */
28
+ export class AuthoredNpmPublish extends Schema.Class("AuthoredNpmPublish")({
29
+ registry: optional(Schema.NonEmptyString),
30
+ distTag: optional(Schema.NonEmptyString),
31
+ access: optional(NpmAccess),
32
+ authentication: NpmAuthentication,
33
+ provenance: optional(NpmProvenancePolicy)
34
+ }) {
35
+ }
36
+ export class AuthoredPyPiPublish extends Schema.Class("AuthoredPyPiPublish")({
37
+ artifacts: Schema.NonEmptyArray(Schema.NonEmptyString),
38
+ repository: optional(PyPiRepository),
39
+ authentication: PyPiAuthentication
40
+ }) {
41
+ }
42
+ export class AuthoredPublish extends Schema.Class("AuthoredPublish")({
43
+ ...CandidatePublish.fields,
44
+ npm: optional(AuthoredNpmPublish),
45
+ pypi: optional(AuthoredPyPiPublish)
46
+ }) {
47
+ }
48
+ export class AuthoredConfig extends Schema.Class("AuthoredConfig")({
49
+ ...CandidateConfig.fields,
50
+ project: AuthoredProject,
51
+ publish: optional(AuthoredPublish),
52
+ versionFrom: optional(Schema.Literals(["manifest", "git-tag"]))
53
+ }) {
54
+ }
55
+ //# sourceMappingURL=authored.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"authored.js","sourceRoot":"","sources":["../../src/resolve/authored.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,+EAA+E;AAC/E,6EAA6E;AAC7E,8EAA8E;AAC9E,EAAE;AACF,4EAA4E;AAC5E,2CAA2C;AAC3C,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAC9D,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,SAAS,EACT,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACf,MAAM,sBAAsB,CAAA;AAE7B,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAA;AAEnC,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,KAAK,CAAkB,iBAAiB,CAAC,CAAC;IACpF,GAAG,gBAAgB,CAAC,MAAM;IAC1B,0EAA0E;IAC1E,wBAAwB;IACxB,IAAI,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC5B,0EAA0E;IAC1E,uEAAuE;IACvE,4EAA4E;IAC5E,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC;IAC1B,GAAG,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC3B,4EAA4E;IAC5E,wDAAwD;IACxD,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;CAC7C,CAAC;CAAG;AAEL,0FAA0F;AAC1F,MAAM,OAAO,kBAAmB,SAAQ,MAAM,CAAC,KAAK,CAAqB,oBAAoB,CAAC,CAAC;IAC7F,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;IACzC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;IACxC,MAAM,EAAE,QAAQ,CAAC,SAAS,CAAC;IAC3B,cAAc,EAAE,iBAAiB;IACjC,UAAU,EAAE,QAAQ,CAAC,mBAAmB,CAAC;CAC1C,CAAC;CAAG;AAEL,MAAM,OAAO,mBAAoB,SAAQ,MAAM,CAAC,KAAK,CAAsB,qBAAqB,CAAC,CAAC;IAChG,SAAS,EAAE,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,cAAc,CAAC;IACtD,UAAU,EAAE,QAAQ,CAAC,cAAc,CAAC;IACpC,cAAc,EAAE,kBAAkB;CACnC,CAAC;CAAG;AAEL,MAAM,OAAO,eAAgB,SAAQ,MAAM,CAAC,KAAK,CAAkB,iBAAiB,CAAC,CAAC;IACpF,GAAG,gBAAgB,CAAC,MAAM;IAC1B,GAAG,EAAE,QAAQ,CAAC,kBAAkB,CAAC;IACjC,IAAI,EAAE,QAAQ,CAAC,mBAAmB,CAAC;CACpC,CAAC;CAAG;AAEL,MAAM,OAAO,cAAe,SAAQ,MAAM,CAAC,KAAK,CAAiB,gBAAgB,CAAC,CAAC;IACjF,GAAG,eAAe,CAAC,MAAM;IACzB,OAAO,EAAE,eAAe;IACxB,OAAO,EAAE,QAAQ,CAAC,eAAe,CAAC;IAClC,WAAW,EAAE,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;CAChE,CAAC;CAAG"}
@@ -0,0 +1,3 @@
1
+ export declare const toPlainJson: (value: unknown) => unknown;
2
+ export declare const encodeResolvedConfig: (config: unknown) => string;
3
+ //# sourceMappingURL=encode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.d.ts","sourceRoot":"","sources":["../../src/resolve/encode.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,WAAW,GAAI,OAAO,OAAO,KAAG,OAS5C,CAAA;AAED,eAAO,MAAM,oBAAoB,GAAI,QAAQ,OAAO,KAAG,MACF,CAAA"}
@@ -0,0 +1,21 @@
1
+ // The reviewable IR's byte shape: readable JSON with sorted keys, so two
2
+ // resolutions of the same inputs produce the same file and a diff shows only
3
+ // what actually changed.
4
+ //
5
+ // This is deliberately NOT the plan-bytes canonical encoder. Canonical encoding
6
+ // is a durable-document discipline that plan identity depends on; this is a
7
+ // convenience artifact that nothing ever reads back.
8
+ // Also the plain-JSON conversion the resolver needs: decoding produces Schema
9
+ // class INSTANCES, and the canonical decoder refuses non-plain objects.
10
+ export const toPlainJson = (value) => {
11
+ if (Array.isArray(value))
12
+ return value.map(toPlainJson);
13
+ if (typeof value !== "object" || value === null)
14
+ return value;
15
+ return Object.fromEntries(Object.entries(value)
16
+ .filter(([, entry]) => entry !== undefined)
17
+ .sort(([left], [right]) => left < right ? -1 : left > right ? 1 : 0)
18
+ .map(([key, entry]) => [key, toPlainJson(entry)]));
19
+ };
20
+ export const encodeResolvedConfig = (config) => `${JSON.stringify(toPlainJson(config), null, 2)}\n`;
21
+ //# sourceMappingURL=encode.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"encode.js","sourceRoot":"","sources":["../../src/resolve/encode.ts"],"names":[],"mappings":"AAAA,yEAAyE;AACzE,6EAA6E;AAC7E,yBAAyB;AACzB,EAAE;AACF,gFAAgF;AAChF,4EAA4E;AAC5E,qDAAqD;AACrD,8EAA8E;AAC9E,wEAAwE;AACxE,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,KAAc,EAAW,EAAE;IACrD,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;IACvD,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IAC7D,OAAO,MAAM,CAAC,WAAW,CACvB,MAAM,CAAC,OAAO,CAAC,KAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,KAAK,KAAK,SAAS,CAAC;SAC1C,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;SACnE,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CACpD,CAAA;AACH,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,MAAe,EAAU,EAAE,CAC9D,GAAG,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAA"}
@@ -0,0 +1,7 @@
1
+ export declare class ResolveError extends Error {
2
+ readonly field: string;
3
+ readonly reason: string;
4
+ readonly _tag = "ResolveError";
5
+ constructor(field: string, reason: string);
6
+ }
7
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/resolve/errors.ts"],"names":[],"mappings":"AAKA,qBAAa,YAAa,SAAQ,KAAK;IAGnC,QAAQ,CAAC,KAAK,EAAE,MAAM;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM;IAHzB,QAAQ,CAAC,IAAI,kBAAiB;gBAEnB,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM;CAK1B"}
@@ -0,0 +1,17 @@
1
+ // `resolveConfig` is a PUBLIC boundary function that apps call directly, so its
2
+ // refusals follow the boundary rule SPEC §13 states: a stable plain error
3
+ // carrying a reason, readable as-is when a CLI prints it. (The internal
4
+ // ConfigValueError family is a decode-time vocabulary; its `message` is empty
5
+ // by construction, which would reach a user as a blank line.)
6
+ export class ResolveError extends Error {
7
+ field;
8
+ reason;
9
+ _tag = "ResolveError";
10
+ constructor(field, reason) {
11
+ super(reason);
12
+ this.field = field;
13
+ this.reason = reason;
14
+ this.name = "ResolveError";
15
+ }
16
+ }
17
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/resolve/errors.ts"],"names":[],"mappings":"AAAA,gFAAgF;AAChF,0EAA0E;AAC1E,wEAAwE;AACxE,8EAA8E;AAC9E,8DAA8D;AAC9D,MAAM,OAAO,YAAa,SAAQ,KAAK;IAG1B;IACA;IAHF,IAAI,GAAG,cAAc,CAAA;IAC9B,YACW,KAAa,EACb,MAAc;QAEvB,KAAK,CAAC,MAAM,CAAC,CAAA;QAHJ,UAAK,GAAL,KAAK,CAAQ;QACb,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,IAAI,GAAG,cAAc,CAAA;IAC5B,CAAC;CACF"}
@@ -0,0 +1,12 @@
1
+ import * as Schema from "effect/Schema";
2
+ declare const ObservedFacts_base: Schema.Class<ObservedFacts, Schema.Struct<{
3
+ readonly commit: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "NonEmptyName">>;
4
+ readonly manifestName: Schema.optionalKey<Schema.NonEmptyString>;
5
+ readonly manifestVersion: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "Version">>;
6
+ readonly repository: Schema.optionalKey<Schema.NonEmptyString>;
7
+ readonly headTagVersion: Schema.optionalKey<Schema.brand<Schema.NonEmptyString, "Version">>;
8
+ }>, {}>;
9
+ export declare class ObservedFacts extends ObservedFacts_base {
10
+ }
11
+ export {};
12
+ //# sourceMappingURL=facts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/resolve/facts.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;;;;;;;;AAKvC,qBAAa,aAAc,SAAQ,kBASjC;CAAG"}
@@ -0,0 +1,18 @@
1
+ // What the world can tell us about a release, observed by an app and passed in
2
+ // as a value. The library never looks: no git, no filesystem, no environment —
3
+ // observation is the imperative shell's job, resolution is pure.
4
+ import * as Schema from "effect/Schema";
5
+ import { NonEmptyName, Version } from "../model/primitives.js";
6
+ const optional = Schema.optionalKey;
7
+ export class ObservedFacts extends Schema.Class("ObservedFacts")({
8
+ commit: optional(NonEmptyName),
9
+ manifestName: optional(Schema.NonEmptyString),
10
+ manifestVersion: optional(Version),
11
+ repository: optional(Schema.NonEmptyString),
12
+ // The version carried by the single release-shaped tag at HEAD. Ambiguity is
13
+ // resolved by the observer: several candidate tags means NO fact, so the
14
+ // resolver refuses instead of picking one.
15
+ headTagVersion: optional(Version)
16
+ }) {
17
+ }
18
+ //# sourceMappingURL=facts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../src/resolve/facts.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,+EAA+E;AAC/E,iEAAiE;AACjE,OAAO,KAAK,MAAM,MAAM,eAAe,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAA;AAE9D,MAAM,QAAQ,GAAG,MAAM,CAAC,WAAW,CAAA;AAEnC,MAAM,OAAO,aAAc,SAAQ,MAAM,CAAC,KAAK,CAAgB,eAAe,CAAC,CAAC;IAC9E,MAAM,EAAE,QAAQ,CAAC,YAAY,CAAC;IAC9B,YAAY,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;IAC7C,eAAe,EAAE,QAAQ,CAAC,OAAO,CAAC;IAClC,UAAU,EAAE,QAAQ,CAAC,MAAM,CAAC,cAAc,CAAC;IAC3C,6EAA6E;IAC7E,yEAAyE;IACzE,2CAA2C;IAC3C,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC;CAClC,CAAC;CAAG"}
@@ -0,0 +1,10 @@
1
+ import { MISSING_COMMIT } from "../model/errors.js";
2
+ import { CandidateConfig } from "../recipes/config.js";
3
+ /**
4
+ * Resolve an authored configuration and observed facts into the canonical
5
+ * configuration. Pure and total: the same inputs always produce the same value,
6
+ * and every unfillable or contradicted field raises `ResolveError`.
7
+ */
8
+ export { MISSING_COMMIT };
9
+ export declare const resolveConfig: (authored: unknown, facts: unknown) => CandidateConfig;
10
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/resolve/resolve.ts"],"names":[],"mappings":"AAWA,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AAEnD,OAAO,EACL,eAAe,EAQhB,MAAM,sBAAsB,CAAA;AAuQ7B;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,CAAA;AAEzB,eAAO,MAAM,aAAa,GAAI,UAAU,OAAO,EAAE,OAAO,OAAO,KAAG,eAmCjE,CAAA"}
@@ -0,0 +1,242 @@
1
+ // Authored configuration plus observed facts → the canonical config, by total
2
+ // rules and nothing else. This is the ONLY place authored-to-canonical
3
+ // semantics may live: no recipe and no compiler may infer anything, because
4
+ // plan bytes are a function of the canonical value alone.
5
+ //
6
+ // Every rule is one of three shapes: the authored value wins, a fact fills an
7
+ // omission, or the two disagree and the resolver REFUSES naming both values and
8
+ // where each came from. Silence is never an option — a release that guesses its
9
+ // own identity is the defect this module exists to prevent.
10
+ import * as Schema from "effect/Schema";
11
+ import * as Semver from "semver";
12
+ import { MISSING_COMMIT } from "../model/errors.js";
13
+ import { NonEmptyName, OutputId } from "../model/primitives.js";
14
+ import { CandidateConfig, CanonicalNpmRegistryEndpoint, NpmDistTag, PyPiProjectName, canonicalizeNpmRegistryEndpoint, normalizePyPiProjectName } from "../recipes/config.js";
15
+ import { AuthoredConfig } from "./authored.js";
16
+ import { toPlainJson } from "./encode.js";
17
+ import { ResolveError } from "./errors.js";
18
+ import { ObservedFacts } from "./facts.js";
19
+ const refuse = (field, reason) => {
20
+ throw new ResolveError(field, reason);
21
+ };
22
+ const disagreement = (field, authored, observed, source) => refuse(`project.${field}`, `project.${field} is ${JSON.stringify(authored)} in the config but ${JSON.stringify(observed)} ${source}. Remove the authored value or correct the source; the resolver never picks.`);
23
+ const decodeAuthored = Schema.decodeUnknownSync(AuthoredConfig, { onExcessProperty: "error" });
24
+ const decodeFacts = Schema.decodeUnknownSync(ObservedFacts, { onExcessProperty: "error" });
25
+ const decodeCandidate = Schema.decodeUnknownSync(CandidateConfig, { onExcessProperty: "error" });
26
+ const version = (authored, facts) => {
27
+ const directive = authored.versionFrom;
28
+ const observed = directive === "manifest"
29
+ ? facts.manifestVersion
30
+ : directive === "git-tag"
31
+ ? facts.headTagVersion
32
+ : undefined;
33
+ const source = directive === "manifest" ? "in the package manifest" : "on the tag at HEAD";
34
+ if (authored.project.version !== undefined) {
35
+ if (observed !== undefined && observed !== authored.project.version) {
36
+ disagreement("version", authored.project.version, observed, source);
37
+ }
38
+ return authored.project.version;
39
+ }
40
+ if (directive === undefined) {
41
+ return refuse("project.version", "project.version is required. State it, or set versionFrom to \"manifest\" or \"git-tag\" so it can be observed.");
42
+ }
43
+ if (observed === undefined) {
44
+ return refuse("project.version", `versionFrom is ${JSON.stringify(directive)} but no version was observed ${source}.`);
45
+ }
46
+ return observed;
47
+ };
48
+ // `{version}` is the whole grammar. An unrecognized token is a refusal, exactly
49
+ // as the checksum name filter treats one.
50
+ const tag = (authored, resolved) => {
51
+ if (authored.project.tag !== undefined)
52
+ return authored.project.tag;
53
+ const template = authored.project.tagTemplate ?? "v{version}";
54
+ const rendered = template.replaceAll("{version}", resolved);
55
+ if (rendered.includes("{") || rendered.includes("}")) {
56
+ return refuse("project.tagTemplate", `project.tagTemplate supports only the {version} token, got ${JSON.stringify(template)}.`);
57
+ }
58
+ return NonEmptyName.make(rendered);
59
+ };
60
+ const requireObservedCommit = (facts) => {
61
+ if (facts.commit === undefined)
62
+ refuse("source.commit", MISSING_COMMIT);
63
+ };
64
+ const names = (authored, facts) => {
65
+ const manifest = facts.manifestName;
66
+ if (manifest !== undefined && authored.project.packageName !== undefined &&
67
+ manifest !== authored.project.packageName) {
68
+ disagreement("packageName", authored.project.packageName, manifest, "in the package manifest");
69
+ }
70
+ const name = authored.project.name ?? manifest;
71
+ if (name === undefined) {
72
+ return refuse("project.name", "project.name is required when no package manifest is observed.");
73
+ }
74
+ const packageName = authored.project.packageName ?? manifest;
75
+ return { name, ...(packageName === undefined ? {} : { packageName }) };
76
+ };
77
+ const repository = (authored, facts) => {
78
+ if (authored.project.repository !== undefined && facts.repository !== undefined && authored.project.repository !== facts.repository) {
79
+ disagreement("repository", authored.project.repository, facts.repository, "in the observed repository");
80
+ }
81
+ return authored.project.repository ?? facts.repository;
82
+ };
83
+ const canonicalRegistry = (value) => {
84
+ try {
85
+ return CanonicalNpmRegistryEndpoint.make(canonicalizeNpmRegistryEndpoint(value ?? "https://registry.npmjs.org"));
86
+ }
87
+ catch (cause) {
88
+ return refuse("publish.npm.registry", cause instanceof Error ? cause.message : String(cause));
89
+ }
90
+ };
91
+ const distTag = (versionValue, authored) => {
92
+ const normalized = Semver.valid(versionValue.toString());
93
+ if (normalized === null || normalized !== versionValue.toString()) {
94
+ return refuse("project.version", `npm publication requires a canonical semantic version, got ${JSON.stringify(versionValue)}.`);
95
+ }
96
+ const prerelease = Semver.prerelease(normalized) !== null;
97
+ if (authored === undefined) {
98
+ if (prerelease) {
99
+ return refuse("publish.npm.distTag", "Prerelease npm versions require an explicit non-latest distTag.");
100
+ }
101
+ return NpmDistTag.make("latest");
102
+ }
103
+ let tag;
104
+ try {
105
+ tag = NpmDistTag.make(authored);
106
+ }
107
+ catch (cause) {
108
+ return refuse("publish.npm.distTag", cause instanceof Error ? cause.message : String(cause));
109
+ }
110
+ if (prerelease && tag === "latest") {
111
+ return refuse("publish.npm.distTag", "Prerelease npm versions cannot publish under the latest dist-tag.");
112
+ }
113
+ return tag;
114
+ };
115
+ const npmPublish = (authored, project) => {
116
+ const npm = authored.publish?.npm;
117
+ if (npm === undefined)
118
+ return undefined;
119
+ if (authored.npmPackage === undefined) {
120
+ return refuse("npmPackage", "publish.npm requires npmPackage to declare the exact package artifact prepared by npm pack.");
121
+ }
122
+ const packageName = project.packageName ?? project.name;
123
+ if (npm.access === "restricted" && !packageName.startsWith("@")) {
124
+ return refuse("publish.npm.access", "npm restricted access is valid only for scoped package names.");
125
+ }
126
+ const registry = canonicalRegistry(npm.registry);
127
+ const authentication = npm.authentication;
128
+ if (authentication.strategy === "trusted-publishing") {
129
+ if (registry !== "https://registry.npmjs.org/") {
130
+ return refuse("publish.npm.authentication", "npm trusted publishing is certified only for https://registry.npmjs.org/.");
131
+ }
132
+ if (project.repository === undefined) {
133
+ return refuse("project.repository", "npm trusted publishing requires the exact GitHub owner/repository coordinate.");
134
+ }
135
+ if (authentication.attestation.repository !== project.repository) {
136
+ return refuse("publish.npm.authentication.attestation.repository", `The attested repository ${JSON.stringify(authentication.attestation.repository)} does not match ${JSON.stringify(project.repository)} resolved for the package.`);
137
+ }
138
+ }
139
+ const provenance = npm.provenance ??
140
+ (authentication.strategy === "trusted-publishing" ? "automatic" : "disabled");
141
+ if (authentication.strategy === "token" && provenance === "automatic") {
142
+ return refuse("publish.npm.provenance", "Automatic provenance is an npm trusted-publishing behavior; token mode must choose required or disabled.");
143
+ }
144
+ return {
145
+ packageArtifact: OutputId.make("npm-package"),
146
+ packageName: NonEmptyName.make(packageName),
147
+ registry,
148
+ distTag: distTag(project.version, npm.distTag),
149
+ access: npm.access ?? "public",
150
+ authentication,
151
+ provenance
152
+ };
153
+ };
154
+ const pypiPublish = (authored, project) => {
155
+ const pypi = authored.publish?.pypi;
156
+ if (pypi === undefined)
157
+ return undefined;
158
+ const artifacts = pypi.artifacts.map((id) => OutputId.make(id));
159
+ if (new Set(artifacts).size !== artifacts.length) {
160
+ return refuse("publish.pypi.artifacts", "PyPI publication cannot repeat one distribution artifact.");
161
+ }
162
+ if (pypi.authentication.strategy === "trusted-publishing") {
163
+ if (project.repository === undefined) {
164
+ return refuse("project.repository", "External PyPI trusted publishing requires the exact GitHub owner/repository coordinate.");
165
+ }
166
+ if (pypi.authentication.repository !== project.repository) {
167
+ return refuse("publish.pypi.authentication.repository", `The external PyPI publisher repository ${JSON.stringify(pypi.authentication.repository)} does not match ${JSON.stringify(project.repository)}.`);
168
+ }
169
+ let projectName;
170
+ let projects;
171
+ try {
172
+ projectName = normalizePyPiProjectName(project.name);
173
+ projects = pypi.authentication.projects.map(normalizePyPiProjectName);
174
+ }
175
+ catch (cause) {
176
+ return refuse("publish.pypi", cause instanceof Error ? cause.message : String(cause));
177
+ }
178
+ if (!projects.includes(projectName)) {
179
+ return refuse("publish.pypi.authentication.projects", `The external PyPI publisher authority set does not include ${JSON.stringify(projectName)}.`);
180
+ }
181
+ if (new Set(projects).size !== projects.length) {
182
+ return refuse("publish.pypi.authentication.projects", "External PyPI publisher project coordinates must be unique after normalization.");
183
+ }
184
+ }
185
+ let projectName;
186
+ try {
187
+ projectName = PyPiProjectName.make(normalizePyPiProjectName(project.name));
188
+ }
189
+ catch (cause) {
190
+ return refuse("publish.pypi", cause instanceof Error ? cause.message : String(cause));
191
+ }
192
+ return {
193
+ artifacts,
194
+ project: projectName,
195
+ version: project.version,
196
+ repository: pypi.repository ?? "pypi",
197
+ authentication: pypi.authentication
198
+ };
199
+ };
200
+ /**
201
+ * Resolve an authored configuration and observed facts into the canonical
202
+ * configuration. Pure and total: the same inputs always produce the same value,
203
+ * and every unfillable or contradicted field raises `ResolveError`.
204
+ */
205
+ export { MISSING_COMMIT };
206
+ export const resolveConfig = (authored, facts) => {
207
+ const config = decodeAuthored(authored);
208
+ const observed = decodeFacts(facts);
209
+ const resolvedVersion = version(config, observed);
210
+ // The directives are CONSUMED here: they describe how to resolve, and the
211
+ // canonical world has never heard of them.
212
+ const { project, versionFrom: _directive, $schema: _schema, ...rest } = config;
213
+ const { tagTemplate: _template, ...projectRest } = project;
214
+ const resolvedNames = names(config, observed);
215
+ const resolvedRepository = repository(config, observed);
216
+ // Verified source identity is observation-owned. It must exist, but is not a
217
+ // human-authored config field and is not copied into canonical release intent.
218
+ requireObservedCommit(observed);
219
+ const resolvedProject = {
220
+ ...projectRest,
221
+ ...resolvedNames,
222
+ ...(resolvedRepository === undefined ? {} : { repository: resolvedRepository }),
223
+ version: resolvedVersion,
224
+ tag: tag(config, resolvedVersion)
225
+ };
226
+ const npm = npmPublish(config, resolvedProject);
227
+ const pypi = pypiPublish(config, resolvedProject);
228
+ const publish = config.publish === undefined ? undefined : {
229
+ ...config.publish,
230
+ ...(config.publish.npm === undefined ? {} : { npm }),
231
+ ...(config.publish.pypi === undefined ? {} : { pypi })
232
+ };
233
+ // Plain JSON, not class instances: this value goes straight to `plan`, whose
234
+ // decoder refuses anything with a prototype.
235
+ const plain = toPlainJson({
236
+ ...rest,
237
+ project: resolvedProject,
238
+ ...(publish === undefined ? {} : { publish })
239
+ });
240
+ return toPlainJson(decodeCandidate(plain));
241
+ };
242
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/resolve/resolve.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Supported durable-store library boundary.
3
+ *
4
+ * The store service tag remains private. Hosts pass this structural value to
5
+ * one of the public layer constructors instead of assembling Effect contexts.
6
+ */
7
+ export { GitHubActionsPreparedStoreProvenance, LocalPreparedStoreProvenance, PreparedCommitHandoffError, PreparedStoreError, PreparedStoreProvenanceError, verifyPreparedStoreProvenance, makeLocalPreparedReleaseStore } from "./release/prepared-store.js";
8
+ export type { CommittedPreparedRelease, PreparedBundle, PreparedStoreProvenance, PreparedReleaseStoreShape } from "./release/prepared-store.js";
9
+ export { PreparedManifestError, PreparedReleaseV2, decodePreparedRelease, encodePreparedRelease } from "./release/prepared.js";
10
+ export type { CompletePreparedReleaseRef } from "./release/prepared-ref.js";
11
+ //# sourceMappingURL=store.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oCAAoC,EACpC,4BAA4B,EAC5B,0BAA0B,EAC1B,kBAAkB,EAClB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,6BAA6B,CAAA;AACpC,YAAY,EACV,wBAAwB,EACxB,cAAc,EACd,uBAAuB,EACvB,yBAAyB,EAC1B,MAAM,6BAA6B,CAAA;AACpC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,uBAAuB,CAAA;AAC9B,YAAY,EAAE,0BAA0B,EAAE,MAAM,2BAA2B,CAAA"}
package/dist/store.js ADDED
@@ -0,0 +1,9 @@
1
+ /**
2
+ * Supported durable-store library boundary.
3
+ *
4
+ * The store service tag remains private. Hosts pass this structural value to
5
+ * one of the public layer constructors instead of assembling Effect contexts.
6
+ */
7
+ export { GitHubActionsPreparedStoreProvenance, LocalPreparedStoreProvenance, PreparedCommitHandoffError, PreparedStoreError, PreparedStoreProvenanceError, verifyPreparedStoreProvenance, makeLocalPreparedReleaseStore } from "./release/prepared-store.js";
8
+ export { PreparedManifestError, PreparedReleaseV2, decodePreparedRelease, encodePreparedRelease } from "./release/prepared.js";
9
+ //# sourceMappingURL=store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oCAAoC,EACpC,4BAA4B,EAC5B,0BAA0B,EAC1B,kBAAkB,EAClB,4BAA4B,EAC5B,6BAA6B,EAC7B,6BAA6B,EAC9B,MAAM,6BAA6B,CAAA;AAOpC,OAAO,EACL,qBAAqB,EACrB,iBAAiB,EACjB,qBAAqB,EACrB,qBAAqB,EACtB,MAAM,uBAAuB,CAAA"}
@@ -1,36 +1,26 @@
1
- # release examples
1
+ # Release examples
2
2
 
3
- Start with the coordinated release example:
3
+ Examples are schema-checked authored configurations. They show jobs that map
4
+ to native ts-release primitives; they do not publish during repository checks.
5
+
6
+ Start with the automatic path:
4
7
 
5
8
  ```sh
6
- cd examples/multi-target
7
- bun ../../apps/release-ts/src/cli/main.ts plan --config release.config.json --format text
9
+ ts-release init
10
+ ts-release release --config release.config.json
8
11
  ```
9
12
 
10
- That plan shows one release split across GitHub Releases, npm, and a Homebrew
11
- tap. Inspect the artifact inventory, target capabilities, `argv` lines,
12
- approval gates, and generated catalog-file operations. `plan` is safe: publish
13
- operations stay data until a caller passes explicit execution approval.
14
-
15
- Templates live in `../templates/` and are copyable starting points for new
16
- repositories. These examples are runnable fixtures for this repository's
17
- checks.
18
-
19
- Focused examples:
20
-
21
- - `multi-target`: one release coordinated across GitHub Releases, npm, and Homebrew.
22
- - `npm-only`: npm package directory with native npm dry-run validation.
23
- - `npm-first-publish`: token-based npm bootstrap config for the first version before switching to trusted publishing.
24
- - `github-release`: GitHub release asset with simulated GitHub dry-run validation.
25
- - `homebrew-tap`: Homebrew tap formula rendering with simulated formula validation.
26
- - `pypi-registry`: prebuilt Python distribution planned for TestPyPI with Twine.
27
- - `scoop-bucket`: Scoop bucket manifest rendering with simulated validation.
28
- - `non-strict-skips`: non-strict config that records skipped dry-run evidence.
13
+ Runnable fixtures cover npm, GitHub Releases, portable binaries,
14
+ archive/checksum preparation, and typed Homebrew/Scoop catalog Git delivery.
15
+ Catalog fixtures prepare locally during checks and never mutate a provider.
16
+ The PyPI directory remains a migration note until it carries an independently
17
+ runnable prebuilt-distribution fixture.
18
+ An example passing strict decode is necessary but not sufficient support
19
+ evidence; the same capability must execute through the root API and default
20
+ runtime in release-candidate certification.
29
21
 
30
- Trusted-publishing npm examples use `provenance` and
31
- `verifyPackageExists`. `npm-first-publish` demonstrates only the bootstrap shape
32
- for a package that does not exist on npm yet, so it stays token-based and omits
33
- `trustedPublishing`. Replace it with trusted publishing after the first version
34
- exists. TestPyPI is still a real registry publish target, not a dry-run. The
35
- examples only render plans; do not run publish operations without intentional
36
- credentials and approval flags.
22
+ Trusted npm examples bind local host admission to the exact repository,
23
+ workflow filename, and `workflowRef` they author. For the reviewed two-job
24
+ workflow, start from the paired
25
+ `templates/npm-github/reviewed-release.config.json`; the host refuses a foreign
26
+ workflow/ref before reading OIDC request material.
@@ -1,33 +1,26 @@
1
1
  {
2
- "$schema": "https://mannyc2.github.io/ts-release/schema/release-config.schema.json",
3
- "identity": {
2
+ "$schema": "https://raw.githubusercontent.com/mannyc2/ts-release/main/schema/release-config.schema.json",
3
+ "project": {
4
4
  "name": "release-example-github",
5
+ "packageName": "release-example-github",
5
6
  "version": "0.1.0",
6
- "commit": "example",
7
- "tag": "v0.1.0",
8
- "notes": "Example GitHub release"
7
+ "tag": "v0.1.0"
9
8
  },
10
9
  "artifacts": [
11
10
  {
12
11
  "id": "archive",
13
12
  "path": "artifacts/release-example-github-0.1.0.tgz",
14
- "format": "tarball",
15
- "consumers": ["github"]
13
+ "format": "tarball"
16
14
  }
17
15
  ],
18
- "targets": [
19
- {
20
- "_tag": "GitHubReleaseTarget",
21
- "id": "github",
16
+ "publish": {
17
+ "github": {
22
18
  "repository": "owner/repo",
23
- "tokenEnv": "GH_TOKEN",
19
+ "tokenEnv": "GITHUB_TOKEN",
24
20
  "draft": true,
25
21
  "prerelease": false,
26
- "dryRunSupport": "simulated",
27
- "mutability": "mutable-release",
28
- "recovery": "delete-and-recreate"
22
+ "body": "Example GitHub release",
23
+ "ids": ["archive"]
29
24
  }
30
- ],
31
- "strict": true,
32
- "evidenceDirectory": ".release/evidence"
25
+ }
33
26
  }
@@ -0,0 +1,11 @@
1
+ # Homebrew tap delivery
2
+
3
+ This runnable example prepares a typed Homebrew formula from the exact digest
4
+ of a GitHub release archive, then models delivery of the formula and its
5
+ canonical managed-state record to `owner/homebrew-tap`.
6
+
7
+ Catalog delivery runs only after the GitHub release subjects converge. The Git
8
+ Data adapter preserves unrelated repository objects, creates a commit with the
9
+ observed branch commit as its sole parent, and updates the branch without
10
+ force. Replace every `owner/*` coordinate and the credential reference before
11
+ using the example.