@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,222 +0,0 @@
1
- /**
2
- * A credential's target path and the value chosen for it both have to follow
3
- * the product flavor the workflow builds.
4
- *
5
- * An Android module has one source set per flavor, and each carries its own
6
- * copies of whatever the build needs — the manifest, the resources, and
7
- * `google-services.json`. The google-services plugin resolves the file by
8
- * specificity (variant, then build type, then flavor, then the module root)
9
- * and takes the first it finds. So a workflow building `ciDynamicDebug` wants
10
- * `app/src/ciDynamic/google-services.json`, and only falls back to the module
11
- * root when that is absent.
12
- *
13
- * The generator assumed one file at the module root. Writing there on a
14
- * flavored repository is *silently* wrong rather than loudly wrong: the plugin
15
- * finds a file, parses it, and fails on a package name. That is what
16
- * `bld_8e60d90ab4e55f85d2f72459` (2026-09-09) spent 1292 Gradle tasks
17
- * discovering:
18
- *
19
- * Execution failed for task ':app:processCiDynamicDebugGoogleServices'.
20
- * > No matching client found for package name '….ciDynamic'
21
- *
22
- * The chain worked. The file was the wrong one of four, and the error names
23
- * Firebase rather than the credential we delivered.
24
- *
25
- * Two flavors cannot share one secret, and the key is how a value varies. A
26
- * dispatched build's secrets are a flat key→value map — Invarn's scopes are
27
- * org, connection and pipeline, with no workflow *column* — but a flat map
28
- * carries a workflow perfectly well when the workflow is part of the key,
29
- * which is what `ci secrets upload` has encoded as
30
- * `CIBUILD_SW__<WORKFLOW>__<VAR>` all along. So the differing keys are
31
- * per-workflow ones, not per-flavor ones: the flavor is a property of the
32
- * variant the workflow builds, so keying by workflow is one indirection less,
33
- * and it is the convention already implemented end to end. A per-flavor
34
- * suffix (`GOOGLE_SERVICES_JSON_CIDYNAMIC`) was briefly shipped here as a
35
- * second answer to the same question and was reverted (Alex, 2026-09-09).
36
- */
37
- import { describe, test, expect } from '@jest/globals';
38
- import { load } from 'js-yaml';
39
- import { generateAndroidPipeline, flavorOfVariant, googleServicesPathFor, googleServicesTargets, } from './build.js';
40
- const BASE = {
41
- keystore: false,
42
- keystoreProperties: false,
43
- googleServices: false,
44
- googlePlayDeploy: false,
45
- googlePlayPackageName: '',
46
- artifactType: 'apk',
47
- keystorePaths: {},
48
- googleServicesPaths: {},
49
- workflowFlavors: {},
50
- secretsProperties: false,
51
- secretsPropertiesPath: 'local.properties',
52
- };
53
- function variant(name) {
54
- const buildType = name.charAt(0).toUpperCase() + name.slice(1);
55
- return { variant: name, buildType, gradleTask: `assemble${buildType}` };
56
- }
57
- /** The real repository's shape: two debug workflows on one flavor, release on another. */
58
- const FLAVORED = {
59
- primary: variant('ciDynamicDebug'),
60
- pullRequest: variant('ciDynamicDebug'),
61
- release: variant('prodRelease'),
62
- };
63
- const UNFLAVORED = {
64
- primary: variant('debug'),
65
- pullRequest: variant('debug'),
66
- release: variant('release'),
67
- };
68
- const FLAVORS = ['ciDynamic', 'dev', 'prod', 'gandalf'];
69
- function parse(yaml) {
70
- return load(yaml);
71
- }
72
- function envs(parsed) {
73
- return Object.assign({}, ...(parsed.app?.envs ?? []));
74
- }
75
- /** The `file@` step of `workflow` that writes a google-services.json, if any. */
76
- function googleServicesStep(parsed, workflow) {
77
- return (parsed.workflows?.[workflow]?.steps ?? [])
78
- .filter((s) => Object.keys(s)[0] === 'file@1.0.0')
79
- .map((s) => s['file@1.0.0'].inputs)
80
- .find((inputs) => String(inputs.target_path).endsWith('google-services.json'));
81
- }
82
- function generate(variants, flavors) {
83
- return parse(generateAndroidPipeline(17, {
84
- ...BASE,
85
- googleServices: true,
86
- googleServicesPaths: googleServicesTargets(variants, flavors),
87
- }, variants));
88
- }
89
- describe('which flavor a variant builds', () => {
90
- test('is the flavor the variant name starts with', () => {
91
- expect(flavorOfVariant('ciDynamicDebug', FLAVORS)).toBe('ciDynamic');
92
- expect(flavorOfVariant('prodRelease', FLAVORS)).toBe('prod');
93
- expect(flavorOfVariant('devDebug', FLAVORS)).toBe('dev');
94
- });
95
- test('is nothing when the variant is a bare build type', () => {
96
- expect(flavorOfVariant('debug', FLAVORS)).toBeNull();
97
- expect(flavorOfVariant('release', FLAVORS)).toBeNull();
98
- // A repository with no product flavors can never match one.
99
- expect(flavorOfVariant('ciDynamicDebug', [])).toBeNull();
100
- });
101
- test('needs the capital that starts the build type, so a prefix cannot claim it', () => {
102
- // Without this check `pro` claims `prodRelease` and the credential lands
103
- // in the wrong source set — the same arbitrariness, one layer down.
104
- expect(flavorOfVariant('prodRelease', ['pro'])).toBeNull();
105
- expect(flavorOfVariant('prodRelease', ['pro', 'prod'])).toBe('prod');
106
- });
107
- test('gives the longest flavor the win when two both match', () => {
108
- expect(flavorOfVariant('ciDynamicDebug', ['ci', 'ciDynamic'])).toBe('ciDynamic');
109
- });
110
- });
111
- describe('the path a flavor implies', () => {
112
- test('is the module root when there is no flavor', () => {
113
- expect(googleServicesPathFor(null)).toBe('app/google-services.json');
114
- });
115
- test('is that flavor\'s source set when there is one', () => {
116
- expect(googleServicesPathFor('ciDynamic')).toBe('app/src/ciDynamic/google-services.json');
117
- expect(googleServicesPathFor('prod')).toBe('app/src/prod/google-services.json');
118
- });
119
- test('follows the module when the app is not in `app/`', () => {
120
- expect(googleServicesPathFor('ciDynamic', 'androidApp')).toBe('androidApp/src/ciDynamic/google-services.json');
121
- });
122
- });
123
- describe('the pipeline a flavored repository gets', () => {
124
- test('writes each workflow into its own flavor source set', () => {
125
- const parsed = generate(FLAVORED, FLAVORS);
126
- // One object per workflow so a failure names the workflow that lost it.
127
- expect(['primary', 'pull-request', 'release'].map((workflow) => ({
128
- workflow,
129
- target_path: googleServicesStep(parsed, workflow)?.target_path,
130
- }))).toEqual([
131
- { workflow: 'primary', target_path: 'app/src/ciDynamic/google-services.json' },
132
- { workflow: 'pull-request', target_path: 'app/src/ciDynamic/google-services.json' },
133
- { workflow: 'release', target_path: 'app/src/prod/google-services.json' },
134
- ]);
135
- });
136
- test('names one secret in every workflow, whatever the flavor', () => {
137
- // The value differs per workflow; the *name* does not. Scoping a value to
138
- // a workflow is the secret's job — `ci secrets add GOOGLE_SERVICES_JSON
139
- // <pipeline> -w primary` stores it per workflow, `ci secrets upload`
140
- // encodes it as `CIBUILD_SW__PRIMARY__GOOGLE_SERVICES_JSON`, and
141
- // `EnvResolver` resolves it for the workflow being run. A second naming
142
- // convention in the step would be a second way to say the same thing.
143
- const parsed = generate(FLAVORED, FLAVORS);
144
- expect(['primary', 'pull-request', 'release'].map((workflow) => googleServicesStep(parsed, workflow)?.var_name)).toEqual(['GOOGLE_SERVICES_JSON', 'GOOGLE_SERVICES_JSON', 'GOOGLE_SERVICES_JSON']);
145
- });
146
- test('declares that one secret under no invented per-flavor name', () => {
147
- // Declared, and declared empty: `unsetEnvKeys` — what `invarn setup`
148
- // searches the developer's machine by — reads `envs`, never step inputs.
149
- // A key no `envs` entry names is never discovered and never uploaded.
150
- //
151
- // *How many* slots it takes is a later ruling and lives in
152
- // `a-credential-two-workflows-cannot-share-is-declared-per-workflow`: two
153
- // flavors need two values, and `invarn setup` fills one slot with one
154
- // value, so a flavored repository declares one slot per workflow under the
155
- // `CIBUILD_SW__` name the upload already encodes. What this test still
156
- // holds is the naming: whatever the flavor, the credential is
157
- // `GOOGLE_SERVICES_JSON` and never `GOOGLE_SERVICES_JSON_CIDYNAMIC`.
158
- const yaml = generateAndroidPipeline(17, {
159
- ...BASE,
160
- googleServices: true,
161
- googleServicesPaths: googleServicesTargets(FLAVORED, FLAVORS),
162
- }, FLAVORED);
163
- // One declaration per workflow, in that workflow's own `envs`, under the
164
- // plain credential name — the block says which workflow, so nothing is
165
- // encoded into the key.
166
- const parsed = parse(yaml);
167
- const declaringWorkflows = Object.keys(parsed.workflows ?? {}).filter((workflow) => 'GOOGLE_SERVICES_JSON' in
168
- Object.assign({}, ...(parsed.workflows?.[workflow]?.envs ?? [])));
169
- expect(declaringWorkflows).toEqual(['primary', 'pull-request', 'release']);
170
- expect(envs(parsed)).not.toHaveProperty('GOOGLE_SERVICES_JSON');
171
- expect(yaml).not.toMatch(/GOOGLE_SERVICES_JSON_[A-Z]/);
172
- expect(yaml).not.toContain('CIBUILD_SW__');
173
- });
174
- });
175
- describe('a repository with no product flavors', () => {
176
- test('is exactly what it was: one key, one path, in every workflow', () => {
177
- const parsed = generate(UNFLAVORED, []);
178
- expect(envs(parsed).GOOGLE_SERVICES_JSON).toBe('');
179
- for (const workflow of ['primary', 'pull-request', 'release']) {
180
- expect(googleServicesStep(parsed, workflow)).toMatchObject({
181
- target_path: 'app/google-services.json',
182
- var_name: 'GOOGLE_SERVICES_JSON',
183
- });
184
- }
185
- });
186
- test('is unchanged even when the pipeline is generated with no options at all', () => {
187
- // The defaulted `SetupOptions` has empty maps; the step must still fall
188
- // back to the module root rather than emitting `undefined`.
189
- const parsed = parse(generateAndroidPipeline(17, { ...BASE, googleServices: true }, UNFLAVORED));
190
- expect(googleServicesStep(parsed, 'primary')).toMatchObject({
191
- target_path: 'app/google-services.json',
192
- var_name: 'GOOGLE_SERVICES_JSON',
193
- });
194
- });
195
- test('emits nothing at all when the scan found no google-services.json', () => {
196
- const parsed = parse(generateAndroidPipeline(17, BASE, UNFLAVORED));
197
- expect(envs(parsed)).not.toHaveProperty('GOOGLE_SERVICES_JSON');
198
- for (const workflow of ['primary', 'pull-request', 'release']) {
199
- expect(googleServicesStep(parsed, workflow)).toBeUndefined();
200
- }
201
- });
202
- });
203
- describe('a repository whose workflows all build one flavor', () => {
204
- test('gets a single flavored key, written to that flavor everywhere', () => {
205
- const allCiDynamic = {
206
- primary: variant('ciDynamicDebug'),
207
- pullRequest: variant('ciDynamicDebug'),
208
- release: variant('ciDynamicRelease'),
209
- };
210
- const parsed = generate(allCiDynamic, FLAVORS);
211
- expect(Object.keys(envs(parsed)).filter((k) => k.startsWith('GOOGLE_SERVICES_JSON'))).toEqual([
212
- 'GOOGLE_SERVICES_JSON',
213
- ]);
214
- for (const workflow of ['primary', 'pull-request', 'release']) {
215
- expect(googleServicesStep(parsed, workflow)).toMatchObject({
216
- target_path: 'app/src/ciDynamic/google-services.json',
217
- var_name: 'GOOGLE_SERVICES_JSON',
218
- });
219
- }
220
- });
221
- });
222
- //# sourceMappingURL=a-credential-target-follows-the-flavor-source-set.test.js.map
@@ -1,41 +0,0 @@
1
- /**
2
- * A credential two workflows cannot share is declared once per workflow, not
3
- * once for the pipeline.
4
- *
5
- * The generator declares each credential it finds as one empty `app.envs`
6
- * slot — `- LOCAL_PROPERTIES: ""` — and emits the same unsuffixed `var_name`
7
- * in every workflow's `file@` step. On a repository with one flavor that is
8
- * exactly right. On a flavored one it is one value where the build needs two,
9
- * and the pipeline says so nowhere: `invarn setup` finds one slot, uploads one
10
- * value, and all three workflows read it.
11
- *
12
- * `LOCAL_PROPERTIES` is the case that matters most and the one with no target
13
- * path to give it away. Every workflow writes the same `local.properties` to
14
- * the same place; what belongs *in* it is the flavor's environment — a
15
- * different base API URL plus twenty other keys the Secrets Gradle Plugin
16
- * turns into `BuildConfig`. `ciDynamic` and `prod` are different environments,
17
- * so `prodRelease` built against `ciDynamic`'s properties is a release
18
- * pointing at the CI backend. Two credentials give themselves away by path
19
- * instead, and both were measured: `google-services.json` per flavor source
20
- * set (`bld_8e60d90ab4e55f85d2f72459`) and the keystore per declared target
21
- * (`bld_f3cc37d81…`).
22
- *
23
- * The name is the whole mechanism. Invarn's secret scopes are org, connection
24
- * and pipeline, with no workflow column for a value to vary along — but a flat
25
- * key→value map carries a workflow perfectly well when the workflow is part of
26
- * the key, which is what `ci secrets upload` has always encoded and
27
- * `SecretsManager` has always decoded. So the slot names the workflow and the
28
- * step does not: `var_name` stays unsuffixed in every workflow, the decoding
29
- * does the mapping, and a second naming convention in the step would be a
30
- * second way to say the same thing (`GOOGLE_SERVICES_JSON_CIDYNAMIC` was that
31
- * second way, and it was reverted).
32
- *
33
- * What decides is whether the workflows disagree about the thing the
34
- * credential follows, and each credential follows something different: a
35
- * keystore its declared target path, `google-services.json` the flavor's
36
- * source set, `local.properties` the flavor itself. A credential only one
37
- * workflow reads can never disagree, which is why the two genuinely
38
- * release-only credentials keep one slot however flavored the repository is.
39
- */
40
- export {};
41
- //# sourceMappingURL=a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.d.ts","sourceRoot":"","sources":["../../../src/commands/a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsCG"}
@@ -1,324 +0,0 @@
1
- /**
2
- * A credential two workflows cannot share is declared once per workflow, not
3
- * once for the pipeline.
4
- *
5
- * The generator declares each credential it finds as one empty `app.envs`
6
- * slot — `- LOCAL_PROPERTIES: ""` — and emits the same unsuffixed `var_name`
7
- * in every workflow's `file@` step. On a repository with one flavor that is
8
- * exactly right. On a flavored one it is one value where the build needs two,
9
- * and the pipeline says so nowhere: `invarn setup` finds one slot, uploads one
10
- * value, and all three workflows read it.
11
- *
12
- * `LOCAL_PROPERTIES` is the case that matters most and the one with no target
13
- * path to give it away. Every workflow writes the same `local.properties` to
14
- * the same place; what belongs *in* it is the flavor's environment — a
15
- * different base API URL plus twenty other keys the Secrets Gradle Plugin
16
- * turns into `BuildConfig`. `ciDynamic` and `prod` are different environments,
17
- * so `prodRelease` built against `ciDynamic`'s properties is a release
18
- * pointing at the CI backend. Two credentials give themselves away by path
19
- * instead, and both were measured: `google-services.json` per flavor source
20
- * set (`bld_8e60d90ab4e55f85d2f72459`) and the keystore per declared target
21
- * (`bld_f3cc37d81…`).
22
- *
23
- * The name is the whole mechanism. Invarn's secret scopes are org, connection
24
- * and pipeline, with no workflow column for a value to vary along — but a flat
25
- * key→value map carries a workflow perfectly well when the workflow is part of
26
- * the key, which is what `ci secrets upload` has always encoded and
27
- * `SecretsManager` has always decoded. So the slot names the workflow and the
28
- * step does not: `var_name` stays unsuffixed in every workflow, the decoding
29
- * does the mapping, and a second naming convention in the step would be a
30
- * second way to say the same thing (`GOOGLE_SERVICES_JSON_CIDYNAMIC` was that
31
- * second way, and it was reverted).
32
- *
33
- * What decides is whether the workflows disagree about the thing the
34
- * credential follows, and each credential follows something different: a
35
- * keystore its declared target path, `google-services.json` the flavor's
36
- * source set, `local.properties` the flavor itself. A credential only one
37
- * workflow reads can never disagree, which is why the two genuinely
38
- * release-only credentials keep one slot however flavored the repository is.
39
- */
40
- import { describe, test, expect } from '@jest/globals';
41
- import { load } from 'js-yaml';
42
- import { generateAndroidPipeline, googleServicesTargets, variantFlavors, credentialSlots, GENERATED_WORKFLOWS, } from './build.js';
43
- function variant(name) {
44
- const buildType = name.charAt(0).toUpperCase() + name.slice(1);
45
- return { variant: name, buildType, gradleTask: `assemble${buildType}` };
46
- }
47
- /** The real repository's shape: two debug workflows on one flavor, release on another. */
48
- const FLAVORED = {
49
- primary: variant('ciDynamicDebug'),
50
- pullRequest: variant('ciDynamicDebug'),
51
- release: variant('prodRelease'),
52
- };
53
- const UNFLAVORED = {
54
- primary: variant('debug'),
55
- pullRequest: variant('debug'),
56
- release: variant('release'),
57
- };
58
- const FLAVORS = ['ciDynamic', 'dev', 'prod'];
59
- /** The keystore targets the real repository resolves: debug key, release key. */
60
- const SPLIT_KEYSTORES = {
61
- primary: 'config/debug.keystore',
62
- 'pull-request': 'config/debug.keystore',
63
- release: 'app/release.jks',
64
- };
65
- const BASE = {
66
- keystore: false,
67
- keystoreProperties: false,
68
- googleServices: false,
69
- googlePlayDeploy: false,
70
- googlePlayPackageName: '',
71
- artifactType: 'apk',
72
- keystorePaths: {},
73
- googleServicesPaths: {},
74
- workflowFlavors: {},
75
- secretsProperties: false,
76
- secretsPropertiesPath: 'local.properties',
77
- };
78
- /** Every credential the Android generator knows how to declare, all switched on. */
79
- const ALL_CREDENTIALS = {
80
- keystore: true,
81
- keystoreProperties: true,
82
- googleServices: true,
83
- googlePlayDeploy: true,
84
- googlePlayPackageName: 'com.example.app',
85
- artifactType: 'aab',
86
- secretsProperties: true,
87
- };
88
- function parse(yaml) {
89
- return load(yaml);
90
- }
91
- function envs(parsed) {
92
- return Object.assign({}, ...(parsed.app?.envs ?? []));
93
- }
94
- /** What one workflow's own `envs` block declares. */
95
- function workflowEnvs(parsed, workflow) {
96
- return Object.assign({}, ...(parsed.workflows?.[workflow]?.envs ?? []));
97
- }
98
- /**
99
- * The workflows whose own `envs` declare `varName`, in pipeline order.
100
- *
101
- * The name is the plain credential now, so *where* the declaration sits is the
102
- * whole answer to which workflow it belongs to.
103
- */
104
- function declaringWorkflows(parsed, varName) {
105
- return Object.keys(parsed.workflows ?? {}).filter((workflow) => varName in workflowEnvs(parsed, workflow));
106
- }
107
- /** The `var_name` of every `file@` step in `workflow`, in order. */
108
- function fileVarNames(parsed, workflow) {
109
- return (parsed.workflows?.[workflow]?.steps ?? [])
110
- .filter((s) => Object.keys(s)[0] === 'file@1.0.0')
111
- .map((s) => s['file@1.0.0'].inputs.var_name);
112
- }
113
- /** The declared slots that carry `varName`, however they are named. */
114
- function slotsFor(parsed, varName) {
115
- return Object.keys(envs(parsed)).filter((key) => key === varName || key.endsWith(`__${varName}`));
116
- }
117
- function flavoredPipeline(over = {}) {
118
- return parse(generateAndroidPipeline(17, {
119
- ...BASE,
120
- ...ALL_CREDENTIALS,
121
- keystorePaths: SPLIT_KEYSTORES,
122
- googleServicesPaths: googleServicesTargets(FLAVORED, FLAVORS),
123
- workflowFlavors: variantFlavors(FLAVORED, FLAVORS),
124
- ...over,
125
- }, FLAVORED));
126
- }
127
- describe('what a credential follows', () => {
128
- test('is the flavor each workflow builds, for the properties file', () => {
129
- expect(variantFlavors(FLAVORED, FLAVORS)).toEqual({
130
- primary: 'ciDynamic',
131
- 'pull-request': 'ciDynamic',
132
- release: 'prod',
133
- });
134
- });
135
- test('is nothing at all on a repository with no product flavors', () => {
136
- expect(variantFlavors(UNFLAVORED, [])).toEqual({
137
- primary: null,
138
- 'pull-request': null,
139
- release: null,
140
- });
141
- });
142
- });
143
- describe('the slots one credential gets', () => {
144
- test('are one, unsuffixed, when every workflow wants the same bytes', () => {
145
- expect(credentialSlots('LOCAL_PROPERTIES', {
146
- primary: 'ciDynamic',
147
- 'pull-request': 'ciDynamic',
148
- release: 'ciDynamic',
149
- })).toEqual([{ slot: 'LOCAL_PROPERTIES', workflow: null }]);
150
- });
151
- test('are one per workflow, under the plain name, when they do not', () => {
152
- // The name never changes; the block it is declared in does.
153
- // `CIBUILD_SW__<WF>__<VAR>` is the encoding `ci secrets upload` carries a
154
- // workflow-scoped *value* under, and a pipeline has structure instead.
155
- expect(credentialSlots('LOCAL_PROPERTIES', {
156
- primary: 'ciDynamic',
157
- 'pull-request': 'ciDynamic',
158
- release: 'prod',
159
- })).toEqual([
160
- { slot: 'LOCAL_PROPERTIES', workflow: 'primary' },
161
- { slot: 'LOCAL_PROPERTIES', workflow: 'pull-request' },
162
- { slot: 'LOCAL_PROPERTIES', workflow: 'release' },
163
- ]);
164
- });
165
- test('include the workflows that agree, not only the odd one out', () => {
166
- // `pull-request` wants the same bytes as `primary`. It still needs a slot
167
- // of its own: the encoded name is per workflow, and a workflow with no
168
- // slot has no value and no tripwire.
169
- const workflows = credentialSlots('KEYSTORE_BASE64', SPLIT_KEYSTORES).map((s) => s.workflow);
170
- expect(workflows).toEqual(['primary', 'pull-request', 'release']);
171
- });
172
- test('are one when only one workflow reads the credential', () => {
173
- expect(credentialSlots('KEYSTORE_PROPERTIES', { release: 'keystore.properties' })).toEqual([
174
- { slot: 'KEYSTORE_PROPERTIES', workflow: null },
175
- ]);
176
- });
177
- });
178
- describe('a flavored repository', () => {
179
- test('declares the properties file in each workflow, and not globally', () => {
180
- const parsed = flavoredPipeline();
181
- expect(declaringWorkflows(parsed, 'LOCAL_PROPERTIES')).toEqual([
182
- 'primary',
183
- 'pull-request',
184
- 'release',
185
- ]);
186
- // Globally would be one value for three workflows, which is the bug.
187
- expect(envs(parsed)).not.toHaveProperty('LOCAL_PROPERTIES');
188
- });
189
- test('declares google-services.json and the keystore per workflow too', () => {
190
- const parsed = flavoredPipeline();
191
- for (const varName of ['GOOGLE_SERVICES_JSON', 'KEYSTORE_BASE64']) {
192
- expect(declaringWorkflows(parsed, varName)).toEqual([
193
- 'primary',
194
- 'pull-request',
195
- 'release',
196
- ]);
197
- expect(envs(parsed)).not.toHaveProperty(varName);
198
- }
199
- });
200
- test('keeps one slot for the credentials only `release` reads', () => {
201
- // Genuinely release-only, and legitimately so: nothing else signs a
202
- // release or talks to Google Play. A second slot for a workflow that never
203
- // reads the value is a value the user is asked for and nothing consumes.
204
- const parsed = flavoredPipeline();
205
- expect(slotsFor(parsed, 'KEYSTORE_PROPERTIES')).toEqual(['KEYSTORE_PROPERTIES']);
206
- expect(slotsFor(parsed, 'GOOGLE_PLAY_SERVICE_ACCOUNT_JSON')).toEqual([
207
- 'GOOGLE_PLAY_SERVICE_ACCOUNT_JSON',
208
- ]);
209
- });
210
- test('leaves the step naming the credential, not the slot', () => {
211
- // The `file@` step never learns the convention exists. `EnvResolver`
212
- // resolves the plain name for the workflow being run, so one name in the
213
- // step reads a different value in each workflow.
214
- const parsed = flavoredPipeline();
215
- for (const workflow of GENERATED_WORKFLOWS) {
216
- const names = fileVarNames(parsed, workflow);
217
- expect(names.length).toBeGreaterThan(0);
218
- expect(names.filter((n) => n.startsWith('CIBUILD_'))).toEqual([]);
219
- }
220
- });
221
- test('declares every slot empty, which is what `invarn setup` searches by', () => {
222
- // `unsetEnvKeys` collects `envs` keys whose declared value is the empty
223
- // string — from `app.envs` and from each workflow's own. A slot with
224
- // anything else in it is never discovered on the developer's machine and
225
- // never offered for upload.
226
- const parsed = flavoredPipeline();
227
- const isCredential = (k) => /^(KEYSTORE|GOOGLE|LOCAL)_/.test(k);
228
- const declared = [
229
- ...Object.entries(envs(parsed)),
230
- ...Object.keys(parsed.workflows ?? {}).flatMap((w) => Object.entries(workflowEnvs(parsed, w))),
231
- ].filter(([key]) => isCredential(key));
232
- // Three per-workflow slots each for the properties file,
233
- // google-services.json and the keystore; one flat slot each for the two
234
- // release-only ones.
235
- expect(declared.length).toBe(11);
236
- for (const [, value] of declared)
237
- expect(value).toBe('');
238
- });
239
- test('spends no encoding on what the block already says', () => {
240
- // The workflow a declaration belongs to is the block it sits in. The
241
- // `CIBUILD_SW__` prefix stays what it has always been: how `ci secrets
242
- // upload` transports a workflow-scoped value into a flat key→value store
243
- // that has no workflow column (Alex, 2026-09-10).
244
- const yaml = generateAndroidPipeline(17, {
245
- ...BASE,
246
- ...ALL_CREDENTIALS,
247
- keystorePaths: SPLIT_KEYSTORES,
248
- googleServicesPaths: googleServicesTargets(FLAVORED, FLAVORS),
249
- workflowFlavors: variantFlavors(FLAVORED, FLAVORS),
250
- }, FLAVORED);
251
- expect(yaml).not.toContain('CIBUILD_SW__');
252
- expect(yaml).not.toContain('CIBUILD_S__');
253
- });
254
- test('puts a per-workflow declaration in a workflow the pipeline has', () => {
255
- // Structural now, and that is the point: a declaration cannot name a
256
- // workflow that does not exist, because it lives inside one.
257
- const parsed = flavoredPipeline();
258
- const present = Object.keys(parsed.workflows ?? {});
259
- const perWorkflow = ['KEYSTORE_BASE64', 'GOOGLE_SERVICES_JSON', 'LOCAL_PROPERTIES'].flatMap((varName) => declaringWorkflows(parsed, varName));
260
- expect(perWorkflow.length).toBe(9);
261
- expect(perWorkflow.every((w) => present.includes(w))).toBe(true);
262
- });
263
- });
264
- describe('a repository whose workflows all want the same bytes', () => {
265
- test('is byte-identical to what the generator emitted before any of this', () => {
266
- // The whole `app.envs` block, as it stood at cibuild d8263a1 with every
267
- // credential switched on and no flavors anywhere. Item 02 must be inert
268
- // here: this is what every already-onboarded project regenerates to.
269
- const yaml = generateAndroidPipeline(17, { ...BASE, ...ALL_CREDENTIALS });
270
- const block = yaml.slice(yaml.indexOf('app:\n'), yaml.indexOf('\nworkflows:'));
271
- expect(block).toBe('app:\n' +
272
- ' envs:\n' +
273
- ' - PROJECT_LOCATION: .\n' +
274
- ' - MODULE: app\n' +
275
- ' - BUILD_TYPE: Debug\n' +
276
- ' - GRADLE_OPTS: -Dorg.gradle.daemon=false -Dorg.gradle.parallel=true\n' +
277
- ' - KEYSTORE_BASE64: "" # Set via: ci secrets add KEYSTORE_BASE64 -w primary\n' +
278
- ' - KEYSTORE_PROPERTIES: "" # Release signing — set via: ci secrets add KEYSTORE_PROPERTIES -w release\n' +
279
- ' - GOOGLE_SERVICES_JSON: "" # Set via: ci secrets add GOOGLE_SERVICES_JSON\n' +
280
- ' - GOOGLE_PLAY_SERVICE_ACCOUNT_JSON: "" # Set via: ci secrets add GOOGLE_PLAY_SERVICE_ACCOUNT_JSON -w release\n' +
281
- ' - LOCAL_PROPERTIES: "" # Read by the Secrets Gradle Plugin — set via: ci secrets add LOCAL_PROPERTIES\n');
282
- expect(yaml).not.toContain('CIBUILD_SW__');
283
- });
284
- test('is flat on one flavor as much as on none', () => {
285
- // Three workflows, one flavor, three different build types. The build type
286
- // is not what any of these credentials follows, so nothing splits.
287
- const allCiDynamic = {
288
- primary: variant('ciDynamicDebug'),
289
- pullRequest: variant('ciDynamicDebug'),
290
- release: variant('ciDynamicRelease'),
291
- };
292
- const yaml = generateAndroidPipeline(17, {
293
- ...BASE,
294
- ...ALL_CREDENTIALS,
295
- googleServicesPaths: googleServicesTargets(allCiDynamic, FLAVORS),
296
- workflowFlavors: variantFlavors(allCiDynamic, FLAVORS),
297
- }, allCiDynamic);
298
- expect(yaml).not.toContain('CIBUILD_SW__');
299
- expect(slotsFor(parse(yaml), 'LOCAL_PROPERTIES')).toEqual(['LOCAL_PROPERTIES']);
300
- });
301
- test('is flat when one keystore serves every workflow', () => {
302
- const yaml = generateAndroidPipeline(17, {
303
- ...BASE,
304
- keystore: true,
305
- keystorePaths: { primary: 'app/one.jks', 'pull-request': 'app/one.jks', release: 'app/one.jks' },
306
- });
307
- expect(slotsFor(parse(yaml), 'KEYSTORE_BASE64')).toEqual(['KEYSTORE_BASE64']);
308
- });
309
- test('is flat when the scan resolved no keystore path at all', () => {
310
- // Empty maps default the way the step defaults them, so a repository the
311
- // scan could not resolve does not read as three disagreeing workflows.
312
- const yaml = generateAndroidPipeline(17, { ...BASE, keystore: true });
313
- expect(slotsFor(parse(yaml), 'KEYSTORE_BASE64')).toEqual(['KEYSTORE_BASE64']);
314
- });
315
- test('is flat when only some workflows resolved a path, and it is the default', () => {
316
- const yaml = generateAndroidPipeline(17, {
317
- ...BASE,
318
- keystore: true,
319
- keystorePaths: { release: 'keystore.jks' },
320
- });
321
- expect(slotsFor(parse(yaml), 'KEYSTORE_BASE64')).toEqual(['KEYSTORE_BASE64']);
322
- });
323
- });
324
- //# sourceMappingURL=a-credential-two-workflows-cannot-share-is-declared-per-workflow.test.js.map
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"a-properties-stand-in-declares-the-keys-the-build-reads.test.d.ts","sourceRoot":"","sources":["../../../src/commands/a-properties-stand-in-declares-the-keys-the-build-reads.test.ts"],"names":[],"mappings":""}