apify-test-tools 0.9.1-beta.10 → 0.9.1-beta.12
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/workflows/public_push-build-latest.yaml +3 -1
- package/.github/workflows-package-version +1 -1
- package/CHANGELOG.md +2 -0
- package/CONTRIBUTING.md +2 -4
- package/README.md +146 -35
- package/bin/build-from-local.ts +2 -2
- package/bin/build.ts +114 -70
- package/bin/git.ts +140 -0
- package/bin/main.ts +46 -19
- package/bin/slack.ts +5 -2
- package/bin/types.ts +0 -73
- package/bin/utils/config/parser.ts +6 -5
- package/bin/utils/config/structures/base.ts +5 -1
- package/bin/utils/config/structures/grouped.ts +40 -0
- package/bin/utils/config/structures/legacy.ts +3 -1
- package/bin/utils.ts +2 -3
- package/dist/bin/build-from-local.js.map +1 -1
- package/dist/bin/build.d.ts +25 -4
- package/dist/bin/build.d.ts.map +1 -1
- package/dist/bin/build.js +76 -47
- package/dist/bin/build.js.map +1 -1
- package/dist/bin/git.d.ts +40 -0
- package/dist/bin/git.d.ts.map +1 -1
- package/dist/bin/git.js +118 -0
- package/dist/bin/git.js.map +1 -1
- package/dist/bin/main.d.ts.map +1 -1
- package/dist/bin/main.js +33 -13
- package/dist/bin/main.js.map +1 -1
- package/dist/bin/slack.d.ts.map +1 -1
- package/dist/bin/slack.js +4 -2
- package/dist/bin/slack.js.map +1 -1
- package/dist/bin/types.d.ts +0 -64
- package/dist/bin/types.d.ts.map +1 -1
- package/dist/bin/utils/config/parser.d.ts.map +1 -1
- package/dist/bin/utils/config/parser.js +6 -5
- package/dist/bin/utils/config/parser.js.map +1 -1
- package/dist/bin/utils/config/structures/base.d.ts +3 -2
- package/dist/bin/utils/config/structures/base.d.ts.map +1 -1
- package/dist/bin/utils/config/structures/base.js +1 -0
- package/dist/bin/utils/config/structures/base.js.map +1 -1
- package/dist/bin/utils/config/structures/grouped.d.ts +6 -0
- package/dist/bin/utils/config/structures/grouped.d.ts.map +1 -0
- package/dist/bin/utils/config/structures/grouped.js +29 -0
- package/dist/bin/utils/config/structures/grouped.js.map +1 -0
- package/dist/bin/utils/config/structures/legacy.d.ts +1 -1
- package/dist/bin/utils/config/structures/legacy.d.ts.map +1 -1
- package/dist/bin/utils/config/structures/legacy.js +1 -1
- package/dist/bin/utils/config/structures/legacy.js.map +1 -1
- package/dist/bin/utils.d.ts.map +1 -1
- package/dist/bin/utils.js +2 -3
- package/dist/bin/utils.js.map +1 -1
- package/dist/test/unit/bin/build.test.d.ts +2 -0
- package/dist/test/unit/bin/build.test.d.ts.map +1 -0
- package/dist/test/unit/bin/build.test.js +46 -0
- package/dist/test/unit/bin/build.test.js.map +1 -0
- package/dist/test/unit/bin/git.test.js +104 -1
- package/dist/test/unit/bin/git.test.js.map +1 -1
- package/dist/test/unit/bin/utils/config/load-config.test.js +1 -0
- package/dist/test/unit/bin/utils/config/load-config.test.js.map +1 -1
- package/dist/test/unit/bin/utils/config/parser.test.js +23 -5
- package/dist/test/unit/bin/utils/config/parser.test.js.map +1 -1
- package/dist/test/unit/bin/utils/config/structures/grouped.test.d.ts +2 -0
- package/dist/test/unit/bin/utils/config/structures/grouped.test.d.ts.map +1 -0
- package/dist/test/unit/bin/utils/config/structures/grouped.test.js +75 -0
- package/dist/test/unit/bin/utils/config/structures/grouped.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/test/unit/bin/build.test.ts +68 -0
- package/test/unit/bin/git.test.ts +122 -0
- package/test/unit/bin/utils/config/load-config.test.ts +1 -0
- package/test/unit/bin/utils/config/parser.test.ts +26 -5
- package/test/unit/bin/utils/config/structures/grouped.test.ts +90 -0
- package/bin/github.ts +0 -69
- package/dist/bin/github.d.ts +0 -11
- package/dist/bin/github.d.ts.map +0 -1
- package/dist/bin/github.js +0 -59
- package/dist/bin/github.js.map +0 -1
package/bin/git.ts
CHANGED
|
@@ -145,3 +145,143 @@ export const parseCommit = (commitString: string): Commit => {
|
|
|
145
145
|
message,
|
|
146
146
|
};
|
|
147
147
|
};
|
|
148
|
+
|
|
149
|
+
/**
|
|
150
|
+
* Returns the currently checked-out branch. Release builds point the Actor version at this branch,
|
|
151
|
+
* so a detached HEAD (no branch to point at) is an error rather than a guess.
|
|
152
|
+
*/
|
|
153
|
+
export const getCurrentBranch = (): string => {
|
|
154
|
+
const branch = spawnCommandInGhWorkspace('git rev-parse --abbrev-ref HEAD');
|
|
155
|
+
if (branch === 'HEAD') {
|
|
156
|
+
throw new Error(
|
|
157
|
+
'Cannot determine the branch to release: HEAD is detached. Check out the branch you want to release.',
|
|
158
|
+
);
|
|
159
|
+
}
|
|
160
|
+
return branch;
|
|
161
|
+
};
|
|
162
|
+
|
|
163
|
+
/**
|
|
164
|
+
* Reads the repository URL from the `origin` remote, rewritten to the SSH form the Apify platform
|
|
165
|
+
* uses for Git repo sources, e.g. git@github.com:apify-store/google-maps
|
|
166
|
+
*/
|
|
167
|
+
const getOriginRepoUrl = (): string => {
|
|
168
|
+
return spawnCommandInGhWorkspace('git remote get-url origin').replace(
|
|
169
|
+
/^https:\/\/github\.com\//,
|
|
170
|
+
'git@github.com:',
|
|
171
|
+
);
|
|
172
|
+
};
|
|
173
|
+
|
|
174
|
+
/**
|
|
175
|
+
* Picks the repo URL to build from. By default it's the `origin` remote, and runBuilds then checks it against
|
|
176
|
+
* each Actor's default version, so a fork or mirror remote can't repoint a published Actor. An explicit
|
|
177
|
+
* --repo-url skips that check: passing it is how you move an Actor to another repository on purpose.
|
|
178
|
+
*/
|
|
179
|
+
export const resolveRepoUrl = (explicitRepoUrl: string | undefined) => ({
|
|
180
|
+
repoUrl: explicitRepoUrl ?? getOriginRepoUrl(),
|
|
181
|
+
shouldVerifyRepoUrl: explicitRepoUrl === undefined,
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
/**
|
|
185
|
+
* Makes repo URLs comparable regardless of their form. All of these normalize to `github.com/org/repo`:
|
|
186
|
+
* - git@github.com:org/repo.git
|
|
187
|
+
* - https://github.com/org/repo
|
|
188
|
+
* - ssh://git@github.com/org/repo#master:actors/foo (Actor versions carry a `#branch:folder` fragment)
|
|
189
|
+
*/
|
|
190
|
+
export const normalizeRepoUrl = (repoUrl: string): string => {
|
|
191
|
+
return repoUrl
|
|
192
|
+
.trim()
|
|
193
|
+
.split('#')[0]
|
|
194
|
+
.replace(/^[a-z+]+:\/\//i, '')
|
|
195
|
+
.replace(/^[^@/]+@/, '')
|
|
196
|
+
.replace(':', '/')
|
|
197
|
+
.replace(/\/+$/, '')
|
|
198
|
+
.replace(/\.git$/, '')
|
|
199
|
+
.toLowerCase();
|
|
200
|
+
};
|
|
201
|
+
|
|
202
|
+
/** Repository name from its URL, e.g. `google-maps` for git@github.com:apify-store/google-maps.git */
|
|
203
|
+
export const getRepoName = (repoUrl: string): string => {
|
|
204
|
+
return normalizeRepoUrl(repoUrl).split('/').pop()!;
|
|
205
|
+
};
|
|
206
|
+
|
|
207
|
+
// Sent by e.g. GitHub as the "before" commit of a push that created the branch
|
|
208
|
+
const ZERO_SHA_REGEX = /^0{40}$/;
|
|
209
|
+
|
|
210
|
+
/**
|
|
211
|
+
* Validates the base commit of a release: the last commit whose changes are already released.
|
|
212
|
+
* Unlike the PR path (getCommits), there is no lenient fallback. Falling back to "everything"
|
|
213
|
+
* would rebuild the latest build of every Actor and post it to Slack, so every problem is an error.
|
|
214
|
+
*/
|
|
215
|
+
export const resolveReleaseBaseCommit = (baseCommit: string): string => {
|
|
216
|
+
const sha = parseBaseCommit(baseCommit);
|
|
217
|
+
if (!sha) {
|
|
218
|
+
throw new Error('--base-commit is required for release. See the README section "Releasing Actors".');
|
|
219
|
+
}
|
|
220
|
+
if (ZERO_SHA_REGEX.test(sha)) {
|
|
221
|
+
throw new Error(
|
|
222
|
+
`Base commit is ${sha}, which means the branch was just created and there is no previous release to diff against. ` +
|
|
223
|
+
`Rerun with --base-commit set to the last commit before the changes you want to release.`,
|
|
224
|
+
);
|
|
225
|
+
}
|
|
226
|
+
// --quiet makes rev-parse print nothing (instead of an error) when the commit is missing
|
|
227
|
+
if (!spawnCommandInGhWorkspace(`git rev-parse --verify --quiet "${sha}^{commit}"`)) {
|
|
228
|
+
throw new Error(
|
|
229
|
+
`Base commit ${sha} is not in the local git history. Either the checkout is shallow ` +
|
|
230
|
+
`(fetch the full history, e.g. fetch-depth: 0 in actions/checkout) or the branch was force-pushed.`,
|
|
231
|
+
);
|
|
232
|
+
}
|
|
233
|
+
// git merge-base A B outputs the common ancestor. If that equals A, then A is an ancestor of B.
|
|
234
|
+
if (spawnCommandInGhWorkspace(`git merge-base ${sha} HEAD`) !== sha) {
|
|
235
|
+
throw new Error(
|
|
236
|
+
`Base commit ${sha} is not an ancestor of HEAD, most likely because the branch was force-pushed. ` +
|
|
237
|
+
`The changed files cannot be determined reliably. Rerun with --base-commit set to an ancestor of HEAD ` +
|
|
238
|
+
`from before the changes you want to release.`,
|
|
239
|
+
);
|
|
240
|
+
}
|
|
241
|
+
return sha;
|
|
242
|
+
};
|
|
243
|
+
|
|
244
|
+
const CHANGELOG_PATH = 'CHANGELOG.md';
|
|
245
|
+
|
|
246
|
+
/** Returns the lines added to the root CHANGELOG.md between baseSha and HEAD, or null if it didn't change. */
|
|
247
|
+
const getChangelogAdditions = (baseSha: string, changedFiles: string[]): string | null => {
|
|
248
|
+
if (!changedFiles.includes(CHANGELOG_PATH)) {
|
|
249
|
+
return null;
|
|
250
|
+
}
|
|
251
|
+
const diff = spawnCommandInGhWorkspace('git', ['diff', baseSha, 'HEAD', '--', CHANGELOG_PATH]);
|
|
252
|
+
|
|
253
|
+
const added: string[] = [];
|
|
254
|
+
let startedChangelog = false;
|
|
255
|
+
for (const line of diff.split('\n')) {
|
|
256
|
+
// The diff is already limited to the changelog but better to double check
|
|
257
|
+
if (line.startsWith('+++') && line.toLowerCase().includes(CHANGELOG_PATH.toLowerCase())) {
|
|
258
|
+
startedChangelog = true;
|
|
259
|
+
continue;
|
|
260
|
+
}
|
|
261
|
+
if (startedChangelog) {
|
|
262
|
+
if (line.startsWith('diff')) {
|
|
263
|
+
break;
|
|
264
|
+
}
|
|
265
|
+
if (line.startsWith('+')) {
|
|
266
|
+
added.push(line.slice(1).trim());
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
return added.join('\n').trim();
|
|
271
|
+
};
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Everything that changed since the last release (baseSha, exclusive) up to HEAD, or null when there
|
|
275
|
+
* are no new commits. Changed files come from diffing the range directly instead of from the commit
|
|
276
|
+
* list: with a merge commit, the oldest commit of the merged branch can be older than baseSha, and
|
|
277
|
+
* diffing from its parent would pull in already-released changes.
|
|
278
|
+
*/
|
|
279
|
+
export const getReleaseChanges = (baseSha: string) => {
|
|
280
|
+
if (spawnCommandInGhWorkspace('git rev-parse HEAD') === baseSha) {
|
|
281
|
+
return null;
|
|
282
|
+
}
|
|
283
|
+
const commits = fetchAllBranchCommits('HEAD', baseSha);
|
|
284
|
+
const changedFiles = spawnCommandInGhWorkspace(`git diff --name-only ${baseSha} HEAD`).split('\n').filter(Boolean);
|
|
285
|
+
const changelog = getChangelogAdditions(baseSha, changedFiles);
|
|
286
|
+
return { commits, changedFiles, changelog };
|
|
287
|
+
};
|
package/bin/main.ts
CHANGED
|
@@ -9,12 +9,21 @@ import { hideBin } from 'yargs/helpers';
|
|
|
9
9
|
import { deleteOldBuilds, runBuilds } from './build.js';
|
|
10
10
|
import { runBuildsFromLocal } from './build-from-local.js';
|
|
11
11
|
import { getChangedActors } from './diff-changes.js';
|
|
12
|
-
import {
|
|
13
|
-
|
|
12
|
+
import {
|
|
13
|
+
getBranchOnlyChangedFiles,
|
|
14
|
+
getChangedFiles,
|
|
15
|
+
getCommits,
|
|
16
|
+
getCurrentBranch,
|
|
17
|
+
getReleaseChanges,
|
|
18
|
+
getRepoName,
|
|
19
|
+
hasMergeFromTarget,
|
|
20
|
+
resolveReleaseBaseCommit,
|
|
21
|
+
resolveRepoUrl,
|
|
22
|
+
} from './git.js';
|
|
14
23
|
import { notifyToSlack } from './slack.js';
|
|
15
24
|
import { reportTestResults } from './test-report.js';
|
|
16
25
|
import type { Config } from './types.js';
|
|
17
|
-
import { setCwd
|
|
26
|
+
import { setCwd } from './utils.js';
|
|
18
27
|
import { readConfigFile } from './utils/config/load-config.js';
|
|
19
28
|
|
|
20
29
|
/**
|
|
@@ -42,6 +51,16 @@ export const buildOptions = <T>(y: Argv<T>) => {
|
|
|
42
51
|
});
|
|
43
52
|
};
|
|
44
53
|
|
|
54
|
+
/**
|
|
55
|
+
* Where to build the Actors from. Defaults to the `origin` remote, which is then checked against each
|
|
56
|
+
* Actor's default version. Passing it explicitly skips that check (see assertRepoUrlMatchesDefaultVersion).
|
|
57
|
+
*/
|
|
58
|
+
const repoUrlOptions = <T>(y: Argv<T>) => {
|
|
59
|
+
return y.option('repo-url', {
|
|
60
|
+
type: 'string',
|
|
61
|
+
});
|
|
62
|
+
};
|
|
63
|
+
|
|
45
64
|
/**
|
|
46
65
|
* Actor-selection flags, applied to every command that reads the actor config so a caller can
|
|
47
66
|
* narrow the set it operates on (e.g. two-stage releases: `--ignore X`, then `--actors X`).
|
|
@@ -150,18 +169,15 @@ await yargs()
|
|
|
150
169
|
.command(
|
|
151
170
|
'build',
|
|
152
171
|
'',
|
|
153
|
-
(args) =>
|
|
172
|
+
(args) =>
|
|
173
|
+
repoUrlOptions(actorSelectionOptions(buildOptions(args))).option('dry-run', {
|
|
174
|
+
type: 'boolean',
|
|
175
|
+
default: false,
|
|
176
|
+
}),
|
|
154
177
|
async (config) => {
|
|
155
178
|
const actorsChanged = await resolveChangedActors(config, { isLatest: false });
|
|
156
|
-
// https://github.com/apify-store/google-maps#:actors/lukaskrivka_google-maps-with-contact-details
|
|
157
|
-
// git@github.com:apify-store/google-maps#:actors/lukaskrivka_google-maps-with-contact-details
|
|
158
|
-
const repoUrl = spawnCommandInGhWorkspace(`git remote get-url origin`).replace(
|
|
159
|
-
/^https:\/\/github\.com\//,
|
|
160
|
-
'git@github.com:',
|
|
161
|
-
);
|
|
162
|
-
|
|
163
179
|
const builds = await runBuilds({
|
|
164
|
-
repoUrl,
|
|
180
|
+
...resolveRepoUrl(config.repoUrl),
|
|
165
181
|
actorConfigs: actorsChanged,
|
|
166
182
|
branch: config.sourceBranch.replace('origin/', ''),
|
|
167
183
|
dryRun: config.dryRun,
|
|
@@ -174,16 +190,25 @@ await yargs()
|
|
|
174
190
|
'release',
|
|
175
191
|
'',
|
|
176
192
|
(args) =>
|
|
177
|
-
actorSelectionOptions(args)
|
|
178
|
-
|
|
193
|
+
repoUrlOptions(actorSelectionOptions(args))
|
|
194
|
+
// The last commit that is already released, everything after it up to HEAD gets released.
|
|
195
|
+
// Required, see the README section "Releasing Actors" for how to set it for each merge strategy.
|
|
196
|
+
.option('base-commit', { type: 'string', demandOption: true })
|
|
179
197
|
.option('dry-run', { type: 'boolean', default: false })
|
|
180
198
|
.option('report-slack-channel', { type: 'string' })
|
|
181
199
|
.option('release-slack-channel', { type: 'string' })
|
|
182
200
|
.option('use-docker-cache', { type: 'boolean', default: false }),
|
|
183
201
|
async (args) => {
|
|
184
|
-
const
|
|
185
|
-
|
|
186
|
-
);
|
|
202
|
+
const baseSha = resolveReleaseBaseCommit(args.baseCommit);
|
|
203
|
+
const branch = getCurrentBranch();
|
|
204
|
+
const changes = getReleaseChanges(baseSha);
|
|
205
|
+
if (!changes) {
|
|
206
|
+
console.error(`HEAD is the base commit ${baseSha}, there is nothing new to release`);
|
|
207
|
+
return;
|
|
208
|
+
}
|
|
209
|
+
const { commits, changedFiles, changelog } = changes;
|
|
210
|
+
const { repoUrl, shouldVerifyRepoUrl } = resolveRepoUrl(args.repoUrl);
|
|
211
|
+
|
|
187
212
|
const isLatest = true;
|
|
188
213
|
const actorConfigs = await readConfigFile(args);
|
|
189
214
|
const actorsChanged = getChangedActors({
|
|
@@ -196,6 +221,7 @@ await yargs()
|
|
|
196
221
|
const builds = await runBuilds({
|
|
197
222
|
isLatest,
|
|
198
223
|
repoUrl,
|
|
224
|
+
shouldVerifyRepoUrl,
|
|
199
225
|
actorConfigs: actorsChanged,
|
|
200
226
|
branch,
|
|
201
227
|
dryRun,
|
|
@@ -207,9 +233,10 @@ await yargs()
|
|
|
207
233
|
changedFiles,
|
|
208
234
|
commits,
|
|
209
235
|
changelog,
|
|
210
|
-
repository,
|
|
236
|
+
repository: getRepoName(repoUrl),
|
|
211
237
|
dryRun,
|
|
212
|
-
|
|
238
|
+
// The newest commit, same as the pushed head commit
|
|
239
|
+
author: commits[commits.length - 1].author,
|
|
213
240
|
reportSlackChannel,
|
|
214
241
|
releaseSlackChannel,
|
|
215
242
|
});
|
package/bin/slack.ts
CHANGED
|
@@ -14,6 +14,9 @@ type NotifyToSlackOptions = {
|
|
|
14
14
|
reportSlackChannel?: string;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
+
// Git authors come as "Name<email>", Slack only needs the name
|
|
18
|
+
const displayName = (author: string) => author.replace(/\s*<[^>]*>$/, '');
|
|
19
|
+
|
|
17
20
|
export const notifyToSlack = async ({
|
|
18
21
|
changedFiles,
|
|
19
22
|
commits,
|
|
@@ -30,7 +33,7 @@ export const notifyToSlack = async ({
|
|
|
30
33
|
console.warn('No new changelog entries found, did you forget to update it?');
|
|
31
34
|
}
|
|
32
35
|
|
|
33
|
-
let shortMessage = `*${repository}* – New release (by ${author}):\n\n`;
|
|
36
|
+
let shortMessage = `*${repository}* – New release (by ${displayName(author)}):\n\n`;
|
|
34
37
|
|
|
35
38
|
// This one is just for broader public that only cares about public facing changes
|
|
36
39
|
if (changelog && releaseSlackChannel) {
|
|
@@ -49,7 +52,7 @@ export const notifyToSlack = async ({
|
|
|
49
52
|
const commitsMessage = `${commits
|
|
50
53
|
.map(
|
|
51
54
|
({ author: commitAuthor, message }, index) =>
|
|
52
|
-
`${index + 1}. Commit message: ${message}\n\tAuthor: ${commitAuthor}.`,
|
|
55
|
+
`${index + 1}. Commit message: ${message}\n\tAuthor: ${displayName(commitAuthor)}.`,
|
|
53
56
|
)
|
|
54
57
|
.join('\n')}`;
|
|
55
58
|
const changedFilesMessage = `*Files changed*: ${changedFiles.map((file) => `\`${file}\``).join(', ')}`;
|
package/bin/types.ts
CHANGED
|
@@ -14,79 +14,6 @@ export type Commit = {
|
|
|
14
14
|
message: string;
|
|
15
15
|
};
|
|
16
16
|
|
|
17
|
-
// NOTE: The GitHub types are incomplete, feel free to add fields/complete (not sure how stable GitHub API is)
|
|
18
|
-
export interface GitHubHeadCommit {
|
|
19
|
-
added: string[];
|
|
20
|
-
removed: string[];
|
|
21
|
-
modified: string[];
|
|
22
|
-
author: {
|
|
23
|
-
name: string;
|
|
24
|
-
};
|
|
25
|
-
message: string;
|
|
26
|
-
id: string;
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export interface Repository {
|
|
30
|
-
full_name: string;
|
|
31
|
-
name: string;
|
|
32
|
-
ssh_url: string;
|
|
33
|
-
owner: {
|
|
34
|
-
login: string;
|
|
35
|
-
};
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
export type GitHubEvent = GitHubEventPullRequest | GitHubEventPush;
|
|
39
|
-
|
|
40
|
-
export interface GitHubEventPullRequest {
|
|
41
|
-
// Type is our own variable we inject to have discriminated union
|
|
42
|
-
// The rest of the properties are raw from GitHub API
|
|
43
|
-
type: 'pull_request';
|
|
44
|
-
pull_request: {
|
|
45
|
-
number: number;
|
|
46
|
-
base: {
|
|
47
|
-
ref: string;
|
|
48
|
-
sha: string;
|
|
49
|
-
};
|
|
50
|
-
head: {
|
|
51
|
-
ref: string;
|
|
52
|
-
sha: string;
|
|
53
|
-
};
|
|
54
|
-
};
|
|
55
|
-
repository: Repository;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
export interface GitHubEventPush {
|
|
59
|
-
type: 'push';
|
|
60
|
-
head_commit: GitHubHeadCommit;
|
|
61
|
-
repository: Repository;
|
|
62
|
-
ref: string;
|
|
63
|
-
commits: GithubCommit[];
|
|
64
|
-
before: string;
|
|
65
|
-
after: string;
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
export interface GithubCommit {
|
|
69
|
-
id: string;
|
|
70
|
-
tree_id: string;
|
|
71
|
-
distinct: boolean;
|
|
72
|
-
message: string;
|
|
73
|
-
timestamp: string;
|
|
74
|
-
url: string;
|
|
75
|
-
author: {
|
|
76
|
-
name: string;
|
|
77
|
-
email: string;
|
|
78
|
-
username: string;
|
|
79
|
-
};
|
|
80
|
-
committer: {
|
|
81
|
-
name: string;
|
|
82
|
-
email: string;
|
|
83
|
-
username: string;
|
|
84
|
-
};
|
|
85
|
-
added: string[];
|
|
86
|
-
removed: string[];
|
|
87
|
-
modified: string[];
|
|
88
|
-
}
|
|
89
|
-
|
|
90
17
|
export interface BuildData {
|
|
91
18
|
buildId: string;
|
|
92
19
|
actorRawId: string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import z from 'zod';
|
|
2
2
|
|
|
3
3
|
import { CONFIG_FILE_STRATEGY, type ResolvedActorConfig, type StrategyParser } from './structures/base.js';
|
|
4
|
+
import { GROUPED_PARSER } from './structures/grouped.js';
|
|
4
5
|
import { LEGACY_PARSER } from './structures/legacy.js';
|
|
5
6
|
|
|
6
7
|
const CONFIG_FILE_STRATEGIES: {
|
|
@@ -8,9 +9,10 @@ const CONFIG_FILE_STRATEGIES: {
|
|
|
8
9
|
[key in CONFIG_FILE_STRATEGY]: StrategyParser & { mode: key };
|
|
9
10
|
} = {
|
|
10
11
|
[CONFIG_FILE_STRATEGY.LEGACY]: LEGACY_PARSER,
|
|
12
|
+
[CONFIG_FILE_STRATEGY.GROUPED]: GROUPED_PARSER,
|
|
11
13
|
} as const;
|
|
12
14
|
|
|
13
|
-
const ModeSelectionSchema = z.enum(CONFIG_FILE_STRATEGY).default(CONFIG_FILE_STRATEGY.LEGACY);
|
|
15
|
+
const ModeSelectionSchema = z.object({ mode: z.enum(CONFIG_FILE_STRATEGY).default(CONFIG_FILE_STRATEGY.LEGACY) });
|
|
14
16
|
|
|
15
17
|
function selectStrategy(mode: unknown): StrategyParser {
|
|
16
18
|
const parsed = ModeSelectionSchema.safeParse(mode);
|
|
@@ -18,7 +20,7 @@ function selectStrategy(mode: unknown): StrategyParser {
|
|
|
18
20
|
throw new Error(z.prettifyError(parsed.error));
|
|
19
21
|
}
|
|
20
22
|
|
|
21
|
-
return CONFIG_FILE_STRATEGIES[parsed.data];
|
|
23
|
+
return CONFIG_FILE_STRATEGIES[parsed.data.mode];
|
|
22
24
|
}
|
|
23
25
|
|
|
24
26
|
// Strips a trailing slash so config-declared paths ("actors/shopify/" vs "actors/shopify") compare equal.
|
|
@@ -79,10 +81,9 @@ export const _privates = {
|
|
|
79
81
|
};
|
|
80
82
|
|
|
81
83
|
export function parseConfigFile(body: Record<string, unknown>): ResolvedActorConfig[] {
|
|
82
|
-
const
|
|
83
|
-
const strategy = selectStrategy(mode);
|
|
84
|
+
const strategy = selectStrategy(body);
|
|
84
85
|
|
|
85
|
-
const resolved = strategy.parse(
|
|
86
|
+
const resolved = strategy.parse(body);
|
|
86
87
|
const validated = verifyConfiguration(resolved);
|
|
87
88
|
return validated;
|
|
88
89
|
}
|
|
@@ -11,15 +11,19 @@ export const ACTOR_FULL_NAME_REGEX = new RegExp(
|
|
|
11
11
|
USERNAME.REGEX.flags + ACTOR_NAME.REGEX.flags,
|
|
12
12
|
);
|
|
13
13
|
|
|
14
|
+
// All fields must exist, even if their value can be undefined.
|
|
15
|
+
// This makes typescript enforce all configs to have resolution for EVERY field.
|
|
16
|
+
// So adding an extra field here creates TS errors in every config file that doesn't have it.
|
|
14
17
|
export interface ResolvedActorConfig {
|
|
15
18
|
actorFullName: string;
|
|
16
19
|
folder: string;
|
|
17
20
|
tokenEnvVar: string;
|
|
18
|
-
overrideActorContext
|
|
21
|
+
overrideActorContext: string[] | undefined;
|
|
19
22
|
}
|
|
20
23
|
|
|
21
24
|
export enum CONFIG_FILE_STRATEGY {
|
|
22
25
|
LEGACY = 'legacy',
|
|
26
|
+
GROUPED = 'grouped',
|
|
23
27
|
}
|
|
24
28
|
|
|
25
29
|
export type StrategyParser = {
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
import z from 'zod';
|
|
2
|
+
|
|
3
|
+
import { ACTOR_FULL_NAME_REGEX, CONFIG_FILE_STRATEGY, defineStrategy } from './base.js';
|
|
4
|
+
|
|
5
|
+
const schema = z.object({
|
|
6
|
+
groups: z
|
|
7
|
+
.record(
|
|
8
|
+
z.string(),
|
|
9
|
+
z.object({
|
|
10
|
+
actors: z
|
|
11
|
+
.array(
|
|
12
|
+
z.object({
|
|
13
|
+
folder: z.string(),
|
|
14
|
+
actorFullName: z.string().regex(ACTOR_FULL_NAME_REGEX),
|
|
15
|
+
// these allow overrides from stuff set at the group level
|
|
16
|
+
tokenEnvVar: z.string().optional(),
|
|
17
|
+
overrideActorContext: z.array(z.string()).optional(),
|
|
18
|
+
}),
|
|
19
|
+
)
|
|
20
|
+
.min(1),
|
|
21
|
+
tokenEnvVar: z.string(),
|
|
22
|
+
overrideActorContext: z.array(z.string()).optional(),
|
|
23
|
+
}),
|
|
24
|
+
)
|
|
25
|
+
.refine((data) => Object.keys(data).length > 0, 'Invalid input: At least one configuration group is required.'),
|
|
26
|
+
});
|
|
27
|
+
|
|
28
|
+
type GroupedConfig = z.infer<typeof schema>;
|
|
29
|
+
|
|
30
|
+
export const GROUPED_PARSER = defineStrategy(CONFIG_FILE_STRATEGY.GROUPED, schema, (body: GroupedConfig) => {
|
|
31
|
+
const entries = Object.entries(body.groups);
|
|
32
|
+
return entries.flatMap(([_folder, entry]) =>
|
|
33
|
+
entry.actors.map((actor) => ({
|
|
34
|
+
tokenEnvVar: entry.tokenEnvVar,
|
|
35
|
+
overrideActorContext: entry.overrideActorContext,
|
|
36
|
+
// last so actor can override stuff from the group
|
|
37
|
+
...actor,
|
|
38
|
+
})),
|
|
39
|
+
);
|
|
40
|
+
});
|
|
@@ -17,4 +17,6 @@ const schema = z.object({
|
|
|
17
17
|
|
|
18
18
|
type LegacyConfig = z.infer<typeof schema>;
|
|
19
19
|
|
|
20
|
-
export const LEGACY_PARSER = defineStrategy(CONFIG_FILE_STRATEGY.LEGACY, schema, (body: LegacyConfig) =>
|
|
20
|
+
export const LEGACY_PARSER = defineStrategy(CONFIG_FILE_STRATEGY.LEGACY, schema, (body: LegacyConfig) =>
|
|
21
|
+
body.actors.map((x) => ({ overrideActorContext: undefined, ...x })),
|
|
22
|
+
);
|
package/bin/utils.ts
CHANGED
|
@@ -84,11 +84,10 @@ export const getEnvVar = (varName: string, defaultValue?: string): string => {
|
|
|
84
84
|
return value;
|
|
85
85
|
};
|
|
86
86
|
|
|
87
|
+
// Commands expect to run from the repository root (config file and Actor folders are relative to it).
|
|
88
|
+
// That is the current directory by default, --workspace points elsewhere, e.g. for local development.
|
|
87
89
|
export const setCwd = ({ workspace }: { workspace: string | undefined }) => {
|
|
88
90
|
if (workspace) {
|
|
89
91
|
process.chdir(workspace);
|
|
90
|
-
return;
|
|
91
92
|
}
|
|
92
|
-
const ghWorkspace = getEnvVar('GITHUB_WORKSPACE', process.cwd());
|
|
93
|
-
process.chdir(ghWorkspace);
|
|
94
93
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build-from-local.js","sourceRoot":"","sources":["../../bin/build-from-local.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"build-from-local.js","sourceRoot":"","sources":["../../bin/build-from-local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAClC,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,OAAO,MAAM,MAAM,SAAS,CAAC;AAE7B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,eAAe,EAAE,2BAA2B,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACjG,OAAO,EAAE,wBAAwB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,iBAAiB,CAAC;AAGpD,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,iBAAiB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjG,yGAAyG;AACzG,yGAAyG;AACzG,yGAAyG;AACzG,yDAAyD;AACzD,MAAM,kBAAkB,GAAG,CAAC,gBAAgB,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC;AACtF,MAAM,YAAY,GAAG,CAAC,QAAgB,EAAW,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;AAEjH,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,SAAiB,EAAE,QAAgB,EAAyB,EAAE;IACnG,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAE3C,0FAA0F;IAC1F,wFAAwF;IACxF,yFAAyF;IACzF,MAAM,aAAa,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,EAAE,YAAY,CAAC,CAAC;IACrE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC,CAA4B,CAAC;IAClG,MAAM,aAAa,GAAG,SAAS,CAAC,gBAAsC,CAAC;IACvE,MAAM,aAAa,GAAG,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrG,MAAM,eAAe,GAAG,CAAC,CAAC,aAAa,IAAI,YAAY,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;IAEpF,MAAM,mBAAmB,GAAG,eAAe,CAAC,CAAC,CAAC,aAAc,CAAC,CAAC,CAAC,WAAW,CAAC;IAC3E,MAAM,aAAa,GAAG,sBAAsB,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAE5E,IAAI,CAAC,eAAe,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,mBAAmB,CAAC,CAAC,CAAC,CAAC;IAC7G,CAAC;IAED,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,sBAAsB,CACvD,SAAS,EACT,WAAW,EACX,aAAc,EACd,SAAS,EACT,aAAa,CAChB,CAAC;IACF,IAAI,CAAC;QACD,OAAO,MAAM,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC;IACnG,CAAC;YAAS,CAAC;QACP,iFAAiF;QACjF,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC3D,CAAC;AACL,CAAC,CAAC;AAEF,+FAA+F;AAC/F,gGAAgG;AAChG,gGAAgG;AAChG,+FAA+F;AAC/F,iGAAiG;AACjG,oGAAoG;AACpG,gGAAgG;AAChG,8FAA8F;AAC9F,2FAA2F;AAC3F,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,gBAAwB,EAAE,QAAgB,EAAY,EAAE;IAC3F,MAAM,aAAa,GAAG,iBAAiB,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;IACpE,MAAM,YAAY,GAAG,kBAAkB,CAAC,aAAa,CAAC,CAAC;IACvD,MAAM,iBAAiB,GAAG,IAAI,GAAG,CAC7B,aAAa,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;QAC3B,OAAO;QACP,IAAI,CAAC,QAAQ,CAAC,gBAAgB,EAAE,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC;KAC1F,CAAC,CACL,CAAC;IACF,MAAM,eAAe,GAAG,wBAAwB,CAAC,gBAAgB,CAAC,CAAC;IAEnE,OAAO,aAAa;SACf,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE;QAChB,IAAI,YAAY,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;QACvD,MAAM,eAAe,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QAC9D,IAAI,eAAe;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC;YAAE,OAAO,KAAK,CAAC;QAC5C,OAAO,CAAC,eAAe,CAAC,iBAAiB,CAAC,GAAG,CAAC,OAAO,CAAE,CAAC,CAAC;IAC7D,CAAC,CAAC;SACD,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC;AACxD,CAAC,CAAC;AAEF,uFAAuF;AACvF,uFAAuF;AACvF,oEAAoE;AACpE,yFAAyF;AACzF,8FAA8F;AAC9F,+EAA+E;AAC/E,8EAA8E;AAC9E,EAAE;AACF,iFAAiF;AACjF,+EAA+E;AAC/E,iDAAiD;AACjD,MAAM,CAAC,MAAM,sBAAsB,GAAG,KAAK,EACvC,SAAiB,EACjB,WAAmB,EACnB,aAAqB,EACrB,SAAkC,EAClC,gBAA0B,EACuB,EAAE;IACnD,OAAO,CAAC,KAAK,CAAC,IAAI,SAAS,6DAA6D,CAAC,CAAC;IAE1F,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,eAAe,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;IACxG,MAAM,SAAS,GAAa,EAAE,CAAC;IAE/B,yFAAyF;IACzF,gDAAgD;IAChD,MAAM,OAAO,CAAC,GAAG,CACb,gBAAgB,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,WAAW,CAAC,CAAC;QAC1D,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QAC7C,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACzC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC,CACL,CAAC;IAEF,gGAAgG;IAChG,gGAAgG;IAChG,iGAAiG;IACjG,4FAA4F;IAC5F,6FAA6F;IAC7F,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACtD,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,iBAAiB,CAAC,WAAW,EAAE,YAAY,CAAC,CAAC,CAAC;IAC9G,MAAM,OAAO,CAAC,GAAG,CACb,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,EAAE,EAAE;QACrC,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC,CAAC;QACzD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAC5D,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;QACzC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC7B,CAAC,CAAC,CACL,CAAC;IAEF,0FAA0F;IAC1F,2FAA2F;IAC3F,wDAAwD;IACxD,MAAM,qBAAqB,CAAC,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;IAE5E,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;AAClC,CAAC,CAAC;AAEF,0FAA0F;AAC1F,iFAAiF;AACjF,EAAE;AACF,iCAAiC;AACjC,+DAA+D;AAC/D,kFAAkF;AAClF,+EAA+E;AAC/E,qFAAqF;AACrF,oEAAoE;AACpE,EAAE;AACF,+EAA+E;AAC/E,gFAAgF;AAChF,MAAM,CAAC,MAAM,qBAAqB,GAAG,KAAK,EACtC,WAAmB,EACnB,aAAqB,EACrB,OAAe,EACf,SAAkC,EACrB,EAAE;IACf,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IAC1D,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;IACjD,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,kBAAkB,EAAE,WAAW,EAAE,QAAQ,CAAU,CAAC;IACtF,MAAM,SAAS,GAAG,EAAE,GAAG,SAAS,EAAE,CAAC;IACnC,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;QAC7B,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,IAAI,OAAO,KAAK,KAAK,QAAQ;YAAE,SAAS;QAExC,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;QAEtD,mEAAmE;QACnE,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,gBAAgB,CAAC;YAAE,SAAS;QAEvD,yEAAyE;QACzE,6EAA6E;QAC7E,MAAM,iBAAiB,GAAG,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,OAAO,CAAC,CAAC;QAChE,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,iBAAiB,CAAC,CAAC;QACzD,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,YAAY,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACjG,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,kBAAkB,GAAG,KAAK,EAAE,EACrC,YAAY,EACZ,MAAM,GAIT,EAAwB,EAAE;IACvB,IAAI,MAAM,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,0CAA0C,CAAC,CAAC;QAC1D,KAAK,MAAM,EAAE,aAAa,EAAE,MAAM,EAAE,IAAI,YAAY,EAAE,CAAC;YACnD,OAAO,CAAC,KAAK,CAAC,KAAK,aAAa,KAAK,MAAM,GAAG,CAAC,CAAC;QACpD,CAAC;QACD,OAAO,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,eAAe,CAAC,aAAa,EAAE,2BAA2B,CAAC,CAAC,CAAC;IAChH,CAAC;IAED,OAAO,qBAAqB,CAAC,YAAY,EAAE,cAAc,EAAE,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,EAAE;QACtF,6FAA6F;QAC7F,MAAM,GAAG,GAAG,IAAI,MAAM,EAAE,CAAC;QACzB,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,MAAM,kBAAkB,CAAC,WAAW,CAAC,aAAa,EAAE,WAAW,CAAC,MAAM,CAAC,EAAE,CAAC;YACtG,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAC/B,CAAC;QACD,MAAM,YAAY,GAAkC;YAChD,aAAa,EAAE,2BAA2B;YAC1C,UAAU,EAAE,MAAM,OAAO,CAAC,eAAe,CAAC,2BAA2B,EAAE,GAAG,CAAC,QAAQ,EAAE,CAAC;YACtF,UAAU,EAAE,eAAe,CAAC,OAAO;SACtC,CAAC;QACF,OAAO,OAAO,CAAC,qBAAqB,CAAC,2BAA2B,EAAE,YAAY,EAAE,KAAK,CAAC,CAAC;IAC3F,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
|
package/dist/bin/build.d.ts
CHANGED
|
@@ -1,18 +1,38 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import type * as ApifyClientTypes from 'apify-client';
|
|
2
2
|
import type { ActorConfig, BuildData } from './types.js';
|
|
3
3
|
export declare const LOCAL_SOURCE_VERSION_NUMBER = "0.98";
|
|
4
|
+
/**
|
|
5
|
+
* Finds the Actor's default version: the one whose build the default build tag points to.
|
|
6
|
+
* Usually tagged 'latest' but not necessarily (can be e.g. 'version-0').
|
|
7
|
+
*/
|
|
8
|
+
export declare const resolveDefaultVersion: (actorFullName: string, actorInfo: ApifyClientTypes.Actor) => {
|
|
9
|
+
defaultBuildNumber: string;
|
|
10
|
+
defaultVersionNumber: string;
|
|
11
|
+
defaultBuildTag: string;
|
|
12
|
+
defaultVersion: ApifyClientTypes.ActorVersion | undefined;
|
|
13
|
+
};
|
|
14
|
+
/**
|
|
15
|
+
* Guards against building an Actor from a different repository than it is published from, e.g. when the
|
|
16
|
+
* local `origin` remote is a fork or a mirror. Every build overwrites the version's Git URL, so building
|
|
17
|
+
* from the wrong remote would silently repoint the Actor. The default version is the source of truth
|
|
18
|
+
* since it is what users run. Skipped when the repo URL is passed explicitly, which is how you move an
|
|
19
|
+
* Actor to a new repository on purpose.
|
|
20
|
+
*/
|
|
21
|
+
export declare const assertRepoUrlMatchesDefaultVersion: (actorFullName: string, defaultVersion: ApifyClientTypes.ActorVersion | undefined, repoUrl: string) => void;
|
|
4
22
|
export declare class ApifyBuilder {
|
|
5
23
|
private readonly apifyClient;
|
|
6
24
|
private readonly actorFullName;
|
|
7
25
|
private constructor();
|
|
26
|
+
getActorInfo: () => Promise<ApifyClientTypes.Actor>;
|
|
8
27
|
getDefaultVersionAndTag: () => Promise<{
|
|
9
28
|
defaultBuildNumber: string;
|
|
10
29
|
defaultVersionNumber: string;
|
|
11
30
|
defaultBuildTag: string;
|
|
31
|
+
defaultVersion: ApifyClientTypes.ActorVersion | undefined;
|
|
12
32
|
}>;
|
|
13
33
|
uploadSourceZip: (versionNumber: string, zip: Buffer) => Promise<string>;
|
|
14
|
-
createVersionAndBuild: (versionNumber: string, actorVersion: ActorVersion, useCache: boolean) => Promise<BuildData>;
|
|
15
|
-
waitForBuildToFinish: (buildId: string) => Promise<Build>;
|
|
34
|
+
createVersionAndBuild: (versionNumber: string, actorVersion: ApifyClientTypes.ActorVersion, useCache: boolean, actorInfo?: ApifyClientTypes.Actor) => Promise<BuildData>;
|
|
35
|
+
waitForBuildToFinish: (buildId: string) => Promise<ApifyClientTypes.Build>;
|
|
16
36
|
static fromActorConfig: (actorConfig: ActorConfig) => ApifyBuilder;
|
|
17
37
|
/**
|
|
18
38
|
* Deletes build of all versions. Apify API doesn't allow to delete default build and we explicitly skip it
|
|
@@ -27,11 +47,12 @@ type RunBuildsOptions = {
|
|
|
27
47
|
actorConfigs: ActorConfig[];
|
|
28
48
|
isLatest?: boolean;
|
|
29
49
|
repoUrl: string;
|
|
50
|
+
shouldVerifyRepoUrl: boolean;
|
|
30
51
|
branch: string;
|
|
31
52
|
dryRun: boolean;
|
|
32
53
|
useDockerCache: boolean;
|
|
33
54
|
};
|
|
34
|
-
export declare const runBuilds: ({ repoUrl, branch, actorConfigs, isLatest, dryRun, useDockerCache, }: RunBuildsOptions) => Promise<BuildData[]>;
|
|
55
|
+
export declare const runBuilds: ({ repoUrl, shouldVerifyRepoUrl, branch, actorConfigs, isLatest, dryRun, useDockerCache, }: RunBuildsOptions) => Promise<BuildData[]>;
|
|
35
56
|
export declare const deleteOldBuilds: (actorConfigs: ActorConfig[]) => Promise<void>;
|
|
36
57
|
export {};
|
|
37
58
|
//# sourceMappingURL=build.d.ts.map
|
package/dist/bin/build.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../bin/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,
|
|
1
|
+
{"version":3,"file":"build.d.ts","sourceRoot":"","sources":["../../bin/build.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,gBAAgB,MAAM,cAAc,CAAC;AAItD,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAYzD,eAAO,MAAM,2BAA2B,SAAS,CAAC;AAQlD;;;GAGG;AACH,eAAO,MAAM,qBAAqB,GAAI,eAAe,MAAM,EAAE,WAAW,gBAAgB,CAAC,KAAK;;;;;CAsB7F,CAAC;AAEF;;;;;;GAMG;AACH,eAAO,MAAM,kCAAkC,GAC3C,eAAe,MAAM,EACrB,gBAAgB,gBAAgB,CAAC,YAAY,GAAG,SAAS,EACzD,SAAS,MAAM,SAoBlB,CAAC;AAEF,qBAAa,YAAY;IAEjB,OAAO,CAAC,QAAQ,CAAC,WAAW;IAC5B,OAAO,CAAC,QAAQ,CAAC,aAAa;IAFlC,OAAO;IAKP,YAAY,QAAa,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAQtD;IAEF,uBAAuB;;;;;OAAoF;IAI3G,eAAe,GAAU,eAAe,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,CAY3E;IAGF,qBAAqB,GACjB,eAAe,MAAM,EACrB,cAAc,gBAAgB,CAAC,YAAY,EAC3C,UAAU,OAAO,EACjB,YAAY,gBAAgB,CAAC,KAAK,KACnC,OAAO,CAAC,SAAS,CAAC,CAmBnB;IAEF,oBAAoB,GAAU,SAAS,MAAM,KAAG,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,CAmB7E;IAEF,MAAM,CAAC,eAAe,GAAI,aAAa,WAAW,KAAG,YAAY,CAQ/D;IAEF;;;OAGG;IACG,eAAe,IAAI,OAAO,CAAC,IAAI,CAAC;CAsFzC;AAED,eAAO,MAAM,sBAAsB,GAC/B,eAAe,SAAS,EAAE,EAC1B,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,OAAO,MAAM,KACd,OAAO,CAAC,SAAS,EAAE,CAkBrB,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAC9B,cAAc,WAAW,EAAE,EAC3B,OAAO,MAAM,EACb,eAAe,CAAC,WAAW,EAAE,WAAW,EAAE,OAAO,EAAE,YAAY,KAAK,OAAO,CAAC,SAAS,CAAC,KACvF,OAAO,CAAC,SAAS,EAAE,CAarB,CAAC;AAGF,eAAO,MAAM,eAAe,GAAI,eAAe,MAAM,EAAE,eAAe,MAAM,KAAG,SAK7E,CAAC;AAEH,KAAK,gBAAgB,GAAG;IACpB,YAAY,EAAE,WAAW,EAAE,CAAC;IAC5B,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAEhB,mBAAmB,EAAE,OAAO,CAAC;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,OAAO,CAAC;IAChB,cAAc,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,eAAO,MAAM,SAAS,GAAU,2FAQ7B,gBAAgB,KAAG,OAAO,CAAC,SAAS,EAAE,CA2DxC,CAAC;AAEF,eAAO,MAAM,eAAe,GAAU,cAAc,WAAW,EAAE,kBAIhE,CAAC"}
|