@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,162 +0,0 @@
1
- /**
2
- * Executes the generated shell rather than grepping it.
3
- *
4
- * The retry lives entirely in emitted bash, so string assertions prove only
5
- * that the text was written. These run it: a first-attempt refusal followed by
6
- * a second-attempt success has to actually pass, and a non-refusal has to fail
7
- * without burning the retry budget.
8
- */
9
- import { describe, test, expect } from '@jest/globals';
10
- import { execFileSync } from 'child_process';
11
- import { mkdtempSync, writeFileSync, rmSync, readFileSync, existsSync } from 'fs';
12
- import { join } from 'path';
13
- import { tmpdir } from 'os';
14
- import { refusedFetchHelpers, retryOnRefusedFetch } from './git-fetch-retry.js';
15
- const REFUSAL = "fatal: could not read Username for 'https://github.com': terminal prompts disabled";
16
- /** Wraps the emitted block in the same preamble the real step scripts use. */
17
- function buildScript(command, attempts = 3) {
18
- return [
19
- '#!/bin/bash',
20
- 'set -e',
21
- 'set -o pipefail',
22
- '',
23
- ...refusedFetchHelpers(),
24
- ...retryOnRefusedFetch({
25
- label: 'Package resolution',
26
- command,
27
- attempts,
28
- backoffSeconds: [0, 0, 0, 0],
29
- }),
30
- 'echo "REACHED_THE_END"',
31
- ].join('\n');
32
- }
33
- function run(command, attempts = 3) {
34
- const dir = mkdtempSync(join(tmpdir(), 'cibuild-fetch-retry-'));
35
- const scriptPath = join(dir, 'step.sh');
36
- writeFileSync(scriptPath, buildScript(command, attempts), { mode: 0o755 });
37
- try {
38
- const output = execFileSync('bash', [scriptPath], {
39
- encoding: 'utf-8',
40
- stdio: ['ignore', 'pipe', 'pipe'],
41
- cwd: dir,
42
- env: { ...process.env, COUNTER: join(dir, 'attempts') },
43
- });
44
- return { status: 0, output };
45
- }
46
- catch (e) {
47
- return {
48
- status: e.status ?? -1,
49
- output: `${e.stdout ?? ''}${e.stderr ?? ''}`,
50
- };
51
- }
52
- finally {
53
- rmSync(dir, { recursive: true, force: true });
54
- }
55
- }
56
- /**
57
- * A command that records each invocation and refuses the first `n` of them the
58
- * way git does, then succeeds.
59
- */
60
- function refuseFirst(n) {
61
- return (`bash -c 'echo x >> "$COUNTER"; ` +
62
- `if [ "$(wc -l < "$COUNTER")" -le ${n} ]; then echo "${REFUSAL}" >&2; exit 128; fi; ` +
63
- `echo RESOLVED_OK'`);
64
- }
65
- describe('retryOnRefusedFetch, executed', () => {
66
- test('a first-attempt refusal and a second-attempt success still passes', () => {
67
- const r = run(refuseFirst(1));
68
- expect(r.status).toBe(0);
69
- expect(r.output).toContain('RESOLVED_OK');
70
- expect(r.output).toContain('REACHED_THE_END');
71
- expect(r.output).toContain('was refused by the server (attempt 1 of 3)');
72
- });
73
- test('a command that succeeds first time is run exactly once', () => {
74
- const r = run(refuseFirst(0));
75
- expect(r.status).toBe(0);
76
- expect(r.output).toContain('RESOLVED_OK');
77
- expect(r.output).not.toContain('was refused by the server');
78
- });
79
- test('a refusal that never clears fails with the original exit code', () => {
80
- const r = run(refuseFirst(99));
81
- expect(r.status).toBe(128);
82
- expect(r.output).not.toContain('REACHED_THE_END');
83
- // and it explains itself rather than blaming a package
84
- expect(r.output).toContain('A dependency fetch was refused.');
85
- expect(r.output).toContain('HTTP 401');
86
- });
87
- test('it gives up after exactly the configured number of attempts', () => {
88
- const r = run(refuseFirst(99), 3);
89
- expect(r.output).toContain('(attempt 1 of 3)');
90
- expect(r.output).toContain('(attempt 2 of 3)');
91
- // the third attempt runs but is not announced as a retry
92
- expect(r.output).not.toContain('(attempt 3 of 3)');
93
- });
94
- test('a failure that is NOT a refused fetch fails immediately', () => {
95
- const r = run(`bash -c 'echo x >> "$COUNTER"; echo "error: no such module" >&2; exit 65'`);
96
- expect(r.status).toBe(65);
97
- // no retry, and no misleading refused-fetch diagnostic
98
- expect(r.output).not.toContain('was refused by the server');
99
- expect(r.output).not.toContain('A dependency fetch was refused.');
100
- });
101
- test('a non-refusal failure is attempted once, not three times', () => {
102
- const dir = mkdtempSync(join(tmpdir(), 'cibuild-fetch-count-'));
103
- const counter = join(dir, 'attempts');
104
- const scriptPath = join(dir, 'step.sh');
105
- writeFileSync(scriptPath, buildScript(`bash -c 'echo x >> "${counter}"; exit 65'`), { mode: 0o755 });
106
- try {
107
- execFileSync('bash', [scriptPath], { stdio: 'ignore', cwd: dir });
108
- }
109
- catch {
110
- /* expected */
111
- }
112
- const attempts = existsSync(counter)
113
- ? readFileSync(counter, 'utf-8').trim().split('\n').length
114
- : 0;
115
- expect(attempts).toBe(1);
116
- rmSync(dir, { recursive: true, force: true });
117
- });
118
- test('the command output still reaches the log while being captured', () => {
119
- const r = run(`bash -c 'echo x >> "$COUNTER"; echo VISIBLE_TO_THE_USER'`);
120
- expect(r.output).toContain('VISIBLE_TO_THE_USER');
121
- });
122
- });
123
- describe('the steps that embed it emit syntactically valid bash', () => {
124
- // A syntax error in generated shell is not caught by any string assertion
125
- // and would break every build of that type on the first run.
126
- const parses = async (script) => {
127
- const dir = mkdtempSync(join(tmpdir(), 'cibuild-syntax-'));
128
- const p = join(dir, 'step.sh');
129
- writeFileSync(p, script);
130
- try {
131
- execFileSync('bash', ['-n', p], { stdio: 'pipe' });
132
- }
133
- finally {
134
- rmSync(dir, { recursive: true, force: true });
135
- }
136
- };
137
- test('xcode-build-for-test', async () => {
138
- const { XcodeBuildForTestStepExecutor } = await import('./xcode.js');
139
- const { testConfig } = await import('./test-config.js');
140
- const r = await new XcodeBuildForTestStepExecutor().execute({ project_path: "My App.xcworkspace", scheme: "My Scheme", xcconfig_content: 'ARCHS = arm64' }, {}, testConfig);
141
- await parses(r.script);
142
- });
143
- test('xcodebuild', async () => {
144
- const { XcodeBuildStepExecutor } = await import('./xcode.js');
145
- const { testConfig } = await import('./test-config.js');
146
- const r = await new XcodeBuildStepExecutor().execute({ project_path: 'MyApp.xcodeproj', scheme: 'MyApp', is_clean_build: true }, {}, testConfig);
147
- await parses(r.script);
148
- });
149
- test('xcode-build-for-simulator', async () => {
150
- const { XcodeBuildForSimulatorStepExecutor } = await import('./xcode.js');
151
- const { testConfig } = await import('./test-config.js');
152
- const r = await new XcodeBuildForSimulatorStepExecutor().execute({ project_path: "My App.xcworkspace", scheme: "My Scheme", perform_clean_action: 'yes' }, {}, testConfig);
153
- await parses(r.script);
154
- });
155
- test('cocoapods-install', async () => {
156
- const { CocoapodsInstallStepExecutor } = await import('./ios-deps.js');
157
- const { testConfig } = await import('./test-config.js');
158
- const r = await new CocoapodsInstallStepExecutor().execute({ verbose: true }, {}, testConfig);
159
- await parses(r.script);
160
- });
161
- });
162
- //# sourceMappingURL=git-fetch-retry-exec.test.js.map
@@ -1,62 +0,0 @@
1
- /**
2
- * Retrying a refused third-party dependency fetch, and naming the reason when
3
- * the retry does not save it.
4
- *
5
- * A build that resolves its dependencies from public git repositories fetches
6
- * them anonymously. When a host answers one of those fetches with HTTP 401,
7
- * git has no credential to fall back on and prints
8
- *
9
- * fatal: could not read Username for 'https://<host>': terminal prompts disabled
10
- * fatal: expected flush after ref listing
11
- *
12
- * Those two lines are one failure, not two: the transport child asks for a
13
- * username, cannot prompt, and dies; the parent then finds the ref listing
14
- * truncated. git asks for a username *only* on a 401, which makes the first
15
- * line an exact signature for "the server refused this fetch".
16
- *
17
- * Such a refusal has been observed to be transient — the same repository
18
- * readable again a minute or two later, from the same machine and the same
19
- * address — while landing in the middle of a dependency resolution and taking
20
- * a multi-minute build down with it.
21
- *
22
- * Two things are emitted here, and they are deliberately separate:
23
- *
24
- * - a retry around the fetch, gated on that signature, so a compile error
25
- * still fails on the first attempt instead of three attempts later; and
26
- * - a diagnostic that re-probes every refused URL and prints the HTTP status
27
- * it gets back. Nothing else in the pipeline records that status, so a
28
- * build failing this way otherwise reports a missing package rather than a
29
- * refused fetch, and a recurrence is unattributable after the fact. The
30
- * probe is the whole reason the second occurrence will be cheaper to
31
- * explain than the first.
32
- *
33
- * The emitted shell is bash and runs under `set -e` / `set -o pipefail`, which
34
- * is why the exit code is measured explicitly rather than inferred.
35
- */
36
- /**
37
- * The line git prints when, and only when, a server answers a fetch with
38
- * HTTP 401 and no credential is available.
39
- */
40
- export declare const REFUSED_FETCH_SIGNATURE = "could not read Username for";
41
- export interface RefusedFetchRetryOptions {
42
- /** What is being fetched, as it should read in a log line. */
43
- label: string;
44
- /** The command to run, exactly as it would appear on one shell line. */
45
- command: string;
46
- /** Total attempts, including the first. Defaults to 3. */
47
- attempts?: number;
48
- /** Seconds to wait before each retry. Defaults to 15s then 45s. */
49
- backoffSeconds?: number[];
50
- }
51
- /**
52
- * Shell functions and state the retry depends on. Emit once per script, before
53
- * the first `retryOnRefusedFetch` block.
54
- */
55
- export declare function refusedFetchHelpers(): string[];
56
- /**
57
- * Runs `command`, retrying it while the failure looks like a refused fetch.
58
- * On the last failure the diagnostic runs and the step exits with the
59
- * command's own status, so the reported exit code is still the real one.
60
- */
61
- export declare function retryOnRefusedFetch(options: RefusedFetchRetryOptions): string[];
62
- //# sourceMappingURL=git-fetch-retry.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-fetch-retry.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/git-fetch-retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAkCG;AAEH;;;GAGG;AACH,eAAO,MAAM,uBAAuB,gCAAgC,CAAC;AAErE,MAAM,WAAW,wBAAwB;IACvC,8DAA8D;IAC9D,KAAK,EAAE,MAAM,CAAC;IACd,wEAAwE;IACxE,OAAO,EAAE,MAAM,CAAC;IAChB,0DAA0D;IAC1D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,IAAI,MAAM,EAAE,CAiE9C;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,wBAAwB,GAAG,MAAM,EAAE,CAuC/E"}
@@ -1,155 +0,0 @@
1
- /**
2
- * Retrying a refused third-party dependency fetch, and naming the reason when
3
- * the retry does not save it.
4
- *
5
- * A build that resolves its dependencies from public git repositories fetches
6
- * them anonymously. When a host answers one of those fetches with HTTP 401,
7
- * git has no credential to fall back on and prints
8
- *
9
- * fatal: could not read Username for 'https://<host>': terminal prompts disabled
10
- * fatal: expected flush after ref listing
11
- *
12
- * Those two lines are one failure, not two: the transport child asks for a
13
- * username, cannot prompt, and dies; the parent then finds the ref listing
14
- * truncated. git asks for a username *only* on a 401, which makes the first
15
- * line an exact signature for "the server refused this fetch".
16
- *
17
- * Such a refusal has been observed to be transient — the same repository
18
- * readable again a minute or two later, from the same machine and the same
19
- * address — while landing in the middle of a dependency resolution and taking
20
- * a multi-minute build down with it.
21
- *
22
- * Two things are emitted here, and they are deliberately separate:
23
- *
24
- * - a retry around the fetch, gated on that signature, so a compile error
25
- * still fails on the first attempt instead of three attempts later; and
26
- * - a diagnostic that re-probes every refused URL and prints the HTTP status
27
- * it gets back. Nothing else in the pipeline records that status, so a
28
- * build failing this way otherwise reports a missing package rather than a
29
- * refused fetch, and a recurrence is unattributable after the fact. The
30
- * probe is the whole reason the second occurrence will be cheaper to
31
- * explain than the first.
32
- *
33
- * The emitted shell is bash and runs under `set -e` / `set -o pipefail`, which
34
- * is why the exit code is measured explicitly rather than inferred.
35
- */
36
- /**
37
- * The line git prints when, and only when, a server answers a fetch with
38
- * HTTP 401 and no credential is available.
39
- */
40
- export const REFUSED_FETCH_SIGNATURE = 'could not read Username for';
41
- /**
42
- * Shell functions and state the retry depends on. Emit once per script, before
43
- * the first `retryOnRefusedFetch` block.
44
- */
45
- export function refusedFetchHelpers() {
46
- return [
47
- '# --- refused dependency fetch: retry, then explain -------------------------',
48
- 'CIBUILD_FETCH_LOG="$(mktemp -t cibuild-fetch)"',
49
- '',
50
- '# git asks for a username only when a server answers with HTTP 401, so this',
51
- '# line means the fetch was refused, not that a package is missing.',
52
- 'cibuild_fetch_was_refused() {',
53
- ` grep -q '${REFUSED_FETCH_SIGNATURE}' "$CIBUILD_FETCH_LOG" 2>/dev/null`,
54
- '}',
55
- '',
56
- '# The status that caused the refusal is recorded nowhere, so ask again and',
57
- '# put it in the build log where the next person will find it.',
58
- 'cibuild_diagnose_refused_fetch() {',
59
- ' echo ""',
60
- ' echo "──────────────────────────────────────────────────────────────"',
61
- ' echo "A dependency fetch was refused."',
62
- ' echo ""',
63
- ' echo "git asked for a username, which it does only when the server answered"',
64
- ' echo "with HTTP 401. That is an authentication refusal, not a missing"',
65
- ' echo "package. Re-probing each repository named above:"',
66
- ' echo ""',
67
- // Every stage here can legitimately match nothing, and under `set -e` with
68
- // `pipefail` an empty grep would abort the step and replace the command's
69
- // real exit code with 1. The diagnostic must never do that: it runs on the
70
- // failure path, and its whole job is to explain a failure it did not cause.
71
- ` grep -oE 'https://[^ "'"'"']+' "$CIBUILD_FETCH_LOG" 2>/dev/null \\`,
72
- ` | sed -e "s/[.,:;')]*$//" -e 's/\\.git$//' \\`,
73
- ` | grep -E '^https://[^/]+/[^/]+/[^/]+$' \\`,
74
- ' | sort -u | head -20 \\',
75
- ' | while IFS= read -r CIBUILD_FETCH_PROBE_URL; do',
76
- ' CIBUILD_FETCH_PROBE_CODE="$(curl -sS -o /dev/null -m 20 \\',
77
- ` -w '%{http_code}' \\`,
78
- ' "$CIBUILD_FETCH_PROBE_URL/info/refs?service=git-upload-pack" 2>/dev/null)" \\',
79
- ' || CIBUILD_FETCH_PROBE_CODE="000"',
80
- ' case "$CIBUILD_FETCH_PROBE_CODE" in',
81
- ' 200)',
82
- ' echo " 200 $CIBUILD_FETCH_PROBE_URL"',
83
- ' echo " readable anonymously now — the refusal was transient"',
84
- ' ;;',
85
- ' 401|403)',
86
- ' echo " $CIBUILD_FETCH_PROBE_CODE $CIBUILD_FETCH_PROBE_URL"',
87
- ' echo " still refused — this repository needs a credential, or the"',
88
- ' echo " host is refusing anonymous reads from this machine"',
89
- ' ;;',
90
- ' 404)',
91
- ' echo " 404 $CIBUILD_FETCH_PROBE_URL"',
92
- ' echo " no such repository — check the dependency URL"',
93
- ' ;;',
94
- ' 000)',
95
- ' echo " --- $CIBUILD_FETCH_PROBE_URL"',
96
- ' echo " unreachable from this machine — network, DNS or TLS"',
97
- ' ;;',
98
- ' *)',
99
- ' echo " $CIBUILD_FETCH_PROBE_CODE $CIBUILD_FETCH_PROBE_URL"',
100
- ' ;;',
101
- ' esac',
102
- ' done || true',
103
- ' echo ""',
104
- ' echo "A 200 above means the fetch would succeed if it ran again now."',
105
- ' echo "──────────────────────────────────────────────────────────────"',
106
- ' echo ""',
107
- '}',
108
- '',
109
- ];
110
- }
111
- /**
112
- * Runs `command`, retrying it while the failure looks like a refused fetch.
113
- * On the last failure the diagnostic runs and the step exits with the
114
- * command's own status, so the reported exit code is still the real one.
115
- */
116
- export function retryOnRefusedFetch(options) {
117
- const attempts = options.attempts ?? 3;
118
- const backoff = options.backoffSeconds ?? [15, 45];
119
- const label = options.label.replace(/"/g, '\\"');
120
- return [
121
- `CIBUILD_FETCH_MAX_ATTEMPTS=${attempts}`,
122
- `CIBUILD_FETCH_BACKOFF=(${backoff.join(' ')})`,
123
- 'CIBUILD_FETCH_ATTEMPT=1',
124
- 'while :; do',
125
- ' set +e',
126
- ` ${options.command} 2>&1 | tee "$CIBUILD_FETCH_LOG"`,
127
- ' CIBUILD_FETCH_RC=${PIPESTATUS[0]}',
128
- ' set -e',
129
- ' if [ "$CIBUILD_FETCH_RC" -eq 0 ]; then',
130
- ' break',
131
- ' fi',
132
- // Anything that is not a refused fetch is a real failure: fail now.
133
- ' if ! cibuild_fetch_was_refused; then',
134
- ' break',
135
- ' fi',
136
- ' if [ "$CIBUILD_FETCH_ATTEMPT" -ge "$CIBUILD_FETCH_MAX_ATTEMPTS" ]; then',
137
- ' break',
138
- ' fi',
139
- ' CIBUILD_FETCH_WAIT="${CIBUILD_FETCH_BACKOFF[$((CIBUILD_FETCH_ATTEMPT - 1))]:-30}"',
140
- ` echo "⚠️ ${label} was refused by the server (attempt $CIBUILD_FETCH_ATTEMPT of $CIBUILD_FETCH_MAX_ATTEMPTS)."`,
141
- ' echo " A refused anonymous fetch is usually transient. Retrying in ${CIBUILD_FETCH_WAIT}s..."',
142
- ' sleep "$CIBUILD_FETCH_WAIT"',
143
- ' CIBUILD_FETCH_ATTEMPT=$((CIBUILD_FETCH_ATTEMPT + 1))',
144
- 'done',
145
- '',
146
- 'if [ "$CIBUILD_FETCH_RC" -ne 0 ]; then',
147
- ' if cibuild_fetch_was_refused; then',
148
- ' cibuild_diagnose_refused_fetch',
149
- ' fi',
150
- ' exit "$CIBUILD_FETCH_RC"',
151
- 'fi',
152
- '',
153
- ];
154
- }
155
- //# sourceMappingURL=git-fetch-retry.js.map
@@ -1,5 +0,0 @@
1
- /**
2
- * Tests for retrying a refused third-party dependency fetch.
3
- */
4
- export {};
5
- //# sourceMappingURL=git-fetch-retry.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"git-fetch-retry.test.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/git-fetch-retry.test.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -1,86 +0,0 @@
1
- /**
2
- * Tests for retrying a refused third-party dependency fetch.
3
- */
4
- import { describe, test, expect } from '@jest/globals';
5
- import { REFUSED_FETCH_SIGNATURE, refusedFetchHelpers, retryOnRefusedFetch, } from './git-fetch-retry.js';
6
- const helpers = () => refusedFetchHelpers().join('\n');
7
- const retry = (o) => retryOnRefusedFetch(o).join('\n');
8
- describe('refusedFetchHelpers', () => {
9
- test('keys off the line git prints only for an HTTP 401', () => {
10
- expect(REFUSED_FETCH_SIGNATURE).toBe('could not read Username for');
11
- expect(helpers()).toContain(REFUSED_FETCH_SIGNATURE);
12
- });
13
- test('captures output to a log the diagnostic can re-read', () => {
14
- const script = helpers();
15
- expect(script).toContain('CIBUILD_FETCH_LOG=');
16
- expect(script).toContain('mktemp');
17
- });
18
- test('re-probes each refused URL for its HTTP status', () => {
19
- const script = helpers();
20
- // The whole point: the 401 is recorded nowhere, so ask again and print it.
21
- expect(script).toContain('info/refs?service=git-upload-pack');
22
- expect(script).toContain("-w '%{http_code}'");
23
- expect(script).toContain('cibuild_diagnose_refused_fetch()');
24
- });
25
- test('explains each status it can get back', () => {
26
- const script = helpers();
27
- expect(script).toContain('200)');
28
- expect(script).toContain('401|403)');
29
- expect(script).toContain('404)');
30
- // An unreachable host must not be reported as a refusal.
31
- expect(script).toContain('000)');
32
- expect(script).toContain('unreachable from this machine');
33
- });
34
- test('never lets a probe failure abort the step', () => {
35
- // The diagnostic runs on the failure path; it must not mask the real error.
36
- expect(helpers()).toContain('|| CIBUILD_FETCH_PROBE_CODE="000"');
37
- });
38
- });
39
- describe('retryOnRefusedFetch', () => {
40
- const opts = { label: 'Package resolution', command: 'xcodebuild -resolvePackageDependencies' };
41
- test('runs the command it was given', () => {
42
- expect(retry(opts)).toContain('xcodebuild -resolvePackageDependencies');
43
- });
44
- test('streams output live while still capturing it', () => {
45
- const script = retry(opts);
46
- expect(script).toContain('| tee "$CIBUILD_FETCH_LOG"');
47
- // tee would otherwise mask the command's own exit code.
48
- expect(script).toContain('${PIPESTATUS[0]}');
49
- });
50
- test('retries only when the failure is a refused fetch', () => {
51
- const script = retry(opts);
52
- // A compile error must fail on the first attempt, not after three.
53
- expect(script).toContain('if ! cibuild_fetch_was_refused; then');
54
- expect(script).toContain('break');
55
- });
56
- test('backs off between attempts', () => {
57
- const script = retry({ ...opts, attempts: 3, backoffSeconds: [15, 45] });
58
- expect(script).toContain('CIBUILD_FETCH_BACKOFF=(15 45)');
59
- expect(script).toContain('sleep');
60
- });
61
- test('defaults to three attempts', () => {
62
- expect(retry(opts)).toContain('CIBUILD_FETCH_MAX_ATTEMPTS=3');
63
- });
64
- test('honours a custom attempt count', () => {
65
- expect(retry({ ...opts, attempts: 5 })).toContain('CIBUILD_FETCH_MAX_ATTEMPTS=5');
66
- });
67
- test('diagnoses and then fails with the original exit code', () => {
68
- const script = retry(opts);
69
- expect(script).toContain('cibuild_diagnose_refused_fetch');
70
- expect(script).toContain('exit "$CIBUILD_FETCH_RC"');
71
- });
72
- test('names the thing being fetched in its retry message', () => {
73
- expect(retry(opts)).toContain('Package resolution');
74
- });
75
- test('does not use a bare && before break, which set -e would trip on', () => {
76
- // `[ x ] && break` returns 1 when the test is false and aborts under set -e.
77
- expect(retry(opts)).not.toMatch(/\]\s*&&\s*break/);
78
- });
79
- test('restores set -e after measuring the exit code', () => {
80
- const script = retry(opts);
81
- expect(script).toContain('set +e');
82
- expect(script).toContain('set -e');
83
- expect(script.indexOf('set +e')).toBeLessThan(script.lastIndexOf('set -e'));
84
- });
85
- });
86
- //# sourceMappingURL=git-fetch-retry.test.js.map
@@ -1,37 +0,0 @@
1
- /**
2
- * Google Play deploy step implementation
3
- * Uploads APK/AAB to Google Play using fastlane supply
4
- */
5
- import { BaseStepExecutor } from './base.js';
6
- import type { StepDef, CIConfig } from '../../types.js';
7
- import type { ValidationRequirement } from '../validation-types.js';
8
- /**
9
- * Inputs for google-play-deploy step
10
- */
11
- export interface GooglePlayDeployInputs {
12
- artifact_type?: string;
13
- service_account_json_key_path?: string;
14
- service_account_json_var?: string;
15
- package_name?: string;
16
- app_path?: string;
17
- track?: string;
18
- user_fraction?: string;
19
- status?: string;
20
- update_priority?: string;
21
- whatsnews_dir?: string;
22
- mapping_file?: string;
23
- retry_without_sending_to_review?: string;
24
- ack_bundle_installation_warning?: string;
25
- dry_run?: string;
26
- verbose_log?: string;
27
- }
28
- /**
29
- * Google Play deploy step executor
30
- * Maps google-play-deploy to fastlane supply
31
- */
32
- export declare class GooglePlayDeployStepExecutor extends BaseStepExecutor {
33
- isSkippedInLocalMode(): boolean;
34
- getValidationRequirements(inputs: GooglePlayDeployInputs, env: Record<string, string>, _config: CIConfig): ValidationRequirement[];
35
- execute(inputs: GooglePlayDeployInputs, env: Record<string, string>, config: CIConfig): Promise<StepDef>;
36
- }
37
- //# sourceMappingURL=google-play-deploy.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"google-play-deploy.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/google-play-deploy.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AACxD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6BAA6B,CAAC,EAAE,MAAM,CAAC;IACvC,wBAAwB,CAAC,EAAE,MAAM,CAAC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,+BAA+B,CAAC,EAAE,MAAM,CAAC;IACzC,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,qBAAa,4BAA6B,SAAQ,gBAAgB;IAChE,oBAAoB,IAAI,OAAO;IAI/B,yBAAyB,CACvB,MAAM,EAAE,sBAAsB,EAC9B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAC3B,OAAO,EAAE,QAAQ,GAChB,qBAAqB,EAAE;IAoBpB,OAAO,CAAC,MAAM,EAAE,sBAAsB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;CAsL/G"}