@invarn/cibuild 2.9.6 → 2.9.8

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 (559) 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/a-missing-pinned-jdk-yields-for-every-gradle-run.test.d.ts +0 -2
  282. package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.d.ts.map +0 -1
  283. package/dist/src/yaml/steps/a-missing-pinned-jdk-yields-for-every-gradle-run.test.js +0 -96
  284. package/dist/src/yaml/steps/android-sign.d.ts +0 -35
  285. package/dist/src/yaml/steps/android-sign.d.ts.map +0 -1
  286. package/dist/src/yaml/steps/android-sign.js +0 -147
  287. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts +0 -2
  288. package/dist/src/yaml/steps/android-variant-resolution.test.d.ts.map +0 -1
  289. package/dist/src/yaml/steps/android-variant-resolution.test.js +0 -260
  290. package/dist/src/yaml/steps/android-version.d.ts +0 -26
  291. package/dist/src/yaml/steps/android-version.d.ts.map +0 -1
  292. package/dist/src/yaml/steps/android-version.js +0 -128
  293. package/dist/src/yaml/steps/android-version.test.d.ts +0 -5
  294. package/dist/src/yaml/steps/android-version.test.d.ts.map +0 -1
  295. package/dist/src/yaml/steps/android-version.test.js +0 -196
  296. package/dist/src/yaml/steps/android.d.ts +0 -156
  297. package/dist/src/yaml/steps/android.d.ts.map +0 -1
  298. package/dist/src/yaml/steps/android.js +0 -1100
  299. package/dist/src/yaml/steps/app-store-deploy.d.ts +0 -48
  300. package/dist/src/yaml/steps/app-store-deploy.d.ts.map +0 -1
  301. package/dist/src/yaml/steps/app-store-deploy.js +0 -167
  302. package/dist/src/yaml/steps/base.d.ts +0 -263
  303. package/dist/src/yaml/steps/base.d.ts.map +0 -1
  304. package/dist/src/yaml/steps/base.js +0 -380
  305. package/dist/src/yaml/steps/bitrise-android-tools.d.ts +0 -26
  306. package/dist/src/yaml/steps/bitrise-android-tools.d.ts.map +0 -1
  307. package/dist/src/yaml/steps/bitrise-android-tools.js +0 -200
  308. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts +0 -5
  309. package/dist/src/yaml/steps/bitrise-android-tools.test.d.ts.map +0 -1
  310. package/dist/src/yaml/steps/bitrise-android-tools.test.js +0 -280
  311. package/dist/src/yaml/steps/bitrise-apk-info.d.ts +0 -22
  312. package/dist/src/yaml/steps/bitrise-apk-info.d.ts.map +0 -1
  313. package/dist/src/yaml/steps/bitrise-apk-info.js +0 -144
  314. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts +0 -5
  315. package/dist/src/yaml/steps/bitrise-apk-info.test.d.ts.map +0 -1
  316. package/dist/src/yaml/steps/bitrise-apk-info.test.js +0 -331
  317. package/dist/src/yaml/steps/bitrise-slack.d.ts +0 -49
  318. package/dist/src/yaml/steps/bitrise-slack.d.ts.map +0 -1
  319. package/dist/src/yaml/steps/bitrise-slack.js +0 -280
  320. package/dist/src/yaml/steps/bitrise-slack.test.d.ts +0 -5
  321. package/dist/src/yaml/steps/bitrise-slack.test.d.ts.map +0 -1
  322. package/dist/src/yaml/steps/bitrise-slack.test.js +0 -484
  323. package/dist/src/yaml/steps/bitrise-ssh.d.ts +0 -27
  324. package/dist/src/yaml/steps/bitrise-ssh.d.ts.map +0 -1
  325. package/dist/src/yaml/steps/bitrise-ssh.js +0 -134
  326. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts +0 -5
  327. package/dist/src/yaml/steps/bitrise-ssh.test.d.ts.map +0 -1
  328. package/dist/src/yaml/steps/bitrise-ssh.test.js +0 -205
  329. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts +0 -27
  330. package/dist/src/yaml/steps/cache-pull-daemon.test.d.ts.map +0 -1
  331. package/dist/src/yaml/steps/cache-pull-daemon.test.js +0 -212
  332. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts +0 -42
  333. package/dist/src/yaml/steps/cache-pull-restore-roots.test.d.ts.map +0 -1
  334. package/dist/src/yaml/steps/cache-pull-restore-roots.test.js +0 -209
  335. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts +0 -27
  336. package/dist/src/yaml/steps/cache-push-daemon.test.d.ts.map +0 -1
  337. package/dist/src/yaml/steps/cache-push-daemon.test.js +0 -171
  338. package/dist/src/yaml/steps/cache.d.ts +0 -59
  339. package/dist/src/yaml/steps/cache.d.ts.map +0 -1
  340. package/dist/src/yaml/steps/cache.js +0 -1027
  341. package/dist/src/yaml/steps/capture-injection.d.ts +0 -30
  342. package/dist/src/yaml/steps/capture-injection.d.ts.map +0 -1
  343. package/dist/src/yaml/steps/capture-injection.js +0 -88
  344. package/dist/src/yaml/steps/capture-injection.test.d.ts +0 -2
  345. package/dist/src/yaml/steps/capture-injection.test.d.ts.map +0 -1
  346. package/dist/src/yaml/steps/capture-injection.test.js +0 -163
  347. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts +0 -42
  348. package/dist/src/yaml/steps/cocoapods-deployment-floor.d.ts.map +0 -1
  349. package/dist/src/yaml/steps/cocoapods-deployment-floor.js +0 -140
  350. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts +0 -11
  351. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.d.ts.map +0 -1
  352. package/dist/src/yaml/steps/cocoapods-deployment-floor.test.js +0 -176
  353. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts +0 -22
  354. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.d.ts.map +0 -1
  355. package/dist/src/yaml/steps/cocoapods-install-emits-valid-bash.test.js +0 -97
  356. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts +0 -17
  357. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.d.ts.map +0 -1
  358. package/dist/src/yaml/steps/cocoapods-locked-bundler.test.js +0 -282
  359. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts +0 -17
  360. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.d.ts.map +0 -1
  361. package/dist/src/yaml/steps/cocoapods-skip-if-absent.test.js +0 -132
  362. package/dist/src/yaml/steps/envstore-loader.test.d.ts +0 -15
  363. package/dist/src/yaml/steps/envstore-loader.test.d.ts.map +0 -1
  364. package/dist/src/yaml/steps/envstore-loader.test.js +0 -143
  365. package/dist/src/yaml/steps/fastlane.d.ts +0 -27
  366. package/dist/src/yaml/steps/fastlane.d.ts.map +0 -1
  367. package/dist/src/yaml/steps/fastlane.js +0 -79
  368. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts +0 -53
  369. package/dist/src/yaml/steps/fidelity-aspect-guard.d.ts.map +0 -1
  370. package/dist/src/yaml/steps/fidelity-aspect-guard.js +0 -72
  371. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts +0 -11
  372. package/dist/src/yaml/steps/fidelity-aspect-guard.test.d.ts.map +0 -1
  373. package/dist/src/yaml/steps/fidelity-aspect-guard.test.js +0 -50
  374. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts +0 -87
  375. package/dist/src/yaml/steps/fidelity-reference-provenance.d.ts.map +0 -1
  376. package/dist/src/yaml/steps/fidelity-reference-provenance.js +0 -111
  377. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts +0 -22
  378. package/dist/src/yaml/steps/fidelity-reference-provenance.test.d.ts.map +0 -1
  379. package/dist/src/yaml/steps/fidelity-reference-provenance.test.js +0 -118
  380. package/dist/src/yaml/steps/file.d.ts +0 -52
  381. package/dist/src/yaml/steps/file.d.ts.map +0 -1
  382. package/dist/src/yaml/steps/file.js +0 -108
  383. package/dist/src/yaml/steps/flutter.d.ts +0 -63
  384. package/dist/src/yaml/steps/flutter.d.ts.map +0 -1
  385. package/dist/src/yaml/steps/flutter.js +0 -215
  386. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts +0 -16
  387. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.d.ts.map +0 -1
  388. package/dist/src/yaml/steps/git-clone-names-the-inputs-it-ignores.test.js +0 -127
  389. package/dist/src/yaml/steps/git-clone.d.ts +0 -32
  390. package/dist/src/yaml/steps/git-clone.d.ts.map +0 -1
  391. package/dist/src/yaml/steps/git-clone.js +0 -171
  392. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts +0 -10
  393. package/dist/src/yaml/steps/git-fetch-retry-exec.test.d.ts.map +0 -1
  394. package/dist/src/yaml/steps/git-fetch-retry-exec.test.js +0 -162
  395. package/dist/src/yaml/steps/git-fetch-retry.d.ts +0 -62
  396. package/dist/src/yaml/steps/git-fetch-retry.d.ts.map +0 -1
  397. package/dist/src/yaml/steps/git-fetch-retry.js +0 -155
  398. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts +0 -5
  399. package/dist/src/yaml/steps/git-fetch-retry.test.d.ts.map +0 -1
  400. package/dist/src/yaml/steps/git-fetch-retry.test.js +0 -86
  401. package/dist/src/yaml/steps/google-play-deploy.d.ts +0 -37
  402. package/dist/src/yaml/steps/google-play-deploy.d.ts.map +0 -1
  403. package/dist/src/yaml/steps/google-play-deploy.js +0 -193
  404. package/dist/src/yaml/steps/google-play-deploy.test.d.ts +0 -5
  405. package/dist/src/yaml/steps/google-play-deploy.test.d.ts.map +0 -1
  406. package/dist/src/yaml/steps/google-play-deploy.test.js +0 -310
  407. package/dist/src/yaml/steps/gradle-memory.d.ts +0 -91
  408. package/dist/src/yaml/steps/gradle-memory.d.ts.map +0 -1
  409. package/dist/src/yaml/steps/gradle-memory.js +0 -495
  410. package/dist/src/yaml/steps/gradle-memory.test.d.ts +0 -2
  411. package/dist/src/yaml/steps/gradle-memory.test.d.ts.map +0 -1
  412. package/dist/src/yaml/steps/gradle-memory.test.js +0 -344
  413. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts +0 -28
  414. package/dist/src/yaml/steps/gradle-sdk-cmake.d.ts.map +0 -1
  415. package/dist/src/yaml/steps/gradle-sdk-cmake.js +0 -107
  416. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts +0 -2
  417. package/dist/src/yaml/steps/gradle-sdk-cmake.test.d.ts.map +0 -1
  418. package/dist/src/yaml/steps/gradle-sdk-cmake.test.js +0 -183
  419. package/dist/src/yaml/steps/index.d.ts +0 -10
  420. package/dist/src/yaml/steps/index.d.ts.map +0 -1
  421. package/dist/src/yaml/steps/index.js +0 -1461
  422. package/dist/src/yaml/steps/ios-deps.d.ts +0 -78
  423. package/dist/src/yaml/steps/ios-deps.d.ts.map +0 -1
  424. package/dist/src/yaml/steps/ios-deps.js +0 -279
  425. package/dist/src/yaml/steps/ios-deps.test.d.ts +0 -5
  426. package/dist/src/yaml/steps/ios-deps.test.d.ts.map +0 -1
  427. package/dist/src/yaml/steps/ios-deps.test.js +0 -90
  428. package/dist/src/yaml/steps/ios-signing.d.ts +0 -31
  429. package/dist/src/yaml/steps/ios-signing.d.ts.map +0 -1
  430. package/dist/src/yaml/steps/ios-signing.js +0 -144
  431. package/dist/src/yaml/steps/ios-version.d.ts +0 -47
  432. package/dist/src/yaml/steps/ios-version.d.ts.map +0 -1
  433. package/dist/src/yaml/steps/ios-version.js +0 -151
  434. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts +0 -10
  435. package/dist/src/yaml/steps/java-home-version-spec.test.d.ts.map +0 -1
  436. package/dist/src/yaml/steps/java-home-version-spec.test.js +0 -58
  437. package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.d.ts +0 -2
  438. package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.d.ts.map +0 -1
  439. package/dist/src/yaml/steps/kotlin-metadata-compiles-on-a-daemon.test.js +0 -139
  440. package/dist/src/yaml/steps/linting.d.ts +0 -47
  441. package/dist/src/yaml/steps/linting.d.ts.map +0 -1
  442. package/dist/src/yaml/steps/linting.js +0 -148
  443. package/dist/src/yaml/steps/phase2.test.d.ts +0 -6
  444. package/dist/src/yaml/steps/phase2.test.d.ts.map +0 -1
  445. package/dist/src/yaml/steps/phase2.test.js +0 -197
  446. package/dist/src/yaml/steps/phase3.test.d.ts +0 -5
  447. package/dist/src/yaml/steps/phase3.test.d.ts.map +0 -1
  448. package/dist/src/yaml/steps/phase3.test.js +0 -144
  449. package/dist/src/yaml/steps/phase4.test.d.ts +0 -5
  450. package/dist/src/yaml/steps/phase4.test.d.ts.map +0 -1
  451. package/dist/src/yaml/steps/phase4.test.js +0 -166
  452. package/dist/src/yaml/steps/phase5.test.d.ts +0 -6
  453. package/dist/src/yaml/steps/phase5.test.d.ts.map +0 -1
  454. package/dist/src/yaml/steps/phase5.test.js +0 -263
  455. package/dist/src/yaml/steps/registry.d.ts +0 -88
  456. package/dist/src/yaml/steps/registry.d.ts.map +0 -1
  457. package/dist/src/yaml/steps/registry.js +0 -125
  458. package/dist/src/yaml/steps/registry.test.d.ts +0 -5
  459. package/dist/src/yaml/steps/registry.test.d.ts.map +0 -1
  460. package/dist/src/yaml/steps/registry.test.js +0 -235
  461. package/dist/src/yaml/steps/release.d.ts +0 -50
  462. package/dist/src/yaml/steps/release.d.ts.map +0 -1
  463. package/dist/src/yaml/steps/release.js +0 -154
  464. package/dist/src/yaml/steps/render-post-processor.d.ts +0 -100
  465. package/dist/src/yaml/steps/render-post-processor.d.ts.map +0 -1
  466. package/dist/src/yaml/steps/render-post-processor.js +0 -270
  467. package/dist/src/yaml/steps/render-post-processor.test.d.ts +0 -13
  468. package/dist/src/yaml/steps/render-post-processor.test.d.ts.map +0 -1
  469. package/dist/src/yaml/steps/render-post-processor.test.js +0 -220
  470. package/dist/src/yaml/steps/script.d.ts +0 -23
  471. package/dist/src/yaml/steps/script.d.ts.map +0 -1
  472. package/dist/src/yaml/steps/script.js +0 -63
  473. package/dist/src/yaml/steps/spec-validation.test.d.ts +0 -6
  474. package/dist/src/yaml/steps/spec-validation.test.d.ts.map +0 -1
  475. package/dist/src/yaml/steps/spec-validation.test.js +0 -130
  476. package/dist/src/yaml/steps/steps.test.d.ts +0 -6
  477. package/dist/src/yaml/steps/steps.test.d.ts.map +0 -1
  478. package/dist/src/yaml/steps/steps.test.js +0 -881
  479. package/dist/src/yaml/steps/structural-facts.d.ts +0 -992
  480. package/dist/src/yaml/steps/structural-facts.d.ts.map +0 -1
  481. package/dist/src/yaml/steps/structural-facts.js +0 -3276
  482. package/dist/src/yaml/steps/structural-facts.test.d.ts +0 -12
  483. package/dist/src/yaml/steps/structural-facts.test.d.ts.map +0 -1
  484. package/dist/src/yaml/steps/structural-facts.test.js +0 -3039
  485. package/dist/src/yaml/steps/test-config.d.ts +0 -5
  486. package/dist/src/yaml/steps/test-config.d.ts.map +0 -1
  487. package/dist/src/yaml/steps/test-config.js +0 -25
  488. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts +0 -28
  489. package/dist/src/yaml/steps/trim-align-corpus.test.d.ts.map +0 -1
  490. package/dist/src/yaml/steps/trim-align-corpus.test.js +0 -383
  491. package/dist/src/yaml/steps/trim-align.d.ts +0 -87
  492. package/dist/src/yaml/steps/trim-align.d.ts.map +0 -1
  493. package/dist/src/yaml/steps/trim-align.js +0 -367
  494. package/dist/src/yaml/steps/trim-align.test.d.ts +0 -11
  495. package/dist/src/yaml/steps/trim-align.test.d.ts.map +0 -1
  496. package/dist/src/yaml/steps/trim-align.test.js +0 -261
  497. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts +0 -66
  498. package/dist/src/yaml/steps/ui-fidelity-preview-android.d.ts.map +0 -1
  499. package/dist/src/yaml/steps/ui-fidelity-preview-android.js +0 -251
  500. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts +0 -13
  501. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.d.ts.map +0 -1
  502. package/dist/src/yaml/steps/ui-fidelity-preview-android.test.js +0 -302
  503. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts +0 -134
  504. package/dist/src/yaml/steps/ui-fidelity-preview.d.ts.map +0 -1
  505. package/dist/src/yaml/steps/ui-fidelity-preview.js +0 -173
  506. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts +0 -11
  507. package/dist/src/yaml/steps/ui-fidelity-preview.test.d.ts.map +0 -1
  508. package/dist/src/yaml/steps/ui-fidelity-preview.test.js +0 -210
  509. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts +0 -155
  510. package/dist/src/yaml/steps/ui-fidelity-render-android.d.ts.map +0 -1
  511. package/dist/src/yaml/steps/ui-fidelity-render-android.js +0 -1389
  512. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts +0 -2
  513. package/dist/src/yaml/steps/ui-fidelity-render-android.test.d.ts.map +0 -1
  514. package/dist/src/yaml/steps/ui-fidelity-render-android.test.js +0 -1106
  515. package/dist/src/yaml/steps/ui-fidelity-render.d.ts +0 -230
  516. package/dist/src/yaml/steps/ui-fidelity-render.d.ts.map +0 -1
  517. package/dist/src/yaml/steps/ui-fidelity-render.js +0 -1597
  518. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts +0 -18
  519. package/dist/src/yaml/steps/ui-fidelity-render.test.d.ts.map +0 -1
  520. package/dist/src/yaml/steps/ui-fidelity-render.test.js +0 -1871
  521. package/dist/src/yaml/steps/xcode-app-product.d.ts +0 -90
  522. package/dist/src/yaml/steps/xcode-app-product.d.ts.map +0 -1
  523. package/dist/src/yaml/steps/xcode-app-product.js +0 -247
  524. package/dist/src/yaml/steps/xcode-app-product.test.d.ts +0 -2
  525. package/dist/src/yaml/steps/xcode-app-product.test.d.ts.map +0 -1
  526. package/dist/src/yaml/steps/xcode-app-product.test.js +0 -202
  527. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts +0 -30
  528. package/dist/src/yaml/steps/xcode-derived-data.test.d.ts.map +0 -1
  529. package/dist/src/yaml/steps/xcode-derived-data.test.js +0 -279
  530. package/dist/src/yaml/steps/xcode-destination.d.ts +0 -47
  531. package/dist/src/yaml/steps/xcode-destination.d.ts.map +0 -1
  532. package/dist/src/yaml/steps/xcode-destination.js +0 -202
  533. package/dist/src/yaml/steps/xcode-destination.test.d.ts +0 -9
  534. package/dist/src/yaml/steps/xcode-destination.test.d.ts.map +0 -1
  535. package/dist/src/yaml/steps/xcode-destination.test.js +0 -227
  536. package/dist/src/yaml/steps/xcode-new.test.d.ts +0 -5
  537. package/dist/src/yaml/steps/xcode-new.test.d.ts.map +0 -1
  538. package/dist/src/yaml/steps/xcode-new.test.js +0 -211
  539. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts +0 -9
  540. package/dist/src/yaml/steps/xcode-resolve-retry.test.d.ts.map +0 -1
  541. package/dist/src/yaml/steps/xcode-resolve-retry.test.js +0 -146
  542. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts +0 -53
  543. package/dist/src/yaml/steps/xcode-simulator-archs.d.ts.map +0 -1
  544. package/dist/src/yaml/steps/xcode-simulator-archs.js +0 -98
  545. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts +0 -21
  546. package/dist/src/yaml/steps/xcode-simulator-archs.test.d.ts.map +0 -1
  547. package/dist/src/yaml/steps/xcode-simulator-archs.test.js +0 -155
  548. package/dist/src/yaml/steps/xcode.d.ts +0 -230
  549. package/dist/src/yaml/steps/xcode.d.ts.map +0 -1
  550. package/dist/src/yaml/steps/xcode.js +0 -1350
  551. package/dist/src/yaml/types.d.ts +0 -76
  552. package/dist/src/yaml/types.d.ts.map +0 -1
  553. package/dist/src/yaml/types.js +0 -5
  554. package/dist/src/yaml/validation-types.d.ts +0 -102
  555. package/dist/src/yaml/validation-types.d.ts.map +0 -1
  556. package/dist/src/yaml/validation-types.js +0 -8
  557. package/dist/src/yaml/yaml-updater.d.ts +0 -24
  558. package/dist/src/yaml/yaml-updater.d.ts.map +0 -1
  559. package/dist/src/yaml/yaml-updater.js +0 -128
@@ -1,331 +0,0 @@
1
- /**
2
- * Unit tests for Bitrise apk-info step
3
- */
4
- import { describe, test, expect } from '@jest/globals';
5
- import { BitriseApkInfoStepExecutor } from './bitrise-apk-info.js';
6
- describe('BitriseApkInfoStepExecutor', () => {
7
- const mockConfig = {
8
- artifactsDir: '/ci/artifacts',
9
- interpreters: {
10
- python: '/usr/bin/python3',
11
- ruby: '/usr/bin/ruby',
12
- node: '/usr/bin/node',
13
- bash: '/bin/bash',
14
- },
15
- maxConcurrentJobs: 4,
16
- paths: {
17
- buildsDir: '/ci/builds',
18
- cacheDir: '/ci/cache',
19
- derivedDataDir: '/ci/derived_data',
20
- },
21
- };
22
- describe('Basic functionality', () => {
23
- test('should create APK metadata extraction script with auto-detection', async () => {
24
- const executor = new BitriseApkInfoStepExecutor();
25
- const env = {};
26
- const inputs = {};
27
- const result = await executor.execute(inputs, env, mockConfig);
28
- expect(result.kind).toBe('script');
29
- expect(result.name).toBe('apk-info');
30
- expect(result.script).toContain('Extracting APK metadata');
31
- expect(result.script).toContain('Auto-detect APK file');
32
- });
33
- test('should include Bitrise mapping message', async () => {
34
- const executor = new BitriseApkInfoStepExecutor();
35
- const env = {};
36
- const inputs = {};
37
- const result = await executor.execute(inputs, env, mockConfig);
38
- expect(result.script).toContain('Bitrise apk-info step → CI Build APK metadata extraction');
39
- });
40
- });
41
- describe('APK path handling', () => {
42
- test('should use apk_path when provided', async () => {
43
- const executor = new BitriseApkInfoStepExecutor();
44
- const env = {};
45
- const inputs = {
46
- apk_path: './app/build/outputs/apk/release/app-release.apk',
47
- };
48
- const result = await executor.execute(inputs, env, mockConfig);
49
- expect(result.script).toContain('./app/build/outputs/apk/release/app-release.apk');
50
- expect(result.script).toContain('User specified APK path');
51
- });
52
- test('should error if specified APK file not found', async () => {
53
- const executor = new BitriseApkInfoStepExecutor();
54
- const env = {};
55
- const inputs = {
56
- apk_path: './nonexistent.apk',
57
- };
58
- const result = await executor.execute(inputs, env, mockConfig);
59
- expect(result.script).toContain('if [ ! -f "$APK_FILE" ]; then');
60
- expect(result.script).toContain('APK file not found');
61
- expect(result.script).toContain('exit 1');
62
- });
63
- });
64
- describe('APK auto-detection', () => {
65
- test('should auto-detect APK in build/outputs/apk/', async () => {
66
- const executor = new BitriseApkInfoStepExecutor();
67
- const env = {};
68
- const inputs = {};
69
- const result = await executor.execute(inputs, env, mockConfig);
70
- expect(result.script).toContain('if [ -d "build/outputs/apk" ]; then');
71
- expect(result.script).toContain('Auto-detect APK file in build/outputs/apk/');
72
- });
73
- test('should find most recently modified APK', async () => {
74
- const executor = new BitriseApkInfoStepExecutor();
75
- const env = {};
76
- const inputs = {};
77
- const result = await executor.execute(inputs, env, mockConfig);
78
- expect(result.script).toContain('find build/outputs/apk -name "*.apk"');
79
- expect(result.script).toContain('ls -t | head -n 1');
80
- expect(result.script).toContain('most recently modified');
81
- });
82
- test('should error if no APK files found', async () => {
83
- const executor = new BitriseApkInfoStepExecutor();
84
- const env = {};
85
- const inputs = {};
86
- const result = await executor.execute(inputs, env, mockConfig);
87
- expect(result.script).toContain('No APK files found in build/outputs/apk/');
88
- expect(result.script).toContain('exit 1');
89
- });
90
- test('should error if build/outputs/apk/ directory not found', async () => {
91
- const executor = new BitriseApkInfoStepExecutor();
92
- const env = {};
93
- const inputs = {};
94
- const result = await executor.execute(inputs, env, mockConfig);
95
- expect(result.script).toContain('build/outputs/apk/ directory not found');
96
- expect(result.script).toContain('Please specify apk_path input');
97
- });
98
- });
99
- describe('aapt/aapt2 detection', () => {
100
- test('should check for aapt2 first', async () => {
101
- const executor = new BitriseApkInfoStepExecutor();
102
- const env = {};
103
- const inputs = {};
104
- const result = await executor.execute(inputs, env, mockConfig);
105
- expect(result.script).toContain('if command -v aapt2 >/dev/null 2>&1; then');
106
- expect(result.script).toContain('AAPT_CMD="aapt2"');
107
- expect(result.script).toContain('Using aapt2 for APK analysis');
108
- });
109
- test('should fall back to aapt if aapt2 not found', async () => {
110
- const executor = new BitriseApkInfoStepExecutor();
111
- const env = {};
112
- const inputs = {};
113
- const result = await executor.execute(inputs, env, mockConfig);
114
- expect(result.script).toContain('elif command -v aapt >/dev/null 2>&1; then');
115
- expect(result.script).toContain('AAPT_CMD="aapt"');
116
- expect(result.script).toContain('Using aapt for APK analysis');
117
- });
118
- test('should error if neither aapt nor aapt2 found', async () => {
119
- const executor = new BitriseApkInfoStepExecutor();
120
- const env = {};
121
- const inputs = {};
122
- const result = await executor.execute(inputs, env, mockConfig);
123
- expect(result.script).toContain('aapt or aapt2 not found');
124
- expect(result.script).toContain('Install Android SDK build-tools');
125
- expect(result.script).toContain('exit 1');
126
- });
127
- });
128
- describe('Metadata extraction', () => {
129
- test('should run aapt dump badging', async () => {
130
- const executor = new BitriseApkInfoStepExecutor();
131
- const env = {};
132
- const inputs = {};
133
- const result = await executor.execute(inputs, env, mockConfig);
134
- expect(result.script).toContain('$AAPT_CMD dump badging "$APK_FILE"');
135
- expect(result.script).toContain('AAPT_OUTPUT=');
136
- });
137
- test('should extract package name', async () => {
138
- const executor = new BitriseApkInfoStepExecutor();
139
- const env = {};
140
- const inputs = {};
141
- const result = await executor.execute(inputs, env, mockConfig);
142
- expect(result.script).toContain('# Extract package name');
143
- expect(result.script).toContain('PACKAGE_NAME=');
144
- expect(result.script).toContain('echo "Package name: $PACKAGE_NAME"');
145
- });
146
- test('should extract version code', async () => {
147
- const executor = new BitriseApkInfoStepExecutor();
148
- const env = {};
149
- const inputs = {};
150
- const result = await executor.execute(inputs, env, mockConfig);
151
- expect(result.script).toContain('# Extract version code');
152
- expect(result.script).toContain('VERSION_CODE=');
153
- expect(result.script).toContain('echo "Version code: $VERSION_CODE"');
154
- });
155
- test('should extract version name', async () => {
156
- const executor = new BitriseApkInfoStepExecutor();
157
- const env = {};
158
- const inputs = {};
159
- const result = await executor.execute(inputs, env, mockConfig);
160
- expect(result.script).toContain('# Extract version name');
161
- expect(result.script).toContain('VERSION_NAME=');
162
- expect(result.script).toContain('echo "Version name: $VERSION_NAME"');
163
- });
164
- test('should extract minimum SDK version', async () => {
165
- const executor = new BitriseApkInfoStepExecutor();
166
- const env = {};
167
- const inputs = {};
168
- const result = await executor.execute(inputs, env, mockConfig);
169
- expect(result.script).toContain('# Extract minimum SDK version');
170
- expect(result.script).toContain('MIN_SDK=');
171
- expect(result.script).toContain('echo "Minimum SDK: $MIN_SDK"');
172
- });
173
- test('should extract target SDK version', async () => {
174
- const executor = new BitriseApkInfoStepExecutor();
175
- const env = {};
176
- const inputs = {};
177
- const result = await executor.execute(inputs, env, mockConfig);
178
- expect(result.script).toContain('# Extract target SDK version');
179
- expect(result.script).toContain('TARGET_SDK=');
180
- expect(result.script).toContain('echo "Target SDK: $TARGET_SDK"');
181
- });
182
- });
183
- describe('File size display', () => {
184
- test('should display file size in human-readable format', async () => {
185
- const executor = new BitriseApkInfoStepExecutor();
186
- const env = {};
187
- const inputs = {};
188
- const result = await executor.execute(inputs, env, mockConfig);
189
- expect(result.script).toContain('du -h "$APK_FILE"');
190
- expect(result.script).toContain('FILE_SIZE=');
191
- expect(result.script).toContain('echo "Size: $FILE_SIZE"');
192
- });
193
- test('should display file path', async () => {
194
- const executor = new BitriseApkInfoStepExecutor();
195
- const env = {};
196
- const inputs = {};
197
- const result = await executor.execute(inputs, env, mockConfig);
198
- expect(result.script).toContain('echo "File: $APK_FILE"');
199
- });
200
- });
201
- describe('Environment variable export', () => {
202
- test('should export APK_FILE_PATH', async () => {
203
- const executor = new BitriseApkInfoStepExecutor();
204
- const env = {};
205
- const inputs = {};
206
- const result = await executor.execute(inputs, env, mockConfig);
207
- expect(result.script).toContain('export APK_FILE_PATH="$APK_FILE"');
208
- expect(result.script).toContain('APK_FILE_PATH=$APK_FILE_PATH');
209
- });
210
- test('should export APK_PACKAGE_NAME', async () => {
211
- const executor = new BitriseApkInfoStepExecutor();
212
- const env = {};
213
- const inputs = {};
214
- const result = await executor.execute(inputs, env, mockConfig);
215
- expect(result.script).toContain('export APK_PACKAGE_NAME="$PACKAGE_NAME"');
216
- expect(result.script).toContain('APK_PACKAGE_NAME=$APK_PACKAGE_NAME');
217
- });
218
- test('should export APK_VERSION_CODE', async () => {
219
- const executor = new BitriseApkInfoStepExecutor();
220
- const env = {};
221
- const inputs = {};
222
- const result = await executor.execute(inputs, env, mockConfig);
223
- expect(result.script).toContain('export APK_VERSION_CODE="$VERSION_CODE"');
224
- expect(result.script).toContain('APK_VERSION_CODE=$APK_VERSION_CODE');
225
- });
226
- test('should export APK_VERSION_NAME', async () => {
227
- const executor = new BitriseApkInfoStepExecutor();
228
- const env = {};
229
- const inputs = {};
230
- const result = await executor.execute(inputs, env, mockConfig);
231
- expect(result.script).toContain('export APK_VERSION_NAME="$VERSION_NAME"');
232
- expect(result.script).toContain('APK_VERSION_NAME=$APK_VERSION_NAME');
233
- });
234
- test('should export APK_MIN_SDK', async () => {
235
- const executor = new BitriseApkInfoStepExecutor();
236
- const env = {};
237
- const inputs = {};
238
- const result = await executor.execute(inputs, env, mockConfig);
239
- expect(result.script).toContain('export APK_MIN_SDK="$MIN_SDK"');
240
- expect(result.script).toContain('APK_MIN_SDK=$APK_MIN_SDK');
241
- });
242
- test('should export APK_TARGET_SDK', async () => {
243
- const executor = new BitriseApkInfoStepExecutor();
244
- const env = {};
245
- const inputs = {};
246
- const result = await executor.execute(inputs, env, mockConfig);
247
- expect(result.script).toContain('export APK_TARGET_SDK="$TARGET_SDK"');
248
- expect(result.script).toContain('APK_TARGET_SDK=$APK_TARGET_SDK');
249
- });
250
- test('should display exported variables', async () => {
251
- const executor = new BitriseApkInfoStepExecutor();
252
- const env = {};
253
- const inputs = {};
254
- const result = await executor.execute(inputs, env, mockConfig);
255
- expect(result.script).toContain('Exported environment variables:');
256
- expect(result.script).toContain('Exporting metadata as environment variables');
257
- });
258
- });
259
- describe('Output formatting', () => {
260
- test('should include formatted APK information header', async () => {
261
- const executor = new BitriseApkInfoStepExecutor();
262
- const env = {};
263
- const inputs = {};
264
- const result = await executor.execute(inputs, env, mockConfig);
265
- expect(result.script).toContain('APK Information');
266
- expect(result.script).toContain('╔═══════════════════════════════════════════════╗');
267
- expect(result.script).toContain('╚═══════════════════════════════════════════════╝');
268
- });
269
- });
270
- describe('Script structure', () => {
271
- test('should include bash error handling directives', async () => {
272
- const executor = new BitriseApkInfoStepExecutor();
273
- const env = {};
274
- const inputs = {};
275
- const result = await executor.execute(inputs, env, mockConfig);
276
- expect(result.script).toContain('#!/bin/bash');
277
- expect(result.script).toContain('set -e');
278
- expect(result.script).toContain('set -o pipefail');
279
- });
280
- test('should include informative messages', async () => {
281
- const executor = new BitriseApkInfoStepExecutor();
282
- const env = {};
283
- const inputs = {};
284
- const result = await executor.execute(inputs, env, mockConfig);
285
- expect(result.script).toContain('Extracting APK metadata');
286
- expect(result.script).toContain('APK metadata extracted successfully');
287
- });
288
- });
289
- describe('Integration scenarios', () => {
290
- test('should work with custom APK path', async () => {
291
- const executor = new BitriseApkInfoStepExecutor();
292
- const env = {};
293
- const inputs = {
294
- apk_path: './custom/path/my-app.apk',
295
- };
296
- const result = await executor.execute(inputs, env, mockConfig);
297
- expect(result.kind).toBe('script');
298
- expect(result.script).toContain('./custom/path/my-app.apk');
299
- expect(result.script).toContain('aapt');
300
- });
301
- test('should work with minimal configuration (auto-detect)', async () => {
302
- const executor = new BitriseApkInfoStepExecutor();
303
- const env = {};
304
- const inputs = {};
305
- const result = await executor.execute(inputs, env, mockConfig);
306
- expect(result.kind).toBe('script');
307
- expect(result.script).toContain('Auto-detect APK file');
308
- expect(result.script).toContain('build/outputs/apk');
309
- });
310
- });
311
- describe('Bitrise compatibility', () => {
312
- test('should map to CI Build APK metadata extraction pattern', async () => {
313
- const executor = new BitriseApkInfoStepExecutor();
314
- const env = {};
315
- const inputs = {};
316
- const result = await executor.execute(inputs, env, mockConfig);
317
- expect(result.script).toContain('CI Build APK metadata extraction');
318
- });
319
- test('should support Bitrise input naming conventions', async () => {
320
- const executor = new BitriseApkInfoStepExecutor();
321
- const env = {};
322
- const inputs = {
323
- apk_path: './app.apk',
324
- };
325
- const result = await executor.execute(inputs, env, mockConfig);
326
- expect(result.script).toBeDefined();
327
- expect(result.kind).toBe('script');
328
- });
329
- });
330
- });
331
- //# sourceMappingURL=bitrise-apk-info.test.js.map
@@ -1,49 +0,0 @@
1
- /**
2
- * Bitrise slack step implementation
3
- * Maps Bitrise slack@* to CI Build Slack notification
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 slack step
10
- */
11
- export interface BitriseSlackInputs {
12
- webhook_url?: string;
13
- text?: string;
14
- message?: string;
15
- channel?: string;
16
- from_username?: string;
17
- icon_emoji?: string;
18
- icon_url?: string;
19
- color?: string;
20
- pretext?: string;
21
- author_name?: string;
22
- title?: string;
23
- title_link?: string;
24
- message_on_error?: string;
25
- fields?: string;
26
- buttons?: string;
27
- footer?: string;
28
- footer_icon?: string;
29
- timestamp?: string;
30
- is_debug_mode?: string;
31
- }
32
- /**
33
- * Bitrise slack step executor (FR-5)
34
- * Sends Slack notifications via webhook
35
- *
36
- * Supports Bitrise step versions: slack@1, @2, @3, @4
37
- */
38
- export declare class BitriseSlackStepExecutor extends BaseStepExecutor {
39
- isSkippedInLocalMode(): boolean;
40
- getValidationRequirements(inputs: BitriseSlackInputs, env: Record<string, string>, config: CIConfig): ValidationRequirement[];
41
- execute(inputs: BitriseSlackInputs, env: Record<string, string>, config: CIConfig): Promise<StepDef>;
42
- /**
43
- * Escapes a string for safe inclusion in JSON
44
- * @param str String to escape
45
- * @returns Escaped string safe for JSON
46
- */
47
- private escapeJson;
48
- }
49
- //# sourceMappingURL=bitrise-slack.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"bitrise-slack.d.ts","sourceRoot":"","sources":["../../../../src/yaml/steps/bitrise-slack.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AAEpE;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;CACxB;AAED;;;;;GAKG;AACH,qBAAa,wBAAyB,SAAQ,gBAAgB;IAC5D,oBAAoB,IAAI,OAAO;IAI/B,yBAAyB,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,qBAAqB,EAAE;IAsDvH,OAAO,CAAC,MAAM,EAAE,kBAAkB,EAAE,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC;IA8O1G;;;;OAIG;IACH,OAAO,CAAC,UAAU;CAQnB"}
@@ -1,280 +0,0 @@
1
- /**
2
- * Bitrise slack step implementation
3
- * Maps Bitrise slack@* to CI Build Slack notification
4
- */
5
- import { BaseStepExecutor } from './base.js';
6
- import { MissingEnvironmentVariableError } from '../env-resolver.js';
7
- /**
8
- * Bitrise slack step executor (FR-5)
9
- * Sends Slack notifications via webhook
10
- *
11
- * Supports Bitrise step versions: slack@1, @2, @3, @4
12
- */
13
- export class BitriseSlackStepExecutor extends BaseStepExecutor {
14
- isSkippedInLocalMode() {
15
- return true;
16
- }
17
- getValidationRequirements(inputs, env, config) {
18
- if (config.local)
19
- return [];
20
- const requirements = [];
21
- const webhookUrl = this.getInput(inputs, 'webhook_url', '') || env.SLACK_WEBHOOK_URL || '';
22
- if (!webhookUrl) {
23
- requirements.push({
24
- category: 'environment',
25
- name: 'SLACK_WEBHOOK_URL',
26
- description: 'Slack webhook URL for sending build notifications',
27
- timing: 'pre-execution',
28
- severity: 'error',
29
- hint: 'Slack webhook URL for sending build notifications to your Slack workspace.\n\n' +
30
- 'Expected format:\n' +
31
- ' ┌────────────────────────────────────────────────────────┐\n' +
32
- ' │ https://hooks.slack.com/services/T00000000/B00000000/ │\n' +
33
- ' │ XXXXXXXXXXXXXXXXXXXXXXXX │\n' +
34
- ' └────────────────────────────────────────────────────────┘\n\n' +
35
- 'How to get it:\n' +
36
- ' • Visit: https://api.slack.com/messaging/webhooks\n' +
37
- ' • Or: Slack App Settings → Incoming Webhooks\n' +
38
- ' • Create a new webhook for your channel\n' +
39
- ' • Copy the webhook URL',
40
- check: async () => ({ passed: false, message: 'SLACK_WEBHOOK_URL is not set' }),
41
- });
42
- }
43
- const channel = env.SLACK_CHANNEL || this.getInput(inputs, 'channel', '');
44
- if (!channel) {
45
- requirements.push({
46
- category: 'environment',
47
- name: 'SLACK_CHANNEL',
48
- description: 'Slack channel to post notifications to (e.g. #builds)',
49
- timing: 'pre-execution',
50
- severity: 'error',
51
- hint: 'Slack channel to post the build notification to (e.g. #builds or #ci-alerts)',
52
- check: async () => ({ passed: false, message: 'SLACK_CHANNEL is not set (optional)' }),
53
- });
54
- }
55
- // CIBUILD_PUBLIC_INSTALL_PAGE_URL is auto-generated at runtime by a distribution step.
56
- // Declare it as runtime so auto-discovery doesn't prompt for it — slack handles it gracefully.
57
- requirements.push({
58
- category: 'environment',
59
- name: 'CIBUILD_PUBLIC_INSTALL_PAGE_URL',
60
- description: 'Public install page URL (auto-generated at runtime)',
61
- timing: 'runtime',
62
- severity: 'info',
63
- });
64
- return requirements;
65
- }
66
- async execute(inputs, env, config) {
67
- const stepName = 'slack';
68
- if (config.local) {
69
- const script = this.createBashScriptFromCommands(['echo "⏭️ slack: skipped in local mode"'], stepName);
70
- return this.createScriptStep(script, stepName);
71
- }
72
- // Get webhook URL - this is required (FR-5.2)
73
- const webhookUrl = this.getInput(inputs, 'webhook_url', '') || env.SLACK_WEBHOOK_URL || '';
74
- if (!webhookUrl) {
75
- throw new MissingEnvironmentVariableError('SLACK_WEBHOOK_URL', stepName, 'Slack webhook URL for sending build notifications to your Slack workspace.\n\n' +
76
- 'Expected format:\n' +
77
- ' ┌────────────────────────────────────────────────────────┐\n' +
78
- ' │ https://hooks.slack.com/services/T00000000/B00000000/ │\n' +
79
- ' │ XXXXXXXXXXXXXXXXXXXXXXXX │\n' +
80
- ' └────────────────────────────────────────────────────────┘\n\n' +
81
- 'How to get it:\n' +
82
- ' • Visit: https://api.slack.com/messaging/webhooks\n' +
83
- ' • Or: Slack App Settings → Incoming Webhooks\n' +
84
- ' • Create a new webhook for your channel\n' +
85
- ' • Copy the webhook URL');
86
- }
87
- // Get message content - prefer 'text' over 'message' (FR-5.2)
88
- let messageText = this.getInput(inputs, 'text', '') || this.getInput(inputs, 'message', '') || 'CI Build build notification';
89
- // Get optional formatting fields - allow env var overrides (FR-5.2)
90
- // Environment variables can override YAML inputs for runtime configuration
91
- const channel = env.SLACK_CHANNEL || this.getInput(inputs, 'channel', '');
92
- const username = env.SLACK_USERNAME || this.getInput(inputs, 'from_username', 'CI Build');
93
- const iconEmoji = env.SLACK_ICON_EMOJI || this.getInput(inputs, 'icon_emoji', '');
94
- const iconUrl = env.SLACK_ICON_URL || this.getInput(inputs, 'icon_url', '');
95
- const color = env.SLACK_COLOR || this.getInput(inputs, 'color', 'good');
96
- const pretext = env.SLACK_PRETEXT || this.getInput(inputs, 'pretext', '');
97
- const authorName = env.SLACK_AUTHOR_NAME || this.getInput(inputs, 'author_name', '');
98
- const title = env.SLACK_TITLE || this.getInput(inputs, 'title', '');
99
- const titleLink = env.SLACK_TITLE_LINK || this.getInput(inputs, 'title_link', '');
100
- const footer = env.SLACK_FOOTER || this.getInput(inputs, 'footer', '');
101
- const footerIcon = env.SLACK_FOOTER_ICON || this.getInput(inputs, 'footer_icon', '');
102
- const timestamp = this.getInput(inputs, 'timestamp', '');
103
- const fields = this.getInput(inputs, 'fields', '');
104
- const buttons = this.getInput(inputs, 'buttons', '');
105
- // Debug mode
106
- const isDebugMode = this.getInput(inputs, 'is_debug_mode', '');
107
- const commands = [];
108
- commands.push('# Bitrise slack step → CI Build Slack notification');
109
- commands.push('echo "📋 Sending Slack notification..."');
110
- commands.push('');
111
- // Convert buttons to clickable links in bash (where envman variables are available)
112
- // Buttons format: "Label|URL\nLabel|URL"
113
- commands.push('# Parse buttons and interpolate URLs with current environment');
114
- commands.push('BUTTON_LINKS=""');
115
- if (buttons) {
116
- // Pass buttons as base64 to avoid escaping issues
117
- const buttonsB64 = Buffer.from(buttons).toString('base64');
118
- commands.push(`BUTTONS_DATA=$(echo "${buttonsB64}" | base64 -d)`);
119
- commands.push('');
120
- commands.push('# Process each button line');
121
- commands.push('while IFS="|" read -r label url; do');
122
- commands.push(' [ -z "$label" ] && continue');
123
- commands.push(' ');
124
- commands.push(' # Handle different URL formats:');
125
- commands.push(' # 1. If empty (variable was interpolated to empty at YAML parse time), try common variables');
126
- commands.push(' # 2. If starts with http/https, use directly (may contain ${} to interpolate)');
127
- commands.push(' # 3. Otherwise, try to expand it as a variable reference');
128
- commands.push(' url_interpolated=""');
129
- commands.push(' ');
130
- commands.push(' if [ -z "$url" ]; then');
131
- commands.push(' # Empty URL - check if this is the Install button which needs CIBUILD_PUBLIC_INSTALL_PAGE_URL');
132
- commands.push(' if [ "$label" = "Install" ] && [ -n "$CIBUILD_PUBLIC_INSTALL_PAGE_URL" ]; then');
133
- commands.push(' url_interpolated="$CIBUILD_PUBLIC_INSTALL_PAGE_URL"');
134
- commands.push(' fi');
135
- commands.push(' elif [[ "$url" =~ ^https?:// ]]; then');
136
- commands.push(' # It\'s a URL - interpolate any ${VAR} in it');
137
- commands.push(' url_interpolated=$(eval echo "$url")');
138
- commands.push(' else');
139
- commands.push(' # Not a URL - might be a variable name, try to expand it');
140
- commands.push(' url_interpolated=$(eval echo "$url")');
141
- commands.push(' fi');
142
- commands.push(' ');
143
- commands.push(' # Only add button if URL is not empty');
144
- commands.push(' if [ -n "$url_interpolated" ]; then');
145
- commands.push(' # Slack markdown format: <url|label>');
146
- commands.push(' if [ -z "$BUTTON_LINKS" ]; then');
147
- commands.push(' BUTTON_LINKS="<$url_interpolated|$label>"');
148
- commands.push(' else');
149
- commands.push(' BUTTON_LINKS="$BUTTON_LINKS • <$url_interpolated|$label>"');
150
- commands.push(' fi');
151
- commands.push(' fi');
152
- commands.push('done <<< "$BUTTONS_DATA"');
153
- commands.push('');
154
- }
155
- // Append button links to message text
156
- commands.push('# Append button links to message text if any');
157
- commands.push(`SLACK_MESSAGE_TEXT="${this.escapeJson(messageText)}"`);
158
- commands.push('if [ -n "$BUTTON_LINKS" ]; then');
159
- commands.push(' # Escape button links for JSON (backslashes and quotes)');
160
- commands.push(' BUTTON_LINKS_ESCAPED=$(echo "$BUTTON_LINKS" | sed \'s/\\\\/\\\\\\\\/g\' | sed \'s/"/\\\\"/g\')');
161
- commands.push(' SLACK_MESSAGE_TEXT="$SLACK_MESSAGE_TEXT\\\\n\\\\n$BUTTON_LINKS_ESCAPED"');
162
- commands.push('fi');
163
- commands.push('');
164
- // Build JSON payload (FR-5.3, FR-5.4)
165
- commands.push('# Build Slack message JSON payload');
166
- commands.push('cat > /tmp/slack-payload.json << SLACK_EOF');
167
- // Start JSON object
168
- const jsonLines = ['{'];
169
- // Add basic fields
170
- if (channel) {
171
- jsonLines.push(` "channel": "${this.escapeJson(channel)}",`);
172
- }
173
- jsonLines.push(` "username": "${this.escapeJson(username)}",`);
174
- if (iconEmoji) {
175
- jsonLines.push(` "icon_emoji": "${this.escapeJson(iconEmoji)}",`);
176
- }
177
- if (iconUrl) {
178
- jsonLines.push(` "icon_url": "${this.escapeJson(iconUrl)}",`);
179
- }
180
- // Add attachment with message content
181
- jsonLines.push(' "attachments": [');
182
- jsonLines.push(' {');
183
- jsonLines.push(` "color": "${this.escapeJson(color)}",`);
184
- if (pretext) {
185
- jsonLines.push(` "pretext": "${this.escapeJson(pretext)}",`);
186
- }
187
- if (authorName) {
188
- jsonLines.push(` "author_name": "${this.escapeJson(authorName)}",`);
189
- }
190
- if (title) {
191
- jsonLines.push(` "title": "${this.escapeJson(title)}",`);
192
- }
193
- if (titleLink) {
194
- jsonLines.push(` "title_link": "${this.escapeJson(titleLink)}",`);
195
- }
196
- // Use SLACK_MESSAGE_TEXT variable which includes button links
197
- jsonLines.push(` "text": "$SLACK_MESSAGE_TEXT",`);
198
- if (footer) {
199
- jsonLines.push(` "footer": "${this.escapeJson(footer)}",`);
200
- }
201
- if (footerIcon) {
202
- jsonLines.push(` "footer_icon": "${this.escapeJson(footerIcon)}",`);
203
- }
204
- if (timestamp) {
205
- jsonLines.push(` "ts": ${timestamp},`);
206
- }
207
- // Add fields if provided (FR-5.2)
208
- if (fields) {
209
- jsonLines.push(` "fields": ${fields},`);
210
- }
211
- // Note: Buttons/actions are not supported in Slack incoming webhooks
212
- // They require the interactive messages API which is different from webhooks
213
- // Commenting out to avoid 400 errors
214
- // if (buttons) {
215
- // jsonLines.push(` "actions": ${buttons},`);
216
- // }
217
- // Remove trailing comma from last line
218
- const lastLine = jsonLines[jsonLines.length - 1];
219
- if (lastLine.endsWith(',')) {
220
- jsonLines[jsonLines.length - 1] = lastLine.slice(0, -1);
221
- }
222
- jsonLines.push(' }');
223
- jsonLines.push(' ]');
224
- jsonLines.push('}');
225
- commands.push(jsonLines.join('\n'));
226
- commands.push('SLACK_EOF');
227
- commands.push('');
228
- // Show payload in debug mode
229
- if (isDebugMode === 'true' || isDebugMode === 'yes') {
230
- commands.push('# Debug: Display payload');
231
- commands.push('echo "Slack payload:"');
232
- commands.push('cat /tmp/slack-payload.json');
233
- commands.push('echo ""');
234
- commands.push('');
235
- }
236
- // Send to Slack webhook (FR-5.3)
237
- commands.push('# Send POST request to Slack webhook');
238
- commands.push(`SLACK_RESPONSE=$(curl -X POST "${this.escapeBash(webhookUrl)}" \\`);
239
- commands.push(' -H "Content-Type: application/json" \\');
240
- commands.push(' -d @/tmp/slack-payload.json \\');
241
- commands.push(' -w "\\n%{http_code}" \\');
242
- commands.push(' --silent)');
243
- commands.push('');
244
- commands.push('# Extract HTTP status code and response body');
245
- commands.push('HTTP_CODE=$(echo "$SLACK_RESPONSE" | tail -n1)');
246
- commands.push('RESPONSE_BODY=$(echo "$SLACK_RESPONSE" | sed \'$d\')');
247
- commands.push('');
248
- // Check result
249
- commands.push('if [ "$HTTP_CODE" = "200" ] || [ "$RESPONSE_BODY" = "ok" ]; then');
250
- commands.push(' echo "✅ Slack notification sent successfully"');
251
- commands.push('else');
252
- commands.push(' echo "❌ Failed to send Slack notification (HTTP $HTTP_CODE)"');
253
- commands.push(' echo "Response: $RESPONSE_BODY"');
254
- commands.push(' echo ""');
255
- commands.push(' echo "Payload that was sent:"');
256
- commands.push(' cat /tmp/slack-payload.json');
257
- commands.push(' exit 1');
258
- commands.push('fi');
259
- commands.push('');
260
- // Cleanup
261
- commands.push('# Cleanup temporary file');
262
- commands.push('rm -f /tmp/slack-payload.json');
263
- const script = this.createBashScriptFromCommands(commands, stepName);
264
- return this.createScriptStep(script, stepName);
265
- }
266
- /**
267
- * Escapes a string for safe inclusion in JSON
268
- * @param str String to escape
269
- * @returns Escaped string safe for JSON
270
- */
271
- escapeJson(str) {
272
- return str
273
- .replace(/\\/g, '\\\\') // Backslash
274
- .replace(/"/g, '\\"') // Quote
275
- .replace(/\n/g, '\\n') // Newline
276
- .replace(/\r/g, '\\r') // Carriage return
277
- .replace(/\t/g, '\\t'); // Tab
278
- }
279
- }
280
- //# sourceMappingURL=bitrise-slack.js.map