apify-test-tools 0.10.2-beta.2 → 0.10.2-beta.20

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 (275) hide show
  1. package/.gitattributes +1 -0
  2. package/.github/actionlint.yaml +11 -0
  3. package/.github/actions/checkout-restore-dependencies/action.yaml +58 -6
  4. package/.github/cli/apify-test-tools.mjs +135 -142
  5. package/.github/scripts/mask-config-secrets.sh +17 -0
  6. package/.github/scripts/run-with-apify-tokens.mjs +63 -103
  7. package/.github/workflows/_check_code.yaml +5 -21
  8. package/.github/workflows/_move_major_tag.yaml +2 -2
  9. package/.github/workflows/public_platform-tests-claude-investigate-and-fix.yaml +89 -8
  10. package/.github/workflows/public_platform-tests.yaml +68 -30
  11. package/.github/workflows/public_pr-build-test.yaml +77 -38
  12. package/.github/workflows/public_push-build-latest.yaml +49 -11
  13. package/.github/workflows/public_review.yaml +5 -4
  14. package/.github/workflows/public_stale-issues.yaml +51 -0
  15. package/.husky/pre-commit +4 -4
  16. package/.prettierignore +2 -1
  17. package/CHANGELOG.md +22 -0
  18. package/CONTRIBUTING.md +117 -17
  19. package/README.md +221 -595
  20. package/bin/actor-ids.ts +41 -0
  21. package/bin/affected-actors.ts +211 -0
  22. package/bin/build-from-local.ts +19 -1
  23. package/bin/build.ts +105 -39
  24. package/bin/diff-changes.ts +69 -36
  25. package/bin/diff-json-schema.ts +5 -6
  26. package/bin/git.ts +73 -175
  27. package/bin/main.ts +142 -189
  28. package/bin/notify.ts +198 -0
  29. package/bin/run-tests.ts +167 -0
  30. package/bin/slack.ts +16 -76
  31. package/bin/stdin-input.ts +156 -0
  32. package/bin/test-files-glob.ts +126 -0
  33. package/bin/test-report.ts +141 -140
  34. package/bin/types.ts +4 -7
  35. package/bin/utils/config/load-config.ts +20 -2
  36. package/bin/utils/config/parser.ts +40 -8
  37. package/bin/utils/config/structures/grouped.ts +2 -2
  38. package/bin/utils/config/structures/legacy.ts +1 -1
  39. package/dist/bin/actor-ids.d.ts +15 -0
  40. package/dist/bin/actor-ids.d.ts.map +1 -0
  41. package/dist/bin/actor-ids.js +30 -0
  42. package/dist/bin/actor-ids.js.map +1 -0
  43. package/dist/bin/affected-actors.d.ts +55 -0
  44. package/dist/bin/affected-actors.d.ts.map +1 -0
  45. package/dist/bin/affected-actors.js +142 -0
  46. package/dist/bin/affected-actors.js.map +1 -0
  47. package/dist/bin/build-from-local.d.ts +2 -1
  48. package/dist/bin/build-from-local.d.ts.map +1 -1
  49. package/dist/bin/build-from-local.js +6 -2
  50. package/dist/bin/build-from-local.js.map +1 -1
  51. package/dist/bin/build.d.ts +18 -5
  52. package/dist/bin/build.d.ts.map +1 -1
  53. package/dist/bin/build.js +74 -24
  54. package/dist/bin/build.js.map +1 -1
  55. package/dist/bin/diff-changes.d.ts +21 -5
  56. package/dist/bin/diff-changes.d.ts.map +1 -1
  57. package/dist/bin/diff-changes.js +41 -28
  58. package/dist/bin/diff-changes.js.map +1 -1
  59. package/dist/bin/diff-json-schema.d.ts +2 -2
  60. package/dist/bin/diff-json-schema.d.ts.map +1 -1
  61. package/dist/bin/diff-json-schema.js +1 -4
  62. package/dist/bin/diff-json-schema.js.map +1 -1
  63. package/dist/bin/git.d.ts +26 -34
  64. package/dist/bin/git.d.ts.map +1 -1
  65. package/dist/bin/git.js +60 -143
  66. package/dist/bin/git.js.map +1 -1
  67. package/dist/bin/main.js +126 -140
  68. package/dist/bin/main.js.map +1 -1
  69. package/dist/bin/notify.d.ts +35 -0
  70. package/dist/bin/notify.d.ts.map +1 -0
  71. package/dist/bin/notify.js +131 -0
  72. package/dist/bin/notify.js.map +1 -0
  73. package/dist/bin/run-tests.d.ts +21 -0
  74. package/dist/bin/run-tests.d.ts.map +1 -0
  75. package/dist/bin/run-tests.js +138 -0
  76. package/dist/bin/run-tests.js.map +1 -0
  77. package/dist/bin/slack.d.ts +2 -14
  78. package/dist/bin/slack.d.ts.map +1 -1
  79. package/dist/bin/slack.js +17 -46
  80. package/dist/bin/slack.js.map +1 -1
  81. package/dist/bin/stdin-input.d.ts +79 -0
  82. package/dist/bin/stdin-input.d.ts.map +1 -0
  83. package/dist/bin/stdin-input.js +124 -0
  84. package/dist/bin/stdin-input.js.map +1 -0
  85. package/dist/bin/test-files-glob.d.ts +18 -0
  86. package/dist/bin/test-files-glob.d.ts.map +1 -0
  87. package/dist/bin/test-files-glob.js +108 -0
  88. package/dist/bin/test-files-glob.js.map +1 -0
  89. package/dist/bin/test-report.d.ts +69 -8
  90. package/dist/bin/test-report.d.ts.map +1 -1
  91. package/dist/bin/test-report.js +76 -67
  92. package/dist/bin/test-report.js.map +1 -1
  93. package/dist/bin/types.d.ts +4 -7
  94. package/dist/bin/types.d.ts.map +1 -1
  95. package/dist/bin/utils/config/load-config.d.ts +8 -0
  96. package/dist/bin/utils/config/load-config.d.ts.map +1 -1
  97. package/dist/bin/utils/config/load-config.js +14 -1
  98. package/dist/bin/utils/config/load-config.js.map +1 -1
  99. package/dist/bin/utils/config/parser.d.ts +15 -2
  100. package/dist/bin/utils/config/parser.d.ts.map +1 -1
  101. package/dist/bin/utils/config/parser.js +29 -8
  102. package/dist/bin/utils/config/parser.js.map +1 -1
  103. package/dist/bin/utils/config/structures/grouped.js +2 -2
  104. package/dist/bin/utils/config/structures/grouped.js.map +1 -1
  105. package/dist/bin/utils/config/structures/legacy.js +1 -1
  106. package/dist/bin/utils/config/structures/legacy.js.map +1 -1
  107. package/dist/lib/extend-expect.d.ts.map +1 -1
  108. package/dist/lib/extend-expect.js +37 -218
  109. package/dist/lib/extend-expect.js.map +1 -1
  110. package/dist/lib/lib.d.ts +1 -5
  111. package/dist/lib/lib.d.ts.map +1 -1
  112. package/dist/lib/lib.js +19 -31
  113. package/dist/lib/lib.js.map +1 -1
  114. package/dist/lib/run-checks.d.ts +14 -0
  115. package/dist/lib/run-checks.d.ts.map +1 -0
  116. package/dist/lib/run-checks.js +82 -0
  117. package/dist/lib/run-checks.js.map +1 -0
  118. package/dist/lib/run-test-result.d.ts +3 -6
  119. package/dist/lib/run-test-result.d.ts.map +1 -1
  120. package/dist/lib/run-test-result.js +41 -54
  121. package/dist/lib/run-test-result.js.map +1 -1
  122. package/dist/test/bundle/cli-bundle.test.js +76 -56
  123. package/dist/test/bundle/cli-bundle.test.js.map +1 -1
  124. package/dist/test/bundle/token-wrapper.test.d.ts +2 -0
  125. package/dist/test/bundle/token-wrapper.test.d.ts.map +1 -0
  126. package/dist/test/bundle/token-wrapper.test.js +80 -0
  127. package/dist/test/bundle/token-wrapper.test.js.map +1 -0
  128. package/dist/test/e2e/cli-bundle.e2e.test.js +33 -68
  129. package/dist/test/e2e/cli-bundle.e2e.test.js.map +1 -1
  130. package/dist/test/e2e/git-build-release.e2e.test.d.ts +2 -0
  131. package/dist/test/e2e/git-build-release.e2e.test.d.ts.map +1 -0
  132. package/dist/test/e2e/git-build-release.e2e.test.js +87 -0
  133. package/dist/test/e2e/git-build-release.e2e.test.js.map +1 -0
  134. package/dist/test/e2e/helpers.d.ts +37 -0
  135. package/dist/test/e2e/helpers.d.ts.map +1 -0
  136. package/dist/test/e2e/helpers.js +57 -0
  137. package/dist/test/e2e/helpers.js.map +1 -0
  138. package/dist/test/unit/bin/actor-filtering.test.js +7 -0
  139. package/dist/test/unit/bin/actor-filtering.test.js.map +1 -1
  140. package/dist/test/unit/bin/actor-ids.test.d.ts +2 -0
  141. package/dist/test/unit/bin/actor-ids.test.d.ts.map +1 -0
  142. package/dist/test/unit/bin/actor-ids.test.js +40 -0
  143. package/dist/test/unit/bin/actor-ids.test.js.map +1 -0
  144. package/dist/test/unit/bin/affected-actors-cli.test.d.ts +2 -0
  145. package/dist/test/unit/bin/affected-actors-cli.test.d.ts.map +1 -0
  146. package/dist/test/unit/bin/affected-actors-cli.test.js +224 -0
  147. package/dist/test/unit/bin/affected-actors-cli.test.js.map +1 -0
  148. package/dist/test/unit/bin/affected-actors.test.d.ts +2 -0
  149. package/dist/test/unit/bin/affected-actors.test.d.ts.map +1 -0
  150. package/dist/test/unit/bin/affected-actors.test.js +153 -0
  151. package/dist/test/unit/bin/affected-actors.test.js.map +1 -0
  152. package/dist/test/unit/bin/build-cli.test.d.ts +2 -0
  153. package/dist/test/unit/bin/build-cli.test.d.ts.map +1 -0
  154. package/dist/test/unit/bin/build-cli.test.js +49 -0
  155. package/dist/test/unit/bin/build-cli.test.js.map +1 -0
  156. package/dist/test/unit/bin/build-from-local.test.js +12 -0
  157. package/dist/test/unit/bin/build-from-local.test.js.map +1 -1
  158. package/dist/test/unit/bin/build.test.js +116 -6
  159. package/dist/test/unit/bin/build.test.js.map +1 -1
  160. package/dist/test/unit/bin/compiled-cli.d.ts +6 -0
  161. package/dist/test/unit/bin/compiled-cli.d.ts.map +1 -0
  162. package/dist/test/unit/bin/compiled-cli.js +23 -0
  163. package/dist/test/unit/bin/compiled-cli.js.map +1 -0
  164. package/dist/test/unit/bin/diff-changes.test.js +168 -114
  165. package/dist/test/unit/bin/diff-changes.test.js.map +1 -1
  166. package/dist/test/unit/bin/diff.test.js +25 -28
  167. package/dist/test/unit/bin/diff.test.js.map +1 -1
  168. package/dist/test/unit/bin/git.test.js +67 -288
  169. package/dist/test/unit/bin/git.test.js.map +1 -1
  170. package/dist/test/unit/bin/notify.test.d.ts +2 -0
  171. package/dist/test/unit/bin/notify.test.d.ts.map +1 -0
  172. package/dist/test/unit/bin/notify.test.js +222 -0
  173. package/dist/test/unit/bin/notify.test.js.map +1 -0
  174. package/dist/test/unit/bin/stdin-input.test.d.ts +2 -0
  175. package/dist/test/unit/bin/stdin-input.test.d.ts.map +1 -0
  176. package/dist/test/unit/bin/stdin-input.test.js +92 -0
  177. package/dist/test/unit/bin/stdin-input.test.js.map +1 -0
  178. package/dist/test/unit/bin/test-cli.test.d.ts +2 -0
  179. package/dist/test/unit/bin/test-cli.test.d.ts.map +1 -0
  180. package/dist/test/unit/bin/test-cli.test.js +146 -0
  181. package/dist/test/unit/bin/test-cli.test.js.map +1 -0
  182. package/dist/test/unit/bin/test-files-glob.test.d.ts +2 -0
  183. package/dist/test/unit/bin/test-files-glob.test.d.ts.map +1 -0
  184. package/dist/test/unit/bin/test-files-glob.test.js +102 -0
  185. package/dist/test/unit/bin/test-files-glob.test.js.map +1 -0
  186. package/dist/test/unit/bin/test-report.test.d.ts +2 -0
  187. package/dist/test/unit/bin/test-report.test.d.ts.map +1 -0
  188. package/dist/test/unit/bin/test-report.test.js +100 -0
  189. package/dist/test/unit/bin/test-report.test.js.map +1 -0
  190. package/dist/test/unit/bin/utils/config/load-config.test.js +19 -1
  191. package/dist/test/unit/bin/utils/config/load-config.test.js.map +1 -1
  192. package/dist/test/unit/bin/utils/config/parser.test.js +36 -4
  193. package/dist/test/unit/bin/utils/config/parser.test.js.map +1 -1
  194. package/dist/test/unit/bin/utils/config/structures/grouped.test.js +6 -0
  195. package/dist/test/unit/bin/utils/config/structures/grouped.test.js.map +1 -1
  196. package/dist/test/unit/bin/utils/config/structures/legacy.test.js +1 -0
  197. package/dist/test/unit/bin/utils/config/structures/legacy.test.js.map +1 -1
  198. package/dist/test/unit/github-scripts/mask-config-secrets.test.d.ts +2 -0
  199. package/dist/test/unit/github-scripts/mask-config-secrets.test.d.ts.map +1 -0
  200. package/dist/test/unit/github-scripts/mask-config-secrets.test.js +50 -0
  201. package/dist/test/unit/github-scripts/mask-config-secrets.test.js.map +1 -0
  202. package/dist/test/unit/github-scripts/run-with-apify-tokens.test.d.ts +2 -0
  203. package/dist/test/unit/github-scripts/run-with-apify-tokens.test.d.ts.map +1 -0
  204. package/dist/test/unit/github-scripts/run-with-apify-tokens.test.js +102 -0
  205. package/dist/test/unit/github-scripts/run-with-apify-tokens.test.js.map +1 -0
  206. package/dist/test/unit/run-checks.test.d.ts +2 -0
  207. package/dist/test/unit/run-checks.test.d.ts.map +1 -0
  208. package/dist/test/unit/run-checks.test.js +62 -0
  209. package/dist/test/unit/run-checks.test.js.map +1 -0
  210. package/dist/test/unit/run-test-result.test.d.ts +2 -0
  211. package/dist/test/unit/run-test-result.test.d.ts.map +1 -0
  212. package/dist/test/unit/run-test-result.test.js +34 -0
  213. package/dist/test/unit/run-test-result.test.js.map +1 -0
  214. package/dist/test/unit/should-built-and-test.test.js +41 -38
  215. package/dist/test/unit/should-built-and-test.test.js.map +1 -1
  216. package/dist/tsconfig.tsbuildinfo +1 -1
  217. package/dist/workflow-scripts-src/run-with-apify-tokens.d.ts +3 -0
  218. package/dist/workflow-scripts-src/run-with-apify-tokens.d.ts.map +1 -0
  219. package/dist/workflow-scripts-src/run-with-apify-tokens.js +100 -0
  220. package/dist/workflow-scripts-src/run-with-apify-tokens.js.map +1 -0
  221. package/docs/cli.md +469 -0
  222. package/docs/lib.md +276 -0
  223. package/docs/workflows.md +455 -0
  224. package/eslint.config.mjs +10 -1
  225. package/lib/extend-expect.ts +48 -258
  226. package/lib/lib.ts +25 -34
  227. package/lib/run-checks.ts +101 -0
  228. package/lib/run-test-result.ts +45 -55
  229. package/package.json +4 -2
  230. package/platform-tests-investigate-and-fix/skills/assess-impact/SKILL.md +42 -0
  231. package/platform-tests-investigate-and-fix/skills/measure-flakiness/SKILL.md +4 -2
  232. package/test/bundle/cli-bundle.test.ts +97 -67
  233. package/test/bundle/token-wrapper.test.ts +110 -0
  234. package/test/e2e/cli-bundle.e2e.test.ts +60 -93
  235. package/test/e2e/git-build-release.e2e.test.ts +113 -0
  236. package/test/e2e/helpers.ts +82 -0
  237. package/test/unit/bin/actor-filtering.test.ts +8 -0
  238. package/test/unit/bin/actor-ids.test.ts +47 -0
  239. package/test/unit/bin/affected-actors-cli.test.ts +271 -0
  240. package/test/unit/bin/affected-actors.test.ts +221 -0
  241. package/test/unit/bin/build-cli.test.ts +61 -0
  242. package/test/unit/bin/build-from-local.test.ts +16 -0
  243. package/test/unit/bin/build.test.ts +149 -5
  244. package/test/unit/bin/compiled-cli.ts +23 -0
  245. package/test/unit/bin/diff-changes.test.ts +181 -114
  246. package/test/unit/bin/diff.test.ts +25 -28
  247. package/test/unit/bin/git.test.ts +76 -361
  248. package/test/unit/bin/notify.test.ts +299 -0
  249. package/test/unit/bin/stdin-input.test.ts +120 -0
  250. package/test/unit/bin/test-cli.test.ts +175 -0
  251. package/test/unit/bin/test-files-glob.test.ts +118 -0
  252. package/test/unit/bin/test-report.test.ts +118 -0
  253. package/test/unit/bin/utils/config/load-config.test.ts +26 -1
  254. package/test/unit/bin/utils/config/parser.test.ts +46 -5
  255. package/test/unit/bin/utils/config/structures/grouped.test.ts +12 -0
  256. package/test/unit/bin/utils/config/structures/legacy.test.ts +1 -0
  257. package/test/unit/github-scripts/mask-config-secrets.test.ts +61 -0
  258. package/test/unit/github-scripts/run-with-apify-tokens.test.ts +115 -0
  259. package/test/unit/run-checks.test.ts +76 -0
  260. package/test/unit/run-test-result.test.ts +44 -0
  261. package/test/unit/should-built-and-test.test.ts +46 -39
  262. package/tsconfig.json +1 -1
  263. package/vitest.config.ts +9 -0
  264. package/workflow-scripts-src/run-with-apify-tokens.ts +112 -0
  265. package/.github/scripts/check-major-tag-refs.mjs +0 -72
  266. package/dist/test/unit/bin/logging.test.d.ts +0 -2
  267. package/dist/test/unit/bin/logging.test.d.ts.map +0 -1
  268. package/dist/test/unit/bin/logging.test.js +0 -43
  269. package/dist/test/unit/bin/logging.test.js.map +0 -1
  270. package/dist/test/unit/bin/slack.test.d.ts +0 -2
  271. package/dist/test/unit/bin/slack.test.d.ts.map +0 -1
  272. package/dist/test/unit/bin/slack.test.js +0 -54
  273. package/dist/test/unit/bin/slack.test.js.map +0 -1
  274. package/test/unit/bin/logging.test.ts +0 -52
  275. package/test/unit/bin/slack.test.ts +0 -65
@@ -1,40 +1,21 @@
1
- import { execFileSync, spawnSync } from 'node:child_process';
2
- import { mkdir, mkdtemp, readFile, rm, symlink, writeFile } from 'node:fs/promises';
1
+ import { execFileSync } from 'node:child_process';
2
+ import { mkdir, mkdtemp, rm, symlink, writeFile } from 'node:fs/promises';
3
3
  import os from 'node:os';
4
4
  import path from 'node:path';
5
5
  import process from 'node:process';
6
- import { fileURLToPath } from 'node:url';
7
6
  import { ApifyClient } from 'apify-client';
8
7
  import { afterAll, beforeAll, describe, expect, it } from 'vitest';
8
+ import { bundlePath, cliEnv, gitEnv, projectRoot, runCli as runCliIn, runCliWithInput as runCliWithInputIn, runProcess, token, TOKEN_ENV_VAR, } from './helpers.js';
9
9
  // End-to-end run of the shipped CLI bundle against two dummy Actors in an isolated sandbox account:
10
10
  // dry-run plans read the real Actors, `build-from-local` really builds them, the lib runs them
11
- // through `testActor` on exactly those builds (the ACTOR_BUILDS handoff), `report-tests` reads the
12
- // result, and `delete-old-builds` cleans up. Git builds (`build`/`release` without --dry-run) are
13
- // not covered: the Apify builder would have to clone the fixture repo, which only exists locally.
11
+ // through `testActor` on exactly those builds (`build-from-local | test`), `notify` reads the
12
+ // report, and `delete-old-builds` cleans up. Git builds of a real repository are in
13
+ // git-build-release.e2e.test.ts.
14
14
  //
15
15
  // Runs with `npm run test:e2e`, kept out of `npm test`. Skipped without the token, e.g. on fork PRs.
16
- const TOKEN_ENV_VAR = 'E2E_TEST_APIFY_TOKEN_DBYPODOIHUZABNQTR';
17
- const token = process.env[TOKEN_ENV_VAR];
18
16
  const ACTORS = ['test-tools-testing-sandbox/dummy-for-testing-1', 'test-tools-testing-sandbox/dummy-for-testing-2'];
19
17
  // Only used as the source URL in dry-run plans; nothing is cloned from it.
20
18
  const REPO_URL = 'https://github.com/apify/apify-test-tools-e2e-fixture';
21
- const projectRoot = fileURLToPath(new URL('../../', import.meta.url));
22
- const bundlePath = path.join(projectRoot, '.github/cli/apify-test-tools.mjs');
23
- const vitestPath = path.join(projectRoot, 'node_modules/vitest/vitest.mjs');
24
- // Proxy and CA settings pass through so the API is reachable behind a proxy; no other variable does.
25
- const networkEnv = Object.fromEntries(['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy', 'NO_PROXY', 'no_proxy', 'NODE_EXTRA_CA_CERTS']
26
- .filter((name) => process.env[name] !== undefined)
27
- .map((name) => [name, process.env[name]]));
28
- const baseEnv = { PATH: process.env.PATH ?? '', HOME: os.tmpdir() };
29
- // The CLI gets only the sandbox token, under the name the fixture config points at.
30
- const cliEnv = { ...baseEnv, ...networkEnv, [TOKEN_ENV_VAR]: token ?? '' };
31
- const gitEnv = {
32
- ...baseEnv,
33
- GIT_AUTHOR_NAME: 'Tester',
34
- GIT_AUTHOR_EMAIL: 'tester@example.com',
35
- GIT_COMMITTER_NAME: 'Tester',
36
- GIT_COMMITTER_EMAIL: 'tester@example.com',
37
- };
38
19
  let repoDir;
39
20
  let baseSha;
40
21
  const git = (...args) => execFileSync('git', args, { cwd: repoDir, env: gitEnv, encoding: 'utf8' }).trim();
@@ -42,19 +23,8 @@ const writeRepoFile = async (file, content) => {
42
23
  await mkdir(path.dirname(path.join(repoDir, file)), { recursive: true });
43
24
  await writeFile(path.join(repoDir, file), content);
44
25
  };
45
- // Spawned processes are blocking, so vitest's own timeouts can't stop one that hangs. apify-client
46
- // retries an unreachable API for minutes, so a hang is killed here and fails with a clear error.
47
- const PROCESS_TIMEOUT_MS = 8 * 60_000;
48
- const runCli = (...args) => {
49
- const result = spawnSync(process.execPath, [bundlePath, ...args], {
50
- cwd: repoDir,
51
- env: cliEnv,
52
- encoding: 'utf8',
53
- timeout: PROCESS_TIMEOUT_MS,
54
- });
55
- const error = result.error ? `\n${result.error.message}` : '';
56
- return { status: result.status, stdout: result.stdout, stderr: result.stderr + error };
57
- };
26
+ const runCli = async (...args) => runCliIn(repoDir, ...args);
27
+ const runCliWithInput = async (input, ...args) => runCliWithInputIn(repoDir, input, ...args);
58
28
  describe.runIf(token)('CLI bundle against real Actors', { timeout: 2 * 60_000 }, () => {
59
29
  let builds;
60
30
  // Both Actors on `main`; `feature` changes only dummy-for-testing-1.
@@ -88,37 +58,34 @@ describe.runIf(token)('CLI bundle against real Actors', { timeout: 2 * 60_000 },
88
58
  if (repoDir)
89
59
  await rm(repoDir, { recursive: true, force: true });
90
60
  });
91
- it('build --dry-run plans a test build of the changed Actor only', () => {
92
- const { status, stdout, stderr } = runCli('build', '--source-branch', 'feature', '--target-branch', 'main', '--repo-url', REPO_URL, '--dry-run');
61
+ it('build --dry-run plans a test build of the Actors it is given', async () => {
62
+ const { status, stdout, stderr } = await runCliWithInput(JSON.stringify({ actors: [{ actorFullName: ACTORS[0] }] }), 'build', '--version-number', '0.99', '--repo-url', REPO_URL, '--dry-run');
93
63
  expect(status, stderr).toBe(0);
94
64
  expect(JSON.parse(stdout)).toEqual({
95
65
  dryRun: true,
96
66
  builds: [
97
- {
98
- actorFullName: ACTORS[0],
99
- versionNumber: '0.99',
100
- gitRepoUrl: `${REPO_URL}#feature:actors/dummy-1`,
101
- useDockerCache: false,
102
- },
67
+ { actorFullName: ACTORS[0], versionNumber: '0.99', gitRepoUrl: `${REPO_URL}#feature:actors/dummy-1` },
103
68
  ],
104
69
  });
105
70
  });
106
- it('release --dry-run plans a build of the default version and tag', () => {
107
- const { status, stderr } = runCli('release', '--base-commit', baseSha, '--repo-url', REPO_URL, '--dry-run');
71
+ it('a release pipeline plans a build of the default version of every changed Actor', async () => {
72
+ const affected = await runCli('get-affected-actors', '--since', baseSha);
73
+ expect(affected.status, affected.stderr).toBe(0);
74
+ const { functionallyChangedActors, cosmeticallyChangedActors } = JSON.parse(affected.stdout);
75
+ const { status, stderr } = await runCliWithInput(JSON.stringify({ actors: [...functionallyChangedActors, ...cosmeticallyChangedActors] }), 'build', '--version-number', 'default', '--repo-url', REPO_URL, '--dry-run');
108
76
  expect(status, stderr).toBe(0);
109
77
  expect(stderr).toContain(`[DRY RUN] Would build:\n ${ACTORS[0]} (0.0) from ${REPO_URL}#feature:actors/dummy-1`);
110
- expect(stderr).toContain('Skipping slack notification');
111
78
  });
112
- it('build-from-local --dry-run plans both Actors from the working tree', () => {
113
- const { status, stdout, stderr } = runCli('build-from-local', '--dry-run');
79
+ it('build-from-local --dry-run plans both Actors from the working tree', async () => {
80
+ const { status, stdout, stderr } = await runCli('build-from-local', '--dry-run');
114
81
  expect(status, stderr).toBe(0);
115
82
  expect(JSON.parse(stdout)).toMatchObject({
116
83
  dryRun: true,
117
84
  builds: ACTORS.map((actorFullName) => ({ actorFullName, versionNumber: '0.98', fileCount: 3 })),
118
85
  });
119
86
  });
120
- it('build-from-local builds both Actors', { timeout: 10 * 60_000 }, () => {
121
- const { status, stdout, stderr } = runCli('build-from-local');
87
+ it('build-from-local builds both Actors', { timeout: 10 * 60_000 }, async () => {
88
+ const { status, stdout, stderr } = await runCli('build-from-local');
122
89
  expect(status, stderr).toBe(0);
123
90
  builds = JSON.parse(stdout);
124
91
  expect(builds.map((build) => build.actorFullName)).toEqual(ACTORS);
@@ -141,28 +108,26 @@ describe.runIf(token)('CLI bundle against real Actors', { timeout: 2 * 60_000 },
141
108
  describe('sandbox dummies', () => {${actorTests}
142
109
  });
143
110
  `);
144
- const vitest = spawnSync(process.execPath, [vitestPath, 'run', 'test/platform', '--reporter=json', '--outputFile=./test-output.json'], {
111
+ const tested = await runProcess(process.execPath, [bundlePath, 'test', '--test-files-glob', 'test/platform/**'], {
145
112
  cwd: repoDir,
146
- encoding: 'utf8',
147
- timeout: PROCESS_TIMEOUT_MS,
148
- env: { ...cliEnv, TESTER_APIFY_TOKEN: token, ACTOR_BUILDS: JSON.stringify(builds) },
113
+ env: { ...cliEnv, TESTER_APIFY_TOKEN: token },
114
+ input: JSON.stringify(builds),
149
115
  });
150
- expect(vitest.status, `${vitest.stdout}\n${vitest.stderr}${vitest.error ? `\n${vitest.error.message}` : ''}`).toBe(0);
151
- // Each run used the build from ACTOR_BUILDS, not the Actor's default build.
152
- const report = JSON.parse(await readFile(path.join(repoDir, 'test-output.json'), 'utf8'));
153
- const assertions = report.testResults.flatMap((file) => file.assertionResults);
154
- expect(assertions).toHaveLength(ACTORS.length);
116
+ expect(tested.status, tested.stderr).toBe(0);
117
+ expect(tested.stderr).toContain('https://console.apify.com/view/runs/');
118
+ // Each run used the build piped into `test`, not the Actor's default build.
119
+ const report = JSON.parse(tested.stdout);
120
+ expect(report).toMatchObject({ success: true, summary: { passed: ACTORS.length, failed: 0 } });
155
121
  const client = new ApifyClient({ token });
156
- const runBuildIds = await Promise.all(assertions.map(async ({ meta }) => (await client.run(meta.runId).get())?.buildId));
122
+ const runBuildIds = await Promise.all(report.tests.map(async ({ run }) => (await client.run(run.runId).get())?.buildId));
157
123
  expect(runBuildIds.sort()).toEqual(builds.map((build) => build.buildId).sort());
158
- const { status, stderr } = runCli('report-tests', '--report-file', 'test-output.json', '--dry-run');
124
+ const { status, stderr } = await runCliWithInput(tested.stdout, 'notify', '--dry-run');
159
125
  expect(status, stderr).toBe(0);
160
- expect(stderr).toContain(`PASSED: ${ACTORS.length}, FAILED: 0`);
161
- expect(stderr).toContain('https://console.apify.com/view/runs/');
126
+ expect(stderr).toContain('Skipping notification');
162
127
  });
163
128
  // Last, so builds from earlier runs of this suite don't pile up in the sandbox.
164
- it('delete-old-builds keeps the default builds', () => {
165
- const { status, stderr } = runCli('delete-old-builds');
129
+ it('delete-old-builds keeps the default builds', async () => {
130
+ const { status, stderr } = await runCli('delete-old-builds');
166
131
  expect(status, stderr).toBe(0);
167
132
  for (const actorFullName of ACTORS) {
168
133
  expect(stderr).toContain(`[DELETE OLD BUILDS][${actorFullName}]: Skipping default build`);
@@ -1 +1 @@
1
- {"version":3,"file":"cli-bundle.e2e.test.js","sourceRoot":"","sources":["../../../test/e2e/cli-bundle.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC7D,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpF,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AACnC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAEnE,oGAAoG;AACpG,+FAA+F;AAC/F,mGAAmG;AACnG,kGAAkG;AAClG,kGAAkG;AAClG,EAAE;AACF,qGAAqG;AACrG,MAAM,aAAa,GAAG,wCAAwC,CAAC;AAC/D,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC;AAEzC,MAAM,MAAM,GAAG,CAAC,gDAAgD,EAAE,gDAAgD,CAAC,CAAC;AACpH,2EAA2E;AAC3E,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AAEzE,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AACtE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,kCAAkC,CAAC,CAAC;AAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,gCAAgC,CAAC,CAAC;AAE5E,qGAAqG;AACrG,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CACjC,CAAC,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,YAAY,EAAE,UAAU,EAAE,UAAU,EAAE,qBAAqB,CAAC;KACpG,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS,CAAC;KACjD,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,CAAE,CAAC,CAAC,CACjD,CAAC;AACF,MAAM,OAAO,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,EAAE,IAAI,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE,CAAC;AACpE,oFAAoF;AACpF,MAAM,MAAM,GAAG,EAAE,GAAG,OAAO,EAAE,GAAG,UAAU,EAAE,CAAC,aAAa,CAAC,EAAE,KAAK,IAAI,EAAE,EAAE,CAAC;AAC3E,MAAM,MAAM,GAAG;IACX,GAAG,OAAO;IACV,eAAe,EAAE,QAAQ;IACzB,gBAAgB,EAAE,oBAAoB;IACtC,kBAAkB,EAAE,QAAQ;IAC5B,mBAAmB,EAAE,oBAAoB;CAC5C,CAAC;AAEF,IAAI,OAAe,CAAC;AACpB,IAAI,OAAe,CAAC;AAEpB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAErH,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAE,OAAe,EAAE,EAAE;IAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,mGAAmG;AACnG,iGAAiG;AACjG,MAAM,kBAAkB,GAAG,CAAC,GAAG,MAAM,CAAC;AAEtC,MAAM,MAAM,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE;IACjC,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE;QAC9D,GAAG,EAAE,OAAO;QACZ,GAAG,EAAE,MAAM;QACX,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,kBAAkB;KAC9B,CAAC,CAAC;IACH,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC9D,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;AAC3F,CAAC,CAAC;AASF,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE;IAClF,IAAI,MAAoB,CAAC;IAEzB,qEAAqE;IACrE,SAAS,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,aAAa,CACf,GAAG,MAAM,oBAAoB,EAC7B,IAAI,CAAC,SAAS,CAAC;gBACX,kBAAkB,EAAE,CAAC;gBACrB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,eAAe;aAC9B,CAAC,CACL,CAAC;YACF,MAAM,aAAa,CACf,GAAG,MAAM,aAAa,EACtB,gEAAgE,CACnE,CAAC;YACF,MAAM,aAAa,CAAC,GAAG,MAAM,UAAU,EAAE,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,aAAa,CAAC,8BAA8B,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChF,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACzC,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEnC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,aAAa,CAAC,wBAAwB,EAAE,mCAAmC,CAAC,CAAC;QACnF,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAChB,IAAI,OAAO;YAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,GAAG,EAAE;QACpE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CACrC,OAAO,EACP,iBAAiB,EACjB,SAAS,EACT,iBAAiB,EACjB,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,CACd,CAAC;QACF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE;gBACJ;oBACI,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC;oBACxB,aAAa,EAAE,MAAM;oBACrB,UAAU,EAAE,GAAG,QAAQ,yBAAyB;oBAChD,cAAc,EAAE,KAAK;iBACxB;aACJ;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACtE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,SAAS,EAAE,eAAe,EAAE,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QAC5G,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CACpB,6BAA6B,MAAM,CAAC,CAAC,CAAC,eAAe,QAAQ,yBAAyB,CACzF,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,6BAA6B,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,GAAG,EAAE;QAC1E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QAC3E,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;YACrC,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;SAClG,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAC;QAC9D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC,WAAW,EAAE,CAAC;QAExE,wFAAwF;QACxF,gFAAgF;QAChF,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CACzB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;QAG/B,CACC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,aAAa,CACf,+BAA+B,EAC/B,uCAAuC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;qCAErC,UAAU;;CAE9C,CACQ,CAAC;QAEF,MAAM,MAAM,GAAG,SAAS,CACpB,OAAO,CAAC,QAAQ,EAChB,CAAC,UAAU,EAAE,KAAK,EAAE,eAAe,EAAE,iBAAiB,EAAE,iCAAiC,CAAC,EAC1F;YACI,GAAG,EAAE,OAAO;YACZ,QAAQ,EAAE,MAAM;YAChB,OAAO,EAAE,kBAAkB;YAC3B,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,kBAAkB,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;SACtF,CACJ,CAAC;QACF,MAAM,CACF,MAAM,CAAC,MAAM,EACb,GAAG,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACzF,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAEV,4EAA4E;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC;QAC1F,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,OAAO,CACzC,CAAC,IAAyD,EAAE,EAAE,CAAC,IAAI,CAAC,gBAAgB,CACvF,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,UAAU,CAAC,GAAG,CACV,KAAK,EAAE,EAAE,IAAI,EAA+B,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CACjG,CACJ,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,cAAc,EAAE,eAAe,EAAE,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACpG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,WAAW,MAAM,CAAC,MAAM,aAAa,CAAC,CAAC;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,EAAE,CAAC,4CAA4C,EAAE,GAAG,EAAE;QAClD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;QACvD,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,KAAK,MAAM,aAAa,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,aAAa,2BAA2B,CAAC,CAAC;QAC9F,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"cli-bundle.e2e.test.js","sourceRoot":"","sources":["../../../test/e2e/cli-bundle.e2e.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC1E,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAC3C,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAGnE,OAAO,EACH,UAAU,EACV,MAAM,EACN,MAAM,EACN,WAAW,EACX,MAAM,IAAI,QAAQ,EAClB,eAAe,IAAI,iBAAiB,EACpC,UAAU,EACV,KAAK,EACL,aAAa,GAChB,MAAM,cAAc,CAAC;AAEtB,oGAAoG;AACpG,+FAA+F;AAC/F,8FAA8F;AAC9F,oFAAoF;AACpF,iCAAiC;AACjC,EAAE;AACF,qGAAqG;AACrG,MAAM,MAAM,GAAG,CAAC,gDAAgD,EAAE,gDAAgD,CAAC,CAAC;AACpH,2EAA2E;AAC3E,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AAEzE,IAAI,OAAe,CAAC;AACpB,IAAI,OAAe,CAAC;AAEpB,MAAM,GAAG,GAAG,CAAC,GAAG,IAAc,EAAE,EAAE,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;AAErH,MAAM,aAAa,GAAG,KAAK,EAAE,IAAY,EAAE,OAAe,EAAE,EAAE;IAC1D,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACzE,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,OAAO,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,KAAK,EAAE,GAAG,IAAc,EAAE,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;AACvE,MAAM,eAAe,GAAG,KAAK,EAAE,KAAa,EAAE,GAAG,IAAc,EAAE,EAAE,CAAC,iBAAiB,CAAC,OAAO,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC,CAAC;AAE/G,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,gCAAgC,EAAE,EAAE,OAAO,EAAE,CAAC,GAAG,MAAM,EAAE,EAAE,GAAG,EAAE;IAClF,IAAI,MAAoB,CAAC;IAEzB,qEAAqE;IACrE,SAAS,CAAC,KAAK,IAAI,EAAE;QACjB,OAAO,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QAClE,GAAG,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC;QAChC,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,GAAG,QAAQ,MAAM,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,KAAK,MAAM,CAAC,CAAC,EAAE,aAAa,CAAC,IAAI,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC;YAChD,MAAM,MAAM,GAAG,gBAAgB,CAAC,GAAG,CAAC,EAAE,CAAC;YACvC,MAAM,aAAa,CACf,GAAG,MAAM,oBAAoB,EAC7B,IAAI,CAAC,SAAS,CAAC;gBACX,kBAAkB,EAAE,CAAC;gBACrB,IAAI,EAAE,aAAa,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO,EAAE,KAAK;gBACd,UAAU,EAAE,eAAe;aAC9B,CAAC,CACL,CAAC;YACF,MAAM,aAAa,CACf,GAAG,MAAM,aAAa,EACtB,gEAAgE,CACnE,CAAC;YACF,MAAM,aAAa,CAAC,GAAG,MAAM,UAAU,EAAE,sBAAsB,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;YAC7E,MAAM,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,aAAa,EAAE,WAAW,EAAE,aAAa,EAAE,CAAC,CAAC;QACvE,CAAC;QACD,MAAM,aAAa,CAAC,8BAA8B,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;QAChF,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,aAAa,CAAC,CAAC;QACzC,OAAO,GAAG,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;QAEnC,GAAG,CAAC,UAAU,EAAE,IAAI,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;QACvC,MAAM,aAAa,CAAC,wBAAwB,EAAE,mCAAmC,CAAC,CAAC;QACnF,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACjB,GAAG,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,sBAAsB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,QAAQ,CAAC,KAAK,IAAI,EAAE;QAChB,IAAI,OAAO;YAAE,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACrE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,8DAA8D,EAAE,KAAK,IAAI,EAAE;QAC1E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CACpD,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAC1D,OAAO,EACP,kBAAkB,EAClB,MAAM,EACN,YAAY,EACZ,QAAQ,EACR,WAAW,CACd,CAAC;QACF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;YAC/B,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE;gBACJ,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,GAAG,QAAQ,yBAAyB,EAAE;aACxG;SACJ,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gFAAgF,EAAE,KAAK,IAAI,EAAE;QAC5F,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,qBAAqB,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;QACzE,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,EAAE,yBAAyB,EAAE,yBAAyB,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QAE7F,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAC5C,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,GAAG,yBAAyB,EAAE,GAAG,yBAAyB,CAAC,EAAE,CAAC,EACxF,OAAO,EACP,kBAAkB,EAClB,SAAS,EACT,YAAY,EACZ,QAAQ,EACR,WAAW,CACd,CAAC;QACF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CACpB,6BAA6B,MAAM,CAAC,CAAC,CAAC,eAAe,QAAQ,yBAAyB,CACzF,CAAC;IACN,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oEAAoE,EAAE,KAAK,IAAI,EAAE;QAChF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,EAAE,WAAW,CAAC,CAAC;QACjF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,aAAa,CAAC;YACrC,MAAM,EAAE,IAAI;YACZ,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC,EAAE,aAAa,EAAE,aAAa,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAC;SAClG,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qCAAqC,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QAC3E,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;QACpE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,KAAK,MAAM,KAAK,IAAI,MAAM;YAAE,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAClF,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2DAA2D,EAAE,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,EAAE,EAAE,KAAK,IAAI,EAAE;QACjG,MAAM,CAAC,MAAM,EAAE,yCAAyC,CAAC,CAAC,WAAW,EAAE,CAAC;QAExE,wFAAwF;QACxF,gFAAgF;QAChF,MAAM,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,cAAc,CAAC,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,cAAc,CAAC,EAAE,KAAK,CAAC,CAAC;QACjG,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;QACnD,MAAM,UAAU,GAAG,MAAM,CAAC,GAAG,CACzB,CAAC,OAAO,EAAE,EAAE,CAAC;gBACT,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;;QAG/B,CACC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACb,MAAM,aAAa,CACf,+BAA+B,EAC/B,uCAAuC,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;;qCAErC,UAAU;;CAE9C,CACQ,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,UAAU,CAC3B,OAAO,CAAC,QAAQ,EAChB,CAAC,UAAU,EAAE,MAAM,EAAE,mBAAmB,EAAE,kBAAkB,CAAC,EAC7D;YACI,GAAG,EAAE,OAAO;YACZ,GAAG,EAAE,EAAE,GAAG,MAAM,EAAE,kBAAkB,EAAE,KAAM,EAAE;YAC9C,KAAK,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;SAChC,CACJ,CAAC;QACF,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC7C,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,sCAAsC,CAAC,CAAC;QAExE,4EAA4E;QAC5E,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,MAAM,CAAC,MAAM,CAAC,CAAC,aAAa,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;QAC/F,MAAM,MAAM,GAAG,IAAI,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC;QAC1C,MAAM,WAAW,GAAG,MAAM,OAAO,CAAC,GAAG,CACjC,MAAM,CAAC,KAAK,CAAC,GAAG,CACZ,KAAK,EAAE,EAAE,GAAG,EAA8B,EAAE,EAAE,CAAC,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,EAAE,OAAO,CAC9F,CACJ,CAAC;QACF,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;QAEhF,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,WAAW,CAAC,CAAC;QACvF,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,gFAAgF;IAChF,EAAE,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QACxD,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,MAAM,CAAC,mBAAmB,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,KAAK,MAAM,aAAa,IAAI,MAAM,EAAE,CAAC;YACjC,MAAM,CAAC,MAAM,CAAC,CAAC,SAAS,CAAC,uBAAuB,aAAa,2BAA2B,CAAC,CAAC;QAC9F,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=git-build-release.e2e.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-build-release.e2e.test.d.ts","sourceRoot":"","sources":["../../../test/e2e/git-build-release.e2e.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,87 @@
1
+ import { execFileSync } from 'node:child_process';
2
+ import { mkdtemp, rm } from 'node:fs/promises';
3
+ import os from 'node:os';
4
+ import path from 'node:path';
5
+ import { ApifyClient } from 'apify-client';
6
+ import { afterAll, beforeAll, describe, expect, it } from 'vitest';
7
+ import { gitEnv, runCli as runCliIn, runCliWithInput as runCliWithInputIn, token } from './helpers.js';
8
+ // Real git builds of a real repository: the shipped CLI bundle builds an Actor from a clone of
9
+ // apify-store/testing-repo-for-github-actions, and the Apify builder clones the same repository
10
+ // (over SSH, with the sandbox org's deploy key installed on it).
11
+ //
12
+ // The repo's `e2e/base` and `e2e/feature` branches are fixtures and never change: `e2e/feature`
13
+ // adds one commit touching only dummy-for-testing-1. Like the reusable workflows, the commands run
14
+ // with `e2e/feature` checked out and compare it with `origin/e2e/base`. The release pipeline rebuilds
15
+ // dummy-for-testing-1 under `latest` on every run, which is fine for a sandbox Actor nobody else uses.
16
+ //
17
+ // Runs with `npm run test:e2e`, kept out of `npm test`. Skipped without the token, e.g. on fork PRs.
18
+ const FIXTURE_REPO = 'https://github.com/apify-store/testing-repo-for-github-actions';
19
+ const BASE_BRANCH = 'e2e/base';
20
+ const FEATURE_BRANCH = 'e2e/feature';
21
+ const CHANGED_ACTOR = 'test-tools-testing-sandbox/dummy-for-testing-1';
22
+ const CHANGED_ACTOR_FOLDER = 'actors/dummy-for-testing-1';
23
+ // The CLI builds from the SSH form of the origin URL, which is what lets a deploy key work.
24
+ const BUILD_SOURCE = `git@github.com:apify-store/testing-repo-for-github-actions#${FEATURE_BRANCH}:${CHANGED_ACTOR_FOLDER}`;
25
+ let repoDir;
26
+ const git = (...args) => execFileSync('git', args, { cwd: repoDir, env: gitEnv, encoding: 'utf8' }).trim();
27
+ const runCli = async (...args) => runCliIn(repoDir, ...args);
28
+ const runCliWithInput = async (input, ...args) => runCliWithInputIn(repoDir, input, ...args);
29
+ const getAffectedActors = async () => {
30
+ const { status, stdout, stderr } = await runCli('get-affected-actors', '--base', `origin/${BASE_BRANCH}`);
31
+ expect(status, stderr).toBe(0);
32
+ return JSON.parse(stdout);
33
+ };
34
+ describe.runIf(token)('CLI bundle building a real repository', { timeout: 2 * 60_000 }, () => {
35
+ const client = new ApifyClient({ token });
36
+ const versionSource = async (versionNumber) => {
37
+ const actor = await client.actor(CHANGED_ACTOR).get();
38
+ const version = actor?.versions.find(({ versionNumber: number }) => number === versionNumber);
39
+ return version && 'gitRepoUrl' in version ? version.gitRepoUrl : undefined;
40
+ };
41
+ // A full clone checked out on the feature branch, like actions/checkout with fetch-depth: 0.
42
+ beforeAll(async () => {
43
+ repoDir = await mkdtemp(path.join(os.tmpdir(), 'apify-cli-e2e-git-'));
44
+ execFileSync('git', ['clone', '-q', FIXTURE_REPO, repoDir], { env: gitEnv });
45
+ git('checkout', '-q', '-b', FEATURE_BRANCH, `origin/${FEATURE_BRANCH}`);
46
+ }, 5 * 60_000);
47
+ afterAll(async () => {
48
+ if (repoDir)
49
+ await rm(repoDir, { recursive: true, force: true });
50
+ });
51
+ it('get-affected-actors finds only the Actor the feature branch changed', async () => {
52
+ expect(await getAffectedActors()).toMatchObject({
53
+ functionallyChangedActors: [{ actorFullName: CHANGED_ACTOR }],
54
+ cosmeticallyChangedActors: [],
55
+ });
56
+ });
57
+ it('build builds the changed Actor from the feature branch', { timeout: 10 * 60_000 }, async () => {
58
+ // What the PR workflow does: the functionally changed Actors, piped into a test build
59
+ const { functionallyChangedActors } = await getAffectedActors();
60
+ const { status, stdout, stderr } = await runCliWithInput(JSON.stringify({ actors: functionallyChangedActors }), 'build', '--version-number', '0.99');
61
+ expect(status, stderr).toBe(0);
62
+ const builds = JSON.parse(stdout);
63
+ expect(builds).toMatchObject([
64
+ { actorFullName: CHANGED_ACTOR, buildNumber: expect.stringMatching(/^0\.99\.\d+$/) },
65
+ ]);
66
+ // The version builds the checked-out branch, as it is on the remote.
67
+ expect(await versionSource('0.99')).toBe(BUILD_SOURCE);
68
+ expect((await client.build(builds[0].buildId).get())?.status).toBe('SUCCEEDED');
69
+ });
70
+ it('the release pipeline rebuilds the default version of the changed Actor', { timeout: 10 * 60_000 }, async () => {
71
+ // What the release workflow does: every Actor changed since the last release, built into its default version
72
+ const baseSha = git('rev-parse', `origin/${BASE_BRANCH}`);
73
+ const affected = await runCli('get-affected-actors', '--since', baseSha);
74
+ expect(affected.status, affected.stderr).toBe(0);
75
+ const { functionallyChangedActors, cosmeticallyChangedActors } = JSON.parse(affected.stdout);
76
+ const { status, stderr } = await runCliWithInput(JSON.stringify({ actors: [...functionallyChangedActors, ...cosmeticallyChangedActors] }), 'build', '--version-number', 'default');
77
+ expect(status, stderr).toBe(0);
78
+ expect(stderr).toMatch(new RegExp(`\\[${CHANGED_ACTOR}\\]: 0\\.0\\.\\d+`));
79
+ // Releasing builds the default version from the branch being released.
80
+ expect(await versionSource('0.0')).toBe(BUILD_SOURCE);
81
+ // Without a channel the announcement is skipped, so it needs no Slack token
82
+ const notify = await runCliWithInput(affected.stdout, 'notify');
83
+ expect(notify.status, notify.stderr).toBe(0);
84
+ expect(notify.stderr).toContain('Skipping notification');
85
+ });
86
+ });
87
+ //# sourceMappingURL=git-build-release.e2e.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git-build-release.e2e.test.js","sourceRoot":"","sources":["../../../test/e2e/git-build-release.e2e.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,37 @@
1
+ export declare const TOKEN_ENV_VAR = "E2E_TEST_APIFY_TOKEN_DBYPODOIHUZABNQTR";
2
+ export declare const token: string | undefined;
3
+ export declare const projectRoot: string;
4
+ export declare const bundlePath: string;
5
+ export declare const cliEnv: {
6
+ E2E_TEST_APIFY_TOKEN_DBYPODOIHUZABNQTR: string;
7
+ PATH: string;
8
+ HOME: string;
9
+ };
10
+ export declare const gitEnv: {
11
+ GIT_AUTHOR_NAME: string;
12
+ GIT_AUTHOR_EMAIL: string;
13
+ GIT_COMMITTER_NAME: string;
14
+ GIT_COMMITTER_EMAIL: string;
15
+ PATH: string;
16
+ HOME: string;
17
+ };
18
+ export declare const PROCESS_TIMEOUT_MS: number;
19
+ export interface ProcessResult {
20
+ status: number | null;
21
+ stdout: string;
22
+ stderr: string;
23
+ }
24
+ export declare const runProcess: (command: string, args: string[], { input, ...options }: {
25
+ cwd: string;
26
+ env: Record<string, string>;
27
+ input?: string;
28
+ }) => Promise<ProcessResult>;
29
+ export declare const runCliWithInput: (cwd: string, input: string, ...args: string[]) => Promise<ProcessResult>;
30
+ export declare const runCli: (cwd: string, ...args: string[]) => Promise<ProcessResult>;
31
+ export interface ActorBuild {
32
+ buildId: string;
33
+ actorRawId: string;
34
+ buildNumber: string;
35
+ actorFullName: string;
36
+ }
37
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../../test/e2e/helpers.ts"],"names":[],"mappings":"AASA,eAAO,MAAM,aAAa,2CAA2C,CAAC;AACtE,eAAO,MAAM,KAAK,oBAA6B,CAAC;AAEhD,eAAO,MAAM,WAAW,QAAoD,CAAC;AAC7E,eAAO,MAAM,UAAU,QAA6D,CAAC;AAUrF,eAAO,MAAM,MAAM;;;;CAA8D,CAAC;AAClF,eAAO,MAAM,MAAM;;;;;;;CAOlB,CAAC;AAKF,eAAO,MAAM,kBAAkB,QAAa,CAAC;AAG7C,MAAM,WAAW,aAAa;IAC1B,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAClB;AAED,eAAO,MAAM,UAAU,GACnB,SAAS,MAAM,EACf,MAAM,MAAM,EAAE,EACd,uBAA4B;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,KACzF,OAAO,CAAC,aAAa,CAoBvB,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,KAAK,MAAM,EAAE,OAAO,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,2BACC,CAAC;AAErF,eAAO,MAAM,MAAM,GAAU,KAAK,MAAM,EAAE,GAAG,MAAM,MAAM,EAAE,2BAAsC,CAAC;AAElG,MAAM,WAAW,UAAU;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,EAAE,MAAM,CAAC;CACzB"}
@@ -0,0 +1,57 @@
1
+ import { execFile } from 'node:child_process';
2
+ import os from 'node:os';
3
+ import path from 'node:path';
4
+ import process from 'node:process';
5
+ import { fileURLToPath } from 'node:url';
6
+ import { promisify } from 'node:util';
7
+ // Shared by the e2e suites. They run the shipped CLI bundle against Actors in the isolated
8
+ // `test-tools-testing-sandbox` org, whose token can reach nothing else.
9
+ export const TOKEN_ENV_VAR = 'E2E_TEST_APIFY_TOKEN_DBYPODOIHUZABNQTR';
10
+ export const token = process.env[TOKEN_ENV_VAR];
11
+ export const projectRoot = fileURLToPath(new URL('../../', import.meta.url));
12
+ export const bundlePath = path.join(projectRoot, '.github/cli/apify-test-tools.mjs');
13
+ // Proxy and CA settings pass through so the API is reachable behind a proxy; no other variable does.
14
+ const networkEnv = Object.fromEntries(['HTTPS_PROXY', 'https_proxy', 'HTTP_PROXY', 'http_proxy', 'NO_PROXY', 'no_proxy', 'NODE_EXTRA_CA_CERTS']
15
+ .filter((name) => process.env[name] !== undefined)
16
+ .map((name) => [name, process.env[name]]));
17
+ const baseEnv = { PATH: process.env.PATH ?? '', HOME: os.tmpdir() };
18
+ // The CLI gets only the sandbox token, under the name the fixture configs point at.
19
+ export const cliEnv = { ...baseEnv, ...networkEnv, [TOKEN_ENV_VAR]: token ?? '' };
20
+ export const gitEnv = {
21
+ ...baseEnv,
22
+ ...networkEnv,
23
+ GIT_AUTHOR_NAME: 'Tester',
24
+ GIT_AUTHOR_EMAIL: 'tester@example.com',
25
+ GIT_COMMITTER_NAME: 'Tester',
26
+ GIT_COMMITTER_EMAIL: 'tester@example.com',
27
+ };
28
+ // Processes are spawned asynchronously: a blocking spawn would stall the test worker for the length
29
+ // of a build, long enough for vitest's own worker RPC to time out. The kill timeout still applies on
30
+ // top of vitest's, since apify-client retries an unreachable API for minutes.
31
+ export const PROCESS_TIMEOUT_MS = 8 * 60_000;
32
+ const execFileAsync = promisify(execFile);
33
+ export const runProcess = async (command, args, { input = '', ...options }) => {
34
+ try {
35
+ const promise = execFileAsync(command, args, {
36
+ ...options,
37
+ encoding: 'utf8',
38
+ timeout: PROCESS_TIMEOUT_MS,
39
+ maxBuffer: 100 * 1024 * 1024,
40
+ });
41
+ // Closing stdin hands a command that reads it (e.g. `build`) the input, and one that doesn't never waits
42
+ promise.child.stdin?.end(input);
43
+ const { stdout, stderr } = await promise;
44
+ return { status: 0, stdout, stderr };
45
+ }
46
+ catch (error) {
47
+ // A non-zero exit rejects too, with the output on the error.
48
+ const { code, stdout = '', stderr = '', message } = error;
49
+ // Without an exit code (killed by the timeout, or never started) the message says why.
50
+ return typeof code === 'number'
51
+ ? { status: code, stdout, stderr }
52
+ : { status: null, stdout, stderr: `${stderr}\n${message}` };
53
+ }
54
+ };
55
+ export const runCliWithInput = async (cwd, input, ...args) => runProcess(process.execPath, [bundlePath, ...args], { cwd, env: cliEnv, input });
56
+ export const runCli = async (cwd, ...args) => runCliWithInput(cwd, '', ...args);
57
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../../test/e2e/helpers.ts"],"names":[],"mappings":"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"}
@@ -29,6 +29,13 @@ describe('selectActors', () => {
29
29
  'owner/c',
30
30
  ]);
31
31
  });
32
+ it('selects an actor listed twice once, in config order', () => {
33
+ // build relies on this to build an Actor in both functionallyChangedActors and testChangedActors once
34
+ expect(names(selectActors({ actors: ['owner/c', 'owner/a', 'owner/c'], ignore: [] }, configs))).toStrictEqual([
35
+ 'owner/a',
36
+ 'owner/c',
37
+ ]);
38
+ });
32
39
  it('drops the actors listed in --ignore', () => {
33
40
  expect(names(selectActors({ actors: [], ignore: ['owner/b'] }, configs))).toStrictEqual(['owner/a', 'owner/c']);
34
41
  });
@@ -1 +1 @@
1
- {"version":3,"file":"actor-filtering.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/actor-filtering.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"actor-filtering.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/actor-filtering.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=actor-ids.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor-ids.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/bin/actor-ids.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,40 @@
1
+ import { describe, expect, it, vi } from 'vitest';
2
+ import { withActorIds } from '../../../bin/actor-ids.js';
3
+ /** A client that knows one Actor, by its full name and by its raw ID, as the API does */
4
+ const fakeClient = () => {
5
+ const known = { id: 'rawA', username: 'owner', name: 'a' };
6
+ const actor = vi.fn((actorId) => ({
7
+ get: async () => (actorId === 'owner/a' || actorId === 'rawA' ? known : undefined),
8
+ }));
9
+ return { actor };
10
+ };
11
+ describe('withActorIds', () => {
12
+ it('adds the raw ID to an Actor listed by full name, as get-actor-configs lists them', async () => {
13
+ expect(await withActorIds([{ actorFullName: 'owner/a' }], fakeClient())).toEqual([
14
+ { actorFullName: 'owner/a', actorRawId: 'rawA' },
15
+ ]);
16
+ });
17
+ it('adds the full name to an Actor listed by raw ID', async () => {
18
+ const build = { actorRawId: 'rawA', buildId: 'b1', buildNumber: '0.99.1' };
19
+ expect(await withActorIds([build], fakeClient())).toEqual([{ ...build, actorFullName: 'owner/a' }]);
20
+ });
21
+ it('keeps the IDs of a build and does not look them up', async () => {
22
+ const client = fakeClient();
23
+ const build = { actorFullName: 'owner/a', buildId: 'b1', actorRawId: 'raw1', buildNumber: '0.99.1' };
24
+ expect(await withActorIds([build], client)).toEqual([build]);
25
+ expect(client.actor).not.toHaveBeenCalled();
26
+ });
27
+ it('keeps an Actor the token cannot see as listed, instead of failing the run', async () => {
28
+ const targets = [
29
+ { actorFullName: 'owner/missing' },
30
+ { actorRawId: 'rawMissing' },
31
+ { actorFullName: 'owner/a' },
32
+ ];
33
+ expect(await withActorIds(targets, fakeClient())).toEqual([
34
+ { actorFullName: 'owner/missing' },
35
+ { actorRawId: 'rawMissing' },
36
+ { actorFullName: 'owner/a', actorRawId: 'rawA' },
37
+ ]);
38
+ });
39
+ });
40
+ //# sourceMappingURL=actor-ids.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"actor-ids.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/actor-ids.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAElD,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAIzD,yFAAyF;AACzF,MAAM,UAAU,GAAG,GAAG,EAAE;IACpB,MAAM,KAAK,GAAG,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;IAC3D,MAAM,KAAK,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,OAAe,EAAE,EAAE,CAAC,CAAC;QACtC,GAAG,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;KACrF,CAAC,CAAC,CAAC;IACJ,OAAO,EAAE,KAAK,EAAiD,CAAC;AACpE,CAAC,CAAC;AAEF,QAAQ,CAAC,cAAc,EAAE,GAAG,EAAE;IAC1B,EAAE,CAAC,kFAAkF,EAAE,KAAK,IAAI,EAAE;QAC9F,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC7E,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;SACnD,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,iDAAiD,EAAE,KAAK,IAAI,EAAE;QAC7D,MAAM,KAAK,GAAG,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QAC3E,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;IACxG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,oDAAoD,EAAE,KAAK,IAAI,EAAE;QAChE,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,MAAM,KAAK,GAAG,EAAE,aAAa,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,CAAC;QACrG,MAAM,CAAC,MAAM,YAAY,CAAC,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;QAC7D,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,2EAA2E,EAAE,KAAK,IAAI,EAAE;QACvF,MAAM,OAAO,GAAG;YACZ,EAAE,aAAa,EAAE,eAAe,EAAE;YAClC,EAAE,UAAU,EAAE,YAAY,EAAE;YAC5B,EAAE,aAAa,EAAE,SAAS,EAAE;SAC/B,CAAC;QACF,MAAM,CAAC,MAAM,YAAY,CAAC,OAAO,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YACtD,EAAE,aAAa,EAAE,eAAe,EAAE;YAClC,EAAE,UAAU,EAAE,YAAY,EAAE;YAC5B,EAAE,aAAa,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,EAAE;SACnD,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=affected-actors-cli.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"affected-actors-cli.test.d.ts","sourceRoot":"","sources":["../../../../test/unit/bin/affected-actors-cli.test.ts"],"names":[],"mappings":""}