apify-test-tools 0.10.1-beta.6 → 0.10.1-beta.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/build-from-local.ts +19 -27
- package/bin/build.ts +1 -1
- package/bin/diff-changes.ts +26 -35
- package/bin/dockerignore.ts +24 -17
- package/bin/types.ts +7 -3
- package/bin/utils/config/actor-json.ts +49 -8
- package/bin/utils/config/load-config.ts +4 -24
- package/bin/utils/path/repo-relative.ts +27 -4
- package/dist/bin/build-from-local.d.ts +3 -2
- package/dist/bin/build-from-local.d.ts.map +1 -1
- package/dist/bin/build-from-local.js +16 -23
- package/dist/bin/build-from-local.js.map +1 -1
- package/dist/bin/build.js +1 -1
- package/dist/bin/build.js.map +1 -1
- package/dist/bin/diff-changes.d.ts.map +1 -1
- package/dist/bin/diff-changes.js +26 -29
- package/dist/bin/diff-changes.js.map +1 -1
- package/dist/bin/dockerignore.d.ts +11 -10
- package/dist/bin/dockerignore.d.ts.map +1 -1
- package/dist/bin/dockerignore.js +24 -15
- package/dist/bin/dockerignore.js.map +1 -1
- package/dist/bin/types.d.ts +6 -3
- package/dist/bin/types.d.ts.map +1 -1
- package/dist/bin/utils/config/actor-json.d.ts.map +1 -1
- package/dist/bin/utils/config/actor-json.js +35 -4
- package/dist/bin/utils/config/actor-json.js.map +1 -1
- package/dist/bin/utils/config/load-config.d.ts +1 -11
- package/dist/bin/utils/config/load-config.d.ts.map +1 -1
- package/dist/bin/utils/config/load-config.js +1 -10
- package/dist/bin/utils/config/load-config.js.map +1 -1
- package/dist/bin/utils/path/repo-relative.d.ts +4 -0
- package/dist/bin/utils/path/repo-relative.d.ts.map +1 -1
- package/dist/bin/utils/path/repo-relative.js +24 -5
- package/dist/bin/utils/path/repo-relative.js.map +1 -1
- package/dist/test/unit/bin/actor-filtering.test.js +8 -2
- package/dist/test/unit/bin/actor-filtering.test.js.map +1 -1
- package/dist/test/unit/bin/build-from-local.test.js +53 -5
- package/dist/test/unit/bin/build-from-local.test.js.map +1 -1
- package/dist/test/unit/bin/diff-changes.test.js +98 -132
- package/dist/test/unit/bin/diff-changes.test.js.map +1 -1
- package/dist/test/unit/bin/dockerignore.test.js +27 -24
- package/dist/test/unit/bin/dockerignore.test.js.map +1 -1
- package/dist/test/unit/bin/utils/config/load-config.test.js +40 -4
- package/dist/test/unit/bin/utils/config/load-config.test.js.map +1 -1
- package/dist/test/unit/bin/utils/path/repo-relative.test.js +5 -0
- package/dist/test/unit/bin/utils/path/repo-relative.test.js.map +1 -1
- package/dist/test/unit/should-built-and-test.test.js +55 -116
- package/dist/test/unit/should-built-and-test.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +1 -1
- package/test/unit/bin/actor-filtering.test.ts +8 -2
- package/test/unit/bin/build-from-local.test.ts +54 -8
- package/test/unit/bin/diff-changes.test.ts +133 -133
- package/test/unit/bin/dockerignore.test.ts +28 -28
- package/test/unit/bin/utils/config/load-config.test.ts +54 -4
- package/test/unit/bin/utils/path/repo-relative.test.ts +6 -0
- package/test/unit/should-built-and-test.test.ts +98 -121
|
@@ -45,6 +45,9 @@ export class AbstractPath {
|
|
|
45
45
|
}
|
|
46
46
|
export class RelativeDir extends AbstractPath {
|
|
47
47
|
static ROOT = new RelativeDir('.');
|
|
48
|
+
isRoot() {
|
|
49
|
+
return this.path === RelativeDir.ROOT.path;
|
|
50
|
+
}
|
|
48
51
|
joinDir(relativePath) {
|
|
49
52
|
return new RelativeDir(this.join(relativePath));
|
|
50
53
|
}
|
|
@@ -53,10 +56,23 @@ export class RelativeDir extends AbstractPath {
|
|
|
53
56
|
assertNamesFile(relativePath);
|
|
54
57
|
return new RelativeFile(this.join(relativePath));
|
|
55
58
|
}
|
|
59
|
+
relativePathTo(filePath) {
|
|
60
|
+
// mainly for matching against .dockerignore since paths consumed by it are relative to the docker context dir
|
|
61
|
+
return posix.relative(this.path, filePath);
|
|
62
|
+
}
|
|
63
|
+
containsPath(filePath) {
|
|
64
|
+
try {
|
|
65
|
+
// should be OK even if not a directory (e.g. a file)
|
|
66
|
+
return this.contains(new RelativeDir(filePath));
|
|
67
|
+
}
|
|
68
|
+
catch {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
}
|
|
56
72
|
// True when `other` is this directory itself or lies inside it.
|
|
57
73
|
contains(other) {
|
|
58
74
|
// the root contains every path
|
|
59
|
-
if (this.
|
|
75
|
+
if (this.isRoot())
|
|
60
76
|
return true;
|
|
61
77
|
return this.isEqualTo(other) || other.path.startsWith(`${this.path}/`);
|
|
62
78
|
}
|
|
@@ -113,16 +129,19 @@ export class RelativeFile extends AbstractPath {
|
|
|
113
129
|
isWithin(scope) {
|
|
114
130
|
return scope.contains(this);
|
|
115
131
|
}
|
|
132
|
+
exists() {
|
|
133
|
+
// `stat`, not `lstat`: a symlink must resolve to its target, matching what reading it does.
|
|
134
|
+
return statSync(this.path, { throwIfNoEntry: false })?.isFile() ?? false;
|
|
135
|
+
}
|
|
116
136
|
// Throws unless this path exists and is a file. Paths resolve against the process working
|
|
117
137
|
// directory, which is the repo root.
|
|
118
138
|
assertIsFile() {
|
|
119
|
-
|
|
139
|
+
if (this.exists())
|
|
140
|
+
return this;
|
|
120
141
|
const stats = statSync(this.path, { throwIfNoEntry: false });
|
|
121
142
|
if (!stats)
|
|
122
143
|
throw new Error(`Expected file "${this}" to exist.`);
|
|
123
|
-
|
|
124
|
-
throw new Error(`Expected "${this}" to be a file.`);
|
|
125
|
-
return this;
|
|
144
|
+
throw new Error(`Expected "${this}" to be a file.`);
|
|
126
145
|
}
|
|
127
146
|
}
|
|
128
147
|
export class ExistingFile extends RelativeFile {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo-relative.js","sourceRoot":"","sources":["../../../../bin/utils/path/repo-relative.ts"],"names":[],"mappings":"AAAA,yCAAyC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wFAAwF;AACxF,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI,CAAC;AAEvB,0FAA0F;AAC1F,MAAM,eAAe,GAAG,CAAC,OAAe,EAAQ,EAAE;IAC9C,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IAChE,IAAI,WAAW,KAAK,EAAE,IAAI,WAAW,KAAK,GAAG,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;QACpE,MAAM,IAAI,KAAK,CAAC,6CAA6C,OAAO,IAAI,CAAC,CAAC;IAC9E,CAAC;AACL,CAAC,CAAC;AAEF,gGAAgG;AAChG,MAAM,OAAgB,YAAY;IACrB,KAAK,CAAS;IACvB,YAAY,OAAe;QACvB,IAAI,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,gDAAgD,OAAO,IAAI,CAAC,CAAC;QACjF,CAAC;QACD,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC;QAC5C,kGAAkG;QAClG,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC;QAC7E,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;IACjC,CAAC;IAED,sEAAsE;IACtE,SAAS,CAAC,KAAmB;QACzB,6EAA6E;QAC7E,MAAM,YAAY,GAAG,IAAI,YAAY,KAAK,CAAC,WAAW,IAAI,KAAK,YAAY,IAAI,CAAC,WAAW,CAAC;QAC5F,OAAO,YAAY,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,KAAK,CAAC;IACtD,CAAC;IAED,IAAI,IAAI;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC;IACtB,CAAC;IAED,QAAQ;QACJ,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAED,MAAM;QACF,OAAO,IAAI,CAAC,IAAI,CAAC;IACrB,CAAC;IAEO,cAAc,CAAC,GAAW;QAC9B,IAAI,IAAI,CAAC,KAAK,KAAK,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACtD,MAAM,IAAI,KAAK,CAAC,SAAS,GAAG,0BAA0B,CAAC,CAAC;QAC5D,CAAC;IACL,CAAC;CACJ;AAED,MAAM,OAAO,WAAY,SAAQ,YAAY;IACzC,MAAM,CAAU,IAAI,GAAG,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC;IAE5C,OAAO,CAAC,YAAoB;QACxB,OAAO,IAAI,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACpD,CAAC;IAED,QAAQ,CAAC,YAAoB;QACzB,0GAA0G;QAC1G,eAAe,CAAC,YAAY,CAAC,CAAC;QAC9B,OAAO,IAAI,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IACrD,CAAC;IAED,gEAAgE;IAChE,QAAQ,CAAC,KAAmB;QACxB,+BAA+B;QAC/B,IAAI,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"repo-relative.js","sourceRoot":"","sources":["../../../../bin/utils/path/repo-relative.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { describe, expect, it } from 'vitest';
|
|
2
2
|
import { selectActors } from '../../../bin/actor-filtering.js';
|
|
3
|
+
import { ExistingDir, ExistingFile, RelativeDir } from '../../../bin/utils/path/repo-relative.js';
|
|
3
4
|
const actor = (actorFullName) => ({
|
|
4
5
|
actorFullName,
|
|
5
|
-
folder:
|
|
6
|
+
folder: new ExistingDir('.'),
|
|
6
7
|
tokenEnvVar: 'TOKEN',
|
|
7
|
-
|
|
8
|
+
actorJson: {
|
|
9
|
+
// kind of a hack, but its not supposed to be read here
|
|
10
|
+
file: new ExistingFile('package.json'),
|
|
11
|
+
dockerContextDir: RelativeDir.ROOT,
|
|
12
|
+
},
|
|
13
|
+
dockerContextDir: new RelativeDir('.'),
|
|
8
14
|
contextPaths: [],
|
|
9
15
|
});
|
|
10
16
|
const configs = [actor('owner/a'), actor('owner/b'), actor('owner/c')];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actor-filtering.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/actor-filtering.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE9C,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;
|
|
1
|
+
{"version":3,"file":"actor-filtering.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/actor-filtering.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,6 +8,7 @@ import { collectNonIgnoredFiles, collectSourceFiles, flattenMonorepoContext, rew
|
|
|
8
8
|
// tsconfig (used for the real build and for eslint's type-aware linting) has no such restriction.
|
|
9
9
|
} from '../../../bin/build-from-local.js';
|
|
10
10
|
import * as Utils from '../../../bin/utils.js';
|
|
11
|
+
import { ExistingDir, ExistingFile, RelativeDir } from '../../../bin/utils/path/repo-relative.js';
|
|
11
12
|
const mkTempDir = async (prefix) => fs.mkdtemp(path.join(os.tmpdir(), prefix));
|
|
12
13
|
describe('build-from-local helpers', () => {
|
|
13
14
|
const tempDirs = [];
|
|
@@ -21,12 +22,48 @@ describe('build-from-local helpers', () => {
|
|
|
21
22
|
tempDirs.push(rootDir);
|
|
22
23
|
await fs.writeFile(path.join(rootDir, 'main.js'), 'console.log(1)');
|
|
23
24
|
await fs.writeFile(path.join(rootDir, '.env'), 'SECRET=1');
|
|
25
|
+
await fs.writeFile(path.join(rootDir, 'docker-ignored.txt'), 'ignored');
|
|
26
|
+
await fs.writeFile(path.join(rootDir, '.dockerignore'), 'docker-ignored.txt\n');
|
|
24
27
|
await fs.mkdir(path.join(rootDir, 'sub'));
|
|
25
28
|
await fs.writeFile(path.join(rootDir, 'sub', 'ignored.log'), 'log');
|
|
26
|
-
vi.spyOn(Utils, 'listRepoFilePaths').mockResolvedValue([
|
|
29
|
+
vi.spyOn(Utils, 'listRepoFilePaths').mockResolvedValue([
|
|
30
|
+
'main.js',
|
|
31
|
+
'.env',
|
|
32
|
+
'docker-ignored.txt',
|
|
33
|
+
'sub/ignored.log',
|
|
34
|
+
]);
|
|
27
35
|
vi.spyOn(Utils, 'getGitignoredPaths').mockImplementation(async (relativePaths) => new Set(relativePaths.filter((p) => p.endsWith('.log'))));
|
|
28
|
-
const
|
|
29
|
-
|
|
36
|
+
const originalCwd = process.cwd();
|
|
37
|
+
process.chdir(rootDir);
|
|
38
|
+
try {
|
|
39
|
+
expect(await collectNonIgnoredFiles(RelativeDir.ROOT, rootDir)).toStrictEqual([
|
|
40
|
+
path.join(rootDir, 'main.js'),
|
|
41
|
+
]);
|
|
42
|
+
}
|
|
43
|
+
finally {
|
|
44
|
+
process.chdir(originalCwd);
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
it('matches .dockerignore relative to a nested Docker context', async () => {
|
|
48
|
+
const rootDir = await mkTempDir('apify-test-tools-nested-context-');
|
|
49
|
+
tempDirs.push(rootDir);
|
|
50
|
+
await fs.mkdir(path.join(rootDir, 'actors', 'shopify'), { recursive: true });
|
|
51
|
+
await fs.writeFile(path.join(rootDir, 'actors', 'shopify', '.dockerignore'), 'dist/\n');
|
|
52
|
+
vi.spyOn(Utils, 'listRepoFilePaths').mockResolvedValue([
|
|
53
|
+
'actors/shopify/dist/bundle.js',
|
|
54
|
+
'actors/shopify/src/main.ts',
|
|
55
|
+
]);
|
|
56
|
+
vi.spyOn(Utils, 'getGitignoredPaths').mockResolvedValue(new Set());
|
|
57
|
+
const originalCwd = process.cwd();
|
|
58
|
+
process.chdir(rootDir);
|
|
59
|
+
try {
|
|
60
|
+
expect(await collectNonIgnoredFiles(new RelativeDir('actors/shopify'), rootDir)).toStrictEqual([
|
|
61
|
+
path.join(rootDir, 'actors', 'shopify', 'src', 'main.ts'),
|
|
62
|
+
]);
|
|
63
|
+
}
|
|
64
|
+
finally {
|
|
65
|
+
process.chdir(originalCwd);
|
|
66
|
+
}
|
|
30
67
|
});
|
|
31
68
|
});
|
|
32
69
|
describe('flattenMonorepoContext', () => {
|
|
@@ -100,8 +137,19 @@ describe('build-from-local helpers', () => {
|
|
|
100
137
|
'actors/owner_actor/.actor/actor.json',
|
|
101
138
|
'package.json',
|
|
102
139
|
]);
|
|
103
|
-
vi.spyOn(Utils, 'getGitignoredPaths').mockResolvedValue(new Set(
|
|
104
|
-
const
|
|
140
|
+
vi.spyOn(Utils, 'getGitignoredPaths').mockResolvedValue(new Set());
|
|
141
|
+
const actorConfig = {
|
|
142
|
+
actorFullName: 'owner/actor',
|
|
143
|
+
folder: new ExistingDir('actors/owner_actor'),
|
|
144
|
+
tokenEnvVar: 'APIFY_TOKEN',
|
|
145
|
+
actorJson: {
|
|
146
|
+
file: new ExistingFile('actors/owner_actor/.actor/actor.json'),
|
|
147
|
+
dockerContextDir: RelativeDir.ROOT,
|
|
148
|
+
},
|
|
149
|
+
dockerContextDir: RelativeDir.ROOT,
|
|
150
|
+
contextPaths: [RelativeDir.ROOT],
|
|
151
|
+
};
|
|
152
|
+
const sourceFiles = await collectSourceFiles(actorConfig);
|
|
105
153
|
expect(sourceFiles.map((file) => file.name)).toContain('.actor/actor.json');
|
|
106
154
|
}
|
|
107
155
|
finally {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-from-local.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/build-from-local.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AAE7D,OAAO,EACH,sBAAsB,EACtB,kBAAkB,EAClB,sBAAsB,EACtB,qBAAqB;AACrB,6DAA6D;AAC7D,gGAAgG;AAChG,kGAAkG;EACrG,MAAM,kCAAkC,CAAC;
|
|
1
|
+
{"version":3,"file":"build-from-local.test.js","sourceRoot":"","sources":["../../../../test/unit/bin/build-from-local.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,30 +1,44 @@
|
|
|
1
|
-
import
|
|
1
|
+
import fs from 'node:fs';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { afterAll, beforeEach, describe, expect, it, vi } from 'vitest';
|
|
2
5
|
import { getChangedActors } from '../../../bin/diff-changes.js';
|
|
3
6
|
import * as DiffJsonSchema from '../../../bin/diff-json-schema.js';
|
|
4
7
|
import * as Dockerignore from '../../../bin/dockerignore.js';
|
|
5
8
|
import { logger } from '../../../bin/logger.js';
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
9
|
+
import { ExistingDir, RelativeDir, RelativeFile } from '../../../bin/utils/path/repo-relative.js';
|
|
10
|
+
const originalCwd = process.cwd();
|
|
11
|
+
const fixtureRoot = fs.mkdtempSync(path.join(os.tmpdir(), 'apify-diff-changes-'));
|
|
12
|
+
process.chdir(fixtureRoot);
|
|
13
|
+
fs.writeFileSync('package.json', '{}');
|
|
14
|
+
const actorConfig = (actorFullName, folder, tokenEnvVar, dockerContextDir, contextPaths) => {
|
|
15
|
+
const folderPath = folder || '.';
|
|
16
|
+
fs.mkdirSync(folderPath, { recursive: true });
|
|
17
|
+
return {
|
|
18
|
+
actorFullName,
|
|
19
|
+
folder: new ExistingDir(folderPath),
|
|
20
|
+
tokenEnvVar,
|
|
21
|
+
actorJson: {
|
|
22
|
+
file: new RelativeFile(path.join(folderPath, '.actor/actor.json')),
|
|
23
|
+
dockerContextDir: new RelativeDir(dockerContextDir || '.'),
|
|
24
|
+
changelog: new RelativeFile('CHANGELOG.md'),
|
|
25
|
+
},
|
|
26
|
+
dockerContextDir: new RelativeDir(dockerContextDir || '.'),
|
|
27
|
+
contextPaths: contextPaths.map((contextPath) => new RelativeDir(contextPath || '.')),
|
|
28
|
+
};
|
|
19
29
|
};
|
|
30
|
+
afterAll(() => {
|
|
31
|
+
process.chdir(originalCwd);
|
|
32
|
+
fs.rmSync(fixtureRoot, { recursive: true, force: true });
|
|
33
|
+
});
|
|
34
|
+
const miniActor = actorConfig('foo/bar', 'actors/foo_bar', 'APIFY_TOKEN_FOO', '', ['']);
|
|
35
|
+
const standaloneActor = actorConfig('owner/standalone', 'standalone-actors/standalone', 'APIFY_TOKEN_OWNER', 'standalone-actors/standalone', ['standalone-actors/standalone']);
|
|
20
36
|
const actorConfigs = [miniActor, standaloneActor];
|
|
21
|
-
const amazonActor =
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
contextPaths: ['actors/junglee_Amazon-crawler', 'code', 'shared'],
|
|
27
|
-
};
|
|
37
|
+
const amazonActor = actorConfig('junglee/amazon-crawler', 'actors/junglee_Amazon-crawler', 'APIFY_TOKEN_JUNGLEE', '', [
|
|
38
|
+
'actors/junglee_Amazon-crawler',
|
|
39
|
+
'code',
|
|
40
|
+
'shared',
|
|
41
|
+
]);
|
|
28
42
|
const commits = [{ sha: 'Commit1', author: '', date: '', message: '' }];
|
|
29
43
|
describe('getChangedActors', () => {
|
|
30
44
|
beforeEach(() => {
|
|
@@ -41,6 +55,14 @@ describe('getChangedActors', () => {
|
|
|
41
55
|
});
|
|
42
56
|
expect(result).toEqual([]);
|
|
43
57
|
});
|
|
58
|
+
it('does not ignore source files whose names contain an ignored file name', async () => {
|
|
59
|
+
const result = await getChangedActors({
|
|
60
|
+
filepathsChanged: ['actors/foo_bar/src/.gitignore-helper.ts'],
|
|
61
|
+
actorConfigs,
|
|
62
|
+
commits,
|
|
63
|
+
});
|
|
64
|
+
expect(result).toEqual([miniActor]);
|
|
65
|
+
});
|
|
44
66
|
it('returns the actor when a functional file in its folder changes', async () => {
|
|
45
67
|
const result = await getChangedActors({
|
|
46
68
|
filepathsChanged: ['actors/foo_bar/src/main.ts'],
|
|
@@ -88,7 +110,6 @@ describe('getChangedActors', () => {
|
|
|
88
110
|
expect(result).toEqual([]);
|
|
89
111
|
});
|
|
90
112
|
it('returns actor when JSON file has functional changes', async () => {
|
|
91
|
-
vi.spyOn(DiffJsonSchema, 'isCosmeticOnlyJsonSchemaChange').mockResolvedValue(false);
|
|
92
113
|
const result = await getChangedActors({
|
|
93
114
|
filepathsChanged: ['actors/foo_bar/.actor/actor.json'],
|
|
94
115
|
actorConfigs,
|
|
@@ -113,9 +134,10 @@ describe('getChangedActors', () => {
|
|
|
113
134
|
filepathsChanged: ['actors/foo_bar/.actor/input_schema.json'],
|
|
114
135
|
actorConfigs,
|
|
115
136
|
commits,
|
|
116
|
-
isLatest:
|
|
137
|
+
isLatest: false,
|
|
117
138
|
});
|
|
118
|
-
expect(result).toEqual([
|
|
139
|
+
expect(result).toEqual([]);
|
|
140
|
+
expect(DiffJsonSchema.isCosmeticOnlyJsonSchemaChange).toHaveBeenCalledWith(commits, 'actors/foo_bar/.actor/input_schema.json');
|
|
119
141
|
});
|
|
120
142
|
it('does not trigger narrow-context actor when shared file changes', async () => {
|
|
121
143
|
const result = await getChangedActors({
|
|
@@ -145,6 +167,28 @@ describe('getChangedActors', () => {
|
|
|
145
167
|
});
|
|
146
168
|
expect(result).toEqual([]);
|
|
147
169
|
});
|
|
170
|
+
it('treats any changelog filename as cosmetic regardless of configured paths', async () => {
|
|
171
|
+
const result = await getChangedActors({
|
|
172
|
+
filepathsChanged: ['docs/CHANGELOG.md'],
|
|
173
|
+
actorConfigs: [miniActor, standaloneActor],
|
|
174
|
+
commits,
|
|
175
|
+
isLatest: true,
|
|
176
|
+
});
|
|
177
|
+
expect(result).toEqual([miniActor, standaloneActor]);
|
|
178
|
+
});
|
|
179
|
+
it('does not special-case a configured readme outside the actor context', async () => {
|
|
180
|
+
const configuredActor = {
|
|
181
|
+
...standaloneActor,
|
|
182
|
+
actorJson: { ...standaloneActor.actorJson, readme: new RelativeFile('docs/guide.md') },
|
|
183
|
+
};
|
|
184
|
+
const result = await getChangedActors({
|
|
185
|
+
filepathsChanged: ['docs/guide.md'],
|
|
186
|
+
actorConfigs: [configuredActor],
|
|
187
|
+
commits,
|
|
188
|
+
isLatest: true,
|
|
189
|
+
});
|
|
190
|
+
expect(result).toEqual([]);
|
|
191
|
+
});
|
|
148
192
|
it('triggers narrow-context actor when its own folder changes', async () => {
|
|
149
193
|
const result = await getChangedActors({
|
|
150
194
|
filepathsChanged: ['standalone-actors/standalone/src/main.ts'],
|
|
@@ -172,13 +216,7 @@ describe('getChangedActors', () => {
|
|
|
172
216
|
expect(result).toContainEqual(standaloneActor);
|
|
173
217
|
});
|
|
174
218
|
it('matches folder where folder name differs from actor name', async () => {
|
|
175
|
-
const ownerlessActor =
|
|
176
|
-
actorFullName: 'myteam/shopify-scraper',
|
|
177
|
-
folder: 'actors/shopify',
|
|
178
|
-
tokenEnvVar: 'APIFY_TOKEN_MYTEAM',
|
|
179
|
-
dockerContextDir: '',
|
|
180
|
-
contextPaths: [''],
|
|
181
|
-
};
|
|
219
|
+
const ownerlessActor = actorConfig('myteam/shopify-scraper', 'actors/shopify', 'APIFY_TOKEN_MYTEAM', '', ['']);
|
|
182
220
|
const result = await getChangedActors({
|
|
183
221
|
filepathsChanged: ['actors/shopify/src/main.ts'],
|
|
184
222
|
actorConfigs: [ownerlessActor],
|
|
@@ -187,13 +225,7 @@ describe('getChangedActors', () => {
|
|
|
187
225
|
expect(result).toEqual([ownerlessActor]);
|
|
188
226
|
});
|
|
189
227
|
it('in single-actor repo, .actor/ changes trigger builds', async () => {
|
|
190
|
-
const rootActor =
|
|
191
|
-
actorFullName: 'myteam/my-actor',
|
|
192
|
-
folder: '',
|
|
193
|
-
tokenEnvVar: 'BUILDER_APIFY_TOKEN',
|
|
194
|
-
dockerContextDir: '',
|
|
195
|
-
contextPaths: [''],
|
|
196
|
-
};
|
|
228
|
+
const rootActor = actorConfig('myteam/my-actor', '', 'BUILDER_APIFY_TOKEN', '', ['']);
|
|
197
229
|
const result = await getChangedActors({
|
|
198
230
|
filepathsChanged: ['.actor/actor.json'],
|
|
199
231
|
actorConfigs: [rootActor],
|
|
@@ -209,22 +241,19 @@ describe('getChangedActors', () => {
|
|
|
209
241
|
});
|
|
210
242
|
expect(result).toEqual([miniActor]);
|
|
211
243
|
});
|
|
212
|
-
it('file paths are matched case-
|
|
244
|
+
it('file paths are matched case-sensitively', async () => {
|
|
245
|
+
const narrowActor = actorConfig('foo/bar', 'actors/foo_bar', 'APIFY_TOKEN_FOO', 'actors/foo_bar', [
|
|
246
|
+
'actors/foo_bar',
|
|
247
|
+
]);
|
|
213
248
|
const result = await getChangedActors({
|
|
214
249
|
filepathsChanged: ['Actors/FOO_BAR/Main.ts'],
|
|
215
|
-
actorConfigs,
|
|
250
|
+
actorConfigs: [narrowActor],
|
|
216
251
|
commits,
|
|
217
252
|
});
|
|
218
|
-
expect(result).toEqual([
|
|
253
|
+
expect(result).toEqual([]);
|
|
219
254
|
});
|
|
220
255
|
it('triggers actor with contextPaths override when file matches an override path', async () => {
|
|
221
|
-
const overrideActor =
|
|
222
|
-
actorFullName: 'team/override-actor',
|
|
223
|
-
folder: 'actors/override',
|
|
224
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
225
|
-
dockerContextDir: 'actors/override',
|
|
226
|
-
contextPaths: ['actors/override', 'packages'],
|
|
227
|
-
};
|
|
256
|
+
const overrideActor = actorConfig('team/override-actor', 'actors/override', 'APIFY_TOKEN_TEAM', 'actors/override', ['actors/override', 'packages']);
|
|
228
257
|
const result = await getChangedActors({
|
|
229
258
|
filepathsChanged: ['packages/shared/utils.ts'],
|
|
230
259
|
actorConfigs: [overrideActor],
|
|
@@ -233,13 +262,7 @@ describe('getChangedActors', () => {
|
|
|
233
262
|
expect(result).toEqual([overrideActor]);
|
|
234
263
|
});
|
|
235
264
|
it('does not trigger actor with contextPaths override when file is outside all override paths', async () => {
|
|
236
|
-
const overrideActor =
|
|
237
|
-
actorFullName: 'team/override-actor',
|
|
238
|
-
folder: 'actors/override',
|
|
239
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
240
|
-
dockerContextDir: 'actors/override',
|
|
241
|
-
contextPaths: ['actors/override', 'packages'],
|
|
242
|
-
};
|
|
265
|
+
const overrideActor = actorConfig('team/override-actor', 'actors/override', 'APIFY_TOKEN_TEAM', 'actors/override', ['actors/override', 'packages']);
|
|
243
266
|
const result = await getChangedActors({
|
|
244
267
|
filepathsChanged: ['other-dir/file.ts'],
|
|
245
268
|
actorConfigs: [overrideActor],
|
|
@@ -248,20 +271,8 @@ describe('getChangedActors', () => {
|
|
|
248
271
|
expect(result).toEqual([]);
|
|
249
272
|
});
|
|
250
273
|
it('broad-context actor skips files in sibling actor folders', async () => {
|
|
251
|
-
const actorA =
|
|
252
|
-
|
|
253
|
-
folder: 'actors/a',
|
|
254
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
255
|
-
dockerContextDir: '',
|
|
256
|
-
contextPaths: [''],
|
|
257
|
-
};
|
|
258
|
-
const actorB = {
|
|
259
|
-
actorFullName: 'team/actor-b',
|
|
260
|
-
folder: 'actors/b',
|
|
261
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
262
|
-
dockerContextDir: '',
|
|
263
|
-
contextPaths: [''],
|
|
264
|
-
};
|
|
274
|
+
const actorA = actorConfig('team/actor-a', 'actors/a', 'APIFY_TOKEN_TEAM', '', ['']);
|
|
275
|
+
const actorB = actorConfig('team/actor-b', 'actors/b', 'APIFY_TOKEN_TEAM', '', ['']);
|
|
265
276
|
const result = await getChangedActors({
|
|
266
277
|
filepathsChanged: ['actors/b/src/main.ts'],
|
|
267
278
|
actorConfigs: [actorA, actorB],
|
|
@@ -269,21 +280,11 @@ describe('getChangedActors', () => {
|
|
|
269
280
|
});
|
|
270
281
|
expect(result).toEqual([actorB]);
|
|
271
282
|
});
|
|
272
|
-
it('root actor
|
|
273
|
-
const rootActor =
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
dockerContextDir: '',
|
|
278
|
-
contextPaths: [''],
|
|
279
|
-
};
|
|
280
|
-
const childActor = {
|
|
281
|
-
actorFullName: 'team/child',
|
|
282
|
-
folder: 'actors/child',
|
|
283
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
284
|
-
dockerContextDir: 'actors/child',
|
|
285
|
-
contextPaths: ['actors/child'],
|
|
286
|
-
};
|
|
283
|
+
it('root actor is excluded from sibling actor folder files', async () => {
|
|
284
|
+
const rootActor = actorConfig('team/root', '', 'APIFY_TOKEN_TEAM', '', ['']);
|
|
285
|
+
const childActor = actorConfig('team/child', 'actors/child', 'APIFY_TOKEN_TEAM', 'actors/child', [
|
|
286
|
+
'actors/child',
|
|
287
|
+
]);
|
|
287
288
|
const result = await getChangedActors({
|
|
288
289
|
filepathsChanged: ['actors/child/src/main.ts'],
|
|
289
290
|
actorConfigs: [rootActor, childActor],
|
|
@@ -292,21 +293,11 @@ describe('getChangedActors', () => {
|
|
|
292
293
|
expect(result).not.toContainEqual(rootActor);
|
|
293
294
|
expect(result).toContainEqual(childActor);
|
|
294
295
|
});
|
|
295
|
-
it('root actor
|
|
296
|
-
const rootActor =
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
dockerContextDir: '',
|
|
301
|
-
contextPaths: [''],
|
|
302
|
-
};
|
|
303
|
-
const childActor = {
|
|
304
|
-
actorFullName: 'team/child',
|
|
305
|
-
folder: 'actors/child',
|
|
306
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
307
|
-
dockerContextDir: 'actors/child',
|
|
308
|
-
contextPaths: ['actors/child'],
|
|
309
|
-
};
|
|
296
|
+
it('root actor sees files outside any actor folder', async () => {
|
|
297
|
+
const rootActor = actorConfig('team/root', '', 'APIFY_TOKEN_TEAM', '', ['']);
|
|
298
|
+
const childActor = actorConfig('team/child', 'actors/child', 'APIFY_TOKEN_TEAM', 'actors/child', [
|
|
299
|
+
'actors/child',
|
|
300
|
+
]);
|
|
310
301
|
const result = await getChangedActors({
|
|
311
302
|
filepathsChanged: ['lib/shared-utils.ts'],
|
|
312
303
|
actorConfigs: [rootActor, childActor],
|
|
@@ -334,7 +325,6 @@ describe('getChangedActors', () => {
|
|
|
334
325
|
expect(result).toEqual([miniActor]);
|
|
335
326
|
});
|
|
336
327
|
it('JSON file in context but outside actor folder is functional (not checked for cosmetic)', async () => {
|
|
337
|
-
vi.spyOn(DiffJsonSchema, 'isCosmeticOnlyJsonSchemaChange').mockResolvedValue(true);
|
|
338
328
|
const result = await getChangedActors({
|
|
339
329
|
filepathsChanged: ['lib/config.json'],
|
|
340
330
|
actorConfigs: [miniActor],
|
|
@@ -360,7 +350,7 @@ describe('getChangedActors', () => {
|
|
|
360
350
|
});
|
|
361
351
|
expect(result).toEqual([miniActor]);
|
|
362
352
|
});
|
|
363
|
-
it('
|
|
353
|
+
it('ignores a standalone actor top-level dev file relative to its context', async () => {
|
|
364
354
|
const result = await getChangedActors({
|
|
365
355
|
filepathsChanged: ['standalone-actors/standalone/.eslintrc'],
|
|
366
356
|
actorConfigs,
|
|
@@ -370,7 +360,7 @@ describe('getChangedActors', () => {
|
|
|
370
360
|
});
|
|
371
361
|
it('does not special-case code/ and shared/ prefixes anymore — must be declared via overrideActorContext', async () => {
|
|
372
362
|
const result = await getChangedActors({
|
|
373
|
-
filepathsChanged: ['code
|
|
363
|
+
filepathsChanged: ['code/some/code.ts'],
|
|
374
364
|
actorConfigs: [miniActor],
|
|
375
365
|
commits,
|
|
376
366
|
});
|
|
@@ -417,20 +407,8 @@ describe('getChangedActors logging', () => {
|
|
|
417
407
|
expect(logger.info).toHaveBeenCalledWith('[DIFF]: Actors to be built and tested: foo/bar');
|
|
418
408
|
});
|
|
419
409
|
it('logs a single "shared" group when two actors are triggered by the exact same file', async () => {
|
|
420
|
-
const actorA =
|
|
421
|
-
|
|
422
|
-
folder: 'actors/a',
|
|
423
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
424
|
-
dockerContextDir: '',
|
|
425
|
-
contextPaths: ['', 'shared'],
|
|
426
|
-
};
|
|
427
|
-
const actorB = {
|
|
428
|
-
actorFullName: 'team/actor-b',
|
|
429
|
-
folder: 'actors/b',
|
|
430
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
431
|
-
dockerContextDir: '',
|
|
432
|
-
contextPaths: ['', 'shared'],
|
|
433
|
-
};
|
|
410
|
+
const actorA = actorConfig('team/actor-a', 'actors/a', 'APIFY_TOKEN_TEAM', '', ['', 'shared']);
|
|
411
|
+
const actorB = actorConfig('team/actor-b', 'actors/b', 'APIFY_TOKEN_TEAM', '', ['', 'shared']);
|
|
434
412
|
await getChangedActors({
|
|
435
413
|
filepathsChanged: ['shared/shared.ts'],
|
|
436
414
|
actorConfigs: [actorA, actorB],
|
|
@@ -441,26 +419,14 @@ describe('getChangedActors logging', () => {
|
|
|
441
419
|
expect(logger.info).toHaveBeenCalledWith('[DIFF]: Actors to be built and tested: team/actor-a, team/actor-b');
|
|
442
420
|
});
|
|
443
421
|
it('logs shared and specific groups in descending-size order for partial overlap across actors', async () => {
|
|
444
|
-
const actorA =
|
|
445
|
-
|
|
446
|
-
folder: 'actors/a',
|
|
447
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
448
|
-
dockerContextDir: '',
|
|
449
|
-
contextPaths: [''],
|
|
450
|
-
};
|
|
451
|
-
const actorB = {
|
|
452
|
-
actorFullName: 'team/actor-b',
|
|
453
|
-
folder: 'actors/b',
|
|
454
|
-
tokenEnvVar: 'APIFY_TOKEN_TEAM',
|
|
455
|
-
dockerContextDir: '',
|
|
456
|
-
contextPaths: [''],
|
|
457
|
-
};
|
|
422
|
+
const actorA = actorConfig('team/actor-a', 'actors/a', 'APIFY_TOKEN_TEAM', '', ['']);
|
|
423
|
+
const actorB = actorConfig('team/actor-b', 'actors/b', 'APIFY_TOKEN_TEAM', '', ['']);
|
|
458
424
|
await getChangedActors({
|
|
459
425
|
filepathsChanged: ['shared.ts', 'actors/a/a-only.ts', 'actors/b/b-only.ts'],
|
|
460
426
|
actorConfigs: [actorA, actorB],
|
|
461
427
|
commits,
|
|
462
428
|
});
|
|
463
|
-
const errorCalls = logger.info.mock.calls.map((call) => call[0]);
|
|
429
|
+
const errorCalls = vi.mocked(logger.info).mock.calls.map((call) => call[0]);
|
|
464
430
|
expect(errorCalls).toEqual([
|
|
465
431
|
'[DIFF]: Shared changes for actors team/actor-a, team/actor-b: shared.ts',
|
|
466
432
|
'[DIFF]: Changes specific to actor team/actor-a: actors/a/a-only.ts',
|
|
@@ -470,7 +436,7 @@ describe('getChangedActors logging', () => {
|
|
|
470
436
|
});
|
|
471
437
|
it('logs no group lines when zero actors changed', async () => {
|
|
472
438
|
await getChangedActors({
|
|
473
|
-
filepathsChanged: ['.gitignore', '
|
|
439
|
+
filepathsChanged: ['.gitignore', '.prettierrc'],
|
|
474
440
|
actorConfigs,
|
|
475
441
|
commits,
|
|
476
442
|
});
|