@invarn/cibuild 2.9.6 → 2.9.8

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 (559) hide show
  1. package/dist/chunk-35SI42CD.mjs +1 -0
  2. package/dist/chunk-IC45KVLJ.mjs +1 -0
  3. package/dist/chunk-XDY4V23V.mjs +1 -0
  4. package/dist/cli.cjs +14 -14
  5. package/dist/commands.mjs +1 -0
  6. package/dist/lib.mjs +3934 -0
  7. package/package.json +6 -10
  8. package/dist/src/cli.d.ts +0 -3
  9. package/dist/src/cli.d.ts.map +0 -1
  10. package/dist/src/cli.js +0 -399
  11. package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts +0 -38
  12. package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.d.ts.map +0 -1
  13. package/dist/src/commands/a-credential-target-follows-the-flavor-source-set.test.js +0 -222
  14. package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts +0 -41
  15. package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts.map +0 -1
  16. package/dist/src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.js +0 -324
  17. package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts +0 -2
  18. package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts.map +0 -1
  19. package/dist/src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.js +0 -382
  20. package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts +0 -29
  21. package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.d.ts.map +0 -1
  22. package/dist/src/commands/an-already-stored-value-does-not-answer-the-target-question.test.js +0 -160
  23. package/dist/src/commands/android-gms-guard.test.d.ts +0 -9
  24. package/dist/src/commands/android-gms-guard.test.d.ts.map +0 -1
  25. package/dist/src/commands/android-gms-guard.test.js +0 -78
  26. package/dist/src/commands/android-java-version.test.d.ts +0 -12
  27. package/dist/src/commands/android-java-version.test.d.ts.map +0 -1
  28. package/dist/src/commands/android-java-version.test.js +0 -209
  29. package/dist/src/commands/android-scanner-java.test.d.ts +0 -2
  30. package/dist/src/commands/android-scanner-java.test.d.ts.map +0 -1
  31. package/dist/src/commands/android-scanner-java.test.js +0 -130
  32. package/dist/src/commands/android-scanner.d.ts +0 -250
  33. package/dist/src/commands/android-scanner.d.ts.map +0 -1
  34. package/dist/src/commands/android-scanner.js +0 -1639
  35. package/dist/src/commands/build.d.ts +0 -215
  36. package/dist/src/commands/build.d.ts.map +0 -1
  37. package/dist/src/commands/build.js +0 -1433
  38. package/dist/src/commands/build.test.d.ts +0 -13
  39. package/dist/src/commands/build.test.d.ts.map +0 -1
  40. package/dist/src/commands/build.test.js +0 -121
  41. package/dist/src/commands/detect-platform.d.ts +0 -13
  42. package/dist/src/commands/detect-platform.d.ts.map +0 -1
  43. package/dist/src/commands/detect-platform.js +0 -51
  44. package/dist/src/commands/detect-project.d.ts +0 -7
  45. package/dist/src/commands/detect-project.d.ts.map +0 -1
  46. package/dist/src/commands/detect-project.js +0 -12
  47. package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts +0 -26
  48. package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.d.ts.map +0 -1
  49. package/dist/src/commands/each-flavor-is-asked-for-its-own-properties-file.test.js +0 -196
  50. package/dist/src/commands/edit.d.ts +0 -12
  51. package/dist/src/commands/edit.d.ts.map +0 -1
  52. package/dist/src/commands/edit.js +0 -652
  53. package/dist/src/commands/edit.test.d.ts +0 -6
  54. package/dist/src/commands/edit.test.d.ts.map +0 -1
  55. package/dist/src/commands/edit.test.js +0 -45
  56. package/dist/src/commands/fidelity-trim.d.ts +0 -13
  57. package/dist/src/commands/fidelity-trim.d.ts.map +0 -1
  58. package/dist/src/commands/fidelity-trim.js +0 -21
  59. package/dist/src/commands/fidelity-trim.test.d.ts +0 -8
  60. package/dist/src/commands/fidelity-trim.test.d.ts.map +0 -1
  61. package/dist/src/commands/fidelity-trim.test.js +0 -79
  62. package/dist/src/commands/file-secret-collector.d.ts +0 -50
  63. package/dist/src/commands/file-secret-collector.d.ts.map +0 -1
  64. package/dist/src/commands/file-secret-collector.js +0 -217
  65. package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts +0 -38
  66. package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.d.ts.map +0 -1
  67. package/dist/src/commands/flavors-a-convention-plugin-creates-are-still-found.test.js +0 -300
  68. package/dist/src/commands/github-workflow.d.ts +0 -5
  69. package/dist/src/commands/github-workflow.d.ts.map +0 -1
  70. package/dist/src/commands/github-workflow.js +0 -45
  71. package/dist/src/commands/index.d.ts +0 -33
  72. package/dist/src/commands/index.d.ts.map +0 -1
  73. package/dist/src/commands/index.js +0 -33
  74. package/dist/src/commands/init.d.ts +0 -20
  75. package/dist/src/commands/init.d.ts.map +0 -1
  76. package/dist/src/commands/init.js +0 -264
  77. package/dist/src/commands/ios-scanner.d.ts +0 -104
  78. package/dist/src/commands/ios-scanner.d.ts.map +0 -1
  79. package/dist/src/commands/ios-scanner.js +0 -492
  80. package/dist/src/commands/ios-scheme-ranking.test.d.ts +0 -2
  81. package/dist/src/commands/ios-scheme-ranking.test.d.ts.map +0 -1
  82. package/dist/src/commands/ios-scheme-ranking.test.js +0 -264
  83. package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts +0 -30
  84. package/dist/src/commands/local-properties-reaches-every-workflow.test.d.ts.map +0 -1
  85. package/dist/src/commands/local-properties-reaches-every-workflow.test.js +0 -146
  86. package/dist/src/commands/reset.d.ts +0 -7
  87. package/dist/src/commands/reset.d.ts.map +0 -1
  88. package/dist/src/commands/reset.js +0 -81
  89. package/dist/src/commands/run.d.ts +0 -22
  90. package/dist/src/commands/run.d.ts.map +0 -1
  91. package/dist/src/commands/run.js +0 -141
  92. package/dist/src/commands/secrets-sync-workflow.d.ts +0 -15
  93. package/dist/src/commands/secrets-sync-workflow.d.ts.map +0 -1
  94. package/dist/src/commands/secrets-sync-workflow.js +0 -255
  95. package/dist/src/commands/secrets-upload.d.ts +0 -21
  96. package/dist/src/commands/secrets-upload.d.ts.map +0 -1
  97. package/dist/src/commands/secrets-upload.js +0 -177
  98. package/dist/src/commands/secrets-upload.test.d.ts +0 -5
  99. package/dist/src/commands/secrets-upload.test.d.ts.map +0 -1
  100. package/dist/src/commands/secrets-upload.test.js +0 -60
  101. package/dist/src/commands/validate.d.ts +0 -10
  102. package/dist/src/commands/validate.d.ts.map +0 -1
  103. package/dist/src/commands/validate.js +0 -46
  104. package/dist/src/config.d.ts +0 -3
  105. package/dist/src/config.d.ts.map +0 -1
  106. package/dist/src/config.js +0 -47
  107. package/dist/src/envman/cli.d.ts +0 -21
  108. package/dist/src/envman/cli.d.ts.map +0 -1
  109. package/dist/src/envman/cli.js +0 -240
  110. package/dist/src/envman/envman.d.ts +0 -83
  111. package/dist/src/envman/envman.d.ts.map +0 -1
  112. package/dist/src/envman/envman.js +0 -361
  113. package/dist/src/envman/envman.test.d.ts +0 -5
  114. package/dist/src/envman/envman.test.d.ts.map +0 -1
  115. package/dist/src/envman/envman.test.js +0 -236
  116. package/dist/src/envman/envstore-round-trip.test.d.ts +0 -27
  117. package/dist/src/envman/envstore-round-trip.test.d.ts.map +0 -1
  118. package/dist/src/envman/envstore-round-trip.test.js +0 -130
  119. package/dist/src/envman/index.d.ts +0 -23
  120. package/dist/src/envman/index.d.ts.map +0 -1
  121. package/dist/src/envman/index.js +0 -23
  122. package/dist/src/envman/shim.d.ts +0 -16
  123. package/dist/src/envman/shim.d.ts.map +0 -1
  124. package/dist/src/envman/shim.js +0 -66
  125. package/dist/src/envman/types.d.ts +0 -55
  126. package/dist/src/envman/types.d.ts.map +0 -1
  127. package/dist/src/envman/types.js +0 -12
  128. package/dist/src/lib.d.ts +0 -33
  129. package/dist/src/lib.d.ts.map +0 -1
  130. package/dist/src/lib.js +0 -37
  131. package/dist/src/pipeline.d.ts +0 -3
  132. package/dist/src/pipeline.d.ts.map +0 -1
  133. package/dist/src/pipeline.js +0 -57
  134. package/dist/src/runner-node-step.test.d.ts +0 -12
  135. package/dist/src/runner-node-step.test.d.ts.map +0 -1
  136. package/dist/src/runner-node-step.test.js +0 -61
  137. package/dist/src/runner.d.ts +0 -31
  138. package/dist/src/runner.d.ts.map +0 -1
  139. package/dist/src/runner.js +0 -240
  140. package/dist/src/shared/detect-project.d.ts +0 -57
  141. package/dist/src/shared/detect-project.d.ts.map +0 -1
  142. package/dist/src/shared/detect-project.js +0 -219
  143. package/dist/src/shared/detect-project.test.d.ts +0 -2
  144. package/dist/src/shared/detect-project.test.d.ts.map +0 -1
  145. package/dist/src/shared/detect-project.test.js +0 -161
  146. package/dist/src/shared/git.d.ts +0 -25
  147. package/dist/src/shared/git.d.ts.map +0 -1
  148. package/dist/src/shared/git.js +0 -53
  149. package/dist/src/shared/git.test.d.ts +0 -9
  150. package/dist/src/shared/git.test.d.ts.map +0 -1
  151. package/dist/src/shared/git.test.js +0 -66
  152. package/dist/src/shared/gitignore.d.ts +0 -6
  153. package/dist/src/shared/gitignore.d.ts.map +0 -1
  154. package/dist/src/shared/gitignore.js +0 -26
  155. package/dist/src/shared/gradle-settings.d.ts +0 -49
  156. package/dist/src/shared/gradle-settings.d.ts.map +0 -1
  157. package/dist/src/shared/gradle-settings.js +0 -138
  158. package/dist/src/shared/gradle-settings.test.d.ts +0 -2
  159. package/dist/src/shared/gradle-settings.test.d.ts.map +0 -1
  160. package/dist/src/shared/gradle-settings.test.js +0 -65
  161. package/dist/src/shared/prompts.d.ts +0 -30
  162. package/dist/src/shared/prompts.d.ts.map +0 -1
  163. package/dist/src/shared/prompts.js +0 -121
  164. package/dist/src/shared/xcode-container.test.d.ts +0 -2
  165. package/dist/src/shared/xcode-container.test.d.ts.map +0 -1
  166. package/dist/src/shared/xcode-container.test.js +0 -123
  167. package/dist/src/step-marker.d.ts +0 -12
  168. package/dist/src/step-marker.d.ts.map +0 -1
  169. package/dist/src/step-marker.js +0 -29
  170. package/dist/src/step-marker.test.d.ts +0 -11
  171. package/dist/src/step-marker.test.d.ts.map +0 -1
  172. package/dist/src/step-marker.test.js +0 -45
  173. package/dist/src/types.d.ts +0 -58
  174. package/dist/src/types.d.ts.map +0 -1
  175. package/dist/src/types.js +0 -2
  176. package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts +0 -28
  177. package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.d.ts.map +0 -1
  178. package/dist/src/yaml/a-cache-path-must-not-swallow-a-credential.test.js +0 -223
  179. package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts +0 -20
  180. package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.d.ts.map +0 -1
  181. package/dist/src/yaml/a-declared-secret-reaches-the-file-step.test.js +0 -201
  182. package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts +0 -37
  183. package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts.map +0 -1
  184. package/dist/src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.js +0 -255
  185. package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts +0 -32
  186. package/dist/src/yaml/a-missing-credential-is-loud.test.d.ts.map +0 -1
  187. package/dist/src/yaml/a-missing-credential-is-loud.test.js +0 -301
  188. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts +0 -18
  189. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.d.ts.map +0 -1
  190. package/dist/src/yaml/a-runtime-requirement-names-a-real-provider.test.js +0 -66
  191. package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts +0 -34
  192. package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.d.ts.map +0 -1
  193. package/dist/src/yaml/a-scoped-slot-must-name-a-workflow-the-pipeline-has.test.js +0 -218
  194. package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts +0 -27
  195. package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.d.ts.map +0 -1
  196. package/dist/src/yaml/a-value-this-instance-stored-is-a-value-it-has.test.js +0 -126
  197. package/dist/src/yaml/bitrise-compat.d.ts +0 -65
  198. package/dist/src/yaml/bitrise-compat.d.ts.map +0 -1
  199. package/dist/src/yaml/bitrise-compat.js +0 -206
  200. package/dist/src/yaml/bitrise-compat.test.d.ts +0 -5
  201. package/dist/src/yaml/bitrise-compat.test.d.ts.map +0 -1
  202. package/dist/src/yaml/bitrise-compat.test.js +0 -347
  203. package/dist/src/yaml/cache-key-missing-file.test.d.ts +0 -12
  204. package/dist/src/yaml/cache-key-missing-file.test.d.ts.map +0 -1
  205. package/dist/src/yaml/cache-key-missing-file.test.js +0 -116
  206. package/dist/src/yaml/converter.d.ts +0 -103
  207. package/dist/src/yaml/converter.d.ts.map +0 -1
  208. package/dist/src/yaml/converter.js +0 -420
  209. package/dist/src/yaml/converter.test.d.ts +0 -5
  210. package/dist/src/yaml/converter.test.d.ts.map +0 -1
  211. package/dist/src/yaml/converter.test.js +0 -548
  212. package/dist/src/yaml/e2e.test.d.ts +0 -6
  213. package/dist/src/yaml/e2e.test.d.ts.map +0 -1
  214. package/dist/src/yaml/e2e.test.js +0 -446
  215. package/dist/src/yaml/env-resolver.d.ts +0 -218
  216. package/dist/src/yaml/env-resolver.d.ts.map +0 -1
  217. package/dist/src/yaml/env-resolver.js +0 -591
  218. package/dist/src/yaml/env-resolver.test.d.ts +0 -5
  219. package/dist/src/yaml/env-resolver.test.d.ts.map +0 -1
  220. package/dist/src/yaml/env-resolver.test.js +0 -502
  221. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts +0 -16
  222. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.d.ts.map +0 -1
  223. package/dist/src/yaml/every-build-log-witnesses-the-commit-on-disk.test.js +0 -126
  224. package/dist/src/yaml/fidelity-input-digest.d.ts +0 -37
  225. package/dist/src/yaml/fidelity-input-digest.d.ts.map +0 -1
  226. package/dist/src/yaml/fidelity-input-digest.js +0 -208
  227. package/dist/src/yaml/fidelity-input-digest.test.d.ts +0 -2
  228. package/dist/src/yaml/fidelity-input-digest.test.d.ts.map +0 -1
  229. package/dist/src/yaml/fidelity-input-digest.test.js +0 -167
  230. package/dist/src/yaml/fidelity-manifest.d.ts +0 -126
  231. package/dist/src/yaml/fidelity-manifest.d.ts.map +0 -1
  232. package/dist/src/yaml/fidelity-manifest.js +0 -134
  233. package/dist/src/yaml/fidelity-manifest.test.d.ts +0 -12
  234. package/dist/src/yaml/fidelity-manifest.test.d.ts.map +0 -1
  235. package/dist/src/yaml/fidelity-manifest.test.js +0 -251
  236. package/dist/src/yaml/interactive-prompts.d.ts +0 -71
  237. package/dist/src/yaml/interactive-prompts.d.ts.map +0 -1
  238. package/dist/src/yaml/interactive-prompts.js +0 -260
  239. package/dist/src/yaml/meta-helpers.d.ts +0 -28
  240. package/dist/src/yaml/meta-helpers.d.ts.map +0 -1
  241. package/dist/src/yaml/meta-helpers.js +0 -46
  242. package/dist/src/yaml/missing-env-handler.d.ts +0 -45
  243. package/dist/src/yaml/missing-env-handler.d.ts.map +0 -1
  244. package/dist/src/yaml/missing-env-handler.js +0 -64
  245. package/dist/src/yaml/parser.d.ts +0 -33
  246. package/dist/src/yaml/parser.d.ts.map +0 -1
  247. package/dist/src/yaml/parser.js +0 -148
  248. package/dist/src/yaml/parser.test.d.ts +0 -5
  249. package/dist/src/yaml/parser.test.d.ts.map +0 -1
  250. package/dist/src/yaml/parser.test.js +0 -83
  251. package/dist/src/yaml/pipeline-with-secrets.d.ts +0 -25
  252. package/dist/src/yaml/pipeline-with-secrets.d.ts.map +0 -1
  253. package/dist/src/yaml/pipeline-with-secrets.js +0 -76
  254. package/dist/src/yaml/platform-detector.d.ts +0 -83
  255. package/dist/src/yaml/platform-detector.d.ts.map +0 -1
  256. package/dist/src/yaml/platform-detector.js +0 -189
  257. package/dist/src/yaml/platform-detector.test.d.ts +0 -5
  258. package/dist/src/yaml/platform-detector.test.d.ts.map +0 -1
  259. package/dist/src/yaml/platform-detector.test.js +0 -525
  260. package/dist/src/yaml/preflight-validation.d.ts +0 -29
  261. package/dist/src/yaml/preflight-validation.d.ts.map +0 -1
  262. package/dist/src/yaml/preflight-validation.js +0 -21
  263. package/dist/src/yaml/secrets-manager.d.ts +0 -87
  264. package/dist/src/yaml/secrets-manager.d.ts.map +0 -1
  265. package/dist/src/yaml/secrets-manager.js +0 -230
  266. package/dist/src/yaml/shell-assignments.d.ts +0 -40
  267. package/dist/src/yaml/shell-assignments.d.ts.map +0 -1
  268. package/dist/src/yaml/shell-assignments.js +0 -77
  269. package/dist/src/yaml/step-validator-check-failure.test.d.ts +0 -24
  270. package/dist/src/yaml/step-validator-check-failure.test.d.ts.map +0 -1
  271. package/dist/src/yaml/step-validator-check-failure.test.js +0 -130
  272. package/dist/src/yaml/step-validator-self-assigned.test.d.ts +0 -23
  273. package/dist/src/yaml/step-validator-self-assigned.test.d.ts.map +0 -1
  274. package/dist/src/yaml/step-validator-self-assigned.test.js +0 -191
  275. package/dist/src/yaml/step-validator.d.ts +0 -67
  276. package/dist/src/yaml/step-validator.d.ts.map +0 -1
  277. package/dist/src/yaml/step-validator.js +0 -466
  278. package/dist/src/yaml/step-validator.test.d.ts +0 -18
  279. package/dist/src/yaml/step-validator.test.d.ts.map +0 -1
  280. package/dist/src/yaml/step-validator.test.js +0 -140
  281. package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.d.ts +0 -2
  282. package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.d.ts.map +0 -1
  283. package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.js +0 -96
  284. package/dist/src/yaml/steps/android-sign.d.ts +0 -35
  285. package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
  286. package/dist/src/yaml/steps/android-sign.js +0 -147
  287. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
  288. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
  289. package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
  290. package/dist/src/yaml/steps/android-version.d.ts +0 -26
  291. package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
  292. package/dist/src/yaml/steps/android-version.js +0 -128
  293. package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
  294. package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
  295. package/dist/src/yaml/steps/android-version.test.js +0 -196
  296. package/dist/src/yaml/steps/android.d.ts +0 -156
  297. package/dist/src/yaml/steps/android.d.ts.map +0 -1
  298. package/dist/src/yaml/steps/android.js +0 -1100
  299. package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
  300. package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
  301. package/dist/src/yaml/steps/app-store-deploy.js +0 -167
  302. package/dist/src/yaml/steps/base.d.ts +0 -263
  303. package/dist/src/yaml/steps/base.d.ts.map +0 -1
  304. package/dist/src/yaml/steps/base.js +0 -380
  305. package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
  306. package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
  307. package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
  308. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
  309. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
  310. package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
  311. package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
  312. package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
  313. package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
  314. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
  315. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
  316. package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
  317. package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
  318. package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
  319. package/dist/src/yaml/steps/bitrise-slack.js +0 -280
  320. package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
  321. package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
  322. package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
  323. package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
  324. package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
  325. package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
  326. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
  327. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
  328. package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
  329. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
  330. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
  331. package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
  332. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
  333. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
  334. package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
  335. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
  336. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
  337. package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
  338. package/dist/src/yaml/steps/cache.d.ts +0 -59
  339. package/dist/src/yaml/steps/cache.d.ts.map +0 -1
  340. package/dist/src/yaml/steps/cache.js +0 -1027
  341. package/dist/src/yaml/steps/capture-injection.d.ts +0 -30
  342. package/dist/src/yaml/steps/capture-injection.d.ts.map +0 -1
  343. package/dist/src/yaml/steps/capture-injection.js +0 -88
  344. package/dist/src/yaml/steps/capture-injection.test.d.ts +0 -2
  345. package/dist/src/yaml/steps/capture-injection.test.d.ts.map +0 -1
  346. package/dist/src/yaml/steps/capture-injection.test.js +0 -163
  347. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
  348. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
  349. package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
  350. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
  351. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
  352. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
  353. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
  354. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
  355. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
  356. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
  357. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
  358. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
  359. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
  360. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
  361. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
  362. package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
  363. package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
  364. package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
  365. package/dist/src/yaml/steps/fastlane.d.ts +0 -27
  366. package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
  367. package/dist/src/yaml/steps/fastlane.js +0 -79
  368. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
  369. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
  370. package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
  371. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
  372. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
  373. package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
  374. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
  375. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
  376. package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
  377. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
  378. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
  379. package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
  380. package/dist/src/yaml/steps/file.d.ts +0 -52
  381. package/dist/src/yaml/steps/file.d.ts.map +0 -1
  382. package/dist/src/yaml/steps/file.js +0 -108
  383. package/dist/src/yaml/steps/flutter.d.ts +0 -63
  384. package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
  385. package/dist/src/yaml/steps/flutter.js +0 -215
  386. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
  387. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
  388. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
  389. package/dist/src/yaml/steps/git-clone.d.ts +0 -32
  390. package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
  391. package/dist/src/yaml/steps/git-clone.js +0 -171
  392. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
  393. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
  394. package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
  395. package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
  396. package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
  397. package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
  398. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
  399. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
  400. package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
  401. package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
  402. package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
  403. package/dist/src/yaml/steps/google-play-deploy.js +0 -193
  404. package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
  405. package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
  406. package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
  407. package/dist/src/yaml/steps/gradle-memory.d.ts +0 -91
  408. package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
  409. package/dist/src/yaml/steps/gradle-memory.js +0 -495
  410. package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
  411. package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
  412. package/dist/src/yaml/steps/gradle-memory.test.js +0 -344
  413. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
  414. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
  415. package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
  416. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
  417. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
  418. package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
  419. package/dist/src/yaml/steps/index.d.ts +0 -10
  420. package/dist/src/yaml/steps/index.d.ts.map +0 -1
  421. package/dist/src/yaml/steps/index.js +0 -1461
  422. package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
  423. package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
  424. package/dist/src/yaml/steps/ios-deps.js +0 -279
  425. package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
  426. package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
  427. package/dist/src/yaml/steps/ios-deps.test.js +0 -90
  428. package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
  429. package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
  430. package/dist/src/yaml/steps/ios-signing.js +0 -144
  431. package/dist/src/yaml/steps/ios-version.d.ts +0 -47
  432. package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
  433. package/dist/src/yaml/steps/ios-version.js +0 -151
  434. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
  435. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
  436. package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
  437. package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.d.ts +0 -2
  438. package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.d.ts.map +0 -1
  439. package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.js +0 -139
  440. package/dist/src/yaml/steps/linting.d.ts +0 -47
  441. package/dist/src/yaml/steps/linting.d.ts.map +0 -1
  442. package/dist/src/yaml/steps/linting.js +0 -148
  443. package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
  444. package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
  445. package/dist/src/yaml/steps/phase2.test.js +0 -197
  446. package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
  447. package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
  448. package/dist/src/yaml/steps/phase3.test.js +0 -144
  449. package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
  450. package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
  451. package/dist/src/yaml/steps/phase4.test.js +0 -166
  452. package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
  453. package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
  454. package/dist/src/yaml/steps/phase5.test.js +0 -263
  455. package/dist/src/yaml/steps/registry.d.ts +0 -88
  456. package/dist/src/yaml/steps/registry.d.ts.map +0 -1
  457. package/dist/src/yaml/steps/registry.js +0 -125
  458. package/dist/src/yaml/steps/registry.test.d.ts +0 -5
  459. package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
  460. package/dist/src/yaml/steps/registry.test.js +0 -235
  461. package/dist/src/yaml/steps/release.d.ts +0 -50
  462. package/dist/src/yaml/steps/release.d.ts.map +0 -1
  463. package/dist/src/yaml/steps/release.js +0 -154
  464. package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
  465. package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
  466. package/dist/src/yaml/steps/render-post-processor.js +0 -270
  467. package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
  468. package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
  469. package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
  470. package/dist/src/yaml/steps/script.d.ts +0 -23
  471. package/dist/src/yaml/steps/script.d.ts.map +0 -1
  472. package/dist/src/yaml/steps/script.js +0 -63
  473. package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
  474. package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
  475. package/dist/src/yaml/steps/spec-validation.test.js +0 -130
  476. package/dist/src/yaml/steps/steps.test.d.ts +0 -6
  477. package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
  478. package/dist/src/yaml/steps/steps.test.js +0 -881
  479. package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
  480. package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
  481. package/dist/src/yaml/steps/structural-facts.js +0 -3276
  482. package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
  483. package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
  484. package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
  485. package/dist/src/yaml/steps/test-config.d.ts +0 -5
  486. package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
  487. package/dist/src/yaml/steps/test-config.js +0 -25
  488. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
  489. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
  490. package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
  491. package/dist/src/yaml/steps/trim-align.d.ts +0 -87
  492. package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
  493. package/dist/src/yaml/steps/trim-align.js +0 -367
  494. package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
  495. package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
  496. package/dist/src/yaml/steps/trim-align.test.js +0 -261
  497. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
  498. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
  499. package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
  500. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
  501. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
  502. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
  503. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
  504. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
  505. package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
  506. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
  507. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
  508. package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
  509. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
  510. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
  511. package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
  512. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
  513. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
  514. package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
  515. package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
  516. package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
  517. package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
  518. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
  519. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
  520. package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
  521. package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
  522. package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
  523. package/dist/src/yaml/steps/xcode-app-product.js +0 -247
  524. package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
  525. package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
  526. package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
  527. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
  528. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
  529. package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -279
  530. package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
  531. package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
  532. package/dist/src/yaml/steps/xcode-destination.js +0 -202
  533. package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
  534. package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
  535. package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
  536. package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
  537. package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
  538. package/dist/src/yaml/steps/xcode-new.test.js +0 -211
  539. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
  540. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
  541. package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
  542. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
  543. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
  544. package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
  545. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
  546. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
  547. package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
  548. package/dist/src/yaml/steps/xcode.d.ts +0 -230
  549. package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
  550. package/dist/src/yaml/steps/xcode.js +0 -1350
  551. package/dist/src/yaml/types.d.ts +0 -76
  552. package/dist/src/yaml/types.d.ts.map +0 -1
  553. package/dist/src/yaml/types.js +0 -5
  554. package/dist/src/yaml/validation-types.d.ts +0 -102
  555. package/dist/src/yaml/validation-types.d.ts.map +0 -1
  556. package/dist/src/yaml/validation-types.js +0 -8
  557. package/dist/src/yaml/yaml-updater.d.ts +0 -24
  558. package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
  559. package/dist/src/yaml/yaml-updater.js +0 -128
@@ -1,652 +0,0 @@
1
- import * as fs from 'node:fs';
2
- import * as readline from 'node:readline';
3
- import { resolve, basename } from 'node:path';
4
- import * as yaml from 'js-yaml';
5
- import prompts from 'prompts';
6
- import { loadYAMLPipeline } from '../yaml/parser.js';
7
- import { getInvarnMeta } from '../yaml/meta-helpers.js';
8
- import { SecretsManager } from '../yaml/secrets-manager.js';
9
- import { getAvailableSteps, getStepMetadata } from '../yaml/steps/registry.js';
10
- // Ensure the step registry is populated
11
- import '../yaml/steps/index.js';
12
- function getStepKey(step) {
13
- return Object.keys(step)[0];
14
- }
15
- function getStepDisplayName(stepKey, step) {
16
- const config = step[stepKey];
17
- const baseName = stepKey.split('@')[0];
18
- return config?.title ? `${baseName} (${config.title})` : baseName;
19
- }
20
- function formatValueForDisplay(value) {
21
- if (value === null || value === undefined)
22
- return '';
23
- if (Array.isArray(value))
24
- return value.map(String).join(', ');
25
- const str = String(value);
26
- const firstLine = str.split('\n')[0];
27
- return str.includes('\n') ? `${firstLine}...` : firstLine;
28
- }
29
- function formatValueForEdit(value) {
30
- if (value === null || value === undefined)
31
- return '';
32
- if (Array.isArray(value))
33
- return value.map(String).join(', ');
34
- return String(value);
35
- }
36
- function parseEditedValue(edited, originalValue) {
37
- if (Array.isArray(originalValue)) {
38
- return edited.split(/,\s*|\n/).map((s) => s.trim()).filter(Boolean);
39
- }
40
- if (typeof originalValue === 'number') {
41
- const num = Number(edited);
42
- return isNaN(num) ? edited : num;
43
- }
44
- return edited;
45
- }
46
- /** Returns all $VAR / ${VAR} names referenced in a value (recursively for arrays). */
47
- function extractEnvRefs(value) {
48
- if (Array.isArray(value))
49
- return value.flatMap(extractEnvRefs);
50
- if (typeof value !== 'string')
51
- return [];
52
- const refs = [];
53
- const regex = /\$\{?([A-Z_][A-Z0-9_]*)\}?/g;
54
- let match;
55
- while ((match = regex.exec(value)) !== null) {
56
- refs.push(match[1]);
57
- }
58
- return refs;
59
- }
60
- /** Returns true if varName is resolvable from pipeline envs or the secrets store. */
61
- function isVarDefined(varName, pipeline, workflowName, secretsManager) {
62
- const appEnvKeys = (pipeline.app?.envs ?? []).flatMap(Object.keys);
63
- if (appEnvKeys.includes(varName))
64
- return true;
65
- const workflowEnvKeys = (pipeline.workflows[workflowName]?.envs ?? []).flatMap(Object.keys);
66
- if (workflowEnvKeys.includes(varName))
67
- return true;
68
- return secretsManager.hasSecret(varName, workflowName);
69
- }
70
- function printPipelineSummary(fileName, selectedWorkflow, steps) {
71
- console.log(`\nPipeline: ${fileName}`);
72
- console.log('─'.repeat(50));
73
- console.log(`Workflow: ${selectedWorkflow}`);
74
- console.log(' Steps:');
75
- steps.forEach((step, i) => {
76
- const stepKey = getStepKey(step);
77
- const config = step[stepKey];
78
- const displayName = getStepDisplayName(stepKey, step);
79
- console.log(` ${i + 1}. ${displayName}`);
80
- if (config?.inputs && Object.keys(config.inputs).length > 0) {
81
- for (const [key, value] of Object.entries(config.inputs)) {
82
- const displayValue = formatValueForDisplay(value);
83
- console.log(` ${key}: ${displayValue}`);
84
- }
85
- }
86
- });
87
- console.log();
88
- }
89
- // ---------------------------------------------------------------------------
90
- // Add step helpers
91
- // ---------------------------------------------------------------------------
92
- function suggestFromTransform(value, transform) {
93
- if (transform === 'filename-to-env-var') {
94
- return basename(value).replace(/[^a-zA-Z0-9]/g, '_').toUpperCase();
95
- }
96
- return value;
97
- }
98
- /**
99
- * Collects multiline content from the user via readline, bypassing the
100
- * prompts library's paste-detection dialog which causes spurious auto-advances.
101
- * The user terminates input by typing .done on its own line.
102
- */
103
- function readMultilineContent(label) {
104
- return new Promise((resolve) => {
105
- console.log(`\n ${label}`);
106
- console.log(' Paste content, then type .done on its own line and press Enter:\n');
107
- if (process.stdin.isTTY) {
108
- try {
109
- process.stdin.setRawMode(false);
110
- }
111
- catch { /* ignore */ }
112
- }
113
- process.stdin.resume();
114
- const rl = readline.createInterface({ input: process.stdin, terminal: false });
115
- const lines = [];
116
- rl.on('line', (line) => {
117
- if (line.trim() === '.done') {
118
- rl.close();
119
- return;
120
- }
121
- lines.push(line);
122
- });
123
- rl.once('close', () => {
124
- process.stdin.pause();
125
- resolve(lines.length > 0 ? lines.join('\n') : undefined);
126
- });
127
- rl.on('SIGINT', () => { rl.close(); resolve(undefined); });
128
- });
129
- }
130
- async function handleAddRegisteredStep(pipelinePath, workflowName, _pipeline, stepName, secretsManager) {
131
- const meta = getStepMetadata(stepName);
132
- if (!meta?.inputs) {
133
- console.log(`\n⚠️ No input metadata for '${stepName}'. Add the step manually in the YAML.`);
134
- return;
135
- }
136
- const yamlInputs = {};
137
- // --- collect non-secret inputs first (in declaration order) ---
138
- for (const [key, inputMeta] of Object.entries(meta.inputs)) {
139
- if (inputMeta.isSetupSecret)
140
- continue;
141
- // Compute auto-suggestion if declared
142
- let initial = inputMeta.default !== undefined ? String(inputMeta.default) : '';
143
- if (inputMeta.deriveFrom && inputMeta.deriveTransform) {
144
- const sourceVal = yamlInputs[inputMeta.deriveFrom];
145
- if (typeof sourceVal === 'string' && sourceVal) {
146
- initial = suggestFromTransform(sourceVal, inputMeta.deriveTransform);
147
- }
148
- }
149
- const isMultiline = inputMeta.inputType === 'multiline';
150
- const isPassword = inputMeta.inputType === 'password';
151
- const label = inputMeta.required
152
- ? `${key} (${inputMeta.description})`
153
- : `${key} (${inputMeta.description}) [optional, default: ${inputMeta.default ?? 'none'}]`;
154
- if (isMultiline) {
155
- const value = await readMultilineContent(label);
156
- if (value === undefined) {
157
- console.log('\nCancelled.');
158
- return;
159
- }
160
- if (inputMeta.required && !value && !inputMeta.default)
161
- continue;
162
- if (value)
163
- yamlInputs[key] = value;
164
- else if (inputMeta.default !== undefined)
165
- yamlInputs[key] = inputMeta.default;
166
- }
167
- else {
168
- const { value } = await prompts({
169
- type: isPassword ? 'password' : 'text',
170
- name: 'value',
171
- message: label,
172
- initial,
173
- validate: inputMeta.required ? (v) => v.trim() !== '' || 'Required' : undefined,
174
- });
175
- if (value === undefined) {
176
- console.log('\nCancelled.');
177
- return;
178
- }
179
- if (value !== '') {
180
- yamlInputs[key] = inputMeta.inputType === 'path' || inputMeta.inputType === 'text' || !inputMeta.inputType
181
- ? value
182
- : value;
183
- }
184
- else if (inputMeta.default !== undefined) {
185
- yamlInputs[key] = inputMeta.default;
186
- }
187
- }
188
- }
189
- // --- collect setup-secret inputs ---
190
- for (const [key, inputMeta] of Object.entries(meta.inputs)) {
191
- if (!inputMeta.isSetupSecret)
192
- continue;
193
- const varName = inputMeta.secretKeyField ? String(yamlInputs[inputMeta.secretKeyField] ?? '') : key.toUpperCase();
194
- if (!varName) {
195
- console.log(`\n⚠️ Could not determine secret variable name for input '${key}'. Skipping.`);
196
- continue;
197
- }
198
- const { secretInputMethod } = await prompts({
199
- type: 'select',
200
- name: 'secretInputMethod',
201
- message: `How would you like to provide ${inputMeta.description}?`,
202
- choices: [
203
- { title: 'Enter file path', value: 'path' },
204
- { title: 'Add content manually', value: 'manual' },
205
- ],
206
- });
207
- if (!secretInputMethod) {
208
- console.log('\nCancelled.');
209
- return;
210
- }
211
- let content;
212
- if (secretInputMethod === 'path') {
213
- const { filePath } = await prompts({
214
- type: 'text',
215
- name: 'filePath',
216
- message: `Enter absolute path to file:`,
217
- });
218
- if (!filePath?.trim()) {
219
- console.log('\nCancelled.');
220
- return;
221
- }
222
- const expandedPath = filePath.trim().replace(/^~/, process.env.HOME ?? '~');
223
- try {
224
- content = fs.readFileSync(expandedPath, 'utf-8');
225
- }
226
- catch {
227
- console.log(`\n Could not read ${expandedPath} — check the path and try again.`);
228
- return;
229
- }
230
- }
231
- else {
232
- content = await readMultilineContent(`${inputMeta.description} → will be stored as secret $${varName}`);
233
- if (!content) {
234
- console.log('\nCancelled.');
235
- return;
236
- }
237
- }
238
- secretsManager.storeSecret(varName, content, workflowName);
239
- // Add placeholder to workflow.envs (skip if already in app.envs)
240
- const rawDoc = yaml.load(fs.readFileSync(pipelinePath, 'utf-8'));
241
- const appEnvKeys = (rawDoc?.app?.envs ?? []).flatMap(Object.keys);
242
- if (!appEnvKeys.includes(varName)) {
243
- rawDoc.workflows[workflowName].envs ??= [];
244
- const wfEnvKeys = rawDoc.workflows[workflowName].envs.flatMap(Object.keys);
245
- if (!wfEnvKeys.includes(varName)) {
246
- rawDoc.workflows[workflowName].envs.push({ [varName]: '' });
247
- }
248
- fs.writeFileSync(pipelinePath, yaml.dump(rawDoc, { indent: 2, lineWidth: -1, noRefs: true }), 'utf-8');
249
- }
250
- console.log(` ✅ Stored ${varName} in .cibuild-secrets.json`);
251
- }
252
- // --- position selector ---
253
- const rawDoc = yaml.load(fs.readFileSync(pipelinePath, 'utf-8'));
254
- const steps = rawDoc.workflows[workflowName].steps ?? [];
255
- const positionChoices = [
256
- { title: '0. [top of workflow]', value: -1 },
257
- ...steps.map((s, i) => {
258
- const key = Object.keys(s)[0];
259
- const title = s[key]?.title ? `${i + 1}. ${key.split('@')[0]} (${s[key].title})` : `${i + 1}. ${key.split('@')[0]}`;
260
- return { title, value: i };
261
- }),
262
- ];
263
- const { insertAfter } = await prompts({
264
- type: 'select',
265
- name: 'insertAfter',
266
- message: 'Insert after step:',
267
- choices: positionChoices,
268
- });
269
- if (insertAfter === undefined) {
270
- console.log('\nCancelled.');
271
- return;
272
- }
273
- // --- build and insert the YAML step ---
274
- const stepObj = {
275
- [`${stepName}@1.0.0`]: {
276
- is_skippable: true,
277
- inputs: Object.keys(yamlInputs).length > 0 ? yamlInputs : undefined,
278
- },
279
- };
280
- steps.splice(insertAfter + 1, 0, stepObj);
281
- fs.writeFileSync(pipelinePath, yaml.dump(rawDoc, { indent: 2, lineWidth: -1, noRefs: true }), 'utf-8');
282
- const insertedAfterLabel = insertAfter === -1
283
- ? 'top of workflow'
284
- : positionChoices.find((c) => c.value === insertAfter)?.title ?? String(insertAfter + 1);
285
- console.log(`\n✅ Inserted ${stepName}@1.0.0 after ${insertedAfterLabel}`);
286
- }
287
- /**
288
- * Detects the target platform of a workflow.
289
- * Checks (in order):
290
- * 1. meta.invarn.platform (preferred), falling back to meta.cibuild.io.platform
291
- * 2. Existing steps in the workflow — fallback
292
- * Returns 'ios' or 'android', or null if platform cannot be determined.
293
- */
294
- export function detectWorkflowPlatform(pipeline, workflowName) {
295
- // 1. Explicit platform declaration on the Invarn-owned meta block
296
- const metaPlatform = getInvarnMeta(pipeline)?.platform;
297
- if (metaPlatform === 'ios' || metaPlatform === 'android' || metaPlatform === 'kmm')
298
- return metaPlatform === 'kmm' ? 'ios' : metaPlatform;
299
- // 2. Scan existing steps as fallback
300
- const workflow = pipeline.workflows[workflowName];
301
- if (!workflow)
302
- return null;
303
- for (const yamlStep of workflow.steps) {
304
- const stepKey = Object.keys(yamlStep)[0];
305
- const stepName = stepKey.split('@')[0];
306
- const m = getStepMetadata(stepName);
307
- if (m?.platform === 'ios')
308
- return 'ios';
309
- if (m?.platform === 'android')
310
- return 'android';
311
- }
312
- return null;
313
- }
314
- async function handleAddStep(pipelinePath, workflowName, pipeline, secretsManager) {
315
- const workflowPlatform = detectWorkflowPlatform(pipeline, workflowName);
316
- const stepNames = getAvailableSteps().filter((name) => {
317
- const platform = getStepMetadata(name)?.platform ?? 'all';
318
- if (platform === 'all')
319
- return true;
320
- if (workflowPlatform === null)
321
- return true; // no platform established yet — show all
322
- return platform === workflowPlatform;
323
- });
324
- if (workflowPlatform) {
325
- console.log(`\nℹ️ Showing ${workflowPlatform} and platform-agnostic steps (workflow targets ${workflowPlatform})\n`);
326
- }
327
- const choices = stepNames.map((name) => {
328
- const m = getStepMetadata(name);
329
- return { title: `${name}${m ? ` — ${m.description}` : ''}`, value: name };
330
- });
331
- const { selectionMode } = await prompts({
332
- type: 'select',
333
- name: 'selectionMode',
334
- message: 'How would you like to find a step?',
335
- choices: [
336
- { title: 'Search — type to filter', value: 'search' },
337
- { title: 'Browse — scroll through list', value: 'browse' },
338
- ],
339
- });
340
- if (!selectionMode) {
341
- console.log('\nCancelled.');
342
- return;
343
- }
344
- let stepName;
345
- if (selectionMode === 'search') {
346
- const result = await prompts({
347
- type: 'autocomplete',
348
- name: 'stepName',
349
- message: 'Search step:',
350
- choices,
351
- suggest: async (input, _) => {
352
- const q = input.toLowerCase();
353
- return choices.filter((c) => c.title.toLowerCase().includes(q));
354
- },
355
- });
356
- stepName = result.stepName;
357
- }
358
- else {
359
- const result = await prompts({
360
- type: 'select',
361
- name: 'stepName',
362
- message: 'Select step type:',
363
- choices,
364
- });
365
- stepName = result.stepName;
366
- }
367
- if (!stepName) {
368
- console.log('\nCancelled.');
369
- return;
370
- }
371
- await handleAddRegisteredStep(pipelinePath, workflowName, pipeline, stepName, secretsManager);
372
- }
373
- // ---------------------------------------------------------------------------
374
- export async function handleEditCommand(pipelinePath, workflowName) {
375
- const absolutePath = resolve(pipelinePath);
376
- const fileName = basename(absolutePath);
377
- // Load and validate the pipeline
378
- let pipeline;
379
- try {
380
- pipeline = loadYAMLPipeline(absolutePath);
381
- }
382
- catch (err) {
383
- console.error(`\n✗ ${err instanceof Error ? err.message : String(err)}`);
384
- process.exit(1);
385
- }
386
- const workflowNames = Object.keys(pipeline.workflows);
387
- // Select workflow
388
- let selectedWorkflow = workflowName;
389
- if (!selectedWorkflow) {
390
- if (workflowNames.length === 1) {
391
- selectedWorkflow = workflowNames[0];
392
- }
393
- else {
394
- const { workflow } = await prompts({
395
- type: 'select',
396
- name: 'workflow',
397
- message: 'Select a workflow:',
398
- choices: workflowNames.map((name) => ({ title: name, value: name })),
399
- initial: 0,
400
- });
401
- if (!workflow) {
402
- console.log('\nCancelled.');
403
- return;
404
- }
405
- selectedWorkflow = workflow;
406
- }
407
- }
408
- // Narrowed to string — selection logic above guarantees this
409
- const chosenWorkflow = selectedWorkflow;
410
- const workflowDef = pipeline.workflows[chosenWorkflow];
411
- if (!workflowDef) {
412
- console.error(`\n✗ Workflow '${chosenWorkflow}' not found.`);
413
- process.exit(1);
414
- }
415
- // Show pipeline summary
416
- printPipelineSummary(fileName, chosenWorkflow, workflowDef.steps);
417
- // Top-level action
418
- const { action } = await prompts({
419
- type: 'select',
420
- name: 'action',
421
- message: 'What would you like to do?',
422
- choices: [
423
- { title: "Edit a step's inputs", value: 'edit' },
424
- { title: 'Add step', value: 'add' },
425
- { title: 'Remove step', value: 'remove' },
426
- { title: 'Exit', value: 'exit' },
427
- ],
428
- });
429
- if (!action || action === 'exit') {
430
- return;
431
- }
432
- if (action === 'add') {
433
- const secretsManager = new SecretsManager();
434
- await handleAddStep(absolutePath, chosenWorkflow, pipeline, secretsManager);
435
- return;
436
- }
437
- if (action === 'remove') {
438
- const rawDoc = yaml.load(fs.readFileSync(absolutePath, 'utf-8'));
439
- const steps = rawDoc.workflows[chosenWorkflow].steps ?? [];
440
- if (steps.length === 0) {
441
- console.log('\nNo steps to remove.\n');
442
- return;
443
- }
444
- const { stepIndex } = await prompts({
445
- type: 'select',
446
- name: 'stepIndex',
447
- message: 'Select step to remove:',
448
- choices: steps.map((s, i) => {
449
- const key = Object.keys(s)[0];
450
- const title = s[key]?.title
451
- ? `${i + 1}. ${key.split('@')[0]} (${s[key].title})`
452
- : `${i + 1}. ${key.split('@')[0]}`;
453
- return { title, value: i };
454
- }),
455
- });
456
- if (stepIndex === undefined) {
457
- console.log('\nCancelled.');
458
- return;
459
- }
460
- const removedKey = Object.keys(steps[stepIndex])[0];
461
- const { confirmed } = await prompts({
462
- type: 'confirm',
463
- name: 'confirmed',
464
- message: `Remove '${removedKey.split('@')[0]}'?`,
465
- initial: false,
466
- });
467
- if (!confirmed) {
468
- console.log('\nCancelled.');
469
- return;
470
- }
471
- steps.splice(stepIndex, 1);
472
- fs.writeFileSync(absolutePath, yaml.dump(rawDoc, { indent: 2, lineWidth: -1, noRefs: true }), 'utf-8');
473
- console.log(`\n✅ Removed ${removedKey.split('@')[0]} from ${fileName}`);
474
- return;
475
- }
476
- // Load raw YAML for write-back (preserves structure we don't touch)
477
- const rawContent = fs.readFileSync(absolutePath, 'utf-8');
478
- const doc = yaml.load(rawContent);
479
- let madeChanges = false;
480
- let continueEditing = true;
481
- while (continueEditing) {
482
- // Select step
483
- const { stepIndex } = await prompts({
484
- type: 'select',
485
- name: 'stepIndex',
486
- message: 'Select a step to edit:',
487
- choices: workflowDef.steps.map((step, i) => {
488
- const stepKey = getStepKey(step);
489
- const config = step[stepKey];
490
- const displayName = getStepDisplayName(stepKey, step);
491
- const inputCount = config?.inputs ? Object.keys(config.inputs).length : 0;
492
- return {
493
- title: inputCount > 0
494
- ? `${displayName} (${inputCount} inputs)`
495
- : `${displayName} (no inputs)`,
496
- value: i,
497
- };
498
- }),
499
- initial: 0,
500
- });
501
- if (stepIndex === undefined) {
502
- console.log('\nCancelled.');
503
- break;
504
- }
505
- const selectedStep = workflowDef.steps[stepIndex];
506
- const stepKey = getStepKey(selectedStep);
507
- const stepConfig = selectedStep[stepKey];
508
- const inputs = stepConfig?.inputs;
509
- // Look up all available inputs from step metadata
510
- const stepId = stepKey.split('@')[0];
511
- const metadata = getStepMetadata(stepId);
512
- const metadataInputs = metadata?.inputs ?? {};
513
- // Merge: currently-set YAML inputs first, then unset metadata inputs
514
- const setKeys = new Set(Object.keys(inputs ?? {}));
515
- const allInputKeys = [
516
- ...Object.keys(inputs ?? {}),
517
- ...Object.keys(metadataInputs).filter(k => !setKeys.has(k)),
518
- ];
519
- if (allInputKeys.length === 0) {
520
- console.log('\nThis step has no inputs to edit.\n');
521
- }
522
- else {
523
- console.log(`\nEditing: ${getStepDisplayName(stepKey, selectedStep)}`);
524
- console.log('(Press Enter to keep current value, enter - to remove an input)\n');
525
- const changes = {};
526
- const deletions = new Set();
527
- for (const key of allInputKeys) {
528
- const isCurrentlySet = inputs != null && key in inputs;
529
- const currentValue = isCurrentlySet ? inputs[key] : undefined;
530
- const metaDefault = metadataInputs[key]?.default;
531
- const displayCurrent = isCurrentlySet
532
- ? formatValueForDisplay(currentValue)
533
- : metaDefault !== undefined
534
- ? `not set (default: ${metaDefault})`
535
- : 'not set';
536
- const isMultiline = typeof currentValue === 'string' && currentValue.includes('\n');
537
- const editInitial = isCurrentlySet && !isMultiline ? formatValueForEdit(currentValue) : '';
538
- const { newValue } = await prompts({
539
- type: 'text',
540
- name: 'newValue',
541
- message: `${key} [${displayCurrent}]:`,
542
- initial: editInitial,
543
- });
544
- if (newValue === undefined) {
545
- console.log('\nCancelled.');
546
- process.exit(0);
547
- }
548
- if (newValue === '-') {
549
- if (isCurrentlySet)
550
- deletions.add(key);
551
- }
552
- else if (newValue !== '' && newValue !== editInitial) {
553
- changes[key] = parseEditedValue(newValue, currentValue ?? '');
554
- }
555
- }
556
- if (Object.keys(changes).length === 0 && deletions.size === 0) {
557
- console.log('\nNo changes made.\n');
558
- }
559
- else {
560
- console.log('\nChanges:');
561
- for (const [key, newVal] of Object.entries(changes)) {
562
- const oldDisplay = inputs && key in inputs ? formatValueForDisplay(inputs[key]) : 'not set';
563
- const newDisplay = formatValueForDisplay(newVal);
564
- console.log(` ${key}: ${oldDisplay} → ${newDisplay}`);
565
- }
566
- for (const key of deletions) {
567
- console.log(` ${key}: ${formatValueForDisplay(inputs[key])} → (removed)`);
568
- }
569
- const { confirmSave } = await prompts({
570
- type: 'confirm',
571
- name: 'confirmSave',
572
- message: 'Save changes?',
573
- initial: true,
574
- });
575
- if (confirmSave) {
576
- // Apply to the raw doc for write-back
577
- const docStepConfig = doc.workflows[chosenWorkflow].steps[stepIndex][stepKey];
578
- if (!docStepConfig.inputs)
579
- docStepConfig.inputs = {};
580
- for (const [key, val] of Object.entries(changes)) {
581
- docStepConfig.inputs[key] = val;
582
- if (!stepConfig.inputs)
583
- stepConfig.inputs = {};
584
- stepConfig.inputs[key] = val;
585
- }
586
- for (const key of deletions) {
587
- delete docStepConfig.inputs[key];
588
- if (inputs)
589
- delete inputs[key];
590
- }
591
- const updatedYaml = yaml.dump(doc, {
592
- indent: 2,
593
- lineWidth: -1,
594
- noRefs: true,
595
- });
596
- fs.writeFileSync(absolutePath, updatedYaml, 'utf-8');
597
- madeChanges = true;
598
- console.log(`\n✅ Saved to ${fileName}`);
599
- // Guardrail: check for $VAR references in saved values that have no stored value
600
- const secretsManager = new SecretsManager();
601
- const unresolvedVars = new Set();
602
- for (const val of Object.values(changes)) {
603
- for (const ref of extractEnvRefs(val)) {
604
- if (!isVarDefined(ref, pipeline, chosenWorkflow, secretsManager)) {
605
- unresolvedVars.add(ref);
606
- }
607
- }
608
- }
609
- for (const varName of unresolvedVars) {
610
- console.log(`\n⚠️ $${varName} is referenced but has no stored value.`);
611
- const { storeNow } = await prompts({
612
- type: 'confirm',
613
- name: 'storeNow',
614
- message: `Store a value for ${varName} in .cibuild-secrets.json?`,
615
- initial: true,
616
- });
617
- if (storeNow) {
618
- const { secretValue } = await prompts({
619
- type: 'password',
620
- name: 'secretValue',
621
- message: `Value for ${varName}:`,
622
- validate: (v) => v.trim() === '' ? 'Value cannot be empty' : true,
623
- });
624
- if (secretValue) {
625
- secretsManager.storeSecret(varName, secretValue, chosenWorkflow);
626
- console.log(`✅ Stored ${varName} (workflow: ${chosenWorkflow})`);
627
- }
628
- }
629
- else {
630
- console.log(` You can add it later with: ci secrets add ${varName} ${pipelinePath} -w ${chosenWorkflow}`);
631
- }
632
- }
633
- }
634
- }
635
- }
636
- console.log();
637
- const { again } = await prompts({
638
- type: 'confirm',
639
- name: 'again',
640
- message: 'Edit another step?',
641
- initial: false,
642
- });
643
- continueEditing = !!again;
644
- }
645
- if (madeChanges) {
646
- console.log(`Next steps:`);
647
- console.log(` ci validate ${pipelinePath}`);
648
- console.log(` ci run ${pipelinePath} -w ${chosenWorkflow}`);
649
- console.log();
650
- }
651
- }
652
- //# sourceMappingURL=edit.js.map
@@ -1,6 +0,0 @@
1
- /**
2
- * Unit tests for edit-command helpers.
3
- * Focused on the dual-read of meta.invarn + meta.cibuild.io for the platform hint.
4
- */
5
- export {};
6
- //# sourceMappingURL=edit.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"edit.test.d.ts","sourceRoot":"","sources":["../../../src/commands/edit.test.ts"],"names":[],"mappings":"AAAA;;;GAGG"}