apify-test-tools 0.10.2-beta.3 → 0.10.2-beta.5
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/.github/cli/apify-test-tools.mjs +117 -118
- package/.github/scripts/run-with-apify-tokens.mjs +1 -1
- package/.github/workflows/public_pr-build-test.yaml +25 -25
- package/.github/workflows/public_push-build-latest.yaml +20 -4
- package/CHANGELOG.md +6 -0
- package/CONTRIBUTING.md +4 -1
- package/README.md +104 -56
- package/bin/affected-actors.ts +135 -103
- package/bin/build.ts +53 -38
- package/bin/diff-changes.ts +7 -6
- package/bin/diff-json-schema.ts +5 -6
- package/bin/git.ts +24 -69
- package/bin/main.ts +46 -80
- package/bin/slack.ts +15 -4
- package/bin/stdin-input.ts +65 -0
- package/bin/types.ts +6 -0
- package/dist/bin/affected-actors.d.ts +23 -27
- package/dist/bin/affected-actors.d.ts.map +1 -1
- package/dist/bin/affected-actors.js +111 -65
- package/dist/bin/affected-actors.js.map +1 -1
- package/dist/bin/build.d.ts +11 -5
- package/dist/bin/build.d.ts.map +1 -1
- package/dist/bin/build.js +43 -23
- package/dist/bin/build.js.map +1 -1
- package/dist/bin/diff-changes.d.ts +4 -3
- package/dist/bin/diff-changes.d.ts.map +1 -1
- package/dist/bin/diff-changes.js +4 -4
- package/dist/bin/diff-changes.js.map +1 -1
- package/dist/bin/diff-json-schema.d.ts +2 -2
- package/dist/bin/diff-json-schema.d.ts.map +1 -1
- package/dist/bin/diff-json-schema.js +1 -4
- package/dist/bin/diff-json-schema.js.map +1 -1
- package/dist/bin/git.d.ts +7 -15
- package/dist/bin/git.d.ts.map +1 -1
- package/dist/bin/git.js +23 -61
- package/dist/bin/git.js.map +1 -1
- package/dist/bin/main.js +39 -71
- package/dist/bin/main.js.map +1 -1
- package/dist/bin/slack.d.ts +6 -3
- package/dist/bin/slack.d.ts.map +1 -1
- package/dist/bin/slack.js +13 -1
- package/dist/bin/slack.js.map +1 -1
- package/dist/bin/stdin-input.d.ts +17 -0
- package/dist/bin/stdin-input.d.ts.map +1 -0
- package/dist/bin/stdin-input.js +54 -0
- package/dist/bin/stdin-input.js.map +1 -0
- package/dist/bin/types.d.ts +5 -0
- package/dist/bin/types.d.ts.map +1 -1
- package/dist/test/bundle/cli-bundle.test.js +32 -11
- package/dist/test/bundle/cli-bundle.test.js.map +1 -1
- package/dist/test/e2e/cli-bundle.e2e.test.js +23 -57
- package/dist/test/e2e/cli-bundle.e2e.test.js.map +1 -1
- package/dist/test/e2e/git-build-release.e2e.test.d.ts +2 -0
- package/dist/test/e2e/git-build-release.e2e.test.d.ts.map +1 -0
- package/dist/test/e2e/git-build-release.e2e.test.js +87 -0
- package/dist/test/e2e/git-build-release.e2e.test.js.map +1 -0
- package/dist/test/e2e/helpers.d.ts +37 -0
- package/dist/test/e2e/helpers.d.ts.map +1 -0
- package/dist/test/e2e/helpers.js +57 -0
- package/dist/test/e2e/helpers.js.map +1 -0
- package/dist/test/unit/bin/affected-actors-cli.test.d.ts +2 -0
- package/dist/test/unit/bin/affected-actors-cli.test.d.ts.map +1 -0
- package/dist/test/unit/bin/affected-actors-cli.test.js +161 -0
- package/dist/test/unit/bin/affected-actors-cli.test.js.map +1 -0
- package/dist/test/unit/bin/affected-actors.test.js +68 -87
- package/dist/test/unit/bin/affected-actors.test.js.map +1 -1
- package/dist/test/unit/bin/build-cli.test.d.ts +2 -0
- package/dist/test/unit/bin/build-cli.test.d.ts.map +1 -0
- package/dist/test/unit/bin/build-cli.test.js +44 -0
- package/dist/test/unit/bin/build-cli.test.js.map +1 -0
- package/dist/test/unit/bin/build.test.js +61 -4
- package/dist/test/unit/bin/build.test.js.map +1 -1
- package/dist/test/unit/bin/compiled-cli.d.ts +6 -0
- package/dist/test/unit/bin/compiled-cli.d.ts.map +1 -0
- package/dist/test/unit/bin/compiled-cli.js +16 -0
- package/dist/test/unit/bin/compiled-cli.js.map +1 -0
- package/dist/test/unit/bin/diff-changes.test.js +55 -55
- package/dist/test/unit/bin/diff-changes.test.js.map +1 -1
- package/dist/test/unit/bin/diff.test.js +25 -28
- package/dist/test/unit/bin/diff.test.js.map +1 -1
- package/dist/test/unit/bin/git.test.js +28 -108
- package/dist/test/unit/bin/git.test.js.map +1 -1
- package/dist/test/unit/bin/slack.test.js +19 -2
- package/dist/test/unit/bin/slack.test.js.map +1 -1
- package/dist/test/unit/bin/stdin-input.test.d.ts +2 -0
- package/dist/test/unit/bin/stdin-input.test.d.ts.map +1 -0
- package/dist/test/unit/bin/stdin-input.test.js +50 -0
- package/dist/test/unit/bin/stdin-input.test.js.map +1 -0
- package/dist/test/unit/should-built-and-test.test.js +18 -21
- 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/bundle/cli-bundle.test.ts +47 -11
- package/test/e2e/cli-bundle.e2e.test.ts +47 -77
- package/test/e2e/git-build-release.e2e.test.ts +113 -0
- package/test/e2e/helpers.ts +82 -0
- package/test/unit/bin/affected-actors-cli.test.ts +193 -0
- package/test/unit/bin/affected-actors.test.ts +86 -94
- package/test/unit/bin/build-cli.test.ts +55 -0
- package/test/unit/bin/build.test.ts +71 -3
- package/test/unit/bin/compiled-cli.ts +17 -0
- package/test/unit/bin/diff-changes.test.ts +55 -55
- package/test/unit/bin/diff.test.ts +25 -28
- package/test/unit/bin/git.test.ts +35 -132
- package/test/unit/bin/slack.test.ts +21 -2
- package/test/unit/bin/stdin-input.test.ts +61 -0
- package/test/unit/should-built-and-test.test.ts +19 -22
package/dist/bin/git.d.ts
CHANGED
|
@@ -12,16 +12,13 @@ export declare const getChangedFiles: (commits: Commit[]) => Promise<string[]>;
|
|
|
12
12
|
*/
|
|
13
13
|
export declare const getChangedFilesBetween: (fromRef: string, toRef: string) => Promise<string[]>;
|
|
14
14
|
/**
|
|
15
|
-
*
|
|
16
|
-
*
|
|
17
|
-
*
|
|
15
|
+
* The commit `git diff base...head` compares against: where `head` forked from `base`, or the last commit of `base`
|
|
16
|
+
* that `head` merged in. The diff from it holds only what `head` itself changed, like GitHub's "Files changed" tab.
|
|
17
|
+
* With criss-cross merges there are several such commits and git picks one.
|
|
18
18
|
*/
|
|
19
|
-
export declare const
|
|
20
|
-
/**
|
|
21
|
-
|
|
22
|
-
* Used to check whether the branch itself has any functional changes, independent of what master merged in.
|
|
23
|
-
*/
|
|
24
|
-
export declare const getBranchOnlyChangedFiles: (sourceBranch: string, targetBranch: string) => Promise<string[]>;
|
|
19
|
+
export declare const getMergeBase: (base: string, head: string) => Promise<string>;
|
|
20
|
+
/** Resolves a ref to a commit, or undefined when it isn't in the local history (e.g. it was force-pushed away). */
|
|
21
|
+
export declare const findCommitSha: (ref: string) => Promise<string | undefined>;
|
|
25
22
|
/**
|
|
26
23
|
*
|
|
27
24
|
* @param shaOrCommit Supports both a SHA string or a Commit object in JSON format. Can be empty.
|
|
@@ -40,17 +37,12 @@ export declare const getCommitsBetween: (fromRef: string, toRef: string) => Prom
|
|
|
40
37
|
export declare const getCommits: ({ sourceBranch, targetBranch, baseCommit, }: Pick<Config, "sourceBranch" | "targetBranch" | "baseCommit">) => Promise<Commit[]>;
|
|
41
38
|
export declare const parseCommit: (commitString: string) => Commit;
|
|
42
39
|
/**
|
|
43
|
-
* Returns the currently checked-out branch.
|
|
40
|
+
* Returns the currently checked-out branch. Builds point the Actor version at this branch,
|
|
44
41
|
* so a detached HEAD (no branch to point at) is an error rather than a guess.
|
|
45
42
|
*/
|
|
46
43
|
export declare const getCurrentBranch: () => Promise<string>;
|
|
47
44
|
/** Resolves a ref (branch, remote branch, SHA, HEAD, ...) to the full SHA of the commit it points to. */
|
|
48
45
|
export declare const resolveCommitSha: (ref: string) => Promise<string>;
|
|
49
|
-
/**
|
|
50
|
-
* Branch name a ref points to, without the remote: `origin/foo` and `foo` both give `foo`, and `HEAD`
|
|
51
|
-
* gives the checked-out branch. Null when there is no branch to point at (a SHA, a tag, a detached HEAD).
|
|
52
|
-
*/
|
|
53
|
-
export declare const resolveBranchName: (ref: string) => Promise<string | null>;
|
|
54
46
|
/**
|
|
55
47
|
* Picks the repo URL to build from. By default it's the `origin` remote, and runBuilds then checks it against
|
|
56
48
|
* each Actor's default version, so a fork or mirror remote can't repoint a published Actor. An explicit
|
package/dist/bin/git.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,uBAAQ,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,MAAM,EAAE,sBAQtD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAU,SAAS,MAAM,EAAE,OAAO,MAAM,sBAQ1E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,
|
|
1
|
+
{"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGjD,eAAO,MAAM,oBAAoB,uBAAQ,CAAC;AAG1C;;GAEG;AACH,eAAO,MAAM,eAAe,GAAU,SAAS,MAAM,EAAE,sBAQtD,CAAC;AAEF;;;;;GAKG;AACH,eAAO,MAAM,sBAAsB,GAAU,SAAS,MAAM,EAAE,OAAO,MAAM,sBAQ1E,CAAC;AAEF;;;;GAIG;AACH,eAAO,MAAM,YAAY,GAAU,MAAM,MAAM,EAAE,MAAM,MAAM,KAAG,OAAO,CAAC,MAAM,CACwB,CAAC;AAEvG,mHAAmH;AACnH,eAAO,MAAM,aAAa,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAOtE,CAAC;AAIP;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,SAc1E,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,iBAAiB,GAAU,SAAS,MAAM,EAAE,OAAO,MAAM,KAAG,OAAO,CAAC,MAAM,EAAE,CAQxF,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,UAAU,GAAU,6CAI9B,IAAI,CAAC,MAAM,EAAE,cAAc,GAAG,cAAc,GAAG,YAAY,CAAC,KAAG,OAAO,CAAC,MAAM,EAAE,CAiCjF,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,cAAc,MAAM,KAAG,MAYlD,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,gBAAgB,QAAa,OAAO,CAAC,MAAM,CAUvD,CAAC;AAEF,yGAAyG;AACzG,eAAO,MAAM,gBAAgB,GAAU,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CACyC,CAAC;AAa7G;;;;GAIG;AACH,eAAO,MAAM,cAAc,GAAU,iBAAiB,MAAM,GAAG,SAAS;;;EAGtE,CAAC;AAEH;;;;;GAKG;AACH,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,KAAG,MAUlD,CAAC;AAEF,sGAAsG;AACtG,eAAO,MAAM,WAAW,GAAI,SAAS,MAAM,KAAG,MAE7C,CAAC;AAKF;;;;GAIG;AACH,eAAO,MAAM,wBAAwB,GAAU,YAAY,MAAM,EAAE,aAAa,KAAG,OAAO,CAAC,MAAM,CAuChG,CAAC;AAIF,+GAA+G;AAC/G,eAAO,MAAM,qBAAqB,GAC9B,SAAS,MAAM,EACf,OAAO,MAAM,EACb,cAAc,MAAM,EAAE,KACvB,OAAO,CAAC,MAAM,GAAG,IAAI,CA0BvB,CAAC"}
|
package/dist/bin/git.js
CHANGED
|
@@ -6,8 +6,8 @@ const GIT_LOG_FORMAT = ['%H', '%aN<%aE>', '%aD', '%s'].join(GIT_FORMAT_SEPARATOR
|
|
|
6
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
|
-
// getCommits never returns an empty list (
|
|
10
|
-
//
|
|
9
|
+
// getCommits never returns an empty list (it throws on an empty range, and the rerun check returns all
|
|
10
|
+
// commits when the base commit is the branch HEAD), so this signals a programmer error
|
|
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
|
}
|
|
@@ -28,51 +28,20 @@ export const getChangedFilesBetween = async (fromRef, toRef) => {
|
|
|
28
28
|
return changedFiles;
|
|
29
29
|
};
|
|
30
30
|
/**
|
|
31
|
-
*
|
|
32
|
-
*
|
|
33
|
-
*
|
|
31
|
+
* The commit `git diff base...head` compares against: where `head` forked from `base`, or the last commit of `base`
|
|
32
|
+
* that `head` merged in. The diff from it holds only what `head` itself changed, like GitHub's "Files changed" tab.
|
|
33
|
+
* With criss-cross merges there are several such commits and git picks one.
|
|
34
34
|
*/
|
|
35
|
-
export const
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
for (const parent of parents) {
|
|
46
|
-
// git merge-base A B outputs the common ancestor.
|
|
47
|
-
// If that equals A, then A is an ancestor of B (i.e. parent is reachable from targetBranch).
|
|
48
|
-
let mergeBase;
|
|
49
|
-
try {
|
|
50
|
-
mergeBase = await runGitCommand(['merge-base', parent, targetBranch], {
|
|
51
|
-
operation: 'check whether a merge parent is reachable from the target branch',
|
|
52
|
-
});
|
|
53
|
-
}
|
|
54
|
-
catch (error) {
|
|
55
|
-
// Exit code 1 on merge-base means the histories have no common ancestor.
|
|
56
|
-
if (error instanceof GitCommandError && error.exitCode === 1) {
|
|
57
|
-
continue;
|
|
58
|
-
}
|
|
59
|
-
throw error;
|
|
60
|
-
}
|
|
61
|
-
if (mergeBase === parent) {
|
|
62
|
-
return true;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
return false;
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Returns all files touched by non-merge commits on the branch (full history, ignoring baseCommit).
|
|
70
|
-
* Used to check whether the branch itself has any functional changes, independent of what master merged in.
|
|
71
|
-
*/
|
|
72
|
-
export const getBranchOnlyChangedFiles = async (sourceBranch, targetBranch) => {
|
|
73
|
-
const output = await runGitCommand(['log', '--no-merges', '--name-only', '--pretty=format:', `${targetBranch}..${sourceBranch}`], { operation: 'list files changed by non-merge commits on the source branch' });
|
|
74
|
-
return output.split('\n').filter(Boolean);
|
|
75
|
-
};
|
|
35
|
+
export const getMergeBase = async (base, head) => runGitCommand(['merge-base', base, head], { operation: `find where ${head} forked from ${base}` });
|
|
36
|
+
/** Resolves a ref to a commit, or undefined when it isn't in the local history (e.g. it was force-pushed away). */
|
|
37
|
+
export const findCommitSha = async (ref) => runGitCommand(['rev-parse', '--verify', '--quiet', `${ref}^{commit}`], {
|
|
38
|
+
operation: `look up ${ref} in local Git history`,
|
|
39
|
+
}).catch((error) => {
|
|
40
|
+
// --quiet suppresses Git's error text for a missing commit, but Git still exits with code 1
|
|
41
|
+
if (error instanceof GitCommandError && error.exitCode === 1)
|
|
42
|
+
return undefined;
|
|
43
|
+
throw error;
|
|
44
|
+
});
|
|
76
45
|
const SHA_REGEX = /^[0-9a-f]{40}$/i;
|
|
77
46
|
/**
|
|
78
47
|
*
|
|
@@ -102,8 +71,8 @@ export const getCommitsBetween = async (fromRef, toRef) => {
|
|
|
102
71
|
const output = await runGitCommand(['log', `--pretty=format:${GIT_LOG_FORMAT}`, `${fromRef}..${toRef}`], {
|
|
103
72
|
operation: 'list commits reachable from the source ref but absent from the target ref',
|
|
104
73
|
});
|
|
105
|
-
|
|
106
|
-
const commits =
|
|
74
|
+
// An empty range (e.g. `x..x`) prints nothing
|
|
75
|
+
const commits = output.split('\n').filter(Boolean).map(parseCommit);
|
|
107
76
|
commits.reverse();
|
|
108
77
|
return commits;
|
|
109
78
|
};
|
|
@@ -114,6 +83,9 @@ export const getCommitsBetween = async (fromRef, toRef) => {
|
|
|
114
83
|
export const getCommits = async ({ sourceBranch, targetBranch, baseCommit, }) => {
|
|
115
84
|
const baseCommitSha = parseBaseCommit(baseCommit);
|
|
116
85
|
const commits = await getCommitsBetween(targetBranch, sourceBranch);
|
|
86
|
+
if (commits.length === 0) {
|
|
87
|
+
throw new Error(`${sourceBranch} has no commits that are not on ${targetBranch}.`);
|
|
88
|
+
}
|
|
117
89
|
// The last validated (base) commit being the branch HEAD means nothing new was pushed since the last
|
|
118
90
|
// validation — the dev reran the workflow (or force-pushed to the same state) to trigger a clean test
|
|
119
91
|
const headSha = commits[commits.length - 1]?.sha;
|
|
@@ -148,30 +120,20 @@ export const parseCommit = (commitString) => {
|
|
|
148
120
|
};
|
|
149
121
|
};
|
|
150
122
|
/**
|
|
151
|
-
* Returns the currently checked-out branch.
|
|
123
|
+
* Returns the currently checked-out branch. Builds point the Actor version at this branch,
|
|
152
124
|
* so a detached HEAD (no branch to point at) is an error rather than a guess.
|
|
153
125
|
*/
|
|
154
126
|
export const getCurrentBranch = async () => {
|
|
155
127
|
const branch = await runGitCommand(['rev-parse', '--abbrev-ref', 'HEAD'], {
|
|
156
|
-
operation: 'determine the
|
|
128
|
+
operation: 'determine the checked-out branch',
|
|
157
129
|
});
|
|
158
130
|
if (branch === 'HEAD') {
|
|
159
|
-
throw new Error('Cannot determine the branch to
|
|
131
|
+
throw new Error('Cannot determine the branch to build from: HEAD is detached. Check out the branch you want to build.');
|
|
160
132
|
}
|
|
161
133
|
return branch;
|
|
162
134
|
};
|
|
163
135
|
/** Resolves a ref (branch, remote branch, SHA, HEAD, ...) to the full SHA of the commit it points to. */
|
|
164
136
|
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
|
-
};
|
|
175
137
|
/**
|
|
176
138
|
* Reads the repository URL from the `origin` remote, rewritten to the SSH form the Apify platform
|
|
177
139
|
* uses for Git repo sources, e.g. git@github.com:apify-store/google-maps
|
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,
|
|
1
|
+
{"version":3,"file":"git.js","sourceRoot":"","sources":["../../bin/git.ts"],"names":[],"mappings":"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"}
|
package/dist/bin/main.js
CHANGED
|
@@ -3,13 +3,14 @@ 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
|
|
7
|
-
import {
|
|
6
|
+
import { getAffectedActors } from './affected-actors.js';
|
|
7
|
+
import { buildActors, DEFAULT_VERSION_KEYWORD, deleteOldBuilds } from './build.js';
|
|
8
8
|
import { runBuildsFromLocal } from './build-from-local.js';
|
|
9
|
-
import { getChangedFiles, getCommits
|
|
9
|
+
import { getChangedFiles, getCommits } 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';
|
|
13
|
+
import { parseBuildInput, parseReleaseChanges, readStdin } from './stdin-input.js';
|
|
13
14
|
import { reportTestResults } from './test-report.js';
|
|
14
15
|
import { readConfigFile } from './utils/config/load-config.js';
|
|
15
16
|
/**
|
|
@@ -72,9 +73,24 @@ const dryRunOptions = {
|
|
|
72
73
|
describe: 'Do every read and check (tokens included) but change nothing; print what would be done',
|
|
73
74
|
},
|
|
74
75
|
};
|
|
75
|
-
/** Flags
|
|
76
|
+
/** Flags of `build`, which builds exactly the Actors it is given. */
|
|
76
77
|
const buildOptions = {
|
|
77
|
-
'
|
|
78
|
+
'version-number': {
|
|
79
|
+
type: 'string',
|
|
80
|
+
demandOption: true,
|
|
81
|
+
describe: `Version to build, like 0.1, or "${DEFAULT_VERSION_KEYWORD}" for each Actor's default version`,
|
|
82
|
+
coerce: (value) => {
|
|
83
|
+
if (value !== DEFAULT_VERSION_KEYWORD && !/^\d+\.\d+$/.test(value)) {
|
|
84
|
+
throw new Error(`--version-number must look like 0.1 or be "${DEFAULT_VERSION_KEYWORD}", got "${value}"`);
|
|
85
|
+
}
|
|
86
|
+
return value;
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
};
|
|
90
|
+
/** Where `notify-release` posts the release. */
|
|
91
|
+
const releaseSlackOptions = {
|
|
92
|
+
'report-slack-channel': { type: 'string', describe: 'Channel for the full report: commits and changed files' },
|
|
93
|
+
'release-slack-channel': { type: 'string', describe: 'Channel for the changelog additions only' },
|
|
78
94
|
};
|
|
79
95
|
/** Global flags, available to every command. */
|
|
80
96
|
const globalOptions = {
|
|
@@ -109,7 +125,7 @@ await yargs()
|
|
|
109
125
|
writeJson(actorConfigs);
|
|
110
126
|
})
|
|
111
127
|
.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(
|
|
128
|
+
writeJson(await getAffectedActors(args));
|
|
113
129
|
})
|
|
114
130
|
.command('report-tests', '', (y) => y
|
|
115
131
|
.options(dryRunOptions)
|
|
@@ -119,77 +135,29 @@ await yargs()
|
|
|
119
135
|
.option('workflow-name', { type: 'string' }), async (args) => {
|
|
120
136
|
await reportTestResults(args);
|
|
121
137
|
})
|
|
122
|
-
.command('build', '', (y) => y
|
|
123
|
-
|
|
124
|
-
.
|
|
125
|
-
|
|
126
|
-
.
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
base: config.targetBranch,
|
|
133
|
-
since: config.baseCommit,
|
|
134
|
-
testFilesGlob: config.testFilesGlob,
|
|
135
|
-
actors: config.actors,
|
|
136
|
-
ignore: config.ignore,
|
|
137
|
-
});
|
|
138
|
-
const builds = await runBuilds({
|
|
139
|
-
...(await resolveRepoUrl(config.repoUrl)),
|
|
140
|
-
actorConfigs: actorsChanged,
|
|
141
|
-
branch: config.sourceBranch.replace('origin/', ''),
|
|
142
|
-
dryRun: config.dryRun,
|
|
143
|
-
useDockerCache: config.useDockerCache,
|
|
138
|
+
.command('build', 'Build the Actors listed on stdin, as {"actors": [{"actorFullName": ...}]}, from the checked-out branch', (y) => y.options(buildOptions).options(repoUrlOptions).options(dryRunOptions), async (args) => {
|
|
139
|
+
const input = parseBuildInput(await readStdin());
|
|
140
|
+
const names = input.actors.map(({ actorFullName }) => actorFullName);
|
|
141
|
+
// An empty --actors selects every Actor, but an empty list here means there is nothing to build
|
|
142
|
+
const actorConfigs = names.length > 0 ? await readConfigFile({ actors: names, ignore: [] }) : [];
|
|
143
|
+
const builds = await buildActors({
|
|
144
|
+
actorConfigs,
|
|
145
|
+
versionNumber: args.versionNumber,
|
|
146
|
+
repoUrl: args.repoUrl,
|
|
147
|
+
dryRun: args.dryRun,
|
|
144
148
|
});
|
|
145
149
|
writeJson(builds);
|
|
146
150
|
})
|
|
147
|
-
.command('release', '', (y) => y
|
|
148
|
-
|
|
149
|
-
.options(buildOptions)
|
|
150
|
-
.options(repoUrlOptions)
|
|
151
|
-
.options(dryRunOptions)
|
|
152
|
-
// The last commit that is already released, everything after it up to HEAD gets released.
|
|
153
|
-
// Required, see the README section "Releasing Actors" for how to set it for each merge strategy.
|
|
154
|
-
.option('base-commit', { type: 'string', demandOption: true })
|
|
155
|
-
.option('report-slack-channel', { type: 'string' })
|
|
156
|
-
.option('release-slack-channel', { type: 'string' }), async (args) => {
|
|
157
|
-
const branch = await getCurrentBranch();
|
|
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`);
|
|
168
|
-
return;
|
|
169
|
-
}
|
|
170
|
-
const { repoUrl, shouldVerifyRepoUrl } = await resolveRepoUrl(args.repoUrl);
|
|
171
|
-
const isLatest = true;
|
|
172
|
-
const { dryRun, reportSlackChannel, releaseSlackChannel } = args;
|
|
173
|
-
const builds = await runBuilds({
|
|
174
|
-
isLatest,
|
|
175
|
-
repoUrl,
|
|
176
|
-
shouldVerifyRepoUrl,
|
|
177
|
-
actorConfigs: actorsChanged,
|
|
178
|
-
branch,
|
|
179
|
-
dryRun,
|
|
180
|
-
useDockerCache: args.useDockerCache,
|
|
181
|
-
});
|
|
182
|
-
logger.info(JSON.stringify(builds));
|
|
151
|
+
.command('notify-release', 'Announce a release on Slack, from the get-affected-actors output on stdin', (y) => y.options(releaseSlackOptions).options(repoUrlOptions).options(dryRunOptions), async (args) => {
|
|
152
|
+
const { commits, changedFiles, changelog } = parseReleaseChanges(await readStdin());
|
|
183
153
|
await notifyToSlack({
|
|
184
|
-
changedFiles,
|
|
185
154
|
commits,
|
|
155
|
+
changedFiles,
|
|
186
156
|
changelog,
|
|
187
|
-
|
|
188
|
-
dryRun,
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
reportSlackChannel,
|
|
192
|
-
releaseSlackChannel,
|
|
157
|
+
repoUrl: args.repoUrl,
|
|
158
|
+
dryRun: args.dryRun,
|
|
159
|
+
reportSlackChannel: args.reportSlackChannel,
|
|
160
|
+
releaseSlackChannel: args.releaseSlackChannel,
|
|
193
161
|
});
|
|
194
162
|
})
|
|
195
163
|
.command('build-from-local', '', (y) => y.options(actorSelectionOptions).options(dryRunOptions), async ({ actors, ignore, dryRun }) => {
|
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,iBAAiB,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,12 +1,11 @@
|
|
|
1
1
|
import { WebClient } from '@slack/web-api';
|
|
2
2
|
import type { Commit } from './types.js';
|
|
3
3
|
type NotifyToSlackOptions = {
|
|
4
|
-
repository: string;
|
|
5
4
|
changedFiles: string[];
|
|
6
5
|
changelog: string | null;
|
|
7
6
|
commits: Commit[];
|
|
7
|
+
repoUrl?: string;
|
|
8
8
|
dryRun: boolean;
|
|
9
|
-
author: string;
|
|
10
9
|
releaseSlackChannel?: string;
|
|
11
10
|
reportSlackChannel?: string;
|
|
12
11
|
};
|
|
@@ -16,7 +15,11 @@ type NotifyToSlackOptions = {
|
|
|
16
15
|
*/
|
|
17
16
|
export declare const getSlackClient: (tokenEnvVar: string, dryRun: boolean) => Promise<WebClient>;
|
|
18
17
|
export declare const sendingLabel: (dryRun: boolean) => "[DRY RUN] Would send" | "Sending";
|
|
19
|
-
|
|
18
|
+
/**
|
|
19
|
+
* Posts what a release changed: its commits, changed files and changelog, as get-affected-actors reports them.
|
|
20
|
+
* Posts nothing when there are no commits, which means there is nothing new to release.
|
|
21
|
+
*/
|
|
22
|
+
export declare const notifyToSlack: ({ changedFiles, commits, changelog, repoUrl, dryRun, releaseSlackChannel, reportSlackChannel, }: NotifyToSlackOptions) => Promise<void>;
|
|
20
23
|
export declare const sendSlackMessage: (slack: WebClient, channel: string, text: string, blocks: string[]) => Promise<void>;
|
|
21
24
|
export {};
|
|
22
25
|
//# 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":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"slack.d.ts","sourceRoot":"","sources":["../../bin/slack.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAI3C,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAC;AAGzC,KAAK,oBAAoB,GAAG;IACxB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,EAAE,MAAM,EAAE,CAAC;IAElB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,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;;;GAGG;AACH,eAAO,MAAM,aAAa,GAAU,iGAQjC,oBAAoB,kBAuDtB,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,4 +1,5 @@
|
|
|
1
1
|
import { WebClient } from '@slack/web-api';
|
|
2
|
+
import { getRepoName, resolveRepoUrl } from './git.js';
|
|
2
3
|
import { logger } from './logger.js';
|
|
3
4
|
import { getEnvVar } from './utils.js';
|
|
4
5
|
/**
|
|
@@ -21,7 +22,15 @@ export const getSlackClient = async (tokenEnvVar, dryRun) => {
|
|
|
21
22
|
export const sendingLabel = (dryRun) => (dryRun ? '[DRY RUN] Would send' : 'Sending');
|
|
22
23
|
// Git authors come as "Name<email>", Slack only needs the name
|
|
23
24
|
const displayName = (author) => author.replace(/\s*<[^>]*>$/, '');
|
|
24
|
-
|
|
25
|
+
/**
|
|
26
|
+
* Posts what a release changed: its commits, changed files and changelog, as get-affected-actors reports them.
|
|
27
|
+
* Posts nothing when there are no commits, which means there is nothing new to release.
|
|
28
|
+
*/
|
|
29
|
+
export const notifyToSlack = async ({ changedFiles, commits, changelog, repoUrl, dryRun, releaseSlackChannel, reportSlackChannel, }) => {
|
|
30
|
+
if (commits.length === 0) {
|
|
31
|
+
logger.info('No new commits, so there is no release to announce');
|
|
32
|
+
return;
|
|
33
|
+
}
|
|
25
34
|
if (!changelog) {
|
|
26
35
|
logger.warn('No new changelog entries found, did you forget to update it?');
|
|
27
36
|
}
|
|
@@ -30,6 +39,9 @@ export const notifyToSlack = async ({ changedFiles, commits, changelog, reposito
|
|
|
30
39
|
return;
|
|
31
40
|
}
|
|
32
41
|
const slack = await getSlackClient('SLACK_TOKEN_RELEASES_BOT', dryRun);
|
|
42
|
+
const repository = getRepoName((await resolveRepoUrl(repoUrl)).repoUrl);
|
|
43
|
+
// The newest commit, same as the pushed head commit
|
|
44
|
+
const { author } = commits[commits.length - 1];
|
|
33
45
|
let shortMessage = `*${repository}* – New release (by ${displayName(author)}):\n\n`;
|
|
34
46
|
// This one is just for broader public that only cares about public facing changes
|
|
35
47
|
if (changelog && releaseSlackChannel) {
|
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;;;GAGG;AACH,MAAM,CAAC,MAAM,cAAc,GAAG,KAAK,EAAE,WAAmB,EAAE,MAAe,EAAsB,EAAE;IAC7F,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;IACpD,IAAI,MAAM,EAAE,CAAC;QACT,IAAI,CAAC;YACD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,MAAM,IAAI,KAAK,CAAC,GAAG,WAAW,2BAA4B,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;QACvF,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,aAAa,WAAW,WAAW,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAe,EAAE,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,sBAAsB,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAE/F,+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,
|
|
1
|
+
{"version":3,"file":"slack.js","sourceRoot":"","sources":["../../bin/slack.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
export declare const readStdin: () => Promise<string>;
|
|
2
|
+
export declare const parseBuildInput: (raw: string) => {
|
|
3
|
+
actors: {
|
|
4
|
+
actorFullName: string;
|
|
5
|
+
}[];
|
|
6
|
+
};
|
|
7
|
+
export declare const parseReleaseChanges: (raw: string) => {
|
|
8
|
+
commits: {
|
|
9
|
+
sha: string;
|
|
10
|
+
author: string;
|
|
11
|
+
date: string;
|
|
12
|
+
message: string;
|
|
13
|
+
}[];
|
|
14
|
+
changedFiles: string[];
|
|
15
|
+
changelog: string | null;
|
|
16
|
+
};
|
|
17
|
+
//# sourceMappingURL=stdin-input.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-input.d.ts","sourceRoot":"","sources":["../../bin/stdin-input.ts"],"names":[],"mappings":"AAIA,eAAO,MAAM,SAAS,QAAa,OAAO,CAAC,MAAM,CAUhD,CAAC;AAiCF,eAAO,MAAM,eAAe,GAAI,KAAK,MAAM;;;;CAIrC,CAAC;AASP,eAAO,MAAM,mBAAmB,GAAI,KAAK,MAAM;;;;;;;;;CAIzC,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import process from 'node:process';
|
|
2
|
+
import z, { prettifyError } from 'zod';
|
|
3
|
+
export const readStdin = async () => {
|
|
4
|
+
// Nothing piped in: fail right away instead of waiting for someone to type
|
|
5
|
+
if (process.stdin.isTTY) {
|
|
6
|
+
throw new Error('Expected JSON on stdin, but nothing was piped in.');
|
|
7
|
+
}
|
|
8
|
+
let raw = '';
|
|
9
|
+
for await (const chunk of process.stdin) {
|
|
10
|
+
raw += chunk;
|
|
11
|
+
}
|
|
12
|
+
return raw;
|
|
13
|
+
};
|
|
14
|
+
const parseStdinJson = (raw, schema, { expected, example }) => {
|
|
15
|
+
// Empty input is an error, not "nothing to do": it is what a failed command earlier in the pipe leaves behind
|
|
16
|
+
if (!raw.trim()) {
|
|
17
|
+
throw new Error(`Expected ${expected} as JSON on stdin, got nothing (${example}).`);
|
|
18
|
+
}
|
|
19
|
+
let json;
|
|
20
|
+
try {
|
|
21
|
+
json = JSON.parse(raw);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new Error(`The input on stdin is not valid JSON: ${error.message}`);
|
|
25
|
+
}
|
|
26
|
+
const result = schema.safeParse(json);
|
|
27
|
+
if (!result.success) {
|
|
28
|
+
throw new Error(`The input on stdin is not ${expected} (${example}):\n${prettifyError(result.error)}`);
|
|
29
|
+
}
|
|
30
|
+
return result.data;
|
|
31
|
+
};
|
|
32
|
+
/**
|
|
33
|
+
* What `build` reads: the Actors to build. Only their names are read, the config file stays the source of truth
|
|
34
|
+
* for everything else about them. Other fields are ignored, so a get-affected-actors document only needs its Actor
|
|
35
|
+
* list picked, e.g. `jq '{ actors: .functionallyChangedActors }'`.
|
|
36
|
+
*/
|
|
37
|
+
const buildInputSchema = z.object({
|
|
38
|
+
actors: z.array(z.object({ actorFullName: z.string() })),
|
|
39
|
+
});
|
|
40
|
+
export const parseBuildInput = (raw) => parseStdinJson(raw, buildInputSchema, {
|
|
41
|
+
expected: 'the Actors to build',
|
|
42
|
+
example: `e.g. echo '{"actors":[{"actorFullName":"owner/name"}]}' | apify-test-tools build --version-number 0.1`,
|
|
43
|
+
});
|
|
44
|
+
/** What `notify-release` reads: the parts of a get-affected-actors document that describe what changed. */
|
|
45
|
+
const releaseChangesSchema = z.object({
|
|
46
|
+
commits: z.array(z.object({ sha: z.string(), author: z.string(), date: z.string(), message: z.string() })),
|
|
47
|
+
changedFiles: z.array(z.string()),
|
|
48
|
+
changelog: z.string().nullable(),
|
|
49
|
+
});
|
|
50
|
+
export const parseReleaseChanges = (raw) => parseStdinJson(raw, releaseChangesSchema, {
|
|
51
|
+
expected: 'the output of get-affected-actors',
|
|
52
|
+
example: 'e.g. apify-test-tools get-affected-actors --since <sha> | apify-test-tools notify-release',
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=stdin-input.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdin-input.js","sourceRoot":"","sources":["../../bin/stdin-input.ts"],"names":[],"mappings":"AAAA,OAAO,OAAO,MAAM,cAAc,CAAC;AAEnC,OAAO,CAAC,EAAE,EAAE,aAAa,EAAgB,MAAM,KAAK,CAAC;AAErD,MAAM,CAAC,MAAM,SAAS,GAAG,KAAK,IAAqB,EAAE;IACjD,2EAA2E;IAC3E,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACzE,CAAC;IACD,IAAI,GAAG,GAAG,EAAE,CAAC;IACb,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QACtC,GAAG,IAAI,KAAK,CAAC;IACjB,CAAC;IACD,OAAO,GAAG,CAAC;AACf,CAAC,CAAC;AAEF,MAAM,cAAc,GAAG,CACnB,GAAW,EACX,MAAkB,EAClB,EAAE,QAAQ,EAAE,OAAO,EAAyC,EAC9D,EAAE;IACA,8GAA8G;IAC9G,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,CAAC;QACd,MAAM,IAAI,KAAK,CAAC,YAAY,QAAQ,mCAAmC,OAAO,IAAI,CAAC,CAAC;IACxF,CAAC;IACD,IAAI,IAAa,CAAC;IAClB,IAAI,CAAC;QACD,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,yCAA0C,KAAe,CAAC,OAAO,EAAE,CAAC,CAAC;IACzF,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;IACtC,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,MAAM,IAAI,KAAK,CAAC,6BAA6B,QAAQ,KAAK,OAAO,OAAO,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3G,CAAC;IACD,OAAO,MAAM,CAAC,IAAI,CAAC;AACvB,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,gBAAgB,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,aAAa,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;CAC3D,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,GAAW,EAAE,EAAE,CAC3C,cAAc,CAAC,GAAG,EAAE,gBAAgB,EAAE;IAClC,QAAQ,EAAE,qBAAqB;IAC/B,OAAO,EAAE,uGAAuG;CACnH,CAAC,CAAC;AAEP,2GAA2G;AAC3G,MAAM,oBAAoB,GAAG,CAAC,CAAC,MAAM,CAAC;IAClC,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IAC1G,YAAY,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC;IACjC,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;CACnC,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,GAAW,EAAE,EAAE,CAC/C,cAAc,CAAC,GAAG,EAAE,oBAAoB,EAAE;IACtC,QAAQ,EAAE,mCAAmC;IAC7C,OAAO,EAAE,2FAA2F;CACvG,CAAC,CAAC"}
|
package/dist/bin/types.d.ts
CHANGED
|
@@ -8,6 +8,11 @@ export interface Config {
|
|
|
8
8
|
ignore: string[];
|
|
9
9
|
testFilesGlob?: string;
|
|
10
10
|
}
|
|
11
|
+
/** The changes from `fromRef` (excluded) to `toRef`, compared as trees like `git diff fromRef toRef`. */
|
|
12
|
+
export interface GitRange {
|
|
13
|
+
fromRef: string;
|
|
14
|
+
toRef: string;
|
|
15
|
+
}
|
|
11
16
|
export type Commit = {
|
|
12
17
|
sha: string;
|
|
13
18
|
author: string;
|
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;;;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"}
|
|
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,yGAAyG;AACzG,MAAM,WAAW,QAAQ;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACjB;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"}
|