@invarn/cibuild 2.9.5 → 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 (553) 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 -1092
  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/capture-injection.d.ts +0 -30
  339. package/dist/src/yaml/steps/capture-injection.d.ts.map +0 -1
  340. package/dist/src/yaml/steps/capture-injection.js +0 -88
  341. package/dist/src/yaml/steps/capture-injection.test.d.ts +0 -2
  342. package/dist/src/yaml/steps/capture-injection.test.d.ts.map +0 -1
  343. package/dist/src/yaml/steps/capture-injection.test.js +0 -163
  344. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
  345. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
  346. package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
  347. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
  348. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
  349. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
  350. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
  351. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
  352. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
  353. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
  354. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
  355. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
  356. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
  357. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
  358. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
  359. package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
  360. package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
  361. package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
  362. package/dist/src/yaml/steps/fastlane.d.ts +0 -27
  363. package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
  364. package/dist/src/yaml/steps/fastlane.js +0 -79
  365. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
  366. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
  367. package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
  368. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
  369. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
  370. package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
  371. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
  372. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
  373. package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
  374. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
  375. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
  376. package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
  377. package/dist/src/yaml/steps/file.d.ts +0 -52
  378. package/dist/src/yaml/steps/file.d.ts.map +0 -1
  379. package/dist/src/yaml/steps/file.js +0 -108
  380. package/dist/src/yaml/steps/flutter.d.ts +0 -63
  381. package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
  382. package/dist/src/yaml/steps/flutter.js +0 -215
  383. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
  384. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
  385. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
  386. package/dist/src/yaml/steps/git-clone.d.ts +0 -32
  387. package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
  388. package/dist/src/yaml/steps/git-clone.js +0 -171
  389. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
  390. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
  391. package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
  392. package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
  393. package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
  394. package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
  395. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
  396. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
  397. package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
  398. package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
  399. package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
  400. package/dist/src/yaml/steps/google-play-deploy.js +0 -193
  401. package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
  402. package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
  403. package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
  404. package/dist/src/yaml/steps/gradle-memory.d.ts +0 -61
  405. package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
  406. package/dist/src/yaml/steps/gradle-memory.js +0 -386
  407. package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
  408. package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
  409. package/dist/src/yaml/steps/gradle-memory.test.js +0 -344
  410. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
  411. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
  412. package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
  413. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
  414. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
  415. package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
  416. package/dist/src/yaml/steps/index.d.ts +0 -10
  417. package/dist/src/yaml/steps/index.d.ts.map +0 -1
  418. package/dist/src/yaml/steps/index.js +0 -1461
  419. package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
  420. package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
  421. package/dist/src/yaml/steps/ios-deps.js +0 -279
  422. package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
  423. package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
  424. package/dist/src/yaml/steps/ios-deps.test.js +0 -90
  425. package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
  426. package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
  427. package/dist/src/yaml/steps/ios-signing.js +0 -144
  428. package/dist/src/yaml/steps/ios-version.d.ts +0 -47
  429. package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
  430. package/dist/src/yaml/steps/ios-version.js +0 -151
  431. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
  432. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
  433. package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
  434. package/dist/src/yaml/steps/linting.d.ts +0 -47
  435. package/dist/src/yaml/steps/linting.d.ts.map +0 -1
  436. package/dist/src/yaml/steps/linting.js +0 -148
  437. package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
  438. package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
  439. package/dist/src/yaml/steps/phase2.test.js +0 -197
  440. package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
  441. package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
  442. package/dist/src/yaml/steps/phase3.test.js +0 -144
  443. package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
  444. package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
  445. package/dist/src/yaml/steps/phase4.test.js +0 -166
  446. package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
  447. package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
  448. package/dist/src/yaml/steps/phase5.test.js +0 -263
  449. package/dist/src/yaml/steps/registry.d.ts +0 -88
  450. package/dist/src/yaml/steps/registry.d.ts.map +0 -1
  451. package/dist/src/yaml/steps/registry.js +0 -125
  452. package/dist/src/yaml/steps/registry.test.d.ts +0 -5
  453. package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
  454. package/dist/src/yaml/steps/registry.test.js +0 -235
  455. package/dist/src/yaml/steps/release.d.ts +0 -50
  456. package/dist/src/yaml/steps/release.d.ts.map +0 -1
  457. package/dist/src/yaml/steps/release.js +0 -154
  458. package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
  459. package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
  460. package/dist/src/yaml/steps/render-post-processor.js +0 -270
  461. package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
  462. package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
  463. package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
  464. package/dist/src/yaml/steps/script.d.ts +0 -23
  465. package/dist/src/yaml/steps/script.d.ts.map +0 -1
  466. package/dist/src/yaml/steps/script.js +0 -63
  467. package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
  468. package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
  469. package/dist/src/yaml/steps/spec-validation.test.js +0 -130
  470. package/dist/src/yaml/steps/steps.test.d.ts +0 -6
  471. package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
  472. package/dist/src/yaml/steps/steps.test.js +0 -881
  473. package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
  474. package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
  475. package/dist/src/yaml/steps/structural-facts.js +0 -3276
  476. package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
  477. package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
  478. package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
  479. package/dist/src/yaml/steps/test-config.d.ts +0 -5
  480. package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
  481. package/dist/src/yaml/steps/test-config.js +0 -25
  482. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
  483. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
  484. package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
  485. package/dist/src/yaml/steps/trim-align.d.ts +0 -87
  486. package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
  487. package/dist/src/yaml/steps/trim-align.js +0 -367
  488. package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
  489. package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
  490. package/dist/src/yaml/steps/trim-align.test.js +0 -261
  491. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
  492. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
  493. package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
  494. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
  495. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
  496. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
  497. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
  498. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
  499. package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
  500. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
  501. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
  502. package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
  503. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
  504. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
  505. package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
  506. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
  507. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
  508. package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
  509. package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
  510. package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
  511. package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
  512. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
  513. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
  514. package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
  515. package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
  516. package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
  517. package/dist/src/yaml/steps/xcode-app-product.js +0 -247
  518. package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
  519. package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
  520. package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
  521. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
  522. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
  523. package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -279
  524. package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
  525. package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
  526. package/dist/src/yaml/steps/xcode-destination.js +0 -202
  527. package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
  528. package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
  529. package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
  530. package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
  531. package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
  532. package/dist/src/yaml/steps/xcode-new.test.js +0 -211
  533. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
  534. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
  535. package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
  536. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
  537. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
  538. package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
  539. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
  540. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
  541. package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
  542. package/dist/src/yaml/steps/xcode.d.ts +0 -230
  543. package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
  544. package/dist/src/yaml/steps/xcode.js +0 -1350
  545. package/dist/src/yaml/types.d.ts +0 -76
  546. package/dist/src/yaml/types.d.ts.map +0 -1
  547. package/dist/src/yaml/types.js +0 -5
  548. package/dist/src/yaml/validation-types.d.ts +0 -102
  549. package/dist/src/yaml/validation-types.d.ts.map +0 -1
  550. package/dist/src/yaml/validation-types.js +0 -8
  551. package/dist/src/yaml/yaml-updater.d.ts +0 -24
  552. package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
  553. package/dist/src/yaml/yaml-updater.js +0 -128
@@ -1,223 +0,0 @@
1
- /**
2
- * A `cache_paths` entry must not contain the file a `file@` step writes.
3
- *
4
- * Everything else about a credential's life inside a build is bounded, and was
5
- * checked on the three boxes after the first build that ever wrote one: the
6
- * runner pushes the checkout and the guest root onto `cleanupPaths` and
7
- * removes them in a `finally`, the guest gets `rm -rf`, and `tart delete`
8
- * reclaims the VM. Nothing was left anywhere.
9
- *
10
- * The cache store is the one place a file can survive all of that.
11
- * `cache-push` archives whatever `cache_paths` names and uploads it to where
12
- * the *next* build pulls it from, so a credential swept into that archive
13
- * outlives the build it was delivered to — and outlives the sandbox that was
14
- * supposed to contain it.
15
- *
16
- * No pipeline in play trips this. Every one of them caches
17
- * `~/.gradle/caches`, `~/.gradle/wrapper` and `.gradle`, and none of those
18
- * holds a credential. It is a guard on a mistake that is easy to make and
19
- * invisible once made: adding `.` to `cache_paths` is a plausible way to make
20
- * a build faster, and it would publish the signing key.
21
- *
22
- * Refused at generation time, like issue 03's missing credential, because that
23
- * is the only place that can see a whole workflow at once — a cache step can
24
- * be written before the `file@` step whose target it would swallow — and
25
- * because the alternative is a build that goes green while leaking.
26
- */
27
- import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
28
- import { mkdtempSync, rmSync } from 'node:fs';
29
- import { tmpdir } from 'node:os';
30
- import { join } from 'node:path';
31
- import { cacheEntryContains, credentialsSwallowedByCache, swallowedCredentialMessage, convertYAMLToPipelineDef, YAMLConversionError, } from './converter.js';
32
- import { clearRegistry, registerStep } from './steps/registry.js';
33
- import { FileStepExecutor } from './steps/file.js';
34
- import { CachePullStepExecutor, CachePushStepExecutor } from './steps/cache.js';
35
- const KEYSTORE = {
36
- targetPath: 'app/customer-android.jks',
37
- varName: 'KEYSTORE_BASE64',
38
- };
39
- const PROPERTIES = {
40
- targetPath: 'local.properties',
41
- varName: 'LOCAL_PROPERTIES',
42
- };
43
- function cache(...cachePaths) {
44
- return [{ stepName: 'cache-push', cachePaths }];
45
- }
46
- describe('which cache entries reach a credential', () => {
47
- test('the checkout root reaches everything in it', () => {
48
- for (const root of ['.', './', './/']) {
49
- expect(cacheEntryContains(root, 'app/customer-android.jks')).toBe(true);
50
- expect(cacheEntryContains(root, 'local.properties')).toBe(true);
51
- }
52
- });
53
- test('a directory reaches what is under it, and nothing beside it', () => {
54
- expect(cacheEntryContains('app', 'app/customer-android.jks')).toBe(true);
55
- expect(cacheEntryContains('app/', 'app/customer-android.jks')).toBe(true);
56
- expect(cacheEntryContains('./app', 'app/customer-android.jks')).toBe(true);
57
- // `application/` is a different directory that merely shares a prefix.
58
- expect(cacheEntryContains('app', 'application/customer-android.jks')).toBe(false);
59
- expect(cacheEntryContains('.gradle', 'local.properties')).toBe(false);
60
- });
61
- test('an entry that is the credential itself reaches it', () => {
62
- expect(cacheEntryContains('local.properties', 'local.properties')).toBe(true);
63
- });
64
- test('an absolute or home-rooted entry reaches nothing in the checkout', () => {
65
- // `cache.ts` classifies these as absolute and stores them from the
66
- // filesystem root, so they are somewhere the checkout is not — which is
67
- // why every real pipeline's Gradle caches are safe.
68
- for (const outside of ['~/.gradle/caches', '~/.gradle/wrapper', '/var/tmp/x']) {
69
- expect(cacheEntryContains(outside, 'app/customer-android.jks')).toBe(false);
70
- expect(cacheEntryContains(outside, 'local.properties')).toBe(false);
71
- }
72
- });
73
- });
74
- describe('the credentials a workflow would archive', () => {
75
- test('are none for the paths every real pipeline caches', () => {
76
- expect(credentialsSwallowedByCache([KEYSTORE, PROPERTIES], cache('~/.gradle/caches', '~/.gradle/wrapper', '.gradle'))).toEqual([]);
77
- });
78
- test('are every one of them when the entry is the checkout root', () => {
79
- const found = credentialsSwallowedByCache([KEYSTORE, PROPERTIES], cache('.'));
80
- expect(found.map((f) => f.varName)).toEqual(['KEYSTORE_BASE64', 'LOCAL_PROPERTIES']);
81
- expect(found[0]).toEqual({
82
- stepName: 'cache-push',
83
- cachePath: '.',
84
- targetPath: 'app/customer-android.jks',
85
- varName: 'KEYSTORE_BASE64',
86
- });
87
- });
88
- test('are only the ones the entry actually reaches', () => {
89
- const found = credentialsSwallowedByCache([KEYSTORE, PROPERTIES], cache('app'));
90
- expect(found.map((f) => f.varName)).toEqual(['KEYSTORE_BASE64']);
91
- });
92
- test('are found on a pull step as readily as a push step', () => {
93
- // `cache-pull` names the same paths, and a pipeline that pulls a directory
94
- // it also pushes is the normal shape — so naming the step that declared it
95
- // is what makes the message actionable.
96
- const found = credentialsSwallowedByCache([PROPERTIES], [
97
- { stepName: 'cache-pull', cachePaths: ['.'] },
98
- ]);
99
- expect(found[0].stepName).toBe('cache-pull');
100
- });
101
- test('are none when the workflow writes no credential at all', () => {
102
- expect(credentialsSwallowedByCache([], cache('.'))).toEqual([]);
103
- });
104
- });
105
- describe('what the refusal tells the author', () => {
106
- test('names the workflow, the entry, the file and the secret', () => {
107
- const [swallowed] = credentialsSwallowedByCache([KEYSTORE], cache('.'));
108
- const message = swallowedCredentialMessage('primary', swallowed);
109
- expect(message).toContain('primary');
110
- expect(message).toContain('cache-push');
111
- expect(message).toContain('cache_paths');
112
- expect(message).toContain('app/customer-android.jks');
113
- expect(message).toContain('KEYSTORE_BASE64');
114
- // And why it matters, not only that it is refused.
115
- expect(message).toContain('outlives the build');
116
- });
117
- });
118
- // ─── Through the real converter ───────────────────────────────────────────
119
- const mockConfig = {
120
- artifactsDir: '/test/artifacts',
121
- maxConcurrentJobs: 1,
122
- paths: {
123
- buildsDir: '/test/builds',
124
- cacheDir: '/test/cache',
125
- derivedDataDir: '/test/derived-data',
126
- },
127
- interpreters: {
128
- bash: '/bin/bash',
129
- python: 'python3',
130
- ruby: 'ruby',
131
- node: 'node',
132
- },
133
- };
134
- let workdir;
135
- let previousCwd;
136
- beforeEach(() => {
137
- clearRegistry();
138
- registerStep('file', new FileStepExecutor());
139
- registerStep('cache-pull', new CachePullStepExecutor());
140
- registerStep('cache-push', new CachePushStepExecutor());
141
- previousCwd = process.cwd();
142
- workdir = mkdtempSync(join(tmpdir(), 'cibuild-cache-credential-'));
143
- process.chdir(workdir);
144
- workdir = process.cwd();
145
- process.env.LOCAL_PROPERTIES = 'sdk.dir=/opt/android-sdk\n';
146
- });
147
- afterEach(() => {
148
- process.chdir(previousCwd);
149
- rmSync(workdir, { recursive: true, force: true });
150
- clearRegistry();
151
- delete process.env.LOCAL_PROPERTIES;
152
- });
153
- /** A workflow that writes a credential and then caches `cachePaths`. */
154
- function pipelineCaching(cachePaths) {
155
- return {
156
- format_version: '1',
157
- app: { envs: [{ LOCAL_PROPERTIES: '' }] },
158
- workflows: {
159
- primary: {
160
- steps: [
161
- {
162
- 'file@1.0.0': {
163
- title: 'Setup local.properties',
164
- is_skippable: true,
165
- inputs: { target_path: 'local.properties', var_name: 'LOCAL_PROPERTIES' },
166
- },
167
- },
168
- {
169
- 'cache-push@1.0.0': {
170
- inputs: { cache_key: 'gradle-app', cache_paths: cachePaths },
171
- },
172
- },
173
- ],
174
- },
175
- },
176
- };
177
- }
178
- describe('converting a workflow whose cache would archive a credential', () => {
179
- test('refuses, rather than building green and publishing the file', async () => {
180
- await expect(convertYAMLToPipelineDef(pipelineCaching(['.']), mockConfig, 'primary')).rejects.toBeInstanceOf(YAMLConversionError);
181
- await expect(convertYAMLToPipelineDef(pipelineCaching(['.']), mockConfig, 'primary')).rejects.toThrow(/local\.properties/);
182
- });
183
- test('refuses when the cache step is written before the file step', async () => {
184
- // Order cannot be the test: an author is free to pull a cache first, and
185
- // the cache still ends up holding whatever the later step wrote.
186
- const reordered = {
187
- format_version: '1',
188
- app: { envs: [{ LOCAL_PROPERTIES: '' }] },
189
- workflows: {
190
- primary: {
191
- steps: [
192
- { 'cache-pull@1.0.0': { inputs: { cache_key: 'k', cache_paths: ['.'] } } },
193
- {
194
- 'file@1.0.0': {
195
- is_skippable: true,
196
- inputs: { target_path: 'local.properties', var_name: 'LOCAL_PROPERTIES' },
197
- },
198
- },
199
- ],
200
- },
201
- },
202
- };
203
- await expect(convertYAMLToPipelineDef(reordered, mockConfig, 'primary')).rejects.toThrow(/LOCAL_PROPERTIES/);
204
- });
205
- test('converts the paths every real pipeline caches, untouched', async () => {
206
- const result = await convertYAMLToPipelineDef(pipelineCaching(['~/.gradle/caches', '~/.gradle/wrapper', '.gradle']), mockConfig, 'primary');
207
- expect(result.pipeline.steps).toHaveLength(2);
208
- expect(result.warnings).toEqual([]);
209
- });
210
- test('leaves a workflow with no credential alone, whatever it caches', async () => {
211
- const noCredential = {
212
- format_version: '1',
213
- workflows: {
214
- primary: {
215
- steps: [{ 'cache-push@1.0.0': { inputs: { cache_key: 'k', cache_paths: ['.'] } } }],
216
- },
217
- },
218
- };
219
- const result = await convertYAMLToPipelineDef(noCredential, mockConfig, 'primary');
220
- expect(result.pipeline.steps).toHaveLength(1);
221
- });
222
- });
223
- //# sourceMappingURL=a-cache-path-must-not-swallow-a-credential.test.js.map
@@ -1,20 +0,0 @@
1
- /**
2
- * A credential the pipeline declares and the dispatch delivers reaches the
3
- * step that writes it.
4
- *
5
- * `file@1.0.0` decides at generation time, from the env map `EnvResolver`
6
- * hands it: a value means a write script, no value means
7
- * `echo "⚠️ X not set — skipping <file>"` and a green step. That map had
8
- * four sources — built-ins, `.cibuild-secrets.json`, `app.envs`,
9
- * `workflow.envs` — and a dispatched build supplies none of them. The runner
10
- * merges the dispatch's secrets into the environment of the `ci` invocation
11
- * and writes no secrets file, so every credential declared as an empty slot
12
- * was dropped, on every dispatched build, and the step reported success.
13
- *
14
- * The two runs that make it unambiguous are here as the first two tests: the
15
- * same pipeline, the same step, the same value, delivered once through the
16
- * process environment and once through the local store. Before the fifth
17
- * resolution step the first wrote nothing and the second wrote the file.
18
- */
19
- export {};
20
- //# sourceMappingURL=a-declared-secret-reaches-the-file-step.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a-declared-secret-reaches-the-file-step.test.d.ts","sourceRoot":"","sources":["../../../src/yaml/a-declared-secret-reaches-the-file-step.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG"}
@@ -1,201 +0,0 @@
1
- /**
2
- * A credential the pipeline declares and the dispatch delivers reaches the
3
- * step that writes it.
4
- *
5
- * `file@1.0.0` decides at generation time, from the env map `EnvResolver`
6
- * hands it: a value means a write script, no value means
7
- * `echo "⚠️ X not set — skipping <file>"` and a green step. That map had
8
- * four sources — built-ins, `.cibuild-secrets.json`, `app.envs`,
9
- * `workflow.envs` — and a dispatched build supplies none of them. The runner
10
- * merges the dispatch's secrets into the environment of the `ci` invocation
11
- * and writes no secrets file, so every credential declared as an empty slot
12
- * was dropped, on every dispatched build, and the step reported success.
13
- *
14
- * The two runs that make it unambiguous are here as the first two tests: the
15
- * same pipeline, the same step, the same value, delivered once through the
16
- * process environment and once through the local store. Before the fifth
17
- * resolution step the first wrote nothing and the second wrote the file.
18
- */
19
- import { describe, test, expect, beforeEach, afterEach } from '@jest/globals';
20
- import { spawnSync } from 'node:child_process';
21
- import { mkdtempSync, readFileSync, rmSync, writeFileSync, existsSync } from 'node:fs';
22
- import { tmpdir } from 'node:os';
23
- import { join } from 'node:path';
24
- import { convertYAMLToPipelineDef } from './converter.js';
25
- import { EnvResolver } from './env-resolver.js';
26
- import { clearRegistry, registerStep } from './steps/registry.js';
27
- import { FileStepExecutor } from './steps/file.js';
28
- const mockConfig = {
29
- artifactsDir: '/test/artifacts',
30
- maxConcurrentJobs: 1,
31
- paths: {
32
- buildsDir: '/test/builds',
33
- cacheDir: '/test/cache',
34
- derivedDataDir: '/test/derived-data',
35
- },
36
- interpreters: {
37
- bash: '/bin/bash',
38
- python: 'python3',
39
- ruby: 'ruby',
40
- node: 'node',
41
- },
42
- };
43
- /** The 61-byte document from the PRD's reproduction. Synthetic. */
44
- const JSON_CREDENTIAL = '{"project_info":{"project_id":"synthetic-probe"},"client":[]}';
45
- const TARGET = 'app/google-services.json';
46
- let workdir;
47
- let previousCwd;
48
- beforeEach(() => {
49
- clearRegistry();
50
- registerStep('file', new FileStepExecutor());
51
- previousCwd = process.cwd();
52
- workdir = mkdtempSync(join(tmpdir(), 'cibuild-declared-secret-'));
53
- process.chdir(workdir);
54
- // `workdir` is the pre-symlink path on macOS; the steps resolve paths from
55
- // CIBUILD_SOURCE_DIR, which is cwd, so read files back the same way.
56
- workdir = process.cwd();
57
- delete process.env.PLAIN_SECRET;
58
- delete process.env.B64_SECRET;
59
- });
60
- afterEach(() => {
61
- process.chdir(previousCwd);
62
- rmSync(workdir, { recursive: true, force: true });
63
- clearRegistry();
64
- delete process.env.PLAIN_SECRET;
65
- delete process.env.B64_SECRET;
66
- });
67
- /**
68
- * The shape the Android generator emits: an empty slot under `app.envs` and a
69
- * skippable `file@1.0.0` step naming it.
70
- */
71
- function probePipeline(declared, fileInputs) {
72
- const app = declared
73
- ? { app: { envs: Object.entries(declared).map(([k, v]) => ({ [k]: v })) } }
74
- : {};
75
- return {
76
- format_version: '1',
77
- ...app,
78
- workflows: {
79
- probe: {
80
- steps: [
81
- {
82
- 'file@1.0.0': {
83
- title: 'Setup credential',
84
- is_skippable: true,
85
- inputs: fileInputs,
86
- },
87
- },
88
- ],
89
- },
90
- },
91
- };
92
- }
93
- function writeSecretStore(global) {
94
- writeFileSync(join(workdir, '.cibuild-secrets.json'), JSON.stringify({ global, workflows: {} }), { mode: 0o600 });
95
- }
96
- /**
97
- * Converts the pipeline and runs the generated steps the way the runner does,
98
- * then reads back whatever landed at `target`.
99
- */
100
- async function land(pipeline, target = TARGET) {
101
- const result = await convertYAMLToPipelineDef(pipeline, mockConfig, 'probe');
102
- const chunks = [...result.warnings];
103
- for (const step of result.pipeline.steps) {
104
- const scriptPath = join(workdir, `__step_${step.id}.sh`);
105
- writeFileSync(scriptPath, step.script, 'utf-8');
106
- const proc = spawnSync('bash', [scriptPath], {
107
- cwd: workdir,
108
- encoding: 'utf-8',
109
- env: { ...process.env },
110
- });
111
- // A step that cannot even run would make every other assertion here
112
- // vacuous, so fail on it directly rather than through the file contents.
113
- expect(proc.status).toBe(0);
114
- chunks.push(proc.stdout ?? '', proc.stderr ?? '');
115
- }
116
- const landedAt = join(workdir, target);
117
- return {
118
- output: chunks.join('\n'),
119
- bytes: existsSync(landedAt) ? readFileSync(landedAt) : undefined,
120
- };
121
- }
122
- describe('a declared credential delivered through the process environment', () => {
123
- test('reaches the file step and lands byte-exact — the dispatch path', async () => {
124
- process.env.PLAIN_SECRET = JSON_CREDENTIAL;
125
- const { output, bytes } = await land(probePipeline({ PLAIN_SECRET: '' }, { target_path: TARGET, var_name: 'PLAIN_SECRET' }));
126
- expect(output).toContain('✓ Written google-services.json');
127
- expect(output).not.toContain('not set');
128
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
129
- expect(bytes).toHaveLength(61);
130
- });
131
- test('still lands when the value comes from the local store instead', async () => {
132
- writeSecretStore({ PLAIN_SECRET: JSON_CREDENTIAL });
133
- const { output, bytes } = await land(probePipeline({ PLAIN_SECRET: '' }, { target_path: TARGET, var_name: 'PLAIN_SECRET' }));
134
- expect(output).toContain('✓ Written google-services.json');
135
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
136
- });
137
- test('the local store wins when both carry the key', async () => {
138
- writeSecretStore({ PLAIN_SECRET: 'from-the-local-store' });
139
- process.env.PLAIN_SECRET = 'from-the-inherited-environment';
140
- const { bytes } = await land(probePipeline({ PLAIN_SECRET: '' }, { target_path: TARGET, var_name: 'PLAIN_SECRET' }));
141
- expect(bytes?.toString('utf-8')).toBe('from-the-local-store');
142
- });
143
- test('a value the YAML itself supplies is not replaced by the environment', async () => {
144
- process.env.PLAIN_SECRET = 'from-the-inherited-environment';
145
- const { bytes } = await land(probePipeline({ PLAIN_SECRET: 'from-the-pipeline' }, { target_path: TARGET, var_name: 'PLAIN_SECRET' }));
146
- expect(bytes?.toString('utf-8')).toBe('from-the-pipeline');
147
- });
148
- test('arrives verbatim — a $ in a credential is not a variable reference', async () => {
149
- // A PEM passphrase, a Play service-account key, any credential at all may
150
- // hold a `$`. Interpolating one would either paste a pipeline value into
151
- // the middle of a secret or refuse the build over a name nothing declares.
152
- const withDollars = 'prefix $NOT_A_DECLARED_VARIABLE ${ALSO_NOT_ONE} suffix';
153
- process.env.PLAIN_SECRET = withDollars;
154
- const { bytes } = await land(probePipeline({ PLAIN_SECRET: '' }, { target_path: TARGET, var_name: 'PLAIN_SECRET' }));
155
- expect(bytes?.toString('utf-8')).toBe(withDollars);
156
- });
157
- test('base64_encoded round-trips bytes a text channel cannot carry', async () => {
158
- // NUL and a newline together: the two bytes a keystore has and an
159
- // environment variable cannot hold, which is why the slot carries base64.
160
- const payload = Buffer.from([
161
- 0x50, 0x4b, 0x03, 0x04, 0x00, 0x0a, 0x00, 0xff, 0x00, 0x0d, 0x0a, 0x7f,
162
- ]);
163
- process.env.B64_SECRET = payload.toString('base64');
164
- const { output, bytes } = await land(probePipeline({ B64_SECRET: '' }, { target_path: 'release.keystore', var_name: 'B64_SECRET', base64_encoded: true }), 'release.keystore');
165
- expect(output).toContain('✓ Written release.keystore');
166
- expect(bytes?.equals(payload)).toBe(true);
167
- });
168
- test('the value never appears in what ci prints', async () => {
169
- process.env.PLAIN_SECRET = JSON_CREDENTIAL;
170
- const { output, bytes } = await land(probePipeline({ PLAIN_SECRET: '' }, { target_path: TARGET, var_name: 'PLAIN_SECRET' }));
171
- // Asserted on the captured output, not read off a transcript.
172
- expect(bytes?.toString('utf-8')).toBe(JSON_CREDENTIAL);
173
- expect(output).not.toContain(JSON_CREDENTIAL);
174
- expect(output).not.toContain('synthetic-probe');
175
- });
176
- });
177
- describe('the host environment is not a source of pipeline variables', () => {
178
- test('an undeclared key is not imported, even where a step reads it', async () => {
179
- // HOME exists in every environment this runs in. If step 5 copied
180
- // `process.env` in bulk this step would write the user's home directory
181
- // to a file instead of skipping.
182
- expect(process.env.HOME).toBeTruthy();
183
- process.env.PLAIN_SECRET = JSON_CREDENTIAL;
184
- // PLAIN_SECRET is declared, so the import runs; HOME is not.
185
- const { output, bytes } = await land(probePipeline({ PLAIN_SECRET: '' }, { target_path: 'home.txt', var_name: 'HOME' }), 'home.txt');
186
- expect(output).toContain('HOME not set — skipping home.txt');
187
- expect(bytes).toBeUndefined();
188
- });
189
- test('the resolver does not hold an undeclared host variable', () => {
190
- const pipeline = probePipeline({ PLAIN_SECRET: '' }, {
191
- target_path: TARGET,
192
- var_name: 'PLAIN_SECRET',
193
- });
194
- process.env.PLAIN_SECRET = JSON_CREDENTIAL;
195
- const resolver = new EnvResolver(pipeline, pipeline.workflows.probe, 'probe', 'linux');
196
- expect(resolver.get('PLAIN_SECRET')).toBe(JSON_CREDENTIAL);
197
- expect(resolver.has('HOME')).toBe(false);
198
- expect(resolver.getAll()).not.toHaveProperty('HOME');
199
- });
200
- });
201
- //# sourceMappingURL=a-declared-secret-reaches-the-file-step.test.js.map
@@ -1,37 +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
- export {};
37
- //# sourceMappingURL=a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a-declared-slot-may-name-the-workflow-it-belongs-to.test.d.ts","sourceRoot":"","sources":["../../../src/yaml/a-declared-slot-may-name-the-workflow-it-belongs-to.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG"}