@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,66 +0,0 @@
1
- /**
2
- * Local Android ui-fidelity render preview.
3
- *
4
- * The Android sibling of `renderUiFidelityPreview` (iOS). It runs the EXACT same
5
- * render path the runner uses -- the generated `ui-fidelity-render-android` node
6
- * script in `package_source: "inputs"` mode (archive extract/validate, one
7
- * Roborazzi record task, golden location, content trim, reference alignment,
8
- * dimension reporting) -- but locally, against a self-contained Gradle render
9
- * project the caller already has on disk. This lets an agent eyeball the Compose
10
- * wrapper in seconds before dispatching a remote run, so the remote pass becomes
11
- * a one-shot authoritative render rather than the inner loop of an iterate cycle.
12
- *
13
- * It is a faithful mirror, not a re-implementation: the project directory is
14
- * archived to a temp `package.tar.gz` and fed through the same
15
- * `generateAndroidRenderScript` output, so the produced rendered/aligned images
16
- * and dimensions match what a remote run would produce on the same toolchain.
17
- *
18
- * The result shape is identical to the iOS preview (`UiFidelityPreviewResult`),
19
- * so callers (and the MCP handler) treat both platforms uniformly.
20
- */
21
- import type { UiFidelityPreviewResult, UiFidelityPreviewScreen } from './ui-fidelity-preview.js';
22
- export interface UiFidelityPreviewAndroidOptions {
23
- /**
24
- * Local Gradle render-project directory to render. Archived to a temp
25
- * package.tar.gz and rendered in inputs mode. Mutually exclusive with
26
- * packageArchive.
27
- */
28
- packagePath?: string;
29
- /**
30
- * A prebuilt package.tar.gz to render as-is (preview the exact artifact a
31
- * remote run would receive). Mutually exclusive with packagePath.
32
- */
33
- packageArchive?: string;
34
- /** Screens to render, each mapped to a reference image path. */
35
- screens: UiFidelityPreviewScreen[];
36
- /**
37
- * Display scale used when reporting logical points (default 2). Must match the
38
- * density qualifier the render test pins (xhdpi = 2x).
39
- */
40
- scale?: number | string;
41
- /** Gradle record task to run (default "recordRoborazziDebug"). */
42
- gradleTask?: string;
43
- /** Directory to receive the artifacts; a temp dir is used when omitted. */
44
- outDir?: string;
45
- /**
46
- * Extra entries prepended to PATH for the render child process, so callers
47
- * (and tests) can supply a specific java/gradle/ci/tar toolchain. Optional.
48
- */
49
- toolchainPath?: string;
50
- }
51
- /**
52
- * Build error returned when the local Android toolchain is absent, so the caller
53
- * can fall back to a remote run instead of a confusing build failure. Generic
54
- * wording on purpose -- this engine ships in the public build tooling and must
55
- * not name product-specific tools.
56
- */
57
- export declare const ANDROID_TOOLCHAIN_MISSING = "ANDROID_TOOLCHAIN_MISSING";
58
- /**
59
- * Render the requested screens locally and return the produced image paths and
60
- * dimensions. Throws only on caller errors (bad options) or when the render
61
- * script could not run at all; per-screen and per-build render failures (and a
62
- * missing local toolchain) are reported in the returned result, mirroring the
63
- * remote result document and the iOS preview engine.
64
- */
65
- export declare function renderUiFidelityPreviewAndroid(options: UiFidelityPreviewAndroidOptions): UiFidelityPreviewResult;
66
- //# sourceMappingURL=ui-fidelity-preview-android.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-fidelity-preview-android.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ui-fidelity-preview-android.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAwBH,OAAO,KAAK,EAEV,uBAAuB,EACvB,uBAAuB,EAGxB,MAAM,0BAA0B,CAAC;AAElC,MAAM,WAAW,+BAA+B;IAC9C;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB;;;OAGG;IACH,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gEAAgE;IAChE,OAAO,EAAE,uBAAuB,EAAE,CAAC;IACnC;;;OAGG;IACH,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,kEAAkE;IAClE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAQD;;;;;GAKG;AACH,eAAO,MAAM,yBAAyB,8BAA8B,CAAC;AAqErE;;;;;;GAMG;AACH,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,uBAAuB,CA8KzB"}
@@ -1,251 +0,0 @@
1
- /**
2
- * Local Android ui-fidelity render preview.
3
- *
4
- * The Android sibling of `renderUiFidelityPreview` (iOS). It runs the EXACT same
5
- * render path the runner uses -- the generated `ui-fidelity-render-android` node
6
- * script in `package_source: "inputs"` mode (archive extract/validate, one
7
- * Roborazzi record task, golden location, content trim, reference alignment,
8
- * dimension reporting) -- but locally, against a self-contained Gradle render
9
- * project the caller already has on disk. This lets an agent eyeball the Compose
10
- * wrapper in seconds before dispatching a remote run, so the remote pass becomes
11
- * a one-shot authoritative render rather than the inner loop of an iterate cycle.
12
- *
13
- * It is a faithful mirror, not a re-implementation: the project directory is
14
- * archived to a temp `package.tar.gz` and fed through the same
15
- * `generateAndroidRenderScript` output, so the produced rendered/aligned images
16
- * and dimensions match what a remote run would produce on the same toolchain.
17
- *
18
- * The result shape is identical to the iOS preview (`UiFidelityPreviewResult`),
19
- * so callers (and the MCP handler) treat both platforms uniformly.
20
- */
21
- import { spawnSync } from 'node:child_process';
22
- import { copyFileSync, existsSync, mkdirSync, mkdtempSync, readFileSync, statSync, writeFileSync, } from 'node:fs';
23
- import { homedir, tmpdir } from 'node:os';
24
- import { basename, join, resolve } from 'node:path';
25
- import { parseScale, DEFAULT_SCALE } from './ui-fidelity-render.js';
26
- import { DEFAULT_GRADLE_TASK, PACKAGE_ARCHIVE_BASENAME, generateAndroidRenderScript, isValidGradleTask, } from './ui-fidelity-render-android.js';
27
- import { buildPreviewScreenResult } from './ui-fidelity-preview.js';
28
- import { resolveCliJsPath } from './render-post-processor.js';
29
- /**
30
- * Build error returned when the local Android toolchain is absent, so the caller
31
- * can fall back to a remote run instead of a confusing build failure. Generic
32
- * wording on purpose -- this engine ships in the public build tooling and must
33
- * not name product-specific tools.
34
- */
35
- export const ANDROID_TOOLCHAIN_MISSING = 'ANDROID_TOOLCHAIN_MISSING';
36
- function runTar(args, pathPrepend) {
37
- const env = pathPrepend
38
- ? { ...process.env, PATH: pathPrepend + ':' + (process.env.PATH ?? '') }
39
- : process.env;
40
- const result = spawnSync('tar', args, { encoding: 'utf-8', env, maxBuffer: 64 * 1024 * 1024 });
41
- if (result.status !== 0) {
42
- const detail = (result.stderr || result.error?.message || '').toString().trim();
43
- throw new Error(`failed to archive the project (tar exited ${result.status}): ${detail}`);
44
- }
45
- }
46
- /** True if `command` resolves on the (optionally prepended) PATH. */
47
- function commandExists(command, pathPrepend) {
48
- const env = pathPrepend
49
- ? { ...process.env, PATH: pathPrepend + ':' + (process.env.PATH ?? '') }
50
- : process.env;
51
- const probe = process.platform === 'win32'
52
- ? spawnSync('where', [command], { encoding: 'utf-8', env })
53
- : spawnSync(`command -v ${command}`, { encoding: 'utf-8', env, shell: true });
54
- return probe.status === 0 && (probe.stdout || '').trim() !== '';
55
- }
56
- /**
57
- * Resolve the Android SDK directory: prefer an explicit `ANDROID_HOME` /
58
- * `ANDROID_SDK_ROOT` env var (when it points at a real directory), otherwise
59
- * fall back to the platform's default install location. This mirrors the
60
- * auto-detect the Android build step already does, so a dev machine with a
61
- * standard Android Studio install previews locally without the caller (or the
62
- * MCP server's launch environment) having to export `ANDROID_HOME`. Returns the
63
- * resolved path, or null when no SDK can be found.
64
- */
65
- function resolveAndroidSdk() {
66
- const fromEnv = process.env.ANDROID_HOME || process.env.ANDROID_SDK_ROOT || '';
67
- if (fromEnv && existsSync(fromEnv))
68
- return fromEnv;
69
- const home = process.env.HOME || homedir();
70
- const candidates = [
71
- join(home, 'Library', 'Android', 'sdk'), // macOS
72
- join(home, 'Android', 'Sdk'), // Linux
73
- '/usr/local/android-sdk',
74
- ];
75
- for (const candidate of candidates) {
76
- if (existsSync(candidate))
77
- return candidate;
78
- }
79
- return null;
80
- }
81
- /**
82
- * Report which env-level Android prerequisites are missing: the JVM (`java`) and
83
- * the SDK (a resolved [resolveAndroidSdk] path). Gradle itself ships inside the
84
- * render project (gradlew), so it is not an env-level prerequisite. Returns an
85
- * empty array when the toolchain is present.
86
- */
87
- function missingToolchain(sdk, pathPrepend) {
88
- const missing = [];
89
- if (!commandExists('java', pathPrepend))
90
- missing.push('a JDK (java not on PATH)');
91
- if (!sdk) {
92
- missing.push('the Android SDK (ANDROID_HOME not set and no SDK at the default location)');
93
- }
94
- return missing;
95
- }
96
- /** Resolve an artifact-relative path to absolute, or null. */
97
- function absOrNull(artifactsDir, relative) {
98
- return typeof relative === 'string' && relative !== '' ? resolve(artifactsDir, relative) : null;
99
- }
100
- /**
101
- * Render the requested screens locally and return the produced image paths and
102
- * dimensions. Throws only on caller errors (bad options) or when the render
103
- * script could not run at all; per-screen and per-build render failures (and a
104
- * missing local toolchain) are reported in the returned result, mirroring the
105
- * remote result document and the iOS preview engine.
106
- */
107
- export function renderUiFidelityPreviewAndroid(options) {
108
- if (!options || typeof options !== 'object') {
109
- throw new Error('renderUiFidelityPreviewAndroid: options are required');
110
- }
111
- const hasDir = typeof options.packagePath === 'string' && options.packagePath !== '';
112
- const hasArchive = typeof options.packageArchive === 'string' && options.packageArchive !== '';
113
- if (hasDir === hasArchive) {
114
- throw new Error('renderUiFidelityPreviewAndroid: provide exactly one of packagePath or packageArchive');
115
- }
116
- if (!Array.isArray(options.screens) || options.screens.length === 0) {
117
- throw new Error('renderUiFidelityPreviewAndroid: at least one screen is required');
118
- }
119
- const scale = parseScale(options.scale ?? DEFAULT_SCALE);
120
- const gradleTask = String(options.gradleTask ?? DEFAULT_GRADLE_TASK);
121
- if (!isValidGradleTask(gradleTask)) {
122
- throw new Error(`renderUiFidelityPreviewAndroid: invalid gradleTask '${gradleTask}' ` +
123
- '(expected a Gradle task path: letters, digits, and : - _)');
124
- }
125
- const workDir = mkdtempSync(join(tmpdir(), 'ui-fidelity-android-preview-'));
126
- const inputsDir = join(workDir, '.ci', 'inputs');
127
- mkdirSync(inputsDir, { recursive: true });
128
- // Stage references by basename and build the screens -> basename map, exactly
129
- // as a remote caller would pass params.screens.
130
- const screensParam = {};
131
- for (const entry of options.screens) {
132
- if (!entry || typeof entry.screen !== 'string' || entry.screen === '') {
133
- throw new Error('renderUiFidelityPreviewAndroid: each screen needs a non-empty screen name');
134
- }
135
- if (typeof entry.reference !== 'string' || entry.reference === '') {
136
- throw new Error(`renderUiFidelityPreviewAndroid: screen ${entry.screen} needs a reference path`);
137
- }
138
- if (!existsSync(entry.reference) || !statSync(entry.reference).isFile()) {
139
- throw new Error(`renderUiFidelityPreviewAndroid: reference for ${entry.screen} not found: ${entry.reference}`);
140
- }
141
- const base = basename(entry.reference);
142
- copyFileSync(entry.reference, join(inputsDir, base));
143
- screensParam[entry.screen] = base;
144
- }
145
- const artifactsDir = options.outDir
146
- ? resolve(options.outDir)
147
- : join(workDir, '.ci', 'artifacts');
148
- mkdirSync(artifactsDir, { recursive: true });
149
- // A render is a heavy Gradle/Robolectric build; if the dev machine has no
150
- // local Android toolchain at all, fall back to a remote run with a clear
151
- // message instead of letting the build fail confusingly.
152
- const androidSdk = resolveAndroidSdk();
153
- const missing = missingToolchain(androidSdk, options.toolchainPath);
154
- if (missing.length > 0) {
155
- return {
156
- packageSource: 'inputs',
157
- buildError: {
158
- code: ANDROID_TOOLCHAIN_MISSING,
159
- message: 'the local Android toolchain is unavailable (' +
160
- missing.join(', ') +
161
- '); render this Compose wrapper on a runner instead of locally',
162
- },
163
- screens: [],
164
- artifactsDir,
165
- ok: false,
166
- };
167
- }
168
- const archivePath = join(inputsDir, PACKAGE_ARCHIVE_BASENAME);
169
- if (hasArchive) {
170
- const src = options.packageArchive;
171
- if (!existsSync(src) || !statSync(src).isFile()) {
172
- throw new Error(`renderUiFidelityPreviewAndroid: packageArchive not found: ${src}`);
173
- }
174
- copyFileSync(src, archivePath);
175
- }
176
- else {
177
- const dir = options.packagePath;
178
- if (!existsSync(dir) || !statSync(dir).isDirectory()) {
179
- throw new Error(`renderUiFidelityPreviewAndroid: packagePath is not a directory: ${dir}`);
180
- }
181
- // Archive with the settings script at the archive root; exclude Gradle/IDE/VCS
182
- // build noise so the upload stays lean and matches what a careful caller would
183
- // ship. gradlew is kept so the runner uses the pinned wrapper.
184
- runTar([
185
- '--exclude',
186
- './build',
187
- '--exclude',
188
- '*/build',
189
- '--exclude',
190
- './.gradle',
191
- '--exclude',
192
- '*/.gradle',
193
- '--exclude',
194
- '.git',
195
- '--exclude',
196
- '.idea',
197
- '--exclude',
198
- '.DS_Store',
199
- '--exclude',
200
- 'local.properties',
201
- '-czf',
202
- archivePath,
203
- '-C',
204
- dir,
205
- '.',
206
- ], options.toolchainPath);
207
- }
208
- // The standard params.json the render script reads: screen -> reference basename.
209
- writeFileSync(join(inputsDir, 'params.json'), JSON.stringify({ screens: screensParam }, null, 2) + '\n');
210
- const script = generateAndroidRenderScript({ scale, gradleTask });
211
- const env = {
212
- ...process.env,
213
- CIBUILD_ARTIFACTS_DIR: artifactsDir,
214
- };
215
- if (options.toolchainPath) {
216
- env.PATH = options.toolchainPath + ':' + (process.env.PATH ?? '');
217
- }
218
- // Export the resolved SDK so gradlew sees it even when ANDROID_HOME was
219
- // auto-detected (env unset) rather than already present in process.env.
220
- if (androidSdk) {
221
- env.ANDROID_HOME = androidSdk;
222
- if (!process.env.ANDROID_SDK_ROOT)
223
- env.ANDROID_SDK_ROOT = androidSdk;
224
- }
225
- // Hand the script this installation's CLI entrypoint so its trim stage can
226
- // spawn `fidelity-trim` without a ci on PATH (library callers like the
227
- // Invarn CLI). Never override an explicitly-set entrypoint.
228
- if (!env.CIBUILD_CLI_JS) {
229
- const cliJs = resolveCliJsPath();
230
- if (cliJs !== null)
231
- env.CIBUILD_CLI_JS = cliJs;
232
- }
233
- const run = spawnSync('node', ['-e', script], {
234
- cwd: workDir,
235
- env,
236
- encoding: 'utf-8',
237
- maxBuffer: 64 * 1024 * 1024,
238
- });
239
- const resultPath = join(artifactsDir, 'protocol-result.json');
240
- if (!existsSync(resultPath)) {
241
- const detail = ((run.stdout || '') + '\n' + (run.stderr || '')).trim();
242
- throw new Error(`renderUiFidelityPreviewAndroid: render script produced no result document` +
243
- (detail ? `:\n${detail}` : ''));
244
- }
245
- const raw = JSON.parse(readFileSync(resultPath, 'utf-8'));
246
- const screens = (raw.screens || []).map((s) => buildPreviewScreenResult(s, artifactsDir));
247
- const buildError = raw.error ?? null;
248
- const ok = buildError === null && screens.length > 0 && screens.every((s) => s.status === 'rendered');
249
- return { packageSource: 'inputs', buildError, screens, artifactsDir, ok };
250
- }
251
- //# sourceMappingURL=ui-fidelity-preview-android.js.map
@@ -1,13 +0,0 @@
1
- /**
2
- * Tests for the local Android ui-fidelity render preview engine.
3
- *
4
- * The orchestration (archive, params, result shaping) and the toolchain-missing
5
- * guard run with a PATH-shimmed fake `java`/`gradlew`/`swift` toolchain: the
6
- * engine spawns the real generated Android render script, which spawns the
7
- * toolchain. The actual Roborazzi/Robolectric render and the CoreGraphics trim
8
- * are covered by an opt-in real-toolchain test, gated on
9
- * CIBUILD_UI_FIDELITY_REAL_ANDROID, since the fake toolchain cannot exercise the
10
- * real pixel render/trim.
11
- */
12
- export {};
13
- //# sourceMappingURL=ui-fidelity-preview-android.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"ui-fidelity-preview-android.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/ui-fidelity-preview-android.test.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG"}
@@ -1,302 +0,0 @@
1
- /**
2
- * Tests for the local Android ui-fidelity render preview engine.
3
- *
4
- * The orchestration (archive, params, result shaping) and the toolchain-missing
5
- * guard run with a PATH-shimmed fake `java`/`gradlew`/`swift` toolchain: the
6
- * engine spawns the real generated Android render script, which spawns the
7
- * toolchain. The actual Roborazzi/Robolectric render and the CoreGraphics trim
8
- * are covered by an opt-in real-toolchain test, gated on
9
- * CIBUILD_UI_FIDELITY_REAL_ANDROID, since the fake toolchain cannot exercise the
10
- * real pixel render/trim.
11
- */
12
- import { describe, expect, test, afterAll } from '@jest/globals';
13
- import { chmodSync, existsSync, mkdirSync, mkdtempSync, readFileSync, rmSync, writeFileSync, } from 'node:fs';
14
- import { tmpdir } from 'node:os';
15
- import { dirname, join, resolve } from 'node:path';
16
- import { fileURLToPath } from 'node:url';
17
- import { renderUiFidelityPreviewAndroid } from './ui-fidelity-preview-android.js';
18
- const PNG_MAGIC = Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]);
19
- // Fake `java`: presence is all the toolchain guard checks (command -v java).
20
- const FAKE_JAVA = ['#!/bin/bash', 'exit 0'].join('\n');
21
- // Fake project `gradlew`: mimics a Roborazzi record by writing one PNG per
22
- // screen named in FAKE_ROBORAZZI_SCREENS (comma-separated) to
23
- // proof/build/outputs/roborazzi/<Screen>.png.
24
- const FAKE_GRADLEW = [
25
- '#!/bin/bash',
26
- 'out="proof/build/outputs/roborazzi"',
27
- 'mkdir -p "$out"',
28
- 'IFS=","',
29
- 'for s in $FAKE_ROBORAZZI_SCREENS; do',
30
- ' [ -z "$s" ] && continue',
31
- " printf '\\x89PNG\\r\\n\\x1a\\n' > \"$out/$s.png\"",
32
- ' printf \'roborazzi:%s\' "$s" >> "$out/$s.png"',
33
- 'done',
34
- 'exit 0',
35
- ].join('\n');
36
- // Fake `swift`: only the script-interpreter branch the shared trim stage uses
37
- // (`swift <Trim.swift> <in> <out> <aligned> <ref>`). Writes trimmed + aligned
38
- // PNGs and emits a fixed TRIMDIMS line.
39
- // Fake `ci` covering the shared trim stage's `ci fidelity-trim` invocation.
40
- const FAKE_CI = [
41
- '#!/bin/bash',
42
- 'case "$1" in',
43
- ' fidelity-trim)',
44
- ' in_png="$2"; out_png="$3"; aligned_png="$4"',
45
- " printf '\\x89PNG\\r\\n\\x1a\\n' > \"$out_png\"",
46
- ' printf \'trimmed:%s\' "$(basename "$in_png")" >> "$out_png"',
47
- ' if [ -n "$aligned_png" ]; then',
48
- " printf '\\x89PNG\\r\\n\\x1a\\n' > \"$aligned_png\"",
49
- ' printf \'aligned:%s\' "$(basename "$in_png")" >> "$aligned_png"',
50
- ' fi',
51
- ' echo "TRIMDIMS 320 640 160 320 400 800"',
52
- ' exit 0 ;;',
53
- ' *) exit 0 ;;',
54
- 'esac',
55
- ].join('\n');
56
- function fakeToolchain() {
57
- const bin = tempDir('ui-fidelity-android-fakebin-');
58
- for (const [name, body] of [
59
- ['java', FAKE_JAVA],
60
- ['ci', FAKE_CI],
61
- ]) {
62
- const p = join(bin, name);
63
- writeFileSync(p, body + '\n');
64
- chmodSync(p, 0o755);
65
- }
66
- return bin;
67
- }
68
- function isPng(filePath) {
69
- return readFileSync(filePath).subarray(0, PNG_MAGIC.length).equals(PNG_MAGIC);
70
- }
71
- const tempDirs = [];
72
- afterAll(() => {
73
- for (const dir of tempDirs) {
74
- try {
75
- rmSync(dir, { recursive: true, force: true });
76
- }
77
- catch {
78
- // best effort
79
- }
80
- }
81
- });
82
- function tempDir(prefix) {
83
- const dir = mkdtempSync(join(tmpdir(), prefix));
84
- tempDirs.push(dir);
85
- return dir;
86
- }
87
- function writeReference() {
88
- const dir = tempDir('ui-fidelity-android-ref-');
89
- const ref = join(dir, 'reference.png');
90
- writeFileSync(ref, Buffer.concat([PNG_MAGIC, Buffer.from('ref')]));
91
- return ref;
92
- }
93
- /** A minimal Gradle render-project directory with a fake gradlew. */
94
- function gradleProject() {
95
- const dir = tempDir('ui-fidelity-android-pkg-');
96
- writeFileSync(join(dir, 'settings.gradle.kts'), 'rootProject.name = "p"\ninclude(":proof")\n');
97
- mkdirSync(join(dir, 'proof'), { recursive: true });
98
- writeFileSync(join(dir, 'proof', 'build.gradle.kts'), '// module\n');
99
- const gradlew = join(dir, 'gradlew');
100
- writeFileSync(gradlew, FAKE_GRADLEW + '\n');
101
- chmodSync(gradlew, 0o755);
102
- return dir;
103
- }
104
- /** Run `fn` with ANDROID_HOME and the named screens set for the fake gradlew. */
105
- function withAndroidEnv(screens, fn) {
106
- const home = tempDir('ui-fidelity-android-sdk-');
107
- const saved = {
108
- home: process.env.ANDROID_HOME,
109
- root: process.env.ANDROID_SDK_ROOT,
110
- screens: process.env.FAKE_ROBORAZZI_SCREENS,
111
- };
112
- process.env.ANDROID_HOME = home;
113
- delete process.env.ANDROID_SDK_ROOT;
114
- process.env.FAKE_ROBORAZZI_SCREENS = screens;
115
- try {
116
- return fn();
117
- }
118
- finally {
119
- for (const [k, v] of [
120
- ['ANDROID_HOME', saved.home],
121
- ['ANDROID_SDK_ROOT', saved.root],
122
- ['FAKE_ROBORAZZI_SCREENS', saved.screens],
123
- ]) {
124
- if (v === undefined)
125
- delete process.env[k];
126
- else
127
- process.env[k] = v;
128
- }
129
- }
130
- }
131
- describe('renderUiFidelityPreviewAndroid — option validation', () => {
132
- test('requires exactly one of packagePath or packageArchive', () => {
133
- expect(() => renderUiFidelityPreviewAndroid({ screens: [] })).toThrow(/exactly one/);
134
- expect(() => renderUiFidelityPreviewAndroid({
135
- packagePath: gradleProject(),
136
- packageArchive: '/tmp/x.tar.gz',
137
- screens: [{ screen: 'XProof', reference: writeReference() }],
138
- })).toThrow(/exactly one/);
139
- });
140
- test('requires at least one screen', () => {
141
- expect(() => renderUiFidelityPreviewAndroid({ packagePath: gradleProject(), screens: [] })).toThrow(/at least one screen/);
142
- });
143
- test('rejects a missing reference image', () => {
144
- expect(() => renderUiFidelityPreviewAndroid({
145
- packagePath: gradleProject(),
146
- screens: [{ screen: 'XProof', reference: '/no/such/reference.png' }],
147
- })).toThrow(/reference for XProof not found/);
148
- });
149
- });
150
- describe('renderUiFidelityPreviewAndroid — fake toolchain', () => {
151
- test('archives the project, renders in inputs mode, and returns image paths + dims', () => {
152
- const result = withAndroidEnv('XProof', () => renderUiFidelityPreviewAndroid({
153
- packagePath: gradleProject(),
154
- screens: [{ screen: 'XProof', reference: writeReference() }],
155
- toolchainPath: fakeToolchain(),
156
- }));
157
- expect(result.packageSource).toBe('inputs');
158
- expect(result.buildError).toBeNull();
159
- expect(result.ok).toBe(true);
160
- expect(result.screens).toHaveLength(1);
161
- const [screen] = result.screens;
162
- expect(screen.screen).toBe('XProof');
163
- expect(screen.status).toBe('rendered');
164
- expect(screen.error).toBeNull();
165
- // Paths are absolute and point at real files the caller can read.
166
- expect(screen.renderedImagePath && isPng(screen.renderedImagePath)).toBe(true);
167
- expect(screen.alignedImagePath && isPng(screen.alignedImagePath)).toBe(true);
168
- expect(screen.referenceImagePath && isPng(screen.referenceImagePath)).toBe(true);
169
- // logical_pt = rendered_px / scale (default 2); reference from the fake trim.
170
- expect(screen.dimensions).toEqual({
171
- rendered_px: [320, 640],
172
- logical_pt: [160, 320],
173
- reference_px: [160, 320],
174
- // the fake helper's TRIMDIMS pre-trim source px (fields 5-6)
175
- source_px: [400, 800],
176
- });
177
- });
178
- test('writes images under the requested outDir', () => {
179
- const outDir = tempDir('ui-fidelity-android-out-');
180
- const result = withAndroidEnv('XProof', () => renderUiFidelityPreviewAndroid({
181
- packagePath: gradleProject(),
182
- screens: [{ screen: 'XProof', reference: writeReference() }],
183
- outDir,
184
- toolchainPath: fakeToolchain(),
185
- }));
186
- expect(result.artifactsDir).toBe(outDir);
187
- expect(result.screens[0].renderedImagePath?.startsWith(outDir)).toBe(true);
188
- expect(existsSync(join(outDir, 'ui-fidelity', 'rendered', 'XProof.png'))).toBe(true);
189
- });
190
- });
191
- describe('renderUiFidelityPreviewAndroid — missing local toolchain', () => {
192
- test('reports a clear toolchain-missing build error instead of crashing', () => {
193
- const savedHome = process.env.ANDROID_HOME;
194
- const savedRoot = process.env.ANDROID_SDK_ROOT;
195
- const savedUserHome = process.env.HOME;
196
- delete process.env.ANDROID_HOME;
197
- delete process.env.ANDROID_SDK_ROOT;
198
- // Point HOME at an empty dir so the default-location auto-detect
199
- // (~/Library/Android/sdk, ~/Android/Sdk) finds nothing — otherwise a dev
200
- // machine with the SDK installed would resolve one and this guard wouldn't fire.
201
- process.env.HOME = tempDir('ui-fidelity-android-emptyhome-');
202
- try {
203
- const result = renderUiFidelityPreviewAndroid({
204
- packagePath: gradleProject(),
205
- screens: [{ screen: 'XProof', reference: writeReference() }],
206
- });
207
- expect(result.ok).toBe(false);
208
- expect(result.buildError?.code).toBe('ANDROID_TOOLCHAIN_MISSING');
209
- expect(result.buildError?.message).toMatch(/Android SDK|JDK/);
210
- // Degrades cleanly: it never tried to render.
211
- expect(result.screens).toEqual([]);
212
- }
213
- finally {
214
- if (savedHome === undefined)
215
- delete process.env.ANDROID_HOME;
216
- else
217
- process.env.ANDROID_HOME = savedHome;
218
- if (savedRoot === undefined)
219
- delete process.env.ANDROID_SDK_ROOT;
220
- else
221
- process.env.ANDROID_SDK_ROOT = savedRoot;
222
- if (savedUserHome === undefined)
223
- delete process.env.HOME;
224
- else
225
- process.env.HOME = savedUserHome;
226
- }
227
- });
228
- test('auto-detects the SDK at the default install location when ANDROID_HOME is unset', () => {
229
- const savedHome = process.env.ANDROID_HOME;
230
- const savedRoot = process.env.ANDROID_SDK_ROOT;
231
- const savedUserHome = process.env.HOME;
232
- const savedScreens = process.env.FAKE_ROBORAZZI_SCREENS;
233
- delete process.env.ANDROID_HOME;
234
- delete process.env.ANDROID_SDK_ROOT;
235
- // A clean HOME with an SDK at the macOS default location, but no ANDROID_HOME.
236
- const fakeHome = tempDir('ui-fidelity-android-home-');
237
- mkdirSync(join(fakeHome, 'Library', 'Android', 'sdk'), { recursive: true });
238
- process.env.HOME = fakeHome;
239
- process.env.FAKE_ROBORAZZI_SCREENS = 'XProof';
240
- try {
241
- const result = renderUiFidelityPreviewAndroid({
242
- packagePath: gradleProject(),
243
- screens: [{ screen: 'XProof', reference: writeReference() }],
244
- toolchainPath: fakeToolchain(),
245
- });
246
- // Auto-detected the SDK and rendered, rather than bailing with TOOLCHAIN_MISSING.
247
- expect(result.buildError).toBeNull();
248
- expect(result.ok).toBe(true);
249
- expect(result.screens[0]?.status).toBe('rendered');
250
- }
251
- finally {
252
- if (savedHome === undefined)
253
- delete process.env.ANDROID_HOME;
254
- else
255
- process.env.ANDROID_HOME = savedHome;
256
- if (savedRoot === undefined)
257
- delete process.env.ANDROID_SDK_ROOT;
258
- else
259
- process.env.ANDROID_SDK_ROOT = savedRoot;
260
- if (savedUserHome === undefined)
261
- delete process.env.HOME;
262
- else
263
- process.env.HOME = savedUserHome;
264
- if (savedScreens === undefined)
265
- delete process.env.FAKE_ROBORAZZI_SCREENS;
266
- else
267
- process.env.FAKE_ROBORAZZI_SCREENS = savedScreens;
268
- }
269
- });
270
- });
271
- // Opt-in: previews the committed Roborazzi fixture with the real Android
272
- // toolchain and asserts a non-blank paired render at the expected size. Requires
273
- // the Android toolchain (JDK + SDK) and warm Roborazzi caches; gated behind
274
- // CIBUILD_UI_FIDELITY_REAL_ANDROID=1 (the Android analog of the iOS real-Swift
275
- // gate). ANDROID_HOME need not be exported — a standard SDK install at the
276
- // default location (~/Library/Android/sdk etc.) is auto-detected.
277
- describe('renderUiFidelityPreviewAndroid — real toolchain', () => {
278
- const realAndroidTest = process.env.CIBUILD_UI_FIDELITY_REAL_ANDROID === '1' ? test : test.skip;
279
- // A real, decodable 1x1 PNG so the trim helper's reference load/align succeeds.
280
- const ONE_BY_ONE_PNG = Buffer.from('iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVR42mNk+M9QDwADhgGAWjR9awAAAABJRU5ErkJggg==', 'base64');
281
- const FIXTURE_DIR = resolve(dirname(fileURLToPath(import.meta.url)), '../../../../cibuild-runner/scripts/roborazzi-fixture');
282
- realAndroidTest('previews the Roborazzi fixture and returns a paired, non-blank render', () => {
283
- const refDir = tempDir('ui-fidelity-android-realref-');
284
- const reference = join(refDir, 'reference.png');
285
- writeFileSync(reference, ONE_BY_ONE_PNG);
286
- const result = renderUiFidelityPreviewAndroid({
287
- packagePath: FIXTURE_DIR,
288
- screens: [{ screen: 'XProof', reference }],
289
- scale: 2,
290
- });
291
- expect(result.buildError).toBeNull();
292
- expect(result.ok).toBe(true);
293
- const [screen] = result.screens;
294
- expect(screen.status).toBe('rendered');
295
- expect(screen.renderedImagePath && isPng(screen.renderedImagePath)).toBe(true);
296
- expect(screen.alignedImagePath && isPng(screen.alignedImagePath)).toBe(true);
297
- const [rw, rh] = screen.dimensions.rendered_px;
298
- expect(rw).toBeGreaterThan(0);
299
- expect(rh).toBeGreaterThan(0);
300
- }, 600_000);
301
- });
302
- //# sourceMappingURL=ui-fidelity-preview-android.test.js.map