apify-test-tools 0.10.1-beta.3 → 0.10.1-beta.4

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 (140) hide show
  1. package/.github/workflows/public_platform-tests-claude-investigate-and-fix.yaml +7 -2
  2. package/CHANGELOG.md +6 -0
  3. package/CONTRIBUTING.md +9 -0
  4. package/bin/build-from-local.ts +8 -7
  5. package/bin/build.ts +22 -21
  6. package/bin/diff-changes.ts +11 -10
  7. package/bin/diff-json-schema.ts +14 -12
  8. package/bin/git.ts +90 -43
  9. package/bin/logger.ts +23 -0
  10. package/bin/main.ts +49 -35
  11. package/bin/output.ts +6 -0
  12. package/bin/slack.ts +8 -7
  13. package/bin/test-report.ts +22 -21
  14. package/bin/utils/config/actor-json.ts +84 -0
  15. package/bin/utils/config/load-config.ts +46 -46
  16. package/bin/utils/config/parser.ts +33 -28
  17. package/bin/utils/config/structures/base.ts +7 -0
  18. package/bin/utils/json-file.ts +11 -14
  19. package/bin/utils/path/repo-relative.ts +156 -0
  20. package/bin/utils/path/schema.ts +18 -0
  21. package/bin/utils.ts +61 -34
  22. package/dist/bin/build-from-local.d.ts +1 -1
  23. package/dist/bin/build-from-local.d.ts.map +1 -1
  24. package/dist/bin/build-from-local.js +8 -7
  25. package/dist/bin/build-from-local.js.map +1 -1
  26. package/dist/bin/build.d.ts.map +1 -1
  27. package/dist/bin/build.js +22 -21
  28. package/dist/bin/build.js.map +1 -1
  29. package/dist/bin/diff-changes.d.ts +1 -1
  30. package/dist/bin/diff-changes.d.ts.map +1 -1
  31. package/dist/bin/diff-changes.js +9 -8
  32. package/dist/bin/diff-changes.js.map +1 -1
  33. package/dist/bin/diff-json-schema.d.ts +1 -1
  34. package/dist/bin/diff-json-schema.d.ts.map +1 -1
  35. package/dist/bin/diff-json-schema.js +13 -12
  36. package/dist/bin/diff-json-schema.js.map +1 -1
  37. package/dist/bin/git.d.ts +10 -10
  38. package/dist/bin/git.d.ts.map +1 -1
  39. package/dist/bin/git.js +78 -37
  40. package/dist/bin/git.js.map +1 -1
  41. package/dist/bin/logger.d.ts +11 -0
  42. package/dist/bin/logger.d.ts.map +1 -0
  43. package/dist/bin/logger.js +20 -0
  44. package/dist/bin/logger.js.map +1 -0
  45. package/dist/bin/main.d.ts +1 -1
  46. package/dist/bin/main.js +48 -35
  47. package/dist/bin/main.js.map +1 -1
  48. package/dist/bin/output.d.ts +3 -0
  49. package/dist/bin/output.d.ts.map +1 -0
  50. package/dist/bin/output.js +6 -0
  51. package/dist/bin/output.js.map +1 -0
  52. package/dist/bin/slack.d.ts.map +1 -1
  53. package/dist/bin/slack.js +8 -7
  54. package/dist/bin/slack.js.map +1 -1
  55. package/dist/bin/test-report.d.ts.map +1 -1
  56. package/dist/bin/test-report.js +22 -21
  57. package/dist/bin/test-report.js.map +1 -1
  58. package/dist/bin/utils/config/actor-json.d.ts +14 -0
  59. package/dist/bin/utils/config/actor-json.d.ts.map +1 -0
  60. package/dist/bin/utils/config/actor-json.js +60 -0
  61. package/dist/bin/utils/config/actor-json.js.map +1 -0
  62. package/dist/bin/utils/config/load-config.d.ts +12 -2
  63. package/dist/bin/utils/config/load-config.d.ts.map +1 -1
  64. package/dist/bin/utils/config/load-config.js +32 -31
  65. package/dist/bin/utils/config/load-config.js.map +1 -1
  66. package/dist/bin/utils/config/parser.d.ts +4 -12
  67. package/dist/bin/utils/config/parser.d.ts.map +1 -1
  68. package/dist/bin/utils/config/parser.js +24 -23
  69. package/dist/bin/utils/config/parser.js.map +1 -1
  70. package/dist/bin/utils/config/structures/base.d.ts +5 -0
  71. package/dist/bin/utils/config/structures/base.d.ts.map +1 -1
  72. package/dist/bin/utils/config/structures/base.js.map +1 -1
  73. package/dist/bin/utils/json-file.d.ts +3 -2
  74. package/dist/bin/utils/json-file.d.ts.map +1 -1
  75. package/dist/bin/utils/json-file.js +8 -13
  76. package/dist/bin/utils/json-file.js.map +1 -1
  77. package/dist/bin/utils/path/repo-relative.d.ts +35 -0
  78. package/dist/bin/utils/path/repo-relative.d.ts.map +1 -0
  79. package/dist/bin/utils/path/repo-relative.js +137 -0
  80. package/dist/bin/utils/path/repo-relative.js.map +1 -0
  81. package/dist/bin/utils/path/schema.d.ts +7 -0
  82. package/dist/bin/utils/path/schema.d.ts.map +1 -0
  83. package/dist/bin/utils/path/schema.js +16 -0
  84. package/dist/bin/utils/path/schema.js.map +1 -0
  85. package/dist/bin/utils.d.ts +14 -3
  86. package/dist/bin/utils.d.ts.map +1 -1
  87. package/dist/bin/utils.js +52 -29
  88. package/dist/bin/utils.js.map +1 -1
  89. package/dist/test/unit/bin/build-from-local.test.js +3 -39
  90. package/dist/test/unit/bin/build-from-local.test.js.map +1 -1
  91. package/dist/test/unit/bin/diff-changes.test.js +97 -96
  92. package/dist/test/unit/bin/diff-changes.test.js.map +1 -1
  93. package/dist/test/unit/bin/diff.test.js +52 -48
  94. package/dist/test/unit/bin/diff.test.js.map +1 -1
  95. package/dist/test/unit/bin/git-command.test.d.ts +2 -0
  96. package/dist/test/unit/bin/git-command.test.d.ts.map +1 -0
  97. package/dist/test/unit/bin/git-command.test.js +54 -0
  98. package/dist/test/unit/bin/git-command.test.js.map +1 -0
  99. package/dist/test/unit/bin/git.test.js +211 -92
  100. package/dist/test/unit/bin/git.test.js.map +1 -1
  101. package/dist/test/unit/bin/logger.test.d.ts +2 -0
  102. package/dist/test/unit/bin/logger.test.d.ts.map +1 -0
  103. package/dist/test/unit/bin/logger.test.js +44 -0
  104. package/dist/test/unit/bin/logger.test.js.map +1 -0
  105. package/dist/test/unit/bin/logging.test.d.ts +2 -0
  106. package/dist/test/unit/bin/logging.test.d.ts.map +1 -0
  107. package/dist/test/unit/bin/logging.test.js +43 -0
  108. package/dist/test/unit/bin/logging.test.js.map +1 -0
  109. package/dist/test/unit/bin/utils/config/load-config.test.js +47 -25
  110. package/dist/test/unit/bin/utils/config/load-config.test.js.map +1 -1
  111. package/dist/test/unit/bin/utils/config/parser.test.js +64 -19
  112. package/dist/test/unit/bin/utils/config/parser.test.js.map +1 -1
  113. package/dist/test/unit/bin/utils/files.test.js +16 -27
  114. package/dist/test/unit/bin/utils/files.test.js.map +1 -1
  115. package/dist/test/unit/bin/utils/path/repo-relative.test.d.ts +2 -0
  116. package/dist/test/unit/bin/utils/path/repo-relative.test.d.ts.map +1 -0
  117. package/dist/test/unit/bin/utils/path/repo-relative.test.js +196 -0
  118. package/dist/test/unit/bin/utils/path/repo-relative.test.js.map +1 -0
  119. package/dist/test/unit/bin/utils/path/schema.test.d.ts +2 -0
  120. package/dist/test/unit/bin/utils/path/schema.test.d.ts.map +1 -0
  121. package/dist/test/unit/bin/utils/path/schema.test.js +52 -0
  122. package/dist/test/unit/bin/utils/path/schema.test.js.map +1 -0
  123. package/dist/test/unit/should-built-and-test.test.js +40 -38
  124. package/dist/test/unit/should-built-and-test.test.js.map +1 -1
  125. package/dist/tsconfig.tsbuildinfo +1 -1
  126. package/eslint.config.mjs +9 -1
  127. package/package.json +4 -4
  128. package/test/unit/bin/build-from-local.test.ts +3 -53
  129. package/test/unit/bin/diff-changes.test.ts +97 -96
  130. package/test/unit/bin/diff.test.ts +53 -48
  131. package/test/unit/bin/git-command.test.ts +71 -0
  132. package/test/unit/bin/git.test.ts +246 -89
  133. package/test/unit/bin/logger.test.ts +55 -0
  134. package/test/unit/bin/logging.test.ts +52 -0
  135. package/test/unit/bin/utils/config/load-config.test.ts +63 -26
  136. package/test/unit/bin/utils/config/parser.test.ts +81 -27
  137. package/test/unit/bin/utils/files.test.ts +19 -33
  138. package/test/unit/bin/utils/path/repo-relative.test.ts +250 -0
  139. package/test/unit/bin/utils/path/schema.test.ts +65 -0
  140. package/test/unit/should-built-and-test.test.ts +40 -38
@@ -1,6 +1,12 @@
1
1
  import z from 'zod';
2
2
 
3
- import { CONFIG_FILE_STRATEGY, type ResolvedActorConfig, type StrategyParser } from './structures/base.js';
3
+ import { ExistingDirSchema, RelativeDirSchema } from '../path/schema.js';
4
+ import {
5
+ CONFIG_FILE_STRATEGY,
6
+ type ResolvedActorConfig,
7
+ type StrategyParser,
8
+ type ValidatedActorConfig,
9
+ } from './structures/base.js';
4
10
  import { GROUPED_PARSER } from './structures/grouped.js';
5
11
  import { LEGACY_PARSER } from './structures/legacy.js';
6
12
 
@@ -32,32 +38,34 @@ const normalizeFolder = (folder: string): string => {
32
38
  return stripped === '.' ? '' : stripped;
33
39
  };
34
40
 
35
- /**
36
- * Normalizes the paths the user wrote and checks the cross-entry invariants a per-entry schema
37
- * cannot: that no two actors claim the same folder once normalized, nor the same actor on the
38
- * platform. Collects every violation before throwing, so one run reports all of them rather than
39
- * only the first.
40
- *
41
- * @returns the actors it vouched for, with their paths normalized.
42
- * @throws Error listing every problem found.
43
- */
44
- function verifyConfiguration(body: ResolvedActorConfig[]): ResolvedActorConfig[] {
45
- const seenFolders = new Set<string>();
46
- const seenActorFullNames = new Set<string>();
47
- const errors: string[] = [];
48
-
41
+ const ValidatedConfigSchema = z.array(
42
+ z.object({
43
+ actorFullName: z.string(),
44
+ folder: ExistingDirSchema,
45
+ tokenEnvVar: z.string(),
46
+ overrideActorContext: z.array(RelativeDirSchema).optional(),
47
+ }),
48
+ );
49
+
50
+ /** Normalize and validate paths, then check collisions using their final spelling. */
51
+ function verifyConfiguration(body: ResolvedActorConfig[]): ValidatedActorConfig[] {
49
52
  const normalized = body.map((entry) => ({
50
53
  ...entry,
51
54
  folder: normalizeFolder(entry.folder),
52
55
  overrideActorContext: entry.overrideActorContext?.map(stripTrailingSlash),
53
56
  }));
57
+ const parsed = ValidatedConfigSchema.safeParse(normalized);
58
+ if (!parsed.success) throw new Error(z.prettifyError(parsed.error));
54
59
 
55
- for (const [index, entry] of normalized.entries()) {
60
+ const seenFolders = new Set<string>();
61
+ const seenActorFullNames = new Set<string>();
62
+ const errors: string[] = [];
63
+ for (const [index, entry] of parsed.data.entries()) {
56
64
  // TODO: drop folder uniqueness (this requires several changes on other places)
57
- if (seenFolders.has(entry.folder)) {
65
+ if (seenFolders.has(entry.folder.path)) {
58
66
  errors.push(`Duplicate folder "${body[index].folder}". Each actor must have a unique folder.`);
59
67
  } else {
60
- seenFolders.add(entry.folder);
68
+ seenFolders.add(entry.folder.path);
61
69
  }
62
70
 
63
71
  if (seenActorFullNames.has(entry.actorFullName)) {
@@ -67,11 +75,8 @@ function verifyConfiguration(body: ResolvedActorConfig[]): ResolvedActorConfig[]
67
75
  }
68
76
  }
69
77
 
70
- if (errors.length > 0) {
71
- throw new Error(errors.join('\n'));
72
- }
73
-
74
- return normalized;
78
+ if (errors.length > 0) throw new Error(errors.join('\n'));
79
+ return parsed.data;
75
80
  }
76
81
 
77
82
  // eslint-disable-next-line no-underscore-dangle
@@ -80,10 +85,10 @@ export const _privates = {
80
85
  verifyConfiguration,
81
86
  };
82
87
 
83
- export function parseConfigFile(body: Record<string, unknown>): ResolvedActorConfig[] {
84
- const strategy = selectStrategy(body);
88
+ export function parseConfigFile(body: Record<string, unknown>): ValidatedActorConfig[] {
89
+ const { mode, ...rest } = body;
90
+ const strategy = selectStrategy({ mode });
85
91
 
86
- const resolved = strategy.parse(body);
87
- const validated = verifyConfiguration(resolved);
88
- return validated;
92
+ const resolved = strategy.parse(rest);
93
+ return verifyConfiguration(resolved);
89
94
  }
@@ -2,6 +2,8 @@ import { prettifyError, type ZodType } from 'zod';
2
2
 
3
3
  import { ACTOR_NAME, USERNAME } from '@apify/consts';
4
4
 
5
+ import type { ExistingDir, RelativeDir } from '../../path/repo-relative.js';
6
+
5
7
  function stripRegexAnchor(regex: string): string {
6
8
  return regex.replace(/^\^/, '').replace(/\$$/, '');
7
9
  }
@@ -21,6 +23,11 @@ export interface ResolvedActorConfig {
21
23
  overrideActorContext: string[] | undefined;
22
24
  }
23
25
 
26
+ export interface ValidatedActorConfig extends Omit<ResolvedActorConfig, 'folder' | 'overrideActorContext'> {
27
+ folder: ExistingDir;
28
+ overrideActorContext?: RelativeDir[];
29
+ }
30
+
24
31
  export enum CONFIG_FILE_STRATEGY {
25
32
  LEGACY = 'legacy',
26
33
  GROUPED = 'grouped',
@@ -1,11 +1,13 @@
1
- import { readFileSync, statSync } from 'node:fs';
1
+ import { readFileSync } from 'node:fs';
2
+
3
+ import type { ExistingFile } from './path/repo-relative.js';
2
4
 
3
5
  /**
4
6
  * Why a JSON object could not be produced from a path. Callers that already have their own
5
7
  * user-facing wording (e.g. the config file reader) switch on this instead of re-deriving the
6
8
  * cause from an error message.
7
9
  */
8
- export type JsonObjectReadFailureReason = 'not-a-file' | 'unreadable' | 'invalid-json' | 'not-an-object';
10
+ export type JsonObjectReadFailureReason = 'unreadable' | 'invalid-json' | 'not-an-object';
9
11
 
10
12
  export type JsonObjectReadResult =
11
13
  | { success: true; contents: Record<string, unknown> }
@@ -21,34 +23,29 @@ const failed = (reason: JsonObjectReadFailureReason, message: string): JsonObjec
21
23
  * Reads a file and parses it as a JSON object, reporting every way that can go wrong as a value
22
24
  * instead of a thrown error — the caller decides which failures are fatal and how to word them.
23
25
  */
24
- export function safeReadJsonObjectFile(path: string): JsonObjectReadResult {
26
+ export function safeReadJsonObjectFile(filePath: ExistingFile): JsonObjectReadResult {
25
27
  let file: string;
26
28
  try {
27
- // `stat`, not `lstat`: a symlink must resolve to its target, matching what `readFile` does below.
28
- const stats = statSync(path);
29
- if (!stats.isFile()) {
30
- return failed('not-a-file', `Expected ${path} to be a file`);
31
- }
32
- file = readFileSync(path, 'utf8');
29
+ file = readFileSync(filePath.path, 'utf8');
33
30
  } catch {
34
- return failed('unreadable', `Expected ${path} to exist or be readable`);
31
+ return failed('unreadable', `Expected ${filePath} to exist or be readable`);
35
32
  }
36
33
 
37
34
  let parsed: unknown;
38
35
  try {
39
36
  parsed = JSON.parse(file);
40
37
  } catch (err) {
41
- return failed('invalid-json', `Failed to parse ${path}: ${err}`);
38
+ return failed('invalid-json', `Failed to parse ${filePath}: ${err}`);
42
39
  }
43
40
 
44
41
  if (parsed === null) {
45
- return failed('not-an-object', `Expected ${path} to be a JSON object, not null`);
42
+ return failed('not-an-object', `Expected ${filePath} to be a JSON object, not null`);
46
43
  }
47
44
  if (Array.isArray(parsed)) {
48
- return failed('not-an-object', `Expected ${path} to be a JSON object, not an array`);
45
+ return failed('not-an-object', `Expected ${filePath} to be a JSON object, not an array`);
49
46
  }
50
47
  if (typeof parsed !== 'object') {
51
- return failed('not-an-object', `Expected ${path} to be a JSON object`);
48
+ return failed('not-an-object', `Expected ${filePath} to be a JSON object`);
52
49
  }
53
50
 
54
51
  return { success: true, contents: parsed as Record<string, unknown> };
@@ -0,0 +1,156 @@
1
+ /* eslint-disable max-classes-per-file */
2
+ import { statSync } from 'node:fs';
3
+ import path from 'node:path';
4
+
5
+ // Git and the config file always use "/", so paths are POSIX regardless of the host OS.
6
+ const { posix } = path;
7
+
8
+ // A file path cannot end in "/", ".", "..", or be empty: each of those names a directory.
9
+ const assertNamesFile = (rawPath: string): void => {
10
+ const lastSegment = rawPath.slice(rawPath.lastIndexOf('/') + 1);
11
+ if (lastSegment === '' || lastSegment === '.' || lastSegment === '..') {
12
+ throw new Error(`Expected a file path, got directory path "${rawPath}".`);
13
+ }
14
+ };
15
+
16
+ // Shared by the file and directory paths. Use it as a parameter type where either kind is fine.
17
+ export abstract class AbstractPath {
18
+ readonly #path: string;
19
+ constructor(rawPath: string) {
20
+ if (posix.isAbsolute(rawPath)) {
21
+ throw new Error(`Expected a relative path, got absolute path "${rawPath}".`);
22
+ }
23
+ const normalized = posix.normalize(rawPath);
24
+ // normalize keeps a trailing slash ("actors/foo/"), which would make equal paths compare unequal.
25
+ this.#path = normalized.endsWith('/') ? normalized.slice(0, -1) : normalized;
26
+ this.assertNoEscape(rawPath);
27
+ }
28
+
29
+ // A file and a directory are never equal, even when spelled the same.
30
+ isEqualTo(other: AbstractPath): boolean {
31
+ // inheritance safe check, at least one of the two is a subclass of the other
32
+ const isRelativeOf = this instanceof other.constructor || other instanceof this.constructor;
33
+ return isRelativeOf && this.#path === other.#path;
34
+ }
35
+
36
+ get path(): string {
37
+ return this.#path;
38
+ }
39
+
40
+ toString(): string {
41
+ return this.path;
42
+ }
43
+
44
+ toJSON(): string {
45
+ return this.path;
46
+ }
47
+
48
+ private assertNoEscape(raw: string): void {
49
+ if (this.#path === '..' || this.#path.startsWith('../')) {
50
+ throw new Error(`Path "${raw}" escapes the repo root.`);
51
+ }
52
+ }
53
+ }
54
+
55
+ export class RelativeDir extends AbstractPath {
56
+ static readonly ROOT = new RelativeDir('.');
57
+
58
+ joinDir(relativePath: string): RelativeDir {
59
+ return new RelativeDir(this.join(relativePath));
60
+ }
61
+
62
+ joinFile(relativePath: string): RelativeFile {
63
+ // Must be checked before joining: posix.join('actors/foo', '.') is "actors/foo", which looks like a file.
64
+ assertNamesFile(relativePath);
65
+ return new RelativeFile(this.join(relativePath));
66
+ }
67
+
68
+ // True when `other` is this directory itself or lies inside it.
69
+ contains(other: AbstractPath): boolean {
70
+ // the root contains every path
71
+ if (this.path === '.') return true;
72
+ return this.isEqualTo(other) || other.path.startsWith(`${this.path}/`);
73
+ }
74
+
75
+ isStrictAncestorOf(other: AbstractPath): boolean {
76
+ // you are not an ancestor of yourself
77
+ return !this.isEqualTo(other) && this.contains(other);
78
+ }
79
+
80
+ // Throws unless this path exists and is a directory. Paths resolve against the process working
81
+ // directory, which is the repo root.
82
+ assertIsDir(): this {
83
+ // `stat`, not `lstat`: a symlink must resolve to its target, matching what reading it does.
84
+ const stats = statSync(this.path, { throwIfNoEntry: false });
85
+ if (!stats) throw new Error(`Expected directory "${this}" to exist.`);
86
+ if (!stats.isDirectory()) throw new Error(`Expected "${this}" to be a directory.`);
87
+ return this;
88
+ }
89
+
90
+ private join(relativePath: string): string {
91
+ // Must be checked here: posix.join('.', '/etc') is "etc", so the constructor would not catch it.
92
+ if (posix.isAbsolute(relativePath)) {
93
+ throw new Error(`Expected a relative path to join with "${this}", got absolute path "${relativePath}".`);
94
+ }
95
+ return posix.join(this.path, relativePath);
96
+ }
97
+ }
98
+
99
+ export class ExistingDir extends RelativeDir {
100
+ constructor(rawPath: string) {
101
+ super(rawPath);
102
+ this.assertIsDir();
103
+ }
104
+
105
+ static initialize(dir: RelativeDir): ExistingDir {
106
+ return new ExistingDir(dir.path);
107
+ }
108
+ }
109
+
110
+ export class RelativeFile extends AbstractPath {
111
+ constructor(rawPath: string) {
112
+ assertNamesFile(rawPath);
113
+ super(rawPath);
114
+ }
115
+
116
+ // The directory containing this file.
117
+ get parent(): RelativeDir {
118
+ return new RelativeDir(posix.dirname(this.path));
119
+ }
120
+
121
+ // Resolves against the file's directory, the way a path written inside the file is meant
122
+ // (e.g. `dockerContextDir: ".."` in `.actor/actor.json` is the actor folder).
123
+ joinDir(relativePath: string): RelativeDir {
124
+ return this.parent.joinDir(relativePath);
125
+ }
126
+
127
+ // Resolves against the file's directory, e.g. a sibling file.
128
+ joinFile(relativePath: string): RelativeFile {
129
+ return this.parent.joinFile(relativePath);
130
+ }
131
+
132
+ isWithin(scope: RelativeDir): boolean {
133
+ return scope.contains(this);
134
+ }
135
+
136
+ // Throws unless this path exists and is a file. Paths resolve against the process working
137
+ // directory, which is the repo root.
138
+ assertIsFile(): this {
139
+ // `stat`, not `lstat`: a symlink must resolve to its target, matching what reading it does.
140
+ const stats = statSync(this.path, { throwIfNoEntry: false });
141
+ if (!stats) throw new Error(`Expected file "${this}" to exist.`);
142
+ if (!stats.isFile()) throw new Error(`Expected "${this}" to be a file.`);
143
+ return this;
144
+ }
145
+ }
146
+
147
+ export class ExistingFile extends RelativeFile {
148
+ constructor(rawPath: string) {
149
+ super(rawPath);
150
+ this.assertIsFile();
151
+ }
152
+
153
+ static initialize(file: RelativeFile): ExistingFile {
154
+ return new ExistingFile(file.path);
155
+ }
156
+ }
@@ -0,0 +1,18 @@
1
+ import z from 'zod';
2
+
3
+ import { ExistingDir, ExistingFile, RelativeDir, RelativeFile } from './repo-relative.js';
4
+
5
+ const parsePath = <T>(construct: (value: string) => T) =>
6
+ z.string().transform((value, ctx): T | typeof z.NEVER => {
7
+ try {
8
+ return construct(value);
9
+ } catch (error) {
10
+ ctx.addIssue({ code: 'custom', message: error instanceof Error ? error.message : String(error) });
11
+ return z.NEVER;
12
+ }
13
+ });
14
+
15
+ export const RelativeDirSchema = parsePath((value) => new RelativeDir(value));
16
+ export const ExistingDirSchema = parsePath((value) => new ExistingDir(value));
17
+ export const RelativeFileSchema = parsePath((value) => new RelativeFile(value));
18
+ export const ExistingFileSchema = parsePath((value) => new ExistingFile(value));
package/bin/utils.ts CHANGED
@@ -1,6 +1,11 @@
1
- import { spawnSync } from 'node:child_process';
1
+ import { execFile } from 'node:child_process';
2
2
  import fs from 'node:fs/promises';
3
3
  import path from 'node:path';
4
+ import { promisify } from 'node:util';
5
+
6
+ import { logger } from './logger.js';
7
+
8
+ const execFileAsync = promisify(execFile);
4
9
 
5
10
  // Returns true when `childPath` is not inside `parentPath`.
6
11
  // Used to detect monorepo actors whose dockerContextDir escapes the actor directory.
@@ -14,18 +19,13 @@ export const isOutsideDir = (childPath: string, parentPath: string): boolean =>
14
19
  * to keep, e.g. because .actor/ must survive even if .gitignore would otherwise exclude it.
15
20
  * This also means .git/ itself is never walked, since git never lists its own internals here.
16
21
  */
17
- export const listRepoFilePaths = (repoRoot: string, subDir: string): string[] => {
22
+ export const listRepoFilePaths = async (repoRoot: string, subDir: string): Promise<string[]> => {
18
23
  const relSubDir = path.relative(repoRoot, subDir).split(path.sep).join('/') || '.';
19
- const result = spawnSync('git', ['ls-files', '--cached', '--others', '-z', '--', relSubDir], {
24
+ const output = await runGitCommand(['ls-files', '--cached', '--others', '-z', '--', relSubDir], {
20
25
  cwd: repoRoot,
21
- maxBuffer: 100 * 1024 * 1024,
26
+ operation: 'list repository files for the local build',
22
27
  });
23
-
24
- if (result.status !== 0) {
25
- throw new Error(`[Command failed]: git ls-files\n${result.stderr.toString()}`);
26
- }
27
-
28
- return result.stdout.toString().split('\0').filter(Boolean);
28
+ return output.split('\0').filter(Boolean);
29
29
  };
30
30
 
31
31
  /**
@@ -34,21 +34,23 @@ export const listRepoFilePaths = (repoRoot: string, subDir: string): string[] =>
34
34
  * anything `git` itself respects). Delegating to `git check-ignore` avoids re-implementing gitignore
35
35
  * pattern matching.
36
36
  */
37
- export const getGitignoredPaths = (relativePaths: string[]): Set<string> => {
37
+ export const getGitignoredPaths = async (relativePaths: string[], cwd?: string): Promise<Set<string>> => {
38
38
  if (relativePaths.length === 0) return new Set();
39
39
 
40
- const result = spawnSync('git', ['check-ignore', '--stdin'], {
41
- input: relativePaths.join('\n'),
42
- maxBuffer: 100 * 1024 * 1024,
43
- });
44
-
45
40
  // Exit code 1 means none of the given paths are ignored - not an error. Anything else
46
41
  // (e.g. 128 for "not a git repository") is a real failure.
47
- if (result.status !== 0 && result.status !== 1) {
48
- throw new Error(`[Command failed]: git check-ignore\n${result.stderr.toString()}`);
49
- }
50
-
51
- return new Set(result.stdout.toString().split('\n').filter(Boolean));
42
+ return runGitCommand(['check-ignore', '--', ...relativePaths], {
43
+ cwd,
44
+ operation: 'check which repository paths are ignored',
45
+ })
46
+ .then((output) => new Set(output.split('\n').filter(Boolean)))
47
+ .catch((error: unknown) => {
48
+ // exit code 1 means none of the given paths are ignored - not an error
49
+ if (error instanceof GitCommandError && error.exitCode === 1) {
50
+ return new Set<string>();
51
+ }
52
+ throw error;
53
+ });
52
54
  };
53
55
 
54
56
  export type SourceFile = { name: string; content: Buffer };
@@ -58,22 +60,47 @@ export const readSourceFile = async (absPath: string, rootDir: string): Promise<
58
60
  content: await fs.readFile(absPath),
59
61
  });
60
62
 
61
- export const spawnCommand = (command: string, args: string[] = []) => {
62
- console.error(command, args.join(' '));
63
- const commandResult = spawnSync(command, args, { shell: true, maxBuffer: 100 * 1024 * 1024 });
64
-
65
- if (commandResult.error) {
66
- throw new Error(`[Command failed]: ${command}\n${commandResult.error}`);
67
- }
63
+ export class GitCommandError extends Error {
64
+ readonly args: readonly string[];
65
+ readonly gitError: string;
66
+ readonly exitCode?: number;
67
+ readonly cause: unknown;
68
68
 
69
- if (commandResult.stderr.toString().length > 0) {
70
- // For some reason 'git' command prints stderr when checking out to detached HEAD state (we only use detached HEAD for testing though)
71
- if (!commandResult.stderr.toString().includes(`You are in 'detached HEAD' state`)) {
72
- throw new Error(`[Command printed stderr]: ${command}\n${commandResult.stderr.toString()}`);
73
- }
69
+ constructor(args: readonly string[], error: unknown, operation?: string) {
70
+ const stderr =
71
+ typeof error === 'object' && error !== null && 'stderr' in error && typeof error.stderr === 'string'
72
+ ? error.stderr.trim()
73
+ : '';
74
+ const gitError = stderr || (error instanceof Error ? error.message : String(error));
75
+ const exitCode =
76
+ typeof error === 'object' && error !== null && 'code' in error && typeof error.code === 'number'
77
+ ? error.code
78
+ : undefined;
79
+ const command = `git ${args.map((arg) => JSON.stringify(arg)).join(' ')}`;
80
+ const operationContext = operation ? `Failed to ${operation}.\n` : '';
81
+ super(`${operationContext}Command: ${command}\nGit error: ${gitError}`);
82
+ this.name = 'GitCommandError';
83
+ this.args = [...args];
84
+ this.gitError = gitError;
85
+ this.exitCode = exitCode;
86
+ this.cause = error;
74
87
  }
88
+ }
75
89
 
76
- return commandResult.stdout.toString().trim();
90
+ /** Runs Git asynchronously, passing each argument directly to Git without a shell. */
91
+ export const runGitCommand = async (
92
+ args: string[],
93
+ { cwd, operation }: { cwd?: string; operation?: string } = {},
94
+ ): Promise<string> => {
95
+ logger.debug('git', args);
96
+ const { stdout } = await execFileAsync('git', args, { cwd, encoding: 'utf8', maxBuffer: 100 * 1024 * 1024 }).catch(
97
+ (error: unknown) => {
98
+ const err = new GitCommandError(args, error, operation);
99
+ logger.debug('git command failed:\n', err);
100
+ throw err;
101
+ },
102
+ );
103
+ return stdout.trim();
77
104
  };
78
105
 
79
106
  export const getEnvVar = (varName: string, defaultValue?: string): string => {
@@ -1,7 +1,7 @@
1
1
  import type { ActorConfig, BuildData } from './types.js';
2
2
  import type { SourceFile } from './utils.js';
3
3
  export declare const collectSourceFiles: (actorName: string, actorDir: string) => Promise<SourceFile[]>;
4
- export declare const collectNonIgnoredFiles: (dockerContextDir: string, repoRoot: string) => string[];
4
+ export declare const collectNonIgnoredFiles: (dockerContextDir: string, repoRoot: string) => Promise<string[]>;
5
5
  export declare const flattenMonorepoContext: (actorName: string, absActorDir: string, contextAbsDir: string, actorJson: Record<string, unknown>, keptContextFiles: string[]) => Promise<{
6
6
  tempDir: string;
7
7
  filePaths: string[];
@@ -1 +1 @@
1
- {"version":3,"file":"build-from-local.d.ts","sourceRoot":"","sources":["../../bin/build-from-local.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,eAAO,MAAM,kBAAkB,GAAU,WAAW,MAAM,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAiClG,CAAC;AAWF,eAAO,MAAM,sBAAsB,GAAI,kBAAkB,MAAM,EAAE,UAAU,MAAM,KAAG,MAAM,EAoBzF,CAAC;AAaF,eAAO,MAAM,sBAAsB,GAC/B,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,eAAe,MAAM,EACrB,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,MAAM,EAAE,KAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAyClD,CAAC;AAcF,eAAO,MAAM,qBAAqB,GAC9B,aAAa,MAAM,EACnB,eAAe,MAAM,EACrB,SAAS,MAAM,EACf,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACnC,OAAO,CAAC,IAAI,CAqBd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,2BAGtC;IACC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACnB,KAAG,OAAO,CAAC,SAAS,EAAE,CAsBtB,CAAC"}
1
+ {"version":3,"file":"build-from-local.d.ts","sourceRoot":"","sources":["../../bin/build-from-local.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACzD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAU7C,eAAO,MAAM,kBAAkB,GAAU,WAAW,MAAM,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,UAAU,EAAE,CAiClG,CAAC;AAWF,eAAO,MAAM,sBAAsB,GAAU,kBAAkB,MAAM,EAAE,UAAU,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAoBzG,CAAC;AAaF,eAAO,MAAM,sBAAsB,GAC/B,WAAW,MAAM,EACjB,aAAa,MAAM,EACnB,eAAe,MAAM,EACrB,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,kBAAkB,MAAM,EAAE,KAC3B,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,CAyClD,CAAC;AAcF,eAAO,MAAM,qBAAqB,GAC9B,aAAa,MAAM,EACnB,eAAe,MAAM,EACrB,SAAS,MAAM,EACf,WAAW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KACnC,OAAO,CAAC,IAAI,CAqBd,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAAU,2BAGtC;IACC,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,MAAM,EAAE,OAAO,CAAC;CACnB,KAAG,OAAO,CAAC,SAAS,EAAE,CAsBtB,CAAC"}
@@ -5,6 +5,7 @@ import AdmZip from 'adm-zip';
5
5
  import { ActorSourceType } from 'apify-client';
6
6
  import { dryRunBuildData, LOCAL_SOURCE_VERSION_NUMBER, runAndSummarizeBuilds } from './build.js';
7
7
  import { buildDockerIgnoreMatcher } from './dockerignore.js';
8
+ import { logger } from './logger.js';
8
9
  import { isPathWithinScope } from './path-utils.js';
9
10
  import { getGitignoredPaths, isOutsideDir, listRepoFilePaths, readSourceFile } from './utils.js';
10
11
  // JUST IN CASE. File patterns that commonly hold credentials — never ship these into a build, regardless
@@ -25,7 +26,7 @@ export const collectSourceFiles = async (actorName, actorDir) => {
25
26
  const contextAbsDir = rawContextDir ? path.resolve(absActorDir, '.actor', rawContextDir) : undefined;
26
27
  const isMonorepoActor = !!contextAbsDir && isOutsideDir(contextAbsDir, absActorDir);
27
28
  const dockerContextDirAbs = isMonorepoActor ? contextAbsDir : absActorDir;
28
- const keptFilePaths = collectNonIgnoredFiles(dockerContextDirAbs, repoRoot);
29
+ const keptFilePaths = await collectNonIgnoredFiles(dockerContextDirAbs, repoRoot);
29
30
  if (!isMonorepoActor) {
30
31
  return Promise.all(keptFilePaths.map(async (filePath) => readSourceFile(filePath, dockerContextDirAbs)));
31
32
  }
@@ -47,9 +48,9 @@ export const collectSourceFiles = async (actorName, actorDir) => {
47
48
  // regardless of .gitignore/.dockerignore, matching Apify CLI's own behavior. Files matching the
48
49
  // hardcoded secret-pattern backstop (keys, certs, .env variants) are dropped unconditionally,
49
50
  // .actor/ included, since those should never ship regardless of what the ignore files say.
50
- export const collectNonIgnoredFiles = (dockerContextDir, repoRoot) => {
51
- const relativePaths = listRepoFilePaths(repoRoot, dockerContextDir);
52
- const ignoredPaths = getGitignoredPaths(relativePaths);
51
+ export const collectNonIgnoredFiles = async (dockerContextDir, repoRoot) => {
52
+ const relativePaths = await listRepoFilePaths(repoRoot, dockerContextDir);
53
+ const ignoredPaths = await getGitignoredPaths(relativePaths, repoRoot);
53
54
  const rootRelativePaths = new Map(relativePaths.map((relPath) => [
54
55
  relPath,
55
56
  path.relative(dockerContextDir, path.join(repoRoot, relPath)).split(path.sep).join('/'),
@@ -80,7 +81,7 @@ export const collectNonIgnoredFiles = (dockerContextDir, repoRoot) => {
80
81
  // all relative paths (dockerfile, dockerContextDir, changelog) are exactly one
81
82
  // level up ("..") instead of three ("../../..").
82
83
  export const flattenMonorepoContext = async (actorName, absActorDir, contextAbsDir, actorJson, keptContextFiles) => {
83
- console.error(`[${actorName}]: monorepo actor detected — flattening from Docker context`);
84
+ logger.info(`[${actorName}]: monorepo actor detected — flattening from Docker context`);
84
85
  const tempDir = await fs.mkdtemp(path.join(os.tmpdir(), `apify-build-${actorName.replace('/', '_')}-`));
85
86
  const filePaths = [];
86
87
  // Step 1: copy only the files that survived gitignore/secret filtering, preserving their
@@ -147,9 +148,9 @@ export const rewriteActorJsonPaths = async (absActorDir, contextAbsDir, tempDir,
147
148
  };
148
149
  export const runBuildsFromLocal = async ({ actorConfigs, dryRun, }) => {
149
150
  if (dryRun) {
150
- console.error('[DRY RUN] Would build from local source:');
151
+ logger.info('[DRY RUN] Would build from local source:');
151
152
  for (const { actorFullName, folder } of actorConfigs) {
152
- console.error(` ${actorFullName} (${folder})`);
153
+ logger.info(` ${actorFullName} (${folder})`);
153
154
  }
154
155
  return actorConfigs.map(({ actorFullName }) => dryRunBuildData(actorFullName, LOCAL_SOURCE_VERSION_NUMBER));
155
156
  }
@@ -1 +1 @@
1
- {"version":3,"file":"build-from-local.js","sourceRoot":"","sources":["../../bin/build-from-local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"build-from-local.js","sourceRoot":"","sources":["../../bin/build-from-local.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../bin/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,gBAAgB,MAAM,cAAc,CAAC;AAItD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAYzD,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAQlD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,WAAW,gBAAgB,CAAC,KAAK;;;;;CAsB7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,GAC3C,eAAe,MAAM,EACrB,gBAAgB,gBAAgB,CAAC,YAAY,GAAG,SAAS,EACzD,SAAS,MAAM,SAoBlB,CAAC;AAEF,qBAAa,YAAY;IAEjB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAFlC,OAAO;IAKP,YAAY,QAAa,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAQtD;IAEF,uBAAuB;;;;;OAAoF;IAI3G,eAAe,GAAU,eAAe,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;IAGF,qBAAqB,GACjB,eAAe,MAAM,EACrB,cAAc,gBAAgB,CAAC,YAAY,EAC3C,UAAU,OAAO,EACjB,YAAY,gBAAgB,CAAC,KAAK,KACnC,OAAO,CAAC,SAAS,CAAC,CAmBnB;IAEF,oBAAoB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAmB7E;IAEF,MAAM,CAAC,eAAe,GAAI,aAAa,WAAW,KAAG,YAAY,CAQ/D;IAEF;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAsFzC;AAED,eAAO,MAAM,sBAAsB,GAC/B,eAAe,SAAS,EAAE,EAC1B,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,OAAO,MAAM,KACd,OAAO,CAAC,SAAS,EAAE,CAkBrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAC9B,cAAc,WAAW,EAAE,EAC3B,OAAO,MAAM,EACb,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,KACvF,OAAO,CAAC,SAAS,EAAE,CAarB,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,KAAG,SAK7E,CAAC;AAEH,KAAK,gBAAgB,GAAG;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,2FAQ7B,gBAAgB,KAAG,OAAO,CAAC,SAAS,EAAE,CA2DxC,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,cAAc,WAAW,EAAE,kBAIhE,CAAC"}
1
+ {"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../bin/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,gBAAgB,MAAM,cAAc,CAAC;AAKtD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAYzD,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAQlD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,WAAW,gBAAgB,CAAC,KAAK;;;;;CAsB7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,GAC3C,eAAe,MAAM,EACrB,gBAAgB,gBAAgB,CAAC,YAAY,GAAG,SAAS,EACzD,SAAS,MAAM,SAoBlB,CAAC;AAEF,qBAAa,YAAY;IAEjB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAFlC,OAAO;IAKP,YAAY,QAAa,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAQtD;IAEF,uBAAuB;;;;;OAAoF;IAI3G,eAAe,GAAU,eAAe,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;IAGF,qBAAqB,GACjB,eAAe,MAAM,EACrB,cAAc,gBAAgB,CAAC,YAAY,EAC3C,UAAU,OAAO,EACjB,YAAY,gBAAgB,CAAC,KAAK,KACnC,OAAO,CAAC,SAAS,CAAC,CAmBnB;IAEF,oBAAoB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAmB7E;IAEF,MAAM,CAAC,eAAe,GAAI,aAAa,WAAW,KAAG,YAAY,CAQ/D;IAEF;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAsFzC;AAED,eAAO,MAAM,sBAAsB,GAC/B,eAAe,SAAS,EAAE,EAC1B,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,OAAO,MAAM,KACd,OAAO,CAAC,SAAS,EAAE,CAkBrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAC9B,cAAc,WAAW,EAAE,EAC3B,OAAO,MAAM,EACb,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,KACvF,OAAO,CAAC,SAAS,EAAE,CAarB,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,KAAG,SAK7E,CAAC;AAEH,KAAK,gBAAgB,GAAG;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,2FAQ7B,gBAAgB,KAAG,OAAO,CAAC,SAAS,EAAE,CA2DxC,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,cAAc,WAAW,EAAE,kBAIhE,CAAC"}