apify-test-tools 0.10.2-beta.1 → 0.10.2-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/.gitattributes +2 -0
- package/.github/actions/checkout-restore-dependencies/action.yaml +13 -29
- package/.github/cli/apify-test-tools.mjs +361 -0
- package/.github/scripts/run-with-apify-tokens.mjs +2 -2
- package/.github/workflows/_check_code.yaml +25 -0
- package/.github/workflows/_move_major_tag.yaml +3 -81
- package/.github/workflows/_tests.yaml +34 -0
- package/.github/workflows/_update_release_metadata.yaml +0 -12
- package/.github/workflows/manual_move_major_tag.yaml +3 -3
- package/.github/workflows/manual_release_stable.yaml +3 -13
- package/.github/workflows/on_master.yaml +9 -5
- package/.github/workflows/on_pull_request.yaml +3 -48
- package/.github/workflows/public_platform-tests.yaml +1 -1
- package/.github/workflows/public_pr-build-test.yaml +2 -2
- package/.github/workflows/public_push-build-latest.yaml +2 -2
- package/.husky/pre-commit +5 -0
- package/.prettierignore +3 -0
- package/CHANGELOG.md +5 -0
- package/CONTRIBUTING.md +8 -18
- package/README.md +94 -44
- package/bin/affected-actors.ts +166 -0
- package/bin/build-from-local.ts +47 -13
- package/bin/build.ts +35 -19
- package/bin/diff-changes.ts +25 -17
- package/bin/git.ts +52 -41
- package/bin/main.ts +63 -78
- package/bin/slack.ts +28 -6
- package/bin/test-report.ts +6 -9
- package/bin/types.ts +9 -0
- package/dist/bin/affected-actors.d.ts +50 -0
- package/dist/bin/affected-actors.d.ts.map +1 -0
- package/dist/bin/affected-actors.js +89 -0
- package/dist/bin/affected-actors.js.map +1 -0
- package/dist/bin/build-from-local.d.ts +10 -2
- package/dist/bin/build-from-local.d.ts.map +1 -1
- package/dist/bin/build-from-local.js +29 -11
- package/dist/bin/build-from-local.js.map +1 -1
- package/dist/bin/build.d.ts +15 -5
- package/dist/bin/build.d.ts.map +1 -1
- package/dist/bin/build.js +24 -15
- package/dist/bin/build.js.map +1 -1
- package/dist/bin/diff-changes.d.ts +8 -2
- package/dist/bin/diff-changes.d.ts.map +1 -1
- package/dist/bin/diff-changes.js +16 -16
- package/dist/bin/diff-changes.js.map +1 -1
- package/dist/bin/git.d.ts +23 -13
- package/dist/bin/git.d.ts.map +1 -1
- package/dist/bin/git.js +44 -32
- package/dist/bin/git.js.map +1 -1
- package/dist/bin/main.js +57 -57
- package/dist/bin/main.js.map +1 -1
- package/dist/bin/slack.d.ts +8 -1
- package/dist/bin/slack.d.ts.map +1 -1
- package/dist/bin/slack.js +26 -5
- package/dist/bin/slack.js.map +1 -1
- package/dist/bin/test-report.d.ts.map +1 -1
- package/dist/bin/test-report.js +6 -8
- package/dist/bin/test-report.js.map +1 -1
- package/dist/bin/types.d.ts +8 -0
- package/dist/bin/types.d.ts.map +1 -1
- package/dist/test/bundle/cli-bundle.test.d.ts +2 -0
- package/dist/test/bundle/cli-bundle.test.d.ts.map +1 -0
- package/dist/test/bundle/cli-bundle.test.js +169 -0
- package/dist/test/bundle/cli-bundle.test.js.map +1 -0
- package/dist/test/e2e/cli-bundle.e2e.test.d.ts +2 -0
- package/dist/test/e2e/cli-bundle.e2e.test.d.ts.map +1 -0
- package/dist/test/e2e/cli-bundle.e2e.test.js +172 -0
- package/dist/test/e2e/cli-bundle.e2e.test.js.map +1 -0
- package/dist/test/unit/bin/affected-actors.test.d.ts +2 -0
- package/dist/test/unit/bin/affected-actors.test.d.ts.map +1 -0
- package/dist/test/unit/bin/affected-actors.test.js +160 -0
- package/dist/test/unit/bin/affected-actors.test.js.map +1 -0
- package/dist/test/unit/bin/build-from-local.test.js +53 -1
- package/dist/test/unit/bin/build-from-local.test.js.map +1 -1
- package/dist/test/unit/bin/build.test.js +113 -3
- package/dist/test/unit/bin/build.test.js.map +1 -1
- package/dist/test/unit/bin/diff-changes.test.js +78 -49
- package/dist/test/unit/bin/diff-changes.test.js.map +1 -1
- package/dist/test/unit/bin/git.test.js +50 -53
- package/dist/test/unit/bin/git.test.js.map +1 -1
- package/dist/test/unit/bin/slack.test.d.ts +2 -0
- package/dist/test/unit/bin/slack.test.d.ts.map +1 -0
- package/dist/test/unit/bin/slack.test.js +54 -0
- package/dist/test/unit/bin/slack.test.js.map +1 -0
- package/dist/test/unit/should-built-and-test.test.js +23 -17
- package/dist/test/unit/should-built-and-test.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +13 -3
- package/test/bundle/cli-bundle.test.ts +199 -0
- package/test/e2e/cli-bundle.e2e.test.ts +237 -0
- package/test/unit/bin/affected-actors.test.ts +190 -0
- package/test/unit/bin/build-from-local.test.ts +55 -0
- package/test/unit/bin/build.test.ts +135 -3
- package/test/unit/bin/diff-changes.test.ts +87 -49
- package/test/unit/bin/git.test.ts +56 -53
- package/test/unit/bin/slack.test.ts +65 -0
- package/test/unit/should-built-and-test.test.ts +27 -17
- package/.github/scripts/check-package-version-bump.mjs +0 -74
- package/.github/workflows-package-version +0 -1
package/dist/bin/git.js
CHANGED
|
@@ -3,7 +3,7 @@ import { GitCommandError, runGitCommand } from './utils.js';
|
|
|
3
3
|
export const GIT_FORMAT_SEPARATOR = '»¦«';
|
|
4
4
|
const GIT_LOG_FORMAT = ['%H', '%aN<%aE>', '%aD', '%s'].join(GIT_FORMAT_SEPARATOR);
|
|
5
5
|
/**
|
|
6
|
-
* Gets the list of changed files between the given commits (inclusive).
|
|
6
|
+
* Gets the list of changed files between the given commits (inclusive), so it diffs from the parent of the oldest.
|
|
7
7
|
*/
|
|
8
8
|
export const getChangedFiles = async (commits) => {
|
|
9
9
|
// getCommits never returns an empty list (the rerun check returns all commits when the base commit
|
|
@@ -11,7 +11,18 @@ export const getChangedFiles = async (commits) => {
|
|
|
11
11
|
if (commits.length === 0) {
|
|
12
12
|
throw new Error('Cannot get changed files: the commit list is empty. This should never happen.');
|
|
13
13
|
}
|
|
14
|
-
|
|
14
|
+
return getChangedFilesBetween(`${commits[0].sha}~`, commits[commits.length - 1].sha);
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Files that differ between two commits, i.e. changed by the commits in the range (fromRef, toRef]. fromRef's own
|
|
18
|
+
* changes are not included: to include them, pass its parent, `${sha}~` (as getChangedFiles does).
|
|
19
|
+
* Diffing the endpoints, rather than walking a commit list, is what keeps merges right: the oldest commit of a
|
|
20
|
+
* merged branch can predate fromRef, and its changes are already in fromRef.
|
|
21
|
+
*/
|
|
22
|
+
export const getChangedFilesBetween = async (fromRef, toRef) => {
|
|
23
|
+
const changedFilesString = await runGitCommand(['diff', '--name-only', `${fromRef}..${toRef}`], {
|
|
24
|
+
operation: 'get the list of changed files between commits',
|
|
25
|
+
});
|
|
15
26
|
const changedFiles = changedFilesString.split('\n').filter(Boolean);
|
|
16
27
|
logger.info(`Changed files (up to 50): ${changedFiles.slice(0, 50).join(', ')}`);
|
|
17
28
|
return changedFiles;
|
|
@@ -83,8 +94,14 @@ export const parseBaseCommit = (shaOrCommit) => {
|
|
|
83
94
|
}
|
|
84
95
|
return sha;
|
|
85
96
|
};
|
|
86
|
-
|
|
87
|
-
|
|
97
|
+
/**
|
|
98
|
+
* Commits reachable from toRef but not from fromRef, oldest first: the range (fromRef, toRef], so fromRef itself is
|
|
99
|
+
* not included. To include it, pass its parent, `${sha}~`.
|
|
100
|
+
*/
|
|
101
|
+
export const getCommitsBetween = async (fromRef, toRef) => {
|
|
102
|
+
const output = await runGitCommand(['log', `--pretty=format:${GIT_LOG_FORMAT}`, `${fromRef}..${toRef}`], {
|
|
103
|
+
operation: 'list commits reachable from the source ref but absent from the target ref',
|
|
104
|
+
});
|
|
88
105
|
const commitsStrings = output.split('\n');
|
|
89
106
|
const commits = commitsStrings.map((commitString) => parseCommit(commitString));
|
|
90
107
|
commits.reverse();
|
|
@@ -96,7 +113,7 @@ const fetchAllBranchCommits = async (sourceBranch, targetBranch) => {
|
|
|
96
113
|
*/
|
|
97
114
|
export const getCommits = async ({ sourceBranch, targetBranch, baseCommit, }) => {
|
|
98
115
|
const baseCommitSha = parseBaseCommit(baseCommit);
|
|
99
|
-
const commits = await
|
|
116
|
+
const commits = await getCommitsBetween(targetBranch, sourceBranch);
|
|
100
117
|
// The last validated (base) commit being the branch HEAD means nothing new was pushed since the last
|
|
101
118
|
// validation — the dev reran the workflow (or force-pushed to the same state) to trigger a clean test
|
|
102
119
|
const headSha = commits[commits.length - 1]?.sha;
|
|
@@ -143,6 +160,18 @@ export const getCurrentBranch = async () => {
|
|
|
143
160
|
}
|
|
144
161
|
return branch;
|
|
145
162
|
};
|
|
163
|
+
/** Resolves a ref (branch, remote branch, SHA, HEAD, ...) to the full SHA of the commit it points to. */
|
|
164
|
+
export const resolveCommitSha = async (ref) => runGitCommand(['rev-parse', '--verify', `${ref}^{commit}`], { operation: `resolve ${ref} to a commit` });
|
|
165
|
+
/**
|
|
166
|
+
* Branch name a ref points to, without the remote: `origin/foo` and `foo` both give `foo`, and `HEAD`
|
|
167
|
+
* gives the checked-out branch. Null when there is no branch to point at (a SHA, a tag, a detached HEAD).
|
|
168
|
+
*/
|
|
169
|
+
export const resolveBranchName = async (ref) => {
|
|
170
|
+
const fullName = await runGitCommand(['rev-parse', '--symbolic-full-name', ref], {
|
|
171
|
+
operation: `resolve the branch name of ${ref}`,
|
|
172
|
+
});
|
|
173
|
+
return fullName.match(/^refs\/(?:heads|remotes\/[^/]+)\/(.+)$/)?.[1] ?? null;
|
|
174
|
+
};
|
|
146
175
|
/**
|
|
147
176
|
* Reads the repository URL from the `origin` remote, rewritten to the SSH form the Apify platform
|
|
148
177
|
* uses for Git repo sources, e.g. git@github.com:apify-store/google-maps
|
|
@@ -190,14 +219,14 @@ const ZERO_SHA_REGEX = /^0{40}$/;
|
|
|
190
219
|
* Unlike the PR path (getCommits), there is no lenient fallback. Falling back to "everything"
|
|
191
220
|
* would rebuild the latest build of every Actor and post it to Slack, so every problem is an error.
|
|
192
221
|
*/
|
|
193
|
-
export const resolveReleaseBaseCommit = async (baseCommit) => {
|
|
222
|
+
export const resolveReleaseBaseCommit = async (baseCommit, head = 'HEAD') => {
|
|
194
223
|
const sha = parseBaseCommit(baseCommit);
|
|
195
224
|
if (!sha) {
|
|
196
|
-
throw new Error('
|
|
225
|
+
throw new Error('A base commit is required for release. See the README section "Releasing Actors".');
|
|
197
226
|
}
|
|
198
227
|
if (ZERO_SHA_REGEX.test(sha)) {
|
|
199
228
|
throw new Error(`Base commit is ${sha}, which means the branch was just created and there is no previous release to diff against. ` +
|
|
200
|
-
`Rerun with
|
|
229
|
+
`Rerun with the base commit set to the last commit before the changes you want to release.`);
|
|
201
230
|
}
|
|
202
231
|
// --quiet suppresses Git's error text for a missing commit, but Git still exits with code 1.
|
|
203
232
|
const verifiedSha = await runGitCommand(['rev-parse', '--verify', '--quiet', `${sha}^{commit}`], {
|
|
@@ -212,27 +241,27 @@ export const resolveReleaseBaseCommit = async (baseCommit) => {
|
|
|
212
241
|
`(fetch the full history, e.g. fetch-depth: 0 in actions/checkout) or the branch was force-pushed.`);
|
|
213
242
|
}
|
|
214
243
|
// git merge-base A B outputs the common ancestor. If that equals A, then A is an ancestor of B.
|
|
215
|
-
const mergeBase = await runGitCommand(['merge-base', verifiedSha,
|
|
216
|
-
operation:
|
|
244
|
+
const mergeBase = await runGitCommand(['merge-base', verifiedSha, head], {
|
|
245
|
+
operation: `check whether the release base commit is an ancestor of ${head}`,
|
|
217
246
|
}).catch((error) => {
|
|
218
247
|
if (error instanceof GitCommandError && error.exitCode === 1)
|
|
219
248
|
return '';
|
|
220
249
|
throw error;
|
|
221
250
|
});
|
|
222
251
|
if (mergeBase !== sha) {
|
|
223
|
-
throw new Error(`Base commit ${sha} is not an ancestor of
|
|
224
|
-
`The changed files cannot be determined reliably. Rerun with
|
|
252
|
+
throw new Error(`Base commit ${sha} is not an ancestor of ${head}, most likely because the branch was force-pushed. ` +
|
|
253
|
+
`The changed files cannot be determined reliably. Rerun with the base commit set to an ancestor of ${head} ` +
|
|
225
254
|
`from before the changes you want to release.`);
|
|
226
255
|
}
|
|
227
256
|
return sha;
|
|
228
257
|
};
|
|
229
258
|
const CHANGELOG_PATH = 'CHANGELOG.md';
|
|
230
|
-
/** Returns the lines added to the root CHANGELOG.md between
|
|
231
|
-
const getChangelogAdditions = async (
|
|
259
|
+
/** Returns the lines added to the root CHANGELOG.md between fromRef and toRef, or null if it didn't change. */
|
|
260
|
+
export const getChangelogAdditions = async (fromRef, toRef, changedFiles) => {
|
|
232
261
|
if (!changedFiles.includes(CHANGELOG_PATH)) {
|
|
233
262
|
return null;
|
|
234
263
|
}
|
|
235
|
-
const diff = await runGitCommand(['diff',
|
|
264
|
+
const diff = await runGitCommand(['diff', fromRef, toRef, '--', CHANGELOG_PATH], {
|
|
236
265
|
operation: 'read changelog changes since the last release',
|
|
237
266
|
});
|
|
238
267
|
const added = [];
|
|
@@ -254,21 +283,4 @@ const getChangelogAdditions = async (baseSha, changedFiles) => {
|
|
|
254
283
|
}
|
|
255
284
|
return added.join('\n').trim();
|
|
256
285
|
};
|
|
257
|
-
/**
|
|
258
|
-
* Everything that changed since the last release (baseSha, exclusive) up to HEAD, or null when there
|
|
259
|
-
* are no new commits. Changed files come from diffing the range directly instead of from the commit
|
|
260
|
-
* list: with a merge commit, the oldest commit of the merged branch can be older than baseSha, and
|
|
261
|
-
* diffing from its parent would pull in already-released changes.
|
|
262
|
-
*/
|
|
263
|
-
export const getReleaseChanges = async (baseSha) => {
|
|
264
|
-
if ((await runGitCommand(['rev-parse', 'HEAD'], { operation: 'identify the current release commit' })) === baseSha) {
|
|
265
|
-
return null;
|
|
266
|
-
}
|
|
267
|
-
const commits = await fetchAllBranchCommits('HEAD', baseSha);
|
|
268
|
-
const changedFiles = await runGitCommand(['diff', '--name-only', baseSha, 'HEAD'], {
|
|
269
|
-
operation: 'list files changed since the last release',
|
|
270
|
-
}).then((output) => output.split('\n').filter(Boolean));
|
|
271
|
-
const changelog = await getChangelogAdditions(baseSha, changedFiles);
|
|
272
|
-
return { commits, changedFiles, changelog };
|
|
273
|
-
};
|
|
274
286
|
//# sourceMappingURL=git.js.map
|
package/dist/bin/git.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,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,KAAK,EAAE,OAAiB,EAAE,EAAE;IACvD,mGAAmG;IACnG,sGAAsG;IACtG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACrG,CAAC;IAED,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,eAAe,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAE5D,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,KAAK,EAAE,OAAiB,EAAE,EAAE;IACvD,mGAAmG;IACnG,sGAAsG;IACtG,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACrG,CAAC;IAED,OAAO,sBAAsB,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AACzF,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EAAE,OAAe,EAAE,KAAa,EAAE,EAAE;IAC3E,MAAM,kBAAkB,GAAG,MAAM,aAAa,CAAC,CAAC,MAAM,EAAE,aAAa,EAAE,GAAG,OAAO,KAAK,KAAK,EAAE,CAAC,EAAE;QAC5F,SAAS,EAAE,+CAA+C;KAC7D,CAAC,CAAC;IAEH,MAAM,YAAY,GAAG,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACpE,MAAM,CAAC,IAAI,CAAC,6BAA6B,YAAY,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjF,OAAO,YAAY,CAAC;AACxB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,YAAoB,EAAE,YAAoB,EAAoB,EAAE;IACrG,MAAM,SAAS,GAAG,CACd,MAAM,aAAa,CAAC,CAAC,KAAK,EAAE,UAAU,EAAE,oBAAoB,EAAE,GAAG,YAAY,KAAK,YAAY,EAAE,CAAC,EAAE;QAC/F,SAAS,EAAE,gFAAgF;KAC9F,CAAC,CACL;SACI,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,OAAO,CAAC,CAAC;IAErB,KAAK,MAAM,GAAG,IAAI,SAAS,EAAE,CAAC;QAC1B,MAAM,OAAO,GAAG,CACZ,MAAM,aAAa,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,oBAAoB,EAAE,GAAG,CAAC,EAAE;YAC1D,SAAS,EAAE,+BAA+B;SAC7C,CAAC,CACL,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACb,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC3B,kDAAkD;YAClD,6FAA6F;YAC7F,IAAI,SAAiB,CAAC;YACtB,IAAI,CAAC;gBACD,SAAS,GAAG,MAAM,aAAa,CAAC,CAAC,YAAY,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE;oBAClE,SAAS,EAAE,kEAAkE;iBAChF,CAAC,CAAC;YACP,CAAC;YAAC,OAAO,KAAK,EAAE,CAAC;gBACb,yEAAyE;gBACzE,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,EAAE,CAAC;oBAC3D,SAAS;gBACb,CAAC;gBACD,MAAM,KAAK,CAAC;YAChB,CAAC;YACD,IAAI,SAAS,KAAK,MAAM,EAAE,CAAC;gBACvB,OAAO,IAAI,CAAC;YAChB,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,yBAAyB,GAAG,KAAK,EAAE,YAAoB,EAAE,YAAoB,EAAqB,EAAE;IAC7G,MAAM,MAAM,GAAG,MAAM,aAAa,CAC9B,CAAC,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,kBAAkB,EAAE,GAAG,YAAY,KAAK,YAAY,EAAE,CAAC,EAC7F,EAAE,SAAS,EAAE,8DAA8D,EAAE,CAChF,CAAC;IACF,OAAO,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;AAC9C,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;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,OAAe,EAAE,KAAa,EAAqB,EAAE;IACzF,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,KAAK,EAAE,mBAAmB,cAAc,EAAE,EAAE,GAAG,OAAO,KAAK,KAAK,EAAE,CAAC,EAAE;QACrG,SAAS,EAAE,2EAA2E;KACzF,CAAC,CAAC;IACH,MAAM,cAAc,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1C,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,YAAY,EAAE,EAAE,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC,CAAC;IAChF,OAAO,CAAC,OAAO,EAAE,CAAC;IAClB,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG,KAAK,EAAE,EAC7B,YAAY,EACZ,YAAY,EACZ,UAAU,GACiD,EAAqB,EAAE;IAClF,MAAM,aAAa,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,MAAM,iBAAiB,CAAC,YAAY,EAAE,YAAY,CAAC,CAAC;IAEpE,qGAAqG;IACrG,sGAAsG;IACtG,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,GAAG,CAAC;IACjD,IAAI,aAAa,KAAK,SAAS,IAAI,aAAa,KAAK,OAAO,EAAE,CAAC;QAC3D,MAAM,CAAC,IAAI,CACP,qKAAqK,aAAa,4BAA4B,CACjN,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC/E,OAAO,OAAO,CAAC;IACnB,CAAC;IAED,MAAM,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,GAAG,KAAK,aAAa,CAAC,CAAC;IAEpF,MAAM,aAAa,GAAG,eAAe,KAAK,CAAC,CAAC,CAAC;IAC7C,IAAI,aAAa,EAAE,CAAC;QAChB,MAAM,qBAAqB,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,GAAG,CAAC,CAAC,CAAC;QACjE,MAAM,CAAC,IAAI,CACP,qBAAqB,aAAa,aAAa,eAAe,eAAe,qBAAqB,CAAC,MAAM,mBAAmB,CAC/H,CAAC;QACF,MAAM,CAAC,IAAI,CAAC,2BAA2B,qBAAqB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAC7F,OAAO,qBAAqB,CAAC;IACjC,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,eAAe,aAAa,iDAAiD,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;IACnH,MAAM,CAAC,IAAI,CAAC,2BAA2B,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,OAAO,CAAC;AACnB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,YAAoB,EAAU,EAAE;IACxD,MAAM,MAAM,GAAG,YAAY,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,kCAAkC,YAAY,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC;IAC5C,OAAO;QACH,GAAG;QACH,MAAM;QACN,IAAI;QACJ,OAAO;KACV,CAAC;AACN,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,IAAqB,EAAE;IACxD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,WAAW,EAAE,cAAc,EAAE,MAAM,CAAC,EAAE;QACtE,SAAS,EAAE,0CAA0C;KACxD,CAAC,CAAC;IACH,IAAI,MAAM,KAAK,MAAM,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,qGAAqG,CACxG,CAAC;IACN,CAAC;IACD,OAAO,MAAM,CAAC;AAClB,CAAC,CAAC;AAEF,yGAAyG;AACzG,MAAM,CAAC,MAAM,gBAAgB,GAAG,KAAK,EAAE,GAAW,EAAmB,EAAE,CACnE,aAAa,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,GAAG,GAAG,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,WAAW,GAAG,cAAc,EAAE,CAAC,CAAC;AAE7G;;;GAGG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,GAAW,EAA0B,EAAE;IAC3E,MAAM,QAAQ,GAAG,MAAM,aAAa,CAAC,CAAC,WAAW,EAAE,sBAAsB,EAAE,GAAG,CAAC,EAAE;QAC7E,SAAS,EAAE,8BAA8B,GAAG,EAAE;KACjD,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC,KAAK,CAAC,wCAAwC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AACjF,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,gBAAgB,GAAG,KAAK,IAAqB,EAAE;IACjD,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,CAAC,QAAQ,EAAE,SAAS,EAAE,QAAQ,CAAC,EAAE;QAChE,SAAS,EAAE,gCAAgC;KAC9C,CAAC,CAAC;IACH,OAAO,MAAM,CAAC,OAAO,CAAC,0BAA0B,EAAE,iBAAiB,CAAC,CAAC;AACzE,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,eAAmC,EAAE,EAAE,CAAC,CAAC;IAC1E,OAAO,EAAE,eAAe,IAAI,CAAC,MAAM,gBAAgB,EAAE,CAAC;IACtD,mBAAmB,EAAE,eAAe,KAAK,SAAS;CACrD,CAAC,CAAC;AAEH;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,OAAe,EAAU,EAAE;IACxD,OAAO,OAAO;SACT,IAAI,EAAE;SACN,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;SACb,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;SAC7B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC;SACjB,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;SACnB,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC;SACrB,WAAW,EAAE,CAAC;AACvB,CAAC,CAAC;AAEF,sGAAsG;AACtG,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,OAAe,EAAU,EAAE;IACnD,OAAO,gBAAgB,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAG,CAAC;AACvD,CAAC,CAAC;AAEF,+EAA+E;AAC/E,MAAM,cAAc,GAAG,SAAS,CAAC;AAEjC;;;;GAIG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAAE,UAAkB,EAAE,IAAI,GAAG,MAAM,EAAmB,EAAE;IACjG,MAAM,GAAG,GAAG,eAAe,CAAC,UAAU,CAAC,CAAC;IACxC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,MAAM,IAAI,KAAK,CAAC,mFAAmF,CAAC,CAAC;IACzG,CAAC;IACD,IAAI,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CACX,kBAAkB,GAAG,8FAA8F;YAC/G,2FAA2F,CAClG,CAAC;IACN,CAAC;IACD,6FAA6F;IAC7F,MAAM,WAAW,GAAG,MAAM,aAAa,CAAC,CAAC,WAAW,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,GAAG,WAAW,CAAC,EAAE;QAC7F,SAAS,EAAE,qDAAqD;KACnE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxE,MAAM,KAAK,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,CAAC,WAAW,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACX,eAAe,GAAG,mEAAmE;YACjF,mGAAmG,CAC1G,CAAC;IACN,CAAC;IACD,gGAAgG;IAChG,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,CAAC,YAAY,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE;QACrE,SAAS,EAAE,2DAA2D,IAAI,EAAE;KAC/E,CAAC,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACxB,IAAI,KAAK,YAAY,eAAe,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC;YAAE,OAAO,EAAE,CAAC;QACxE,MAAM,KAAK,CAAC;IAChB,CAAC,CAAC,CAAC;IACH,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACpB,MAAM,IAAI,KAAK,CACX,eAAe,GAAG,0BAA0B,IAAI,qDAAqD;YACjG,qGAAqG,IAAI,GAAG;YAC5G,8CAA8C,CACrD,CAAC;IACN,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,cAAc,CAAC;AAEtC,+GAA+G;AAC/G,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACtC,OAAe,EACf,KAAa,EACb,YAAsB,EACA,EAAE;IACxB,IAAI,CAAC,YAAY,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;QACzC,OAAO,IAAI,CAAC;IAChB,CAAC;IACD,MAAM,IAAI,GAAG,MAAM,aAAa,CAAC,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,cAAc,CAAC,EAAE;QAC7E,SAAS,EAAE,+CAA+C;KAC7D,CAAC,CAAC;IAEH,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,gBAAgB,GAAG,KAAK,CAAC;IAC7B,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QAClC,0EAA0E;QAC1E,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC,WAAW,EAAE,CAAC,EAAE,CAAC;YACtF,gBAAgB,GAAG,IAAI,CAAC;YACxB,SAAS;QACb,CAAC;QACD,IAAI,gBAAgB,EAAE,CAAC;YACnB,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,MAAM;YACV,CAAC;YACD,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;gBACvB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;YACrC,CAAC;QACL,CAAC;IACL,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;AACnC,CAAC,CAAC"}
|
package/dist/bin/main.js
CHANGED
|
@@ -3,10 +3,10 @@ import process from 'node:process';
|
|
|
3
3
|
import yargs from 'yargs';
|
|
4
4
|
// eslint-disable-next-line import/extensions --- With .js, it cannot find types
|
|
5
5
|
import { hideBin } from 'yargs/helpers';
|
|
6
|
+
import { getAffectedActors, toAffectedActorsDocument } from './affected-actors.js';
|
|
6
7
|
import { deleteOldBuilds, runBuilds } from './build.js';
|
|
7
8
|
import { runBuildsFromLocal } from './build-from-local.js';
|
|
8
|
-
import {
|
|
9
|
-
import { getBranchOnlyChangedFiles, getChangedFiles, getCommits, getCurrentBranch, getReleaseChanges, getRepoName, hasMergeFromTarget, resolveReleaseBaseCommit, resolveRepoUrl, } from './git.js';
|
|
9
|
+
import { getChangedFiles, getCommits, getCurrentBranch, getRepoName, resolveRepoUrl } from './git.js';
|
|
10
10
|
import { logger, logLevels } from './logger.js';
|
|
11
11
|
import { writeJson } from './output.js';
|
|
12
12
|
import { notifyToSlack } from './slack.js';
|
|
@@ -44,6 +44,34 @@ const actorSelectionOptions = {
|
|
|
44
44
|
actors: { type: 'string', array: true, default: [] },
|
|
45
45
|
ignore: { type: 'string', array: true, default: [] },
|
|
46
46
|
};
|
|
47
|
+
/**
|
|
48
|
+
* Commit range for get-affected-actors, which always ends at the checked-out HEAD. `base` and `since` combine:
|
|
49
|
+
* `base` alone is a branch's own commits (a PR), `since` alone is everything after a commit (a release), both is
|
|
50
|
+
* a branch after its last validated commit.
|
|
51
|
+
*/
|
|
52
|
+
const affectedRangeOptions = {
|
|
53
|
+
base: { type: 'string', describe: 'Only count commits on HEAD that are not on this branch' },
|
|
54
|
+
since: {
|
|
55
|
+
type: 'string',
|
|
56
|
+
describe: 'Only count commits after this one. Ignored with --base if it is not on the branch',
|
|
57
|
+
},
|
|
58
|
+
'test-files-glob': {
|
|
59
|
+
type: 'string',
|
|
60
|
+
describe: 'Glob (from the repo root) of test files that count as changes even when .dockerignore lists them',
|
|
61
|
+
},
|
|
62
|
+
};
|
|
63
|
+
/**
|
|
64
|
+
* For commands that change something (builds, deletes, Slack posts). A dry run still does every read and check
|
|
65
|
+
* the real run does, credentials included, and only skips the writes. So it needs the same tokens, though
|
|
66
|
+
* read-only ones are enough. Read-only commands don't take it since they have nothing to skip.
|
|
67
|
+
*/
|
|
68
|
+
const dryRunOptions = {
|
|
69
|
+
'dry-run': {
|
|
70
|
+
type: 'boolean',
|
|
71
|
+
default: false,
|
|
72
|
+
describe: 'Do every read and check (tokens included) but change nothing; print what would be done',
|
|
73
|
+
},
|
|
74
|
+
};
|
|
47
75
|
/** Flags for commands that trigger Apify builds. */
|
|
48
76
|
const buildOptions = {
|
|
49
77
|
'use-docker-cache': { type: 'boolean', default: false },
|
|
@@ -56,42 +84,6 @@ const globalOptions = {
|
|
|
56
84
|
default: 'info',
|
|
57
85
|
describe: 'Minimum diagnostic level written to stderr; silent disables logging',
|
|
58
86
|
},
|
|
59
|
-
'dry-run': { type: 'boolean', default: false },
|
|
60
|
-
};
|
|
61
|
-
const resolveChangedActors = async (config, { isLatest }) => {
|
|
62
|
-
const actorConfigs = await readConfigFile(config);
|
|
63
|
-
// This is an optimization for the common case where a branch only has cosmetic changes but had to smerge in
|
|
64
|
-
// functional changes from master (being up-to-date is a CI requirement). Master is already validated, and
|
|
65
|
-
// since the branch has no functional changes of its own, there is nothing new to validate.
|
|
66
|
-
// Exception: if the branch has any functional changes alongside the merge, we must re-test — even
|
|
67
|
-
// individually validated changes can have novel interactions when combined.
|
|
68
|
-
if (await hasMergeFromTarget(config.sourceBranch, config.targetBranch)) {
|
|
69
|
-
logger.info('[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');
|
|
70
|
-
const branchOnlyFiles = await getBranchOnlyChangedFiles(config.sourceBranch, config.targetBranch);
|
|
71
|
-
// Omit baseCommit to get full branch history. Validated functional commits can still interact with merged ones
|
|
72
|
-
const allBranchCommits = await getCommits({ ...config, baseCommit: undefined });
|
|
73
|
-
const branchOnlyActorsChanged = await getChangedActors({
|
|
74
|
-
filepathsChanged: branchOnlyFiles,
|
|
75
|
-
actorConfigs,
|
|
76
|
-
commits: allBranchCommits,
|
|
77
|
-
testFilesGlob: config.testFilesGlob,
|
|
78
|
-
});
|
|
79
|
-
if (branchOnlyActorsChanged.length === 0) {
|
|
80
|
-
logger.info('[MERGE-FROM-TARGET-OPTIMIZATION]: Branch itself has no functional changes, skipping tests');
|
|
81
|
-
return [];
|
|
82
|
-
}
|
|
83
|
-
logger.info(`[MERGE-FROM-TARGET-OPTIMIZATION]: Branch has ${branchOnlyActorsChanged.length} functional changes, cannot optimize, we continue with full check`);
|
|
84
|
-
}
|
|
85
|
-
// 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)
|
|
86
|
-
const commits = await getCommits(config);
|
|
87
|
-
const changedFiles = await getChangedFiles(commits);
|
|
88
|
-
return getChangedActors({
|
|
89
|
-
filepathsChanged: changedFiles,
|
|
90
|
-
actorConfigs,
|
|
91
|
-
isLatest,
|
|
92
|
-
commits,
|
|
93
|
-
testFilesGlob: config.testFilesGlob,
|
|
94
|
-
});
|
|
95
87
|
};
|
|
96
88
|
await yargs()
|
|
97
89
|
.scriptName('public-actors-utils')
|
|
@@ -116,11 +108,11 @@ await yargs()
|
|
|
116
108
|
const actorConfigs = await readConfigFile({ actors, ignore });
|
|
117
109
|
writeJson(actorConfigs);
|
|
118
110
|
})
|
|
119
|
-
.command('get-affected-actors', '', (y) => y.options(
|
|
120
|
-
|
|
121
|
-
writeJson(actorsChanged);
|
|
111
|
+
.command('get-affected-actors', 'Find the Actors whose context changed in a commit range ending at the checked-out HEAD', (y) => y.options(affectedRangeOptions).options(actorSelectionOptions), async (args) => {
|
|
112
|
+
writeJson(toAffectedActorsDocument(await getAffectedActors({ ...args, head: 'HEAD' })));
|
|
122
113
|
})
|
|
123
114
|
.command('report-tests', '', (y) => y
|
|
115
|
+
.options(dryRunOptions)
|
|
124
116
|
.option('report-file', { type: 'string', demandOption: true })
|
|
125
117
|
.option('report-slack-channel', { type: 'string' })
|
|
126
118
|
.option('job-url', { type: 'string' })
|
|
@@ -132,8 +124,17 @@ await yargs()
|
|
|
132
124
|
.options(actorSelectionOptions)
|
|
133
125
|
.options(buildOptions)
|
|
134
126
|
.options(repoUrlOptions)
|
|
127
|
+
.options(dryRunOptions)
|
|
135
128
|
.option('test-files-glob', { type: 'string' }), async (config) => {
|
|
136
|
-
|
|
129
|
+
// Cosmetic-only changes don't need testing, so they don't need a build either
|
|
130
|
+
const { functionallyChangedActors: actorsChanged } = await getAffectedActors({
|
|
131
|
+
head: config.sourceBranch,
|
|
132
|
+
base: config.targetBranch,
|
|
133
|
+
since: config.baseCommit,
|
|
134
|
+
testFilesGlob: config.testFilesGlob,
|
|
135
|
+
actors: config.actors,
|
|
136
|
+
ignore: config.ignore,
|
|
137
|
+
});
|
|
137
138
|
const builds = await runBuilds({
|
|
138
139
|
...(await resolveRepoUrl(config.repoUrl)),
|
|
139
140
|
actorConfigs: actorsChanged,
|
|
@@ -147,28 +148,27 @@ await yargs()
|
|
|
147
148
|
.options(actorSelectionOptions)
|
|
148
149
|
.options(buildOptions)
|
|
149
150
|
.options(repoUrlOptions)
|
|
151
|
+
.options(dryRunOptions)
|
|
150
152
|
// The last commit that is already released, everything after it up to HEAD gets released.
|
|
151
153
|
// Required, see the README section "Releasing Actors" for how to set it for each merge strategy.
|
|
152
154
|
.option('base-commit', { type: 'string', demandOption: true })
|
|
153
155
|
.option('report-slack-channel', { type: 'string' })
|
|
154
156
|
.option('release-slack-channel', { type: 'string' }), async (args) => {
|
|
155
|
-
const baseSha = await resolveReleaseBaseCommit(args.baseCommit);
|
|
156
157
|
const branch = await getCurrentBranch();
|
|
157
|
-
const
|
|
158
|
-
|
|
159
|
-
|
|
158
|
+
const { commits, changedFiles, changelog, functionallyChangedActors, cosmeticallyChangedActors } = await getAffectedActors({
|
|
159
|
+
head: 'HEAD',
|
|
160
|
+
since: args.baseCommit,
|
|
161
|
+
actors: args.actors,
|
|
162
|
+
ignore: args.ignore,
|
|
163
|
+
});
|
|
164
|
+
// A release ships cosmetic changes (README, input schema descriptions, ...) too
|
|
165
|
+
const actorsChanged = [...functionallyChangedActors, ...cosmeticallyChangedActors];
|
|
166
|
+
if (commits.length === 0) {
|
|
167
|
+
logger.info(`HEAD is the base commit ${args.baseCommit}, there is nothing new to release`);
|
|
160
168
|
return;
|
|
161
169
|
}
|
|
162
|
-
const { commits, changedFiles, changelog } = changes;
|
|
163
170
|
const { repoUrl, shouldVerifyRepoUrl } = await resolveRepoUrl(args.repoUrl);
|
|
164
171
|
const isLatest = true;
|
|
165
|
-
const actorConfigs = await readConfigFile(args);
|
|
166
|
-
const actorsChanged = await getChangedActors({
|
|
167
|
-
filepathsChanged: changedFiles,
|
|
168
|
-
actorConfigs,
|
|
169
|
-
isLatest,
|
|
170
|
-
commits,
|
|
171
|
-
});
|
|
172
172
|
const { dryRun, reportSlackChannel, releaseSlackChannel } = args;
|
|
173
173
|
const builds = await runBuilds({
|
|
174
174
|
isLatest,
|
|
@@ -192,14 +192,14 @@ await yargs()
|
|
|
192
192
|
releaseSlackChannel,
|
|
193
193
|
});
|
|
194
194
|
})
|
|
195
|
-
.command('build-from-local', '', (y) => y.options(actorSelectionOptions), async ({ actors, ignore, dryRun }) => {
|
|
195
|
+
.command('build-from-local', '', (y) => y.options(actorSelectionOptions).options(dryRunOptions), async ({ actors, ignore, dryRun }) => {
|
|
196
196
|
const actorConfigs = await readConfigFile({ actors, ignore });
|
|
197
197
|
const builds = await runBuildsFromLocal({ actorConfigs, dryRun });
|
|
198
198
|
writeJson(builds);
|
|
199
199
|
})
|
|
200
|
-
.command('delete-old-builds', '', (y) => y.options(actorSelectionOptions), async ({ actors, ignore }) => {
|
|
200
|
+
.command('delete-old-builds', '', (y) => y.options(actorSelectionOptions).options(dryRunOptions), async ({ actors, ignore, dryRun }) => {
|
|
201
201
|
const actorConfigs = await readConfigFile({ actors, ignore });
|
|
202
|
-
await deleteOldBuilds(actorConfigs);
|
|
202
|
+
await deleteOldBuilds(actorConfigs, { dryRun });
|
|
203
203
|
})
|
|
204
204
|
.strictCommands()
|
|
205
205
|
.demandCommand(1, 'Command is required')
|
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,KAAuB,MAAM,OAAO,CAAC;AAC5C,gFAAgF;AAChF,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAExC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../bin/main.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/slack.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { WebClient } from '@slack/web-api';
|
|
1
2
|
import type { Commit } from './types.js';
|
|
2
3
|
type NotifyToSlackOptions = {
|
|
3
4
|
repository: string;
|
|
@@ -9,7 +10,13 @@ type NotifyToSlackOptions = {
|
|
|
9
10
|
releaseSlackChannel?: string;
|
|
10
11
|
reportSlackChannel?: string;
|
|
11
12
|
};
|
|
13
|
+
/**
|
|
14
|
+
* Creates the client the real run posts with. A dry run posts nothing but still requires the token and checks
|
|
15
|
+
* Slack accepts it (`auth.test` is read-only), so it fails wherever the real run would.
|
|
16
|
+
*/
|
|
17
|
+
export declare const getSlackClient: (tokenEnvVar: string, dryRun: boolean) => Promise<WebClient>;
|
|
18
|
+
export declare const sendingLabel: (dryRun: boolean) => "[DRY RUN] Would send" | "Sending";
|
|
12
19
|
export declare const notifyToSlack: ({ changedFiles, commits, changelog, repository, dryRun, author, releaseSlackChannel, reportSlackChannel, }: NotifyToSlackOptions) => Promise<void>;
|
|
13
|
-
export declare const sendSlackMessage: (channel: string, text: string, blocks: string[]
|
|
20
|
+
export declare const sendSlackMessage: (slack: WebClient, channel: string, text: string, blocks: string[]) => Promise<void>;
|
|
14
21
|
export {};
|
|
15
22
|
//# sourceMappingURL=slack.d.ts.map
|
package/dist/bin/slack.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../bin/slack.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../bin/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAG3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,KAAK,oBAAoB,GAAG;IACxB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,kBAAkB,CAAC,EAAE,MAAM,CAAC;CAC/B,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,cAAc,GAAU,aAAa,MAAM,EAAE,QAAQ,OAAO,KAAG,OAAO,CAAC,SAAS,CAW5F,CAAC;AAEF,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,uCAAkD,CAAC;AAK/F,eAAO,MAAM,aAAa,GAAU,4GASjC,oBAAoB,kBAgDtB,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAAU,OAAO,SAAS,EAAE,SAAS,MAAM,EAAE,MAAM,MAAM,EAAE,QAAQ,MAAM,EAAE,kBASvG,CAAC"}
|
package/dist/bin/slack.js
CHANGED
|
@@ -1,19 +1,41 @@
|
|
|
1
1
|
import { WebClient } from '@slack/web-api';
|
|
2
2
|
import { logger } from './logger.js';
|
|
3
3
|
import { getEnvVar } from './utils.js';
|
|
4
|
+
/**
|
|
5
|
+
* Creates the client the real run posts with. A dry run posts nothing but still requires the token and checks
|
|
6
|
+
* Slack accepts it (`auth.test` is read-only), so it fails wherever the real run would.
|
|
7
|
+
*/
|
|
8
|
+
export const getSlackClient = async (tokenEnvVar, dryRun) => {
|
|
9
|
+
const slack = new WebClient(getEnvVar(tokenEnvVar));
|
|
10
|
+
if (dryRun) {
|
|
11
|
+
try {
|
|
12
|
+
await slack.auth.test();
|
|
13
|
+
}
|
|
14
|
+
catch (err) {
|
|
15
|
+
throw new Error(`${tokenEnvVar} was rejected by Slack: ${err.message}`);
|
|
16
|
+
}
|
|
17
|
+
logger.info(`[DRY RUN] ${tokenEnvVar} is valid`);
|
|
18
|
+
}
|
|
19
|
+
return slack;
|
|
20
|
+
};
|
|
21
|
+
export const sendingLabel = (dryRun) => (dryRun ? '[DRY RUN] Would send' : 'Sending');
|
|
4
22
|
// Git authors come as "Name<email>", Slack only needs the name
|
|
5
23
|
const displayName = (author) => author.replace(/\s*<[^>]*>$/, '');
|
|
6
24
|
export const notifyToSlack = async ({ changedFiles, commits, changelog, repository, dryRun, author, releaseSlackChannel, reportSlackChannel, }) => {
|
|
7
|
-
const slack = new WebClient(getEnvVar('SLACK_TOKEN_RELEASES_BOT'));
|
|
8
25
|
if (!changelog) {
|
|
9
26
|
logger.warn('No new changelog entries found, did you forget to update it?');
|
|
10
27
|
}
|
|
28
|
+
if (!releaseSlackChannel && !reportSlackChannel) {
|
|
29
|
+
logger.info('Skipping slack notification, no --release-slack-channel or --report-slack-channel passed');
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const slack = await getSlackClient('SLACK_TOKEN_RELEASES_BOT', dryRun);
|
|
11
33
|
let shortMessage = `*${repository}* – New release (by ${displayName(author)}):\n\n`;
|
|
12
34
|
// This one is just for broader public that only cares about public facing changes
|
|
13
35
|
if (changelog && releaseSlackChannel) {
|
|
14
36
|
shortMessage += `*Additions to the changelog*:\n\n${changelog}\n`;
|
|
15
37
|
logger.info(`=========================================`);
|
|
16
|
-
logger.info(
|
|
38
|
+
logger.info(`**${sendingLabel(dryRun)} slack message to channel**: ${releaseSlackChannel}.\n\n${shortMessage}`);
|
|
17
39
|
logger.info(`=========================================`);
|
|
18
40
|
if (!dryRun) {
|
|
19
41
|
await slack.chat.postMessage({
|
|
@@ -30,7 +52,7 @@ export const notifyToSlack = async ({ changedFiles, commits, changelog, reposito
|
|
|
30
52
|
// This one is for devs and project managers that need to know more details
|
|
31
53
|
if (reportSlackChannel) {
|
|
32
54
|
logger.info(`=========================================`);
|
|
33
|
-
logger.info(
|
|
55
|
+
logger.info(`${sendingLabel(dryRun)} slack message to channel: ${reportSlackChannel}.\n\n${longMessage}`);
|
|
34
56
|
logger.info(`=========================================`);
|
|
35
57
|
if (!dryRun) {
|
|
36
58
|
await slack.chat.postMessage({
|
|
@@ -40,8 +62,7 @@ export const notifyToSlack = async ({ changedFiles, commits, changelog, reposito
|
|
|
40
62
|
}
|
|
41
63
|
}
|
|
42
64
|
};
|
|
43
|
-
export const sendSlackMessage = async (channel, text, blocks
|
|
44
|
-
const slack = new WebClient(token);
|
|
65
|
+
export const sendSlackMessage = async (slack, channel, text, blocks) => {
|
|
45
66
|
const { ts } = await slack.chat.postMessage({ text, channel });
|
|
46
67
|
if (blocks.length > 0 && ts) {
|
|
47
68
|
await slack.chat.postMessage({
|
package/dist/bin/slack.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../bin/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAE3C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAavC,+DAA+D;AAC/D,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;AAE1E,MAAM,CAAC,MAAM,aAAa,GAAG,KAAK,EAAE,EAChC,YAAY,EACZ,OAAO,EACP,SAAS,EACT,UAAU,EACV,MAAM,EACN,MAAM,EACN,mBAAmB,EACnB,kBAAkB,GACC,EAAE,EAAE;IACvB,
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../bin/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-report.d.ts","sourceRoot":"","sources":["../../bin/test-report.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"test-report.d.ts","sourceRoot":"","sources":["../../bin/test-report.ts"],"names":[],"mappings":"AAKA,UAAU,wBAAwB;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;IAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,iBAAiB,GAAU,oFAMrC,wBAAwB,kBAsF1B,CAAC"}
|
package/dist/bin/test-report.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import fs from 'node:fs/promises';
|
|
2
2
|
import { logger } from './logger.js';
|
|
3
|
-
import { sendSlackMessage } from './slack.js';
|
|
4
|
-
import { getEnvVar } from './utils.js';
|
|
3
|
+
import { getSlackClient, sendingLabel, sendSlackMessage } from './slack.js';
|
|
5
4
|
export const reportTestResults = async ({ dryRun, reportSlackChannel, reportFile: jsonResultsPath, jobUrl, workflowName, }) => {
|
|
6
5
|
const results = JSON.parse((await fs.readFile(jsonResultsPath)).toString());
|
|
7
6
|
const passed = [];
|
|
@@ -56,6 +55,9 @@ export const reportTestResults = async ({ dryRun, reportSlackChannel, reportFile
|
|
|
56
55
|
logger.info(`Skipping slack notification. If you want to enable it, add --report-slack-channel flag and make sure SLACK_TOKEN_TESTS_BOT env variable is set.`);
|
|
57
56
|
return;
|
|
58
57
|
}
|
|
58
|
+
// Checked before knowing if there's anything to send, so a broken token shows up on a green run
|
|
59
|
+
// (and in dry runs) rather than on the day tests fail
|
|
60
|
+
const slack = await getSlackClient('SLACK_TOKEN_TESTS_BOT', dryRun);
|
|
59
61
|
if (failedAssertions.length === 0) {
|
|
60
62
|
return;
|
|
61
63
|
}
|
|
@@ -68,14 +70,10 @@ export const reportTestResults = async ({ dryRun, reportSlackChannel, reportFile
|
|
|
68
70
|
const blocks = failedAssertions
|
|
69
71
|
.slice(1)
|
|
70
72
|
.map(({ message, runLink, actorId }) => `• ${message} --- <${runLink}|${actorId}>`);
|
|
71
|
-
logger.info(
|
|
73
|
+
logger.info(`${sendingLabel(dryRun)} slack message to channel ${reportSlackChannel}:`, slackMessage);
|
|
72
74
|
logger.info('\tblocks:', blocks.join('\n\t\t'));
|
|
73
|
-
if (!reportSlackChannel) {
|
|
74
|
-
return;
|
|
75
|
-
}
|
|
76
75
|
if (!dryRun) {
|
|
77
|
-
|
|
78
|
-
await sendSlackMessage(reportSlackChannel, slackMessage, blocks, slackToken);
|
|
76
|
+
await sendSlackMessage(slack, reportSlackChannel, slackMessage, blocks);
|
|
79
77
|
}
|
|
80
78
|
};
|
|
81
79
|
//# sourceMappingURL=test-report.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-report.js","sourceRoot":"","sources":["../../bin/test-report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAElC,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"test-report.js","sourceRoot":"","sources":["../../bin/test-report.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/types.d.ts
CHANGED
|
@@ -20,6 +20,14 @@ export interface BuildData {
|
|
|
20
20
|
actorFullName: string;
|
|
21
21
|
buildNumber: string;
|
|
22
22
|
}
|
|
23
|
+
/**
|
|
24
|
+
* What a dry run writes to stdout instead of the command's real result. It's an object, not an array, so
|
|
25
|
+
* it can't be mistaken for real builds: `ACTOR_BUILDS` rejects it before any test runs.
|
|
26
|
+
*/
|
|
27
|
+
export interface DryRunPlan<T> {
|
|
28
|
+
dryRun: true;
|
|
29
|
+
builds: T[];
|
|
30
|
+
}
|
|
23
31
|
export interface ActorConfig {
|
|
24
32
|
actorFullName: string;
|
|
25
33
|
folder: ExistingDir;
|
package/dist/bin/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../bin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE9E,MAAM,WAAW,MAAM;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,WAAW;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,WAAW,CAAC;IAC9B,YAAY,EAAE,WAAW,EAAE,CAAC;CAC/B"}
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../bin/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,+BAA+B,CAAC;AAE9E,MAAM,WAAW,MAAM;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,aAAa,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,MAAM,MAAM,GAAG;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACnB,CAAC;AAEF,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,CAAC;IACtB,WAAW,EAAE,MAAM,CAAC;CACvB;AAED;;;GAGG;AACH,MAAM,WAAW,UAAU,CAAC,CAAC;IACzB,MAAM,EAAE,IAAI,CAAC;IACb,MAAM,EAAE,CAAC,EAAE,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IACxB,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,cAAc,CAAC;IAC1B,gBAAgB,EAAE,WAAW,CAAC;IAC9B,YAAY,EAAE,WAAW,EAAE,CAAC;CAC/B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli-bundle.test.d.ts","sourceRoot":"","sources":["../../../test/bundle/cli-bundle.test.ts"],"names":[],"mappings":""}
|