@invarn/cibuild 2.9.4 → 2.9.7

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 (547) 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/android-sign.d.ts +0 -35
  282. package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
  283. package/dist/src/yaml/steps/android-sign.js +0 -147
  284. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
  285. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
  286. package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
  287. package/dist/src/yaml/steps/android-version.d.ts +0 -26
  288. package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
  289. package/dist/src/yaml/steps/android-version.js +0 -128
  290. package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
  291. package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
  292. package/dist/src/yaml/steps/android-version.test.js +0 -196
  293. package/dist/src/yaml/steps/android.d.ts +0 -156
  294. package/dist/src/yaml/steps/android.d.ts.map +0 -1
  295. package/dist/src/yaml/steps/android.js +0 -1084
  296. package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
  297. package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
  298. package/dist/src/yaml/steps/app-store-deploy.js +0 -167
  299. package/dist/src/yaml/steps/base.d.ts +0 -263
  300. package/dist/src/yaml/steps/base.d.ts.map +0 -1
  301. package/dist/src/yaml/steps/base.js +0 -380
  302. package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
  303. package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
  304. package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
  305. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
  306. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
  307. package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
  308. package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
  309. package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
  310. package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
  311. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
  312. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
  313. package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
  314. package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
  315. package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
  316. package/dist/src/yaml/steps/bitrise-slack.js +0 -280
  317. package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
  318. package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
  319. package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
  320. package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
  321. package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
  322. package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
  323. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
  324. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
  325. package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
  326. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
  327. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
  328. package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
  329. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
  330. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
  331. package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
  332. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
  333. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
  334. package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
  335. package/dist/src/yaml/steps/cache.d.ts +0 -59
  336. package/dist/src/yaml/steps/cache.d.ts.map +0 -1
  337. package/dist/src/yaml/steps/cache.js +0 -1027
  338. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
  339. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
  340. package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
  341. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
  342. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
  343. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
  344. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
  345. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
  346. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
  347. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
  348. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
  349. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
  350. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
  351. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
  352. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
  353. package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
  354. package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
  355. package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
  356. package/dist/src/yaml/steps/fastlane.d.ts +0 -27
  357. package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
  358. package/dist/src/yaml/steps/fastlane.js +0 -79
  359. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
  360. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
  361. package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
  362. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
  363. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
  364. package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
  365. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
  366. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
  367. package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
  368. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
  369. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
  370. package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
  371. package/dist/src/yaml/steps/file.d.ts +0 -52
  372. package/dist/src/yaml/steps/file.d.ts.map +0 -1
  373. package/dist/src/yaml/steps/file.js +0 -108
  374. package/dist/src/yaml/steps/flutter.d.ts +0 -63
  375. package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
  376. package/dist/src/yaml/steps/flutter.js +0 -215
  377. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
  378. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
  379. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
  380. package/dist/src/yaml/steps/git-clone.d.ts +0 -32
  381. package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
  382. package/dist/src/yaml/steps/git-clone.js +0 -171
  383. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
  384. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
  385. package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
  386. package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
  387. package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
  388. package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
  389. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
  390. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
  391. package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
  392. package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
  393. package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
  394. package/dist/src/yaml/steps/google-play-deploy.js +0 -193
  395. package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
  396. package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
  397. package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
  398. package/dist/src/yaml/steps/gradle-memory.d.ts +0 -61
  399. package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
  400. package/dist/src/yaml/steps/gradle-memory.js +0 -311
  401. package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
  402. package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
  403. package/dist/src/yaml/steps/gradle-memory.test.js +0 -297
  404. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
  405. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
  406. package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
  407. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
  408. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
  409. package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
  410. package/dist/src/yaml/steps/index.d.ts +0 -10
  411. package/dist/src/yaml/steps/index.d.ts.map +0 -1
  412. package/dist/src/yaml/steps/index.js +0 -1461
  413. package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
  414. package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
  415. package/dist/src/yaml/steps/ios-deps.js +0 -279
  416. package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
  417. package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
  418. package/dist/src/yaml/steps/ios-deps.test.js +0 -90
  419. package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
  420. package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
  421. package/dist/src/yaml/steps/ios-signing.js +0 -144
  422. package/dist/src/yaml/steps/ios-version.d.ts +0 -47
  423. package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
  424. package/dist/src/yaml/steps/ios-version.js +0 -151
  425. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
  426. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
  427. package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
  428. package/dist/src/yaml/steps/linting.d.ts +0 -47
  429. package/dist/src/yaml/steps/linting.d.ts.map +0 -1
  430. package/dist/src/yaml/steps/linting.js +0 -148
  431. package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
  432. package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
  433. package/dist/src/yaml/steps/phase2.test.js +0 -197
  434. package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
  435. package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
  436. package/dist/src/yaml/steps/phase3.test.js +0 -144
  437. package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
  438. package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
  439. package/dist/src/yaml/steps/phase4.test.js +0 -166
  440. package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
  441. package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
  442. package/dist/src/yaml/steps/phase5.test.js +0 -263
  443. package/dist/src/yaml/steps/registry.d.ts +0 -88
  444. package/dist/src/yaml/steps/registry.d.ts.map +0 -1
  445. package/dist/src/yaml/steps/registry.js +0 -125
  446. package/dist/src/yaml/steps/registry.test.d.ts +0 -5
  447. package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
  448. package/dist/src/yaml/steps/registry.test.js +0 -235
  449. package/dist/src/yaml/steps/release.d.ts +0 -50
  450. package/dist/src/yaml/steps/release.d.ts.map +0 -1
  451. package/dist/src/yaml/steps/release.js +0 -154
  452. package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
  453. package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
  454. package/dist/src/yaml/steps/render-post-processor.js +0 -270
  455. package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
  456. package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
  457. package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
  458. package/dist/src/yaml/steps/script.d.ts +0 -23
  459. package/dist/src/yaml/steps/script.d.ts.map +0 -1
  460. package/dist/src/yaml/steps/script.js +0 -63
  461. package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
  462. package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
  463. package/dist/src/yaml/steps/spec-validation.test.js +0 -130
  464. package/dist/src/yaml/steps/steps.test.d.ts +0 -6
  465. package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
  466. package/dist/src/yaml/steps/steps.test.js +0 -881
  467. package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
  468. package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
  469. package/dist/src/yaml/steps/structural-facts.js +0 -3276
  470. package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
  471. package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
  472. package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
  473. package/dist/src/yaml/steps/test-config.d.ts +0 -5
  474. package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
  475. package/dist/src/yaml/steps/test-config.js +0 -25
  476. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
  477. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
  478. package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
  479. package/dist/src/yaml/steps/trim-align.d.ts +0 -87
  480. package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
  481. package/dist/src/yaml/steps/trim-align.js +0 -367
  482. package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
  483. package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
  484. package/dist/src/yaml/steps/trim-align.test.js +0 -261
  485. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
  486. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
  487. package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
  488. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
  489. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
  490. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
  491. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
  492. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
  493. package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
  494. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
  495. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
  496. package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
  497. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
  498. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
  499. package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
  500. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
  501. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
  502. package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
  503. package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
  504. package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
  505. package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
  506. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
  507. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
  508. package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
  509. package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
  510. package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
  511. package/dist/src/yaml/steps/xcode-app-product.js +0 -247
  512. package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
  513. package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
  514. package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
  515. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
  516. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
  517. package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -253
  518. package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
  519. package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
  520. package/dist/src/yaml/steps/xcode-destination.js +0 -202
  521. package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
  522. package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
  523. package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
  524. package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
  525. package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
  526. package/dist/src/yaml/steps/xcode-new.test.js +0 -211
  527. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
  528. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
  529. package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
  530. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
  531. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
  532. package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
  533. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
  534. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
  535. package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
  536. package/dist/src/yaml/steps/xcode.d.ts +0 -230
  537. package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
  538. package/dist/src/yaml/steps/xcode.js +0 -1340
  539. package/dist/src/yaml/types.d.ts +0 -76
  540. package/dist/src/yaml/types.d.ts.map +0 -1
  541. package/dist/src/yaml/types.js +0 -5
  542. package/dist/src/yaml/validation-types.d.ts +0 -102
  543. package/dist/src/yaml/validation-types.d.ts.map +0 -1
  544. package/dist/src/yaml/validation-types.js +0 -8
  545. package/dist/src/yaml/yaml-updater.d.ts +0 -24
  546. package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
  547. package/dist/src/yaml/yaml-updater.js +0 -128
@@ -1,255 +0,0 @@
1
- /**
2
- * A pipeline may declare a credential slot under the name a *workflow-scoped*
3
- * secret carries, and the workflow it names reads it under the plain name.
4
- *
5
- * Two workflows that build different product flavors cannot share one value.
6
- * `local.properties` is the clearest case: every workflow writes the same file
7
- * to the same path, and what belongs in it is the flavor's environment — a
8
- * different base API URL and twenty other keys the Secrets Gradle Plugin turns
9
- * into `BuildConfig`. One slot, one value, and one of the two flavors builds
10
- * against the wrong environment.
11
- *
12
- * The value side of that has always worked. `ci secrets upload` encodes a
13
- * workflow-scoped secret as `CIBUILD_SW__<WORKFLOW>__<VAR>`, `SecretsManager`
14
- * decodes it back, and `EnvResolver` asks for the workflow being run — proved
15
- * end to end on the dispatch path, where a fresh clone has no
16
- * `.cibuild-secrets.json` and the value arrives as a bare environment
17
- * variable. What did not work is *declaring* it. A pipeline declares its
18
- * credentials as empty `envs` slots, and that declaration does two jobs
19
- * nothing else does:
20
- *
21
- * - `unsetEnvKeys` — what `invarn setup` searches the developer's machine
22
- * by — reads `envs`, never step inputs. An undeclared credential is never
23
- * discovered and never offered for upload.
24
- * - `file@1.0.0` tells "nobody supplied this" from "this workflow does not
25
- * need it" by whether the key is in the env map at all, and only a
26
- * declaration puts an unsupplied key there. Without one, a credential that
27
- * went missing is skipped with a warning and the build fails later inside
28
- * the project's own build tool (issue 03).
29
- *
30
- * So a per-workflow slot has to be declarable, and a declaration naming one
31
- * workflow has to mean nothing in the others — otherwise `release` would
32
- * demand `primary`'s value. The decoding belongs here, beside the decoding of
33
- * the secret itself, and not in `file@`: the step keeps reading its plain
34
- * `var_name` and never learns the convention exists.
35
- */
36
- import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
37
- import { spawnSync } from 'node:child_process';
38
- import { mkdtempSync, readFileSync, rmSync, writeFileSync, existsSync } from 'node:fs';
39
- import { tmpdir } from 'node:os';
40
- import { join } from 'node:path';
41
- import { convertYAMLToPipelineDef } from './converter.js';
42
- import { EnvResolver } from './env-resolver.js';
43
- import { clearRegistry, registerStep } from './steps/registry.js';
44
- import { FileStepExecutor } from './steps/file.js';
45
- const mockConfig = {
46
- artifactsDir: '/test/artifacts',
47
- maxConcurrentJobs: 1,
48
- paths: {
49
- buildsDir: '/test/builds',
50
- cacheDir: '/test/cache',
51
- derivedDataDir: '/test/derived-data',
52
- },
53
- interpreters: {
54
- bash: '/bin/bash',
55
- python: 'python3',
56
- ruby: 'ruby',
57
- node: 'node',
58
- },
59
- };
60
- const TARGET = 'local.properties';
61
- /** Two flavors, two environments, and nothing in common but the file name. */
62
- const CI_DYNAMIC = 'BASE_API_URL=https://ci-dynamic.example.test/api\n';
63
- const PROD = 'BASE_API_URL=https://prod.example.test/api\n';
64
- /** Every environment variable a test here may set, cleared around each one. */
65
- const TOUCHED = [
66
- 'LOCAL_PROPERTIES',
67
- 'CIBUILD_S__LOCAL_PROPERTIES',
68
- 'CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES',
69
- 'CIBUILD_SW__PULL_REQUEST__LOCAL_PROPERTIES',
70
- 'CIBUILD_SW__RELEASE__LOCAL_PROPERTIES',
71
- ];
72
- let workdir;
73
- let previousCwd;
74
- function clearTouched() {
75
- for (const key of TOUCHED)
76
- delete process.env[key];
77
- }
78
- beforeEach(() => {
79
- clearRegistry();
80
- registerStep('file', new FileStepExecutor());
81
- previousCwd = process.cwd();
82
- workdir = mkdtempSync(join(tmpdir(), 'cibuild-workflow-slot-'));
83
- process.chdir(workdir);
84
- // `workdir` is the pre-symlink path on macOS; the steps resolve paths from
85
- // CIBUILD_SOURCE_DIR, which is cwd, so read files back the same way.
86
- workdir = process.cwd();
87
- clearTouched();
88
- });
89
- afterEach(() => {
90
- process.chdir(previousCwd);
91
- rmSync(workdir, { recursive: true, force: true });
92
- clearRegistry();
93
- clearTouched();
94
- });
95
- /**
96
- * The shape a flavored repository's generated pipeline has: the credential
97
- * declared once per workflow under the encoded name, and the same unsuffixed
98
- * `var_name` in every workflow's `file@` step.
99
- */
100
- function probePipeline(declared) {
101
- const step = {
102
- 'file@1.0.0': {
103
- title: 'Setup local.properties',
104
- is_skippable: true,
105
- inputs: { target_path: TARGET, var_name: 'LOCAL_PROPERTIES' },
106
- },
107
- };
108
- return {
109
- format_version: '1',
110
- app: { envs: Object.entries(declared).map(([k, v]) => ({ [k]: v })) },
111
- workflows: {
112
- primary: { envs: [{ VARIANT: 'ciDynamicDebug' }], steps: [step] },
113
- 'pull-request': { envs: [{ VARIANT: 'ciDynamicDebug' }], steps: [step] },
114
- release: { envs: [{ VARIANT: 'prodRelease' }], steps: [step] },
115
- },
116
- };
117
- }
118
- /**
119
- * Converts one workflow and runs the steps it generated the way the runner
120
- * does, then reads back whatever landed at `local.properties`.
121
- */
122
- async function land(pipeline, workflow) {
123
- const result = await convertYAMLToPipelineDef(pipeline, mockConfig, workflow);
124
- const chunks = [...result.warnings];
125
- for (const step of result.pipeline.steps) {
126
- const scriptPath = join(workdir, `__step_${step.id}.sh`);
127
- writeFileSync(scriptPath, step.script, 'utf-8');
128
- const proc = spawnSync('bash', [scriptPath], {
129
- cwd: workdir,
130
- encoding: 'utf-8',
131
- env: { ...process.env },
132
- });
133
- expect(proc.status).toBe(0);
134
- chunks.push(proc.stdout ?? '', proc.stderr ?? '');
135
- }
136
- const landedAt = join(workdir, TARGET);
137
- return {
138
- output: chunks.join('\n'),
139
- contents: existsSync(landedAt) ? readFileSync(landedAt, 'utf-8') : undefined,
140
- };
141
- }
142
- /** The conversion's outcome, without letting a throw escape the assertion. */
143
- async function convert(pipeline, workflow) {
144
- try {
145
- const result = await convertYAMLToPipelineDef(pipeline, mockConfig, workflow);
146
- return { steps: result.pipeline.steps };
147
- }
148
- catch (error) {
149
- return { error: error };
150
- }
151
- }
152
- function resolverFor(pipeline, workflow) {
153
- return new EnvResolver(pipeline, pipeline.workflows[workflow], workflow, 'linux');
154
- }
155
- /** The three slots a flavored repository's pipeline declares. */
156
- const PER_WORKFLOW_SLOTS = {
157
- CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES: '',
158
- CIBUILD_SW__PULL_REQUEST__LOCAL_PROPERTIES: '',
159
- CIBUILD_SW__RELEASE__LOCAL_PROPERTIES: '',
160
- };
161
- describe('a slot naming a workflow', () => {
162
- test('delivers that workflow its own bytes, and the other workflow the other bytes', async () => {
163
- // Exactly what a dispatch hands the build: bare environment variables
164
- // under the encoded names, and no `.cibuild-secrets.json` anywhere.
165
- process.env.CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES = CI_DYNAMIC;
166
- process.env.CIBUILD_SW__RELEASE__LOCAL_PROPERTIES = PROD;
167
- expect(existsSync(join(workdir, '.cibuild-secrets.json'))).toBe(false);
168
- const primary = await land(probePipeline(PER_WORKFLOW_SLOTS), 'primary');
169
- expect(primary.contents).toBe(CI_DYNAMIC);
170
- rmSync(join(workdir, TARGET));
171
- const release = await land(probePipeline(PER_WORKFLOW_SLOTS), 'release');
172
- expect(release.contents).toBe(PROD);
173
- });
174
- test('reaches a workflow whose name the encoding had to change', async () => {
175
- // `pull-request` cannot be an environment variable name, so the encoding
176
- // upper-cases it and turns the dash into an underscore. If the decoding
177
- // did not turn it back the slot would belong to a workflow nobody runs.
178
- process.env.CIBUILD_SW__PULL_REQUEST__LOCAL_PROPERTIES = CI_DYNAMIC;
179
- const { contents } = await land(probePipeline(PER_WORKFLOW_SLOTS), 'pull-request');
180
- expect(contents).toBe(CI_DYNAMIC);
181
- });
182
- test('is not a declaration in any other workflow', async () => {
183
- // `release` is asked for nothing here. If `primary`'s slot declared
184
- // `LOCAL_PROPERTIES` everywhere, `release` would refuse the build over a
185
- // value it was never going to be given.
186
- const pipeline = probePipeline({ CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES: '' });
187
- const { error, steps } = await convert(pipeline, 'release');
188
- expect(error).toBeUndefined();
189
- expect(steps).toBeDefined();
190
- expect(resolverFor(pipeline, 'release').has('LOCAL_PROPERTIES')).toBe(false);
191
- });
192
- test('still refuses the build in the workflow it does name', async () => {
193
- // The tripwire that makes per-workflow slots safe to emit. Replacing one
194
- // flat declaration with three scoped ones must not turn issue 03's loud
195
- // refusal back into a green skip.
196
- const { error } = await convert(probePipeline({ CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES: '' }), 'primary');
197
- expect(error).toBeDefined();
198
- expect(error.message).toContain('LOCAL_PROPERTIES');
199
- expect(error.message).toContain(TARGET);
200
- // Named as the build reads it. The encoding is ours, not the user's, and
201
- // `ci secrets add CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES` is not a command.
202
- expect(error.message).not.toContain('CIBUILD_SW__');
203
- });
204
- test('does not put its own spelling into the build environment', () => {
205
- process.env.CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES = CI_DYNAMIC;
206
- const resolver = resolverFor(probePipeline(PER_WORKFLOW_SLOTS), 'primary');
207
- expect(resolver.get('LOCAL_PROPERTIES')).toBe(CI_DYNAMIC);
208
- expect(resolver.has('CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES')).toBe(false);
209
- expect(Object.keys(resolver.getAll()).filter((k) => k.startsWith('CIBUILD_SW__'))).toEqual([]);
210
- });
211
- test('carries a value the pipeline itself supplies, under the plain name', () => {
212
- const resolver = resolverFor(probePipeline({ CIBUILD_SW__PRIMARY__LOCAL_PROPERTIES: CI_DYNAMIC }), 'primary');
213
- expect(resolver.get('LOCAL_PROPERTIES')).toBe(CI_DYNAMIC);
214
- });
215
- });
216
- describe('a value delivered the old way', () => {
217
- test('still reaches a per-workflow slot under its plain name', async () => {
218
- // A project whose secret was uploaded before any of this existed holds one
219
- // flat `LOCAL_PROPERTIES`. Regenerating its pipeline must not strand that
220
- // value: the slot declares the plain name, so step 5 imports it.
221
- process.env.LOCAL_PROPERTIES = CI_DYNAMIC;
222
- const { contents } = await land(probePipeline(PER_WORKFLOW_SLOTS), 'primary');
223
- expect(contents).toBe(CI_DYNAMIC);
224
- });
225
- test('is beaten by the value scoped to the workflow being run', async () => {
226
- process.env.LOCAL_PROPERTIES = CI_DYNAMIC;
227
- process.env.CIBUILD_SW__RELEASE__LOCAL_PROPERTIES = PROD;
228
- const { contents } = await land(probePipeline(PER_WORKFLOW_SLOTS), 'release');
229
- expect(contents).toBe(PROD);
230
- });
231
- test('reaches a globally encoded slot too', () => {
232
- // `CIBUILD_S__X` is the other half of the same convention: a secret with
233
- // no workflow. A pipeline declaring it means `X`, in every workflow.
234
- process.env.CIBUILD_S__LOCAL_PROPERTIES = CI_DYNAMIC;
235
- const resolver = resolverFor(probePipeline({ CIBUILD_S__LOCAL_PROPERTIES: '' }), 'release');
236
- expect(resolver.get('LOCAL_PROPERTIES')).toBe(CI_DYNAMIC);
237
- expect(resolver.has('CIBUILD_S__LOCAL_PROPERTIES')).toBe(false);
238
- });
239
- });
240
- describe('a pipeline that declares one flat slot', () => {
241
- test('is untouched — every workflow reads the one value', async () => {
242
- process.env.LOCAL_PROPERTIES = CI_DYNAMIC;
243
- for (const workflow of ['primary', 'pull-request', 'release']) {
244
- const { contents } = await land(probePipeline({ LOCAL_PROPERTIES: '' }), workflow);
245
- expect(contents).toBe(CI_DYNAMIC);
246
- rmSync(join(workdir, TARGET));
247
- }
248
- });
249
- test('keeps refusing when nobody supplied it', async () => {
250
- const { error } = await convert(probePipeline({ LOCAL_PROPERTIES: '' }), 'primary');
251
- expect(error).toBeDefined();
252
- expect(error.message).toContain('LOCAL_PROPERTIES');
253
- });
254
- });
255
- //# sourceMappingURL=a-declared-slot-may-name-the-workflow-it-belongs-to.test.js.map
@@ -1,32 +0,0 @@
1
- /**
2
- * A credential the pipeline declares and nobody supplied fails the build,
3
- * naming itself, instead of being skipped with a warning.
4
- *
5
- * `file@1.0.0` carries `is_skippable: true` in every pipeline the Android
6
- * generator emits, so an absent value printed `⚠️ X not set — skipping <file>`
7
- * and returned success. The build then failed several steps later inside the
8
- * project's own build tool, with an error naming the project rather than the
9
- * value we dropped. Both failure modes in this defect were green, which is why
10
- * it survived.
11
- *
12
- * The two absences are not the same absence, and the map the step already
13
- * receives tells them apart by presence:
14
- *
15
- * - a `var_name` the pipeline **declares** and leaves empty is a key of the
16
- * map with an empty value — the value was supposed to arrive as a secret
17
- * and did not. After issue 01 that means it is in none of the four places
18
- * a value can come from, so the diagnosis is not a guess.
19
- * - a `var_name` **nothing declares** is not a key of the map at all — a
20
- * release keystore on a debug workflow. Skipping is correct there.
21
- *
22
- * One case sits between them, and it decides the rule (issue 03 §2.3, Alex,
23
- * 2026-09-08): the generator declares `KEYSTORE_BASE64` globally but emits its
24
- * `file@` step in all three workflows, so a project that ran `ci init` with a
25
- * keystore and never uploaded one would go from three green skips to three
26
- * hard failures — including on `pull-request`, where nothing signs anything.
27
- * So the question the step asks is the one that actually matters: **will the
28
- * file be there when the build reads it?** A repository that carries the file
29
- * keeps warning and building; only an absence with nothing behind it fails.
30
- */
31
- export {};
32
- //# sourceMappingURL=a-missing-credential-is-loud.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a-missing-credential-is-loud.test.d.ts","sourceRoot":"","sources":["../../../src/yaml/a-missing-credential-is-loud.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6BG"}
@@ -1,301 +0,0 @@
1
- /**
2
- * A credential the pipeline declares and nobody supplied fails the build,
3
- * naming itself, instead of being skipped with a warning.
4
- *
5
- * `file@1.0.0` carries `is_skippable: true` in every pipeline the Android
6
- * generator emits, so an absent value printed `⚠️ X not set — skipping <file>`
7
- * and returned success. The build then failed several steps later inside the
8
- * project's own build tool, with an error naming the project rather than the
9
- * value we dropped. Both failure modes in this defect were green, which is why
10
- * it survived.
11
- *
12
- * The two absences are not the same absence, and the map the step already
13
- * receives tells them apart by presence:
14
- *
15
- * - a `var_name` the pipeline **declares** and leaves empty is a key of the
16
- * map with an empty value — the value was supposed to arrive as a secret
17
- * and did not. After issue 01 that means it is in none of the four places
18
- * a value can come from, so the diagnosis is not a guess.
19
- * - a `var_name` **nothing declares** is not a key of the map at all — a
20
- * release keystore on a debug workflow. Skipping is correct there.
21
- *
22
- * One case sits between them, and it decides the rule (issue 03 §2.3, Alex,
23
- * 2026-09-08): the generator declares `KEYSTORE_BASE64` globally but emits its
24
- * `file@` step in all three workflows, so a project that ran `ci init` with a
25
- * keystore and never uploaded one would go from three green skips to three
26
- * hard failures — including on `pull-request`, where nothing signs anything.
27
- * So the question the step asks is the one that actually matters: **will the
28
- * file be there when the build reads it?** A repository that carries the file
29
- * keeps warning and building; only an absence with nothing behind it fails.
30
- */
31
- import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
32
- import { spawnSync } from 'node:child_process';
33
- import { mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, existsSync, } from 'node:fs';
34
- import { tmpdir } from 'node:os';
35
- import { dirname, join } from 'node:path';
36
- import { convertYAMLToPipelineDef } from './converter.js';
37
- import { StepValidator } from './step-validator.js';
38
- import { clearRegistry, registerStep } from './steps/registry.js';
39
- import { FileStepExecutor } from './steps/file.js';
40
- const mockConfig = {
41
- artifactsDir: '/test/artifacts',
42
- maxConcurrentJobs: 1,
43
- paths: {
44
- buildsDir: '/test/builds',
45
- cacheDir: '/test/cache',
46
- derivedDataDir: '/test/derived-data',
47
- },
48
- interpreters: {
49
- bash: '/bin/bash',
50
- python: 'python3',
51
- ruby: 'ruby',
52
- node: 'node',
53
- },
54
- };
55
- /** The 61-byte document from the PRD's reproduction. Synthetic. */
56
- const JSON_CREDENTIAL = '{"project_info":{"project_id":"synthetic-probe"},"client":[]}';
57
- const TARGET = 'app/google-services.json';
58
- let workdir;
59
- let previousCwd;
60
- beforeEach(() => {
61
- clearRegistry();
62
- registerStep('file', new FileStepExecutor());
63
- previousCwd = process.cwd();
64
- workdir = mkdtempSync(join(tmpdir(), 'cibuild-missing-credential-'));
65
- process.chdir(workdir);
66
- // `workdir` is the pre-symlink path on macOS; the step resolves paths from
67
- // CIBUILD_SOURCE_DIR, which is cwd, so read and write files the same way.
68
- workdir = process.cwd();
69
- delete process.env.GOOGLE_SERVICES_JSON;
70
- delete process.env.KEYSTORE_BASE64;
71
- delete process.env.OTHER_SECRET;
72
- });
73
- afterEach(() => {
74
- process.chdir(previousCwd);
75
- rmSync(workdir, { recursive: true, force: true });
76
- clearRegistry();
77
- delete process.env.GOOGLE_SERVICES_JSON;
78
- delete process.env.KEYSTORE_BASE64;
79
- delete process.env.OTHER_SECRET;
80
- });
81
- /**
82
- * The shape the Android generator emits: empty slots under `app.envs` and one
83
- * skippable `file@1.0.0` step per credential, in declaration order.
84
- */
85
- function probePipeline(declared, fileSteps, options = {}) {
86
- const skippable = options.skippable ?? true;
87
- const app = declared
88
- ? { app: { envs: Object.entries(declared).map(([k, v]) => ({ [k]: v })) } }
89
- : {};
90
- return {
91
- format_version: '1',
92
- ...app,
93
- workflows: {
94
- probe: {
95
- steps: fileSteps.map((inputs) => ({
96
- 'file@1.0.0': {
97
- title: `Setup ${String(inputs.var_name)}`,
98
- is_skippable: skippable,
99
- inputs,
100
- },
101
- })),
102
- },
103
- },
104
- };
105
- }
106
- function writeSecretStore(global) {
107
- writeFileSync(join(workdir, '.cibuild-secrets.json'), JSON.stringify({ global, workflows: {} }), { mode: 0o600 });
108
- }
109
- /** Puts a file in the checkout, the way a repository that carries one does. */
110
- function commitToCheckout(relPath, contents) {
111
- const target = join(workdir, relPath);
112
- mkdirSync(dirname(target), { recursive: true });
113
- writeFileSync(target, contents, 'utf-8');
114
- }
115
- /**
116
- * Converts the pipeline and runs the generated steps the way the runner does,
117
- * then reads back whatever landed at `target`.
118
- */
119
- async function land(pipeline, target = TARGET) {
120
- const result = await convertYAMLToPipelineDef(pipeline, mockConfig, 'probe');
121
- const chunks = [...result.warnings];
122
- for (const step of result.pipeline.steps) {
123
- const scriptPath = join(workdir, `__step_${step.id}.sh`);
124
- writeFileSync(scriptPath, step.script, 'utf-8');
125
- const proc = spawnSync('bash', [scriptPath], {
126
- cwd: workdir,
127
- encoding: 'utf-8',
128
- env: { ...process.env },
129
- });
130
- expect(proc.status).toBe(0);
131
- chunks.push(proc.stdout ?? '', proc.stderr ?? '');
132
- }
133
- const landedAt = join(workdir, target);
134
- return {
135
- output: chunks.join('\n'),
136
- bytes: existsSync(landedAt) ? readFileSync(landedAt) : undefined,
137
- };
138
- }
139
- /** The conversion's outcome, without letting a throw escape the assertion. */
140
- async function convert(pipeline) {
141
- try {
142
- const result = await convertYAMLToPipelineDef(pipeline, mockConfig, 'probe');
143
- return { steps: result.pipeline.steps };
144
- }
145
- catch (error) {
146
- return { error: error };
147
- }
148
- }
149
- describe('a declared credential nothing supplied', () => {
150
- test('fails, naming the key and the target path', async () => {
151
- const { error, steps } = await convert(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
152
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
153
- ]));
154
- expect(error).toBeDefined();
155
- expect(error.message).toContain('GOOGLE_SERVICES_JSON');
156
- expect(error.message).toContain(TARGET);
157
- // Not a stack trace and not a step that runs: conversion is what builds
158
- // the step list, so nothing at all is handed to the runner.
159
- expect(steps).toBeUndefined();
160
- });
161
- test('says both places the value can come from', async () => {
162
- const { error } = await convert(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
163
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
164
- ]));
165
- // A user reading this should not have to know that a slot, an upload and
166
- // a `file@` step are three separate things.
167
- expect(error.message).toContain('ci secrets add GOOGLE_SERVICES_JSON');
168
- expect(error.message).toMatch(/organization or pipeline secret/);
169
- });
170
- test('is_skippable does not turn it into a pass', async () => {
171
- // Every `file@` step the Android generator emits carries this, which is
172
- // the whole reason the defect was invisible.
173
- const skippable = await convert(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [{ target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' }], { skippable: true }));
174
- const notSkippable = await convert(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [{ target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' }], { skippable: false }));
175
- expect(skippable.error).toBeDefined();
176
- expect(notSkippable.error).toBeDefined();
177
- });
178
- test('fails on the first unfilled slot, not the last and not all three', async () => {
179
- // What a real Android pipeline carries: three slots, none filled.
180
- const { error } = await convert(probePipeline({
181
- KEYSTORE_BASE64: '',
182
- KEYSTORE_PROPERTIES: '',
183
- GOOGLE_SERVICES_JSON: '',
184
- }, [
185
- {
186
- target_path: 'release.keystore',
187
- var_name: 'KEYSTORE_BASE64',
188
- base64_encoded: true,
189
- },
190
- { target_path: 'keystore.properties', var_name: 'KEYSTORE_PROPERTIES' },
191
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
192
- ]));
193
- expect(error).toBeDefined();
194
- expect(error.message).toContain('KEYSTORE_BASE64');
195
- expect(error.message).not.toContain('KEYSTORE_PROPERTIES');
196
- expect(error.message).not.toContain('GOOGLE_SERVICES_JSON');
197
- });
198
- test('no secret value appears in the message', async () => {
199
- // The failing slot has no value by definition, so the assertion that
200
- // means anything is about the values the build *does* hold.
201
- process.env.OTHER_SECRET = JSON_CREDENTIAL;
202
- const { error } = await convert(probePipeline({ OTHER_SECRET: '', GOOGLE_SERVICES_JSON: '' }, [
203
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
204
- ]));
205
- expect(error).toBeDefined();
206
- expect(error.message).not.toContain(JSON_CREDENTIAL);
207
- expect(error.message).not.toContain('synthetic-probe');
208
- });
209
- });
210
- describe('a credential the repository already carries', () => {
211
- test('warns and proceeds — the file will be there when the build reads it', async () => {
212
- // The `pull-request` collision: the generator declares KEYSTORE_BASE64
213
- // globally and emits its step on every workflow, so a project whose
214
- // keystore is in the repository must not be refused a build over a value
215
- // it never needed.
216
- commitToCheckout('release.keystore', 'a keystore the repository carries');
217
- const { output } = await land(probePipeline({ KEYSTORE_BASE64: '' }, [
218
- {
219
- target_path: 'release.keystore',
220
- var_name: 'KEYSTORE_BASE64',
221
- base64_encoded: true,
222
- },
223
- ]), 'release.keystore');
224
- expect(output).toContain('KEYSTORE_BASE64');
225
- expect(output).toContain('release.keystore');
226
- // The escape hatch has to be visible in the log, or a build that passes
227
- // this way is unexplainable to whoever reads it later.
228
- expect(output).toMatch(/already in the checkout/);
229
- });
230
- test('leaves the file it found exactly as it was', async () => {
231
- const carried = 'the repository\'s own google-services.json';
232
- commitToCheckout(TARGET, carried);
233
- const { bytes } = await land(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
234
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
235
- ]));
236
- expect(bytes?.toString('utf-8')).toBe(carried);
237
- });
238
- test('an uploaded value still wins over the one in the checkout', async () => {
239
- // A repository carrying a placeholder is the ordinary case for
240
- // google-services.json, and the point of the upload is to replace it.
241
- commitToCheckout(TARGET, 'placeholder committed for local development');
242
- process.env.GOOGLE_SERVICES_JSON = JSON_CREDENTIAL;
243
- const { output, bytes } = await land(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
244
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
245
- ]));
246
- expect(output).toContain('✓ Written google-services.json');
247
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
248
- });
249
- });
250
- describe('what issue 03 must not change', () => {
251
- test('an undeclared key still warns and passes, is_skippable and all', async () => {
252
- // Issue 01's class-A case, and the one this change is most likely to
253
- // break: HOME exists in every environment this runs in, and nothing
254
- // declares it.
255
- expect(process.env.HOME).toBeTruthy();
256
- const { output, bytes } = await land(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
257
- { target_path: 'home.txt', var_name: 'HOME' },
258
- ]), 'home.txt');
259
- expect(output).toContain('HOME not set — skipping home.txt');
260
- expect(bytes).toBeUndefined();
261
- });
262
- test('a declared value from the local store still writes', async () => {
263
- writeSecretStore({ GOOGLE_SERVICES_JSON: JSON_CREDENTIAL });
264
- const { output, bytes } = await land(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
265
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
266
- ]));
267
- expect(output).toContain('✓ Written google-services.json');
268
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
269
- });
270
- test('a declared value from the dispatched environment still writes', async () => {
271
- process.env.GOOGLE_SERVICES_JSON = JSON_CREDENTIAL;
272
- const { output, bytes } = await land(probePipeline({ GOOGLE_SERVICES_JSON: '' }, [
273
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
274
- ]));
275
- expect(output).toContain('✓ Written google-services.json');
276
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
277
- });
278
- test('a value the YAML itself supplies still writes', async () => {
279
- const { output, bytes } = await land(probePipeline({ GOOGLE_SERVICES_JSON: JSON_CREDENTIAL }, [
280
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
281
- ]));
282
- expect(output).toContain('✓ Written google-services.json');
283
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
284
- });
285
- test('ci validate still passes on a pipeline with empty slots', async () => {
286
- // Option 3 was rejected so validation does not start refusing builds
287
- // that are green today. This is the line that holds it.
288
- const pipeline = probePipeline({ KEYSTORE_BASE64: '', GOOGLE_SERVICES_JSON: '' }, [
289
- {
290
- target_path: 'release.keystore',
291
- var_name: 'KEYSTORE_BASE64',
292
- base64_encoded: true,
293
- },
294
- { target_path: TARGET, var_name: 'GOOGLE_SERVICES_JSON' },
295
- ]);
296
- const validator = new StepValidator(pipeline, 'probe', mockConfig);
297
- const result = await validator.validateWorkflow();
298
- expect(result.valid).toBe(true);
299
- });
300
- });
301
- //# sourceMappingURL=a-missing-credential-is-loud.test.js.map
@@ -1,18 +0,0 @@
1
- /**
2
- * A requirement that cannot be checked yet must not name a step as its source
3
- * unless a step is its source.
4
- *
5
- * Nine runtime requirements — `gradlew` in the three Android steps and the
6
- * Bitrise gradle wrapper, `project_path` in five Xcode steps — carried
7
- * `providedBy: 'git-clone'`. The lookup behind `providedBy` is keyed by step
8
- * *output names* (`CIBUILD_SOURCE_DIR`, `GIT_CLONE_COMMIT_HASH`, …) and these
9
- * requirements are named after a path or a command, so it could never match:
10
- * every Android validation printed "'gradlew' will be provided by 'git-clone'
11
- * step at runtime" whether the step was in the workflow or not.
12
- *
13
- * `git-clone` provides no files at all — the runner's checkout does, before
14
- * any step runs — and once it is out of the curated templates the sentence
15
- * names a step the pipeline does not contain.
16
- */
17
- import './steps/index.js';
18
- //# sourceMappingURL=a-runtime-requirement-names-a-real-provider.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a-runtime-requirement-names-a-real-provider.test.d.ts","sourceRoot":"","sources":["../../../src/yaml/a-runtime-requirement-names-a-real-provider.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAGH,OAAO,kBAAkB,CAAC"}