apify-test-tools 0.6.4-beta.1 → 0.6.4-beta.3
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/CHANGELOG.md +8 -0
- package/bin/git.ts +45 -5
- package/bin/main.ts +52 -22
- package/dist/bin/git.d.ts +11 -0
- package/dist/bin/git.d.ts.map +1 -1
- package/dist/bin/git.js +37 -3
- package/dist/bin/git.js.map +1 -1
- package/dist/bin/main.js +35 -22
- package/dist/bin/main.js.map +1 -1
- package/dist/lib/lib.d.ts +2 -2
- package/dist/lib/lib.d.ts.map +1 -1
- package/dist/lib/lib.js +35 -26
- package/dist/lib/lib.js.map +1 -1
- package/dist/test/unit/bin/git.test.js +68 -1
- package/dist/test/unit/bin/git.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/lib/lib.ts +39 -30
- package/package.json +1 -1
- package/test/unit/bin/git.test.ts +87 -1
package/CHANGELOG.md
CHANGED
|
@@ -9,6 +9,14 @@ All notable changes to this project will be documented in this file.
|
|
|
9
9
|
|
|
10
10
|
- **testStandby:** Allow for custom paths and headers ([#77](https://github.com/apify/apify-test-tools/pull/77)) ([4e48329](https://github.com/apify/apify-test-tools/commit/4e4832973ebff4e97725e1abb0020887c874d347)) by [@JuanGalilea](https://github.com/JuanGalilea)
|
|
11
11
|
|
|
12
|
+
### 🐛 Bug Fixes
|
|
13
|
+
|
|
14
|
+
- Standby tests ([#76](https://github.com/apify/apify-test-tools/pull/76)) ([33cd89c](https://github.com/apify/apify-test-tools/commit/33cd89cf9e512f422704eeb8f6c46e4e2759a902)) by [@oklinov](https://github.com/oklinov)
|
|
15
|
+
|
|
16
|
+
### ⚡ Performance
|
|
17
|
+
|
|
18
|
+
- **bin:** Don't test if we merge master into cosmetic only changes ([#78](https://github.com/apify/apify-test-tools/pull/78)) ([bc899eb](https://github.com/apify/apify-test-tools/commit/bc899eb550283862fbdc3c44a4fca6f682017c43)) by [@metalwarrior665](https://github.com/metalwarrior665)
|
|
19
|
+
|
|
12
20
|
|
|
13
21
|
<!-- git-cliff-unreleased-end -->
|
|
14
22
|
## [0.6.3](https://github.com/apify/apify-test-tools/releases/tag/v0.6.3) (2026-04-06)
|
package/bin/git.ts
CHANGED
|
@@ -17,6 +17,41 @@ export const getChangedFiles = (commits: Commit[]) => {
|
|
|
17
17
|
return changedFiles;
|
|
18
18
|
};
|
|
19
19
|
|
|
20
|
+
/**
|
|
21
|
+
* Returns true if the branch contains a merge commit whose parent is reachable from targetBranch
|
|
22
|
+
* (i.e. a genuine "merge from target" commit, not a merge of some unrelated branch).
|
|
23
|
+
* Uses the full targetBranch..sourceBranch range, ignoring baseCommit.
|
|
24
|
+
*/
|
|
25
|
+
export const hasMergeFromTarget = (sourceBranch: string, targetBranch: string): boolean => {
|
|
26
|
+
const mergeShas = spawnCommandInGhWorkspace(`git log --merges --pretty=format:%H ${targetBranch}..${sourceBranch}`)
|
|
27
|
+
.split('\n')
|
|
28
|
+
.filter(Boolean);
|
|
29
|
+
|
|
30
|
+
for (const sha of mergeShas) {
|
|
31
|
+
const parents = spawnCommandInGhWorkspace(`git log -1 --pretty=format:%P ${sha}`).trim().split(' ');
|
|
32
|
+
for (const parent of parents) {
|
|
33
|
+
// git merge-base A B outputs the common ancestor.
|
|
34
|
+
// If that equals A, then A is an ancestor of B (i.e. parent is reachable from targetBranch).
|
|
35
|
+
const mergeBase = spawnCommandInGhWorkspace(`git merge-base ${parent} ${targetBranch}`);
|
|
36
|
+
if (mergeBase === parent) {
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return false;
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
/**
|
|
45
|
+
* Returns all files touched by non-merge commits on the branch (full history, ignoring baseCommit).
|
|
46
|
+
* Used to check whether the branch itself has any functional changes, independent of what master merged in.
|
|
47
|
+
*/
|
|
48
|
+
export const getBranchOnlyChangedFiles = (sourceBranch: string, targetBranch: string): string[] => {
|
|
49
|
+
const output = spawnCommandInGhWorkspace(
|
|
50
|
+
`git log --no-merges --name-only --pretty=format: ${targetBranch}..${sourceBranch}`,
|
|
51
|
+
);
|
|
52
|
+
return output.split('\n').filter(Boolean);
|
|
53
|
+
};
|
|
54
|
+
|
|
20
55
|
const SHA_REGEX = /^[0-9a-f]{40}$/i;
|
|
21
56
|
|
|
22
57
|
/**
|
|
@@ -40,17 +75,22 @@ export const parseBaseCommit = (shaOrCommit: string | undefined): string | undef
|
|
|
40
75
|
return sha;
|
|
41
76
|
};
|
|
42
77
|
|
|
78
|
+
const fetchAllBranchCommits = (sourceBranch: string, targetBranch: string): Commit[] => {
|
|
79
|
+
const commitsStrings = spawnCommandInGhWorkspace(
|
|
80
|
+
`git log --pretty=format:'${GIT_LOG_FORMAT}' ${targetBranch}..${sourceBranch}`,
|
|
81
|
+
).split('\n');
|
|
82
|
+
const commits = commitsStrings.map((commitString) => parseCommit(commitString));
|
|
83
|
+
commits.reverse();
|
|
84
|
+
return commits;
|
|
85
|
+
};
|
|
86
|
+
|
|
43
87
|
/**
|
|
44
88
|
* Gets the commits between sourceBranch and targetBranch (exclusive).
|
|
45
89
|
* - If baseCommit is provided, only returns commits after the baseCommit.
|
|
46
90
|
*/
|
|
47
91
|
export const getCommits = ({ sourceBranch, targetBranch, baseCommit }: Config): Commit[] => {
|
|
48
92
|
const baseCommitSha = parseBaseCommit(baseCommit);
|
|
49
|
-
const
|
|
50
|
-
`git log --pretty=format:'${GIT_LOG_FORMAT}' ${targetBranch}..${sourceBranch}`,
|
|
51
|
-
).split('\n');
|
|
52
|
-
const commits = commitsStrings.map((commitString) => parseCommit(commitString));
|
|
53
|
-
commits.reverse();
|
|
93
|
+
const commits = fetchAllBranchCommits(sourceBranch, targetBranch);
|
|
54
94
|
|
|
55
95
|
const baseCommitIndex = commits.findIndex((commit) => commit.sha === baseCommitSha);
|
|
56
96
|
|
package/bin/main.ts
CHANGED
|
@@ -8,10 +8,11 @@ import { hideBin } from 'yargs/helpers';
|
|
|
8
8
|
|
|
9
9
|
import { deleteOldBuilds, runBuilds } from './build.js';
|
|
10
10
|
import { getChangedActors } from './diff-changes.js';
|
|
11
|
-
import { getChangedFiles, getCommits } from './git.js';
|
|
11
|
+
import { getBranchOnlyChangedFiles, getChangedFiles, getCommits, hasMergeFromTarget } from './git.js';
|
|
12
12
|
import { getPushData } from './github.js';
|
|
13
13
|
import { notifyToSlack } from './slack.js';
|
|
14
14
|
import { reportTestResults } from './test-report.js';
|
|
15
|
+
import type { Config } from './types.js';
|
|
15
16
|
import { getRepoActors, setCwd, spawnCommandInGhWorkspace } from './utils.js';
|
|
16
17
|
|
|
17
18
|
/**
|
|
@@ -34,6 +35,44 @@ const buildOptions = (y: Argv) => {
|
|
|
34
35
|
});
|
|
35
36
|
};
|
|
36
37
|
|
|
38
|
+
const resolveChangedActors = async (
|
|
39
|
+
{ targetBranch, sourceBranch, baseCommit }: Config,
|
|
40
|
+
{ isLatest }: { isLatest: boolean },
|
|
41
|
+
) => {
|
|
42
|
+
const actorConfigs = await getRepoActors();
|
|
43
|
+
|
|
44
|
+
// This is an optimization for the common case where a branch only has cosmetic changes but had to merge in
|
|
45
|
+
// functional changes from master (being up-to-date is a CI requirement). Master is already validated, and
|
|
46
|
+
// since the branch has no functional changes of its own, there is nothing new to validate.
|
|
47
|
+
// Exception: if the branch has any functional changes alongside the merge, we must re-test — even
|
|
48
|
+
// individually validated changes can have novel interactions when combined.
|
|
49
|
+
if (hasMergeFromTarget(sourceBranch, targetBranch)) {
|
|
50
|
+
console.error(
|
|
51
|
+
'[MERGE-FROM-TARGET-OPTIMIZATION]: There is merge from target branch, checking if there are no functional changes in our own branch. If so, we can skip tests',
|
|
52
|
+
);
|
|
53
|
+
const branchOnlyFiles = getBranchOnlyChangedFiles(sourceBranch, targetBranch);
|
|
54
|
+
// Omit baseCommit to get full branch history. Validated functional commits can still interact with merged ones
|
|
55
|
+
const allBranchCommits = getCommits({ sourceBranch, targetBranch, baseCommit: undefined });
|
|
56
|
+
const branchOnlyActorsChanged = getChangedActors({
|
|
57
|
+
filepathsChanged: branchOnlyFiles,
|
|
58
|
+
actorConfigs,
|
|
59
|
+
commits: allBranchCommits,
|
|
60
|
+
});
|
|
61
|
+
if (branchOnlyActorsChanged.length === 0) {
|
|
62
|
+
console.error('[MERGE-FROM-TARGET-OPTIMIZATION]: Branch itself has no functional changes, skipping tests');
|
|
63
|
+
return [];
|
|
64
|
+
}
|
|
65
|
+
console.error(
|
|
66
|
+
`[MERGE-FROM-TARGET-OPTIMIZATION]: Branch has ${branchOnlyActorsChanged.length} functional changes, cannot optimize, we continue with full check`,
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
// If the optimization doesn't apply, we check all branch commits including merges for full coverage. We don't reuse the merge optimization results because here we can apply baseCommit and check merge commits (they might be functional or just cosmetic)
|
|
71
|
+
const commits = getCommits({ targetBranch, sourceBranch, baseCommit });
|
|
72
|
+
const changedFiles = getChangedFiles(commits);
|
|
73
|
+
return getChangedActors({ filepathsChanged: changedFiles, actorConfigs, isLatest, commits });
|
|
74
|
+
};
|
|
75
|
+
|
|
37
76
|
await yargs()
|
|
38
77
|
.scriptName('public-actors-utils')
|
|
39
78
|
.option('dry-run', {
|
|
@@ -68,16 +107,11 @@ await yargs()
|
|
|
68
107
|
console.log(JSON.stringify(actorConfigs));
|
|
69
108
|
},
|
|
70
109
|
)
|
|
71
|
-
.command('get-affected-actors', '', buildOptions, async (
|
|
72
|
-
const
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
filepathsChanged: changedFiles,
|
|
77
|
-
actorConfigs,
|
|
78
|
-
isLatest: false,
|
|
79
|
-
commits,
|
|
80
|
-
});
|
|
110
|
+
.command('get-affected-actors', '', buildOptions, async ({ targetBranch, sourceBranch, baseCommit }) => {
|
|
111
|
+
const actorsChanged = await resolveChangedActors(
|
|
112
|
+
{ targetBranch, sourceBranch, baseCommit },
|
|
113
|
+
{ isLatest: false },
|
|
114
|
+
);
|
|
81
115
|
console.log(JSON.stringify(actorsChanged));
|
|
82
116
|
})
|
|
83
117
|
.command(
|
|
@@ -97,15 +131,11 @@ await yargs()
|
|
|
97
131
|
'build',
|
|
98
132
|
'',
|
|
99
133
|
(args) => buildOptions(args).option('dry-run', { type: 'boolean', default: false }),
|
|
100
|
-
async (
|
|
101
|
-
const
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
filepathsChanged: changedFiles,
|
|
106
|
-
actorConfigs,
|
|
107
|
-
commits,
|
|
108
|
-
});
|
|
134
|
+
async ({ targetBranch, sourceBranch, baseCommit, dryRun }) => {
|
|
135
|
+
const actorsChanged = await resolveChangedActors(
|
|
136
|
+
{ targetBranch, sourceBranch, baseCommit },
|
|
137
|
+
{ isLatest: false },
|
|
138
|
+
);
|
|
109
139
|
// https://github.com/apify-store/google-maps#:actors/lukaskrivka_google-maps-with-contact-details
|
|
110
140
|
// git@github.com:apify-store/google-maps#:actors/lukaskrivka_google-maps-with-contact-details
|
|
111
141
|
const repoUrl = spawnCommandInGhWorkspace(`git remote get-url origin`).replace(
|
|
@@ -116,8 +146,8 @@ await yargs()
|
|
|
116
146
|
const builds = await runBuilds({
|
|
117
147
|
repoUrl,
|
|
118
148
|
actorConfigs: actorsChanged,
|
|
119
|
-
branch:
|
|
120
|
-
dryRun
|
|
149
|
+
branch: sourceBranch.replace('origin/', ''),
|
|
150
|
+
dryRun,
|
|
121
151
|
});
|
|
122
152
|
console.log(JSON.stringify(builds));
|
|
123
153
|
},
|
package/dist/bin/git.d.ts
CHANGED
|
@@ -4,6 +4,17 @@ export declare const GIT_FORMAT_SEPARATOR = "\u00BB\u00A6\u00AB";
|
|
|
4
4
|
* Gets the list of changed files between the given commits (inclusive).
|
|
5
5
|
*/
|
|
6
6
|
export declare const getChangedFiles: (commits: Commit[]) => string[];
|
|
7
|
+
/**
|
|
8
|
+
* Returns true if the branch contains a merge commit whose parent is reachable from targetBranch
|
|
9
|
+
* (i.e. a genuine "merge from target" commit, not a merge of some unrelated branch).
|
|
10
|
+
* Uses the full targetBranch..sourceBranch range, ignoring baseCommit.
|
|
11
|
+
*/
|
|
12
|
+
export declare const hasMergeFromTarget: (sourceBranch: string, targetBranch: string) => boolean;
|
|
13
|
+
/**
|
|
14
|
+
* Returns all files touched by non-merge commits on the branch (full history, ignoring baseCommit).
|
|
15
|
+
* Used to check whether the branch itself has any functional changes, independent of what master merged in.
|
|
16
|
+
*/
|
|
17
|
+
export declare const getBranchOnlyChangedFiles: (sourceBranch: string, targetBranch: string) => string[];
|
|
7
18
|
/**
|
|
8
19
|
*
|
|
9
20
|
* @param shaOrCommit Supports both a SHA string or a Commit object in JSON format. Can be empty.
|
package/dist/bin/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,uBAAQ,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,aAQhD,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAc1E,CAAC;
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,uBAAQ,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,eAAe,GAAI,SAAS,MAAM,EAAE,aAQhD,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,GAAI,cAAc,MAAM,EAAE,cAAc,MAAM,KAAG,OAiB/E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,GAAI,cAAc,MAAM,EAAE,cAAc,MAAM,KAAG,MAAM,EAK5F,CAAC;AAIF;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAc1E,CAAC;AAWF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAI,4CAA4C,MAAM,KAAG,MAAM,EAqBrF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,MAYlD,CAAC"}
|
package/dist/bin/git.js
CHANGED
|
@@ -10,6 +10,36 @@ export const getChangedFiles = (commits) => {
|
|
|
10
10
|
console.error(`Changed files (up to 50): ${changedFiles.slice(0, 50).join(', ')}`);
|
|
11
11
|
return changedFiles;
|
|
12
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* Returns true if the branch contains a merge commit whose parent is reachable from targetBranch
|
|
15
|
+
* (i.e. a genuine "merge from target" commit, not a merge of some unrelated branch).
|
|
16
|
+
* Uses the full targetBranch..sourceBranch range, ignoring baseCommit.
|
|
17
|
+
*/
|
|
18
|
+
export const hasMergeFromTarget = (sourceBranch, targetBranch) => {
|
|
19
|
+
const mergeShas = spawnCommandInGhWorkspace(`git log --merges --pretty=format:%H ${targetBranch}..${sourceBranch}`)
|
|
20
|
+
.split('\n')
|
|
21
|
+
.filter(Boolean);
|
|
22
|
+
for (const sha of mergeShas) {
|
|
23
|
+
const parents = spawnCommandInGhWorkspace(`git log -1 --pretty=format:%P ${sha}`).trim().split(' ');
|
|
24
|
+
for (const parent of parents) {
|
|
25
|
+
// git merge-base A B outputs the common ancestor.
|
|
26
|
+
// If that equals A, then A is an ancestor of B (i.e. parent is reachable from targetBranch).
|
|
27
|
+
const mergeBase = spawnCommandInGhWorkspace(`git merge-base ${parent} ${targetBranch}`);
|
|
28
|
+
if (mergeBase === parent) {
|
|
29
|
+
return true;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return false;
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Returns all files touched by non-merge commits on the branch (full history, ignoring baseCommit).
|
|
37
|
+
* Used to check whether the branch itself has any functional changes, independent of what master merged in.
|
|
38
|
+
*/
|
|
39
|
+
export const getBranchOnlyChangedFiles = (sourceBranch, targetBranch) => {
|
|
40
|
+
const output = spawnCommandInGhWorkspace(`git log --no-merges --name-only --pretty=format: ${targetBranch}..${sourceBranch}`);
|
|
41
|
+
return output.split('\n').filter(Boolean);
|
|
42
|
+
};
|
|
13
43
|
const SHA_REGEX = /^[0-9a-f]{40}$/i;
|
|
14
44
|
/**
|
|
15
45
|
*
|
|
@@ -31,15 +61,19 @@ export const parseBaseCommit = (shaOrCommit) => {
|
|
|
31
61
|
}
|
|
32
62
|
return sha;
|
|
33
63
|
};
|
|
64
|
+
const fetchAllBranchCommits = (sourceBranch, targetBranch) => {
|
|
65
|
+
const commitsStrings = spawnCommandInGhWorkspace(`git log --pretty=format:'${GIT_LOG_FORMAT}' ${targetBranch}..${sourceBranch}`).split('\n');
|
|
66
|
+
const commits = commitsStrings.map((commitString) => parseCommit(commitString));
|
|
67
|
+
commits.reverse();
|
|
68
|
+
return commits;
|
|
69
|
+
};
|
|
34
70
|
/**
|
|
35
71
|
* Gets the commits between sourceBranch and targetBranch (exclusive).
|
|
36
72
|
* - If baseCommit is provided, only returns commits after the baseCommit.
|
|
37
73
|
*/
|
|
38
74
|
export const getCommits = ({ sourceBranch, targetBranch, baseCommit }) => {
|
|
39
75
|
const baseCommitSha = parseBaseCommit(baseCommit);
|
|
40
|
-
const
|
|
41
|
-
const commits = commitsStrings.map((commitString) => parseCommit(commitString));
|
|
42
|
-
commits.reverse();
|
|
76
|
+
const commits = fetchAllBranchCommits(sourceBranch, targetBranch);
|
|
43
77
|
const baseCommitIndex = commits.findIndex((commit) => commit.sha === baseCommitSha);
|
|
44
78
|
const hasBaseCommit = baseCommitIndex !== -1;
|
|
45
79
|
if (hasBaseCommit) {
|
package/dist/bin/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,yBAAyB,EAAE,MAAM,YAAY,CAAC;AAEvD,MAAM,CAAC,MAAM,oBAAoB,GAAG,KAAK,CAAC;AAC1C,MAAM,cAAc,GAAG,CAAC,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;AAElF;;GAEG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,OAAiB,EAAE,EAAE;IACjD,MAAM,kBAAkB,GAAG,yBAAyB,CAChD,wBAAwB,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,CAChF,CAAC;IAEF,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IACpD,OAAO,CAAC,KAAK,CAAC,6BAA6B,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACnF,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AAEF,MAAM,SAAS,GAAG,iBAAiB,CAAC;AAEpC;;;;GAIG;AACH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,WAA+B,EAAsB,EAAE;IACnF,IAAI,CAAC,WAAW;QAAE,OAAO,SAAS,CAAC;IACnC,IAAI,GAAW,CAAC;IAChB,IAAI,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC9B,GAAG,GAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAY,CAAC,GAAG,CAAC;IAClD,CAAC;SAAM,CAAC;QACJ,GAAG,GAAG,WAAW,CAAC;IACtB,CAAC;IACD,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CACX,6BAA6B,GAAG,0EAA0E,WAAW,IAAI,CAC5H,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/main.js
CHANGED
|
@@ -5,7 +5,7 @@ import yargs from 'yargs';
|
|
|
5
5
|
import { hideBin } from 'yargs/helpers';
|
|
6
6
|
import { deleteOldBuilds, runBuilds } from './build.js';
|
|
7
7
|
import { getChangedActors } from './diff-changes.js';
|
|
8
|
-
import { getChangedFiles, getCommits } from './git.js';
|
|
8
|
+
import { getBranchOnlyChangedFiles, getChangedFiles, getCommits, hasMergeFromTarget } from './git.js';
|
|
9
9
|
import { getPushData } from './github.js';
|
|
10
10
|
import { notifyToSlack } from './slack.js';
|
|
11
11
|
import { reportTestResults } from './test-report.js';
|
|
@@ -28,6 +28,34 @@ const buildOptions = (y) => {
|
|
|
28
28
|
type: 'string',
|
|
29
29
|
});
|
|
30
30
|
};
|
|
31
|
+
const resolveChangedActors = async ({ targetBranch, sourceBranch, baseCommit }, { isLatest }) => {
|
|
32
|
+
const actorConfigs = await getRepoActors();
|
|
33
|
+
// This is an optimization for the common case where a branch only has cosmetic changes but had to merge in
|
|
34
|
+
// functional changes from master (being up-to-date is a CI requirement). Master is already validated, and
|
|
35
|
+
// since the branch has no functional changes of its own, there is nothing new to validate.
|
|
36
|
+
// Exception: if the branch has any functional changes alongside the merge, we must re-test — even
|
|
37
|
+
// individually validated changes can have novel interactions when combined.
|
|
38
|
+
if (hasMergeFromTarget(sourceBranch, targetBranch)) {
|
|
39
|
+
console.error('[MERGE-FROM-TARGET-OPTIMIZATION]: There is merge from target branch, checking if there are no functional changes in our own branch. If so, we can skip tests');
|
|
40
|
+
const branchOnlyFiles = getBranchOnlyChangedFiles(sourceBranch, targetBranch);
|
|
41
|
+
// Omit baseCommit to get full branch history. Validated functional commits can still interact with merged ones
|
|
42
|
+
const allBranchCommits = getCommits({ sourceBranch, targetBranch, baseCommit: undefined });
|
|
43
|
+
const branchOnlyActorsChanged = getChangedActors({
|
|
44
|
+
filepathsChanged: branchOnlyFiles,
|
|
45
|
+
actorConfigs,
|
|
46
|
+
commits: allBranchCommits,
|
|
47
|
+
});
|
|
48
|
+
if (branchOnlyActorsChanged.length === 0) {
|
|
49
|
+
console.error('[MERGE-FROM-TARGET-OPTIMIZATION]: Branch itself has no functional changes, skipping tests');
|
|
50
|
+
return [];
|
|
51
|
+
}
|
|
52
|
+
console.error(`[MERGE-FROM-TARGET-OPTIMIZATION]: Branch has ${branchOnlyActorsChanged.length} functional changes, cannot optimize, we continue with full check`);
|
|
53
|
+
}
|
|
54
|
+
// If the optimization doesn't apply, we check all branch commits including merges for full coverage. We don't reuse the merge optimization results because here we can apply baseCommit and check merge commits (they might be functional or just cosmetic)
|
|
55
|
+
const commits = getCommits({ targetBranch, sourceBranch, baseCommit });
|
|
56
|
+
const changedFiles = getChangedFiles(commits);
|
|
57
|
+
return getChangedActors({ filepathsChanged: changedFiles, actorConfigs, isLatest, commits });
|
|
58
|
+
};
|
|
31
59
|
await yargs()
|
|
32
60
|
.scriptName('public-actors-utils')
|
|
33
61
|
.option('dry-run', {
|
|
@@ -57,16 +85,8 @@ await yargs()
|
|
|
57
85
|
const actorConfigs = await getRepoActors();
|
|
58
86
|
console.log(JSON.stringify(actorConfigs));
|
|
59
87
|
})
|
|
60
|
-
.command('get-affected-actors', '', buildOptions, async (
|
|
61
|
-
const
|
|
62
|
-
const changedFiles = getChangedFiles(commits);
|
|
63
|
-
const actorConfigs = await getRepoActors();
|
|
64
|
-
const actorsChanged = getChangedActors({
|
|
65
|
-
filepathsChanged: changedFiles,
|
|
66
|
-
actorConfigs,
|
|
67
|
-
isLatest: false,
|
|
68
|
-
commits,
|
|
69
|
-
});
|
|
88
|
+
.command('get-affected-actors', '', buildOptions, async ({ targetBranch, sourceBranch, baseCommit }) => {
|
|
89
|
+
const actorsChanged = await resolveChangedActors({ targetBranch, sourceBranch, baseCommit }, { isLatest: false });
|
|
70
90
|
console.log(JSON.stringify(actorsChanged));
|
|
71
91
|
})
|
|
72
92
|
.command('report-tests', '', (args) => args
|
|
@@ -76,23 +96,16 @@ await yargs()
|
|
|
76
96
|
.option('workflow-name', { type: 'string' }), async (args) => {
|
|
77
97
|
await reportTestResults(args);
|
|
78
98
|
})
|
|
79
|
-
.command('build', '', (args) => buildOptions(args).option('dry-run', { type: 'boolean', default: false }), async (
|
|
80
|
-
const
|
|
81
|
-
const changedFiles = getChangedFiles(commits);
|
|
82
|
-
const actorConfigs = await getRepoActors();
|
|
83
|
-
const actorsChanged = getChangedActors({
|
|
84
|
-
filepathsChanged: changedFiles,
|
|
85
|
-
actorConfigs,
|
|
86
|
-
commits,
|
|
87
|
-
});
|
|
99
|
+
.command('build', '', (args) => buildOptions(args).option('dry-run', { type: 'boolean', default: false }), async ({ targetBranch, sourceBranch, baseCommit, dryRun }) => {
|
|
100
|
+
const actorsChanged = await resolveChangedActors({ targetBranch, sourceBranch, baseCommit }, { isLatest: false });
|
|
88
101
|
// https://github.com/apify-store/google-maps#:actors/lukaskrivka_google-maps-with-contact-details
|
|
89
102
|
// git@github.com:apify-store/google-maps#:actors/lukaskrivka_google-maps-with-contact-details
|
|
90
103
|
const repoUrl = spawnCommandInGhWorkspace(`git remote get-url origin`).replace(/^https:\/\/github\.com\//, 'git@github.com:');
|
|
91
104
|
const builds = await runBuilds({
|
|
92
105
|
repoUrl,
|
|
93
106
|
actorConfigs: actorsChanged,
|
|
94
|
-
branch:
|
|
95
|
-
dryRun
|
|
107
|
+
branch: sourceBranch.replace('origin/', ''),
|
|
108
|
+
dryRun,
|
|
96
109
|
});
|
|
97
110
|
console.log(JSON.stringify(builds));
|
|
98
111
|
})
|
package/dist/bin/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../bin/main.ts"],"names":[],"mappings":";AAEA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,KAAoB,MAAM,OAAO,CAAC;AACzC,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,eAAe,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../bin/main.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/lib.d.ts
CHANGED
|
@@ -23,10 +23,10 @@ export declare const it: <T>(actorName: string, testName: string, fn: TestFuncti
|
|
|
23
23
|
run: ReturnType<typeof createStartRunFn<T>>;
|
|
24
24
|
}>, testOptions?: ActorTestOptions) => void;
|
|
25
25
|
/**
|
|
26
|
-
* Creates a function
|
|
26
|
+
* Creates a function that accepts input for a standby actor and sends a request containing the input
|
|
27
27
|
* to the task's standby url.
|
|
28
28
|
*/
|
|
29
|
-
declare const createStartStandbyFn: <I, O>(standbyTask: StandbyTask) => ({ input, path, headers, }: Pick<RunOptions<I>, "input"> & {
|
|
29
|
+
declare const createStartStandbyFn: <I, O>(standbyTask: StandbyTask, { annotate }: TestContext, testName: string) => ({ input, path, headers, }: Pick<RunOptions<I>, "input"> & {
|
|
30
30
|
path?: string;
|
|
31
31
|
headers?: Record<string, string>;
|
|
32
32
|
}) => Promise<{
|
package/dist/lib/lib.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../lib/lib.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAA8B,YAAY,EAAsB,MAAM,QAAQ,CAAC;AAGtF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAc,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAuB3E,OAAO,EAAE,YAAY,EAAE,CAAC;AAYxB,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,KAAK,YAAY,CAAC,MAAM,CAAC,EAAE,UAAS,gBAAuC,SAEjH,CAAC;AAMF,eAAO,MAAM,SAAS,GAAI,CAAC,EACvB,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,IAAI,YAAY,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,EACjE,cAAc,gBAAgB,SAgBjC,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAC7C,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,IAAI,YAAY,CAAC;IAAE,WAAW,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,EAChF,cAAc,gBAAgB,
|
|
1
|
+
{"version":3,"file":"lib.d.ts","sourceRoot":"","sources":["../../lib/lib.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,YAAY,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AACtE,OAAO,EAA8B,YAAY,EAAsB,MAAM,QAAQ,CAAC;AAGtF,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAc,gBAAgB,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAuB3E,OAAO,EAAE,YAAY,EAAE,CAAC;AAYxB,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,KAAK,YAAY,CAAC,MAAM,CAAC,EAAE,UAAS,gBAAuC,SAEjH,CAAC;AAMF,eAAO,MAAM,SAAS,GAAI,CAAC,EACvB,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,IAAI,YAAY,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,EACjE,cAAc,gBAAgB,SAgBjC,CAAC;AAEF;;;;;GAKG;AAEH,eAAO,MAAM,gBAAgB,GAAI,CAAC,GAAG,GAAG,EAAE,CAAC,GAAG,GAAG,EAC7C,WAAW,MAAM,EACjB,UAAU,MAAM,EAChB,IAAI,YAAY,CAAC;IAAE,WAAW,EAAE,UAAU,CAAC,OAAO,oBAAoB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,EAChF,cAAc,gBAAgB,SA+BjC,CAAC;AAEF,eAAO,MAAM,aAAa,GAAI,CAAC,EAC3B,UAAU,MAAM,EAChB,IAAI,YAAY,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,SAYpE,CAAC;AAEF,eAAO,MAAM,EAAE,GAlFW,CAAC,aACZ,MAAM,YACP,MAAM,MACZ,YAAY,CAAC;IAAE,GAAG,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAAA;CAAE,CAAC,gBACnD,gBAAgB,SA8EP,CAAC;AAE5B;;;GAGG;AACH,QAAA,MAAM,oBAAoB,GAAI,CAAC,EAAE,CAAC,EAAE,aAAa,WAAW,EAAE,cAAc,WAAW,EAAE,UAAU,MAAM,MAmBvF,2BAIX,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE;;;;EAmBxF,CAAC;AAEF,UAAU,WAAW;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;CAClB;AA6DD,QAAA,MAAM,gBAAgB,GAAI,CAAC,EAAE,eAAe,MAAM,EAAE,aAAa,WAAW,MAK1D,YAAY,UAAU,CAAC,CAAC,CAAC,2BAiC1C,CAAC"}
|
package/dist/lib/lib.js
CHANGED
|
@@ -68,27 +68,24 @@ export const testStandbyActor = (actorName, testName, fn, testOptions) => {
|
|
|
68
68
|
const shouldRun = !!RUN_ALL_PLATFORM_TESTS || config.has(actorName);
|
|
69
69
|
vitestTest.runIf(shouldRun)(name, options, async (context) => {
|
|
70
70
|
const standbyTask = await createStandbyTask(actorName, config.get(actorName)?.buildNumber);
|
|
71
|
-
const { annotate } = context;
|
|
72
71
|
const { expect, ...rest } = context;
|
|
73
|
-
// NOTE: we
|
|
72
|
+
// NOTE: we wrap `fn` in try/finally so cleanup (deleting the task) always runs afterwards
|
|
74
73
|
try {
|
|
75
74
|
await fn({
|
|
76
75
|
expect: extendExpect(expect),
|
|
77
|
-
callStandby: createStartStandbyFn(standbyTask),
|
|
76
|
+
callStandby: createStartStandbyFn(standbyTask, context, name),
|
|
78
77
|
...rest,
|
|
79
78
|
});
|
|
80
79
|
}
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
if (taskId) {
|
|
91
|
-
await apifyClient.task(taskId).delete();
|
|
80
|
+
finally {
|
|
81
|
+
const { taskId } = standbyTask;
|
|
82
|
+
// we want to delete the task at the end of the test
|
|
83
|
+
await apifyClient
|
|
84
|
+
.task(taskId)
|
|
85
|
+
.delete()
|
|
86
|
+
.catch((error) => {
|
|
87
|
+
console.error(`Failed to delete standby task "${taskId}": ${error}`);
|
|
88
|
+
});
|
|
92
89
|
}
|
|
93
90
|
});
|
|
94
91
|
};
|
|
@@ -106,11 +103,26 @@ export const testTestActor = (testName, fn) => {
|
|
|
106
103
|
};
|
|
107
104
|
export const it = testActor;
|
|
108
105
|
/**
|
|
109
|
-
* Creates a function
|
|
106
|
+
* Creates a function that accepts input for a standby actor and sends a request containing the input
|
|
110
107
|
* to the task's standby url.
|
|
111
108
|
*/
|
|
112
|
-
const createStartStandbyFn = (standbyTask) => {
|
|
113
|
-
const { standbyUrl } = standbyTask;
|
|
109
|
+
const createStartStandbyFn = (standbyTask, { annotate }, testName) => {
|
|
110
|
+
const { standbyUrl, taskId } = standbyTask;
|
|
111
|
+
const annotatedRuns = new Set();
|
|
112
|
+
// We annotate all the runs of the task, though it will be only one run
|
|
113
|
+
// for most of the tests. To avoid annotating the same run multiple times
|
|
114
|
+
// (in case the test calls the standby more than once), we use `annotatedRuns`
|
|
115
|
+
// set to keep track of which runs have already been annotated.
|
|
116
|
+
const annotateStandbyRuns = async () => {
|
|
117
|
+
const runs = (await apifyClient.task(taskId).runs().list()).items;
|
|
118
|
+
for (const run of runs) {
|
|
119
|
+
if (!annotatedRuns.has(run.id)) {
|
|
120
|
+
const runLink = generateRunLink(run);
|
|
121
|
+
await annotate(`${testName} - ${runLink}`, 'run_link');
|
|
122
|
+
}
|
|
123
|
+
annotatedRuns.add(run.id);
|
|
124
|
+
}
|
|
125
|
+
};
|
|
114
126
|
return async ({ input, path = '', headers = {}, }) => {
|
|
115
127
|
const response = await fetch(standbyUrl + path, {
|
|
116
128
|
headers: {
|
|
@@ -120,6 +132,7 @@ const createStartStandbyFn = (standbyTask) => {
|
|
|
120
132
|
method: 'POST',
|
|
121
133
|
body: JSON.stringify(input),
|
|
122
134
|
});
|
|
135
|
+
await annotateStandbyRuns();
|
|
123
136
|
const data = (await response.json());
|
|
124
137
|
return {
|
|
125
138
|
data,
|
|
@@ -128,9 +141,6 @@ const createStartStandbyFn = (standbyTask) => {
|
|
|
128
141
|
};
|
|
129
142
|
};
|
|
130
143
|
};
|
|
131
|
-
const randomInt = (min, max) => {
|
|
132
|
-
return Math.floor(Math.random() * (max - min + 1)) + min;
|
|
133
|
-
};
|
|
134
144
|
/**
|
|
135
145
|
* Creates a task with specific `build` - either `buildNumber` or default.
|
|
136
146
|
*
|
|
@@ -156,16 +166,15 @@ const createStandbyTask = async (actorNameOrId, buildNumber) => {
|
|
|
156
166
|
build,
|
|
157
167
|
};
|
|
158
168
|
try {
|
|
159
|
-
const title = `Test task - ${build}
|
|
169
|
+
const title = `Test task - ${build}`.slice(0, 62);
|
|
170
|
+
const randomValueLength = 15;
|
|
160
171
|
// we try to create unique task name containing only `a-z0-9-` characters and at most 63 characters long
|
|
161
|
-
const
|
|
162
|
-
|
|
163
|
-
.replaceAll(/\s+/g, '')
|
|
164
|
-
.replaceAll(/[^a-z0-9-]+/g, '-')}`.slice(0, 62);
|
|
172
|
+
const randomValue = Math.random().toString(10).slice(2).padEnd(randomValueLength, '0');
|
|
173
|
+
const name = `test-${randomValue.slice(0, randomValueLength)}`;
|
|
165
174
|
const newTask = (await apifyClient.tasks().create({
|
|
166
175
|
actId: actorNameOrId,
|
|
167
176
|
actorStandby: actorStandbyOptions,
|
|
168
|
-
description: `Task for testing standby version ${build}`,
|
|
177
|
+
description: `Task for testing standby version ${build} of actor "${actorNameOrId}"`,
|
|
169
178
|
title,
|
|
170
179
|
name,
|
|
171
180
|
}));
|
package/dist/lib/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../lib/lib.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../lib/lib.ts"],"names":[],"mappings":"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"}
|