@detergent-software/conductor 1.3.1-dev.1 → 1.4.0-dev.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +20 -0
- package/README.md +12 -2
- package/build/cli.js +8 -1
- package/build/cli.js.map +1 -1
- package/build/code-host-cli.js +55 -0
- package/build/code-host-cli.js.map +1 -1
- package/build/code-host.js +16 -5
- package/build/code-host.js.map +1 -1
- package/build/conditions.js +82 -17
- package/build/conditions.js.map +1 -1
- package/build/help.js +26 -1
- package/build/help.js.map +1 -1
- package/build/landing.js +2 -11
- package/build/landing.js.map +1 -1
- package/build/lib/providers/npm/stage.js +33 -2
- package/build/lib/providers/npm/stage.js.map +1 -1
- package/build/lib/providers/verdicts/runs.js +4 -4
- package/build/lib/providers/verdicts/runs.js.map +1 -1
- package/build/profile.js +34 -1
- package/build/profile.js.map +1 -1
- package/build/runs.js +208 -0
- package/build/runs.js.map +1 -0
- package/build/tracker-writes.js +67 -0
- package/build/tracker-writes.js.map +1 -0
- package/build/trackers.js +15 -0
- package/build/trackers.js.map +1 -1
- package/build/wait.js +1 -0
- package/build/wait.js.map +1 -1
- package/build/watchers/ado.js +34 -11
- package/build/watchers/ado.js.map +1 -1
- package/build/watchers/boards-writes.js +182 -34
- package/build/watchers/boards-writes.js.map +1 -1
- package/build/watchers/boards.js +7 -2
- package/build/watchers/boards.js.map +1 -1
- package/build/watchers/github.js +26 -9
- package/build/watchers/github.js.map +1 -1
- package/build/watchers/index.js +8 -1
- package/build/watchers/index.js.map +1 -1
- package/build/watchers/linear-writes.js +198 -0
- package/build/watchers/linear-writes.js.map +1 -0
- package/build/watchers/merge.js +53 -0
- package/build/watchers/merge.js.map +1 -0
- package/build/watchers/npm.js +7 -16
- package/build/watchers/npm.js.map +1 -1
- package/build/watchers/source.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/runs.ts"],"names":[],"mappings":"AAGA,+EAA+E;AAC/E,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,GAAG,MAAM,CAAC;AAYpC,MAAM,IAAI,GAAG,CAAC,IAAmB,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC;AAEjG,kFAAkF;AAClF,2DAA2D;AAC3D,MAAM,UAAU,SAAS,CAAC,QAAkB,EAAE,IAAY;IACxD,OAAO,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;AACtH,CAAC;AAED,iGAAiG;AACjG,6BAA6B;AAC7B,MAAM,UAAU,cAAc,CAAC,KAAwB,EAAE,SAA8B;IACrF,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QACxB,MAAM,KAAK,GAAG,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC;QACrB,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;QAC5C,MAAM,KAAK,GAAG,SAAS;aACpB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;aACxB,IAAI,EAAE;aACN,IAAI,CAAC,IAAI,CAAC,CAAC;QACd,MAAM,IAAI,KAAK,CACb,KAAK,CAAC,MAAM,KAAK,CAAC;YAChB,CAAC,CAAC,SAAS,IAAI,yDAAyD,KAAK,EAAE;YAC/E,CAAC,CAAC,SAAS,IAAI,KAAK,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,wCAAwC,CACrG,CAAC;IACJ,CAAC,CAAC,CAAC;AACL,CAAC;AAED,
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../../../../src/lib/providers/verdicts/runs.ts"],"names":[],"mappings":"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"}
|
package/build/profile.js
CHANGED
|
@@ -11,11 +11,22 @@ export const PROFILE_FILE = join('.claude', 'conductor.json');
|
|
|
11
11
|
const name = z.string().regex(/^[a-z][a-z0-9-]*$/, 'lowercase letters, digits and dashes, starting with a letter');
|
|
12
12
|
const text = z.string().trim().min(1);
|
|
13
13
|
const port = z.int().min(1).max(65535);
|
|
14
|
+
// The state each phase note moves an item to, over the tracker kind's defaults (tracker-writes.ts);
|
|
15
|
+
// null leaves it as it is.
|
|
16
|
+
const transitions = z
|
|
17
|
+
.strictObject({ landed: text.nullable(), 'pr-opened': text.nullable(), started: text.nullable() })
|
|
18
|
+
.partial()
|
|
19
|
+
.optional();
|
|
14
20
|
// A repo's .claude/conductor.json: what the conductor needs to know about a project, as data.
|
|
15
21
|
// Each adapter kind is a discriminated union, so ADO Boards (Cadence) arrives as one more variant.
|
|
16
22
|
const profileFields = z.strictObject({
|
|
17
23
|
baseBranch: text,
|
|
18
|
-
|
|
24
|
+
// The CI that builds the project's repo: Azure Pipelines or GitHub Actions (`conduct runs`, `wait
|
|
25
|
+
// merge`). Each builds a repo of its own code host's kind for now.
|
|
26
|
+
ci: z.discriminatedUnion('kind', [
|
|
27
|
+
z.strictObject({ kind: z.literal('ado-pipelines') }),
|
|
28
|
+
z.strictObject({ kind: z.literal('github-actions') }),
|
|
29
|
+
]),
|
|
19
30
|
codeHost: z.discriminatedUnion('kind', [
|
|
20
31
|
z.strictObject({ kind: z.literal('ado'), organization: z.url(), project: text, repository: text }),
|
|
21
32
|
// A GitHub repo (ATK-428): its PRs, checks and auto-merge.
|
|
@@ -42,6 +53,12 @@ const profileFields = z.strictObject({
|
|
|
42
53
|
.refine((ports) => Object.keys(ports).every((key) => key === 'maxSlot' || !key.toLowerCase().replace(/[-_]/g, '').startsWith('maxslot')), 'maxSlot is spelt "maxSlot"'),
|
|
43
54
|
protocol: z.literal(PROTOCOL),
|
|
44
55
|
release: z.strictObject({ handoff: text }),
|
|
56
|
+
// The pipelines that stage a release for a merge (`conduct runs`, `wait merge`): `npm-stage` stages
|
|
57
|
+
// `package` on npm for a person's `npm stage approve`. `pipeline` names it as --for does: its YAML
|
|
58
|
+
// file name (release-cli), path or own name. Replaces work.releases at the protocol 2 cutover.
|
|
59
|
+
releases: z
|
|
60
|
+
.array(z.strictObject({ key: name, kind: z.literal('npm-stage'), package: text, pipeline: text }))
|
|
61
|
+
.default([]),
|
|
45
62
|
// Project rules (design note, section 9): checked before the machine's and the defaults, for
|
|
46
63
|
// this project's items only. They change by PR, and the daemon reloads them on save.
|
|
47
64
|
rules: z.array(ruleInputSchema).default([]),
|
|
@@ -60,6 +77,7 @@ const profileFields = z.strictObject({
|
|
|
60
77
|
// Done blocker has a comment containing `shipped` (the release skill's note). Off when absent.
|
|
61
78
|
releaseWait: z.strictObject({ label: text, shipped: text }).optional(),
|
|
62
79
|
team: text,
|
|
80
|
+
transitions,
|
|
63
81
|
// A new item a worker filed carries this label until Jason triages it: the queue never picks it,
|
|
64
82
|
// and the inbox says it is new (ATK-277). Off when absent.
|
|
65
83
|
triageLabel: text.optional(),
|
|
@@ -82,8 +100,11 @@ const profileFields = z.strictObject({
|
|
|
82
100
|
query: text,
|
|
83
101
|
// State names to types, over the built-in map for the Scrum, Agile, Basic and CMMI processes.
|
|
84
102
|
states: z.record(text, z.enum(['backlog', 'unstarted', 'started', 'completed', 'canceled'])).default({}),
|
|
103
|
+
transitions,
|
|
85
104
|
// As the Linear tracker's, a tag here.
|
|
86
105
|
triageLabel: text.optional(),
|
|
106
|
+
// The type of work item `conduct file` creates.
|
|
107
|
+
workItemType: text.default('Product Backlog Item'),
|
|
87
108
|
}),
|
|
88
109
|
]),
|
|
89
110
|
// Skill trains (train.ts, ATK-285): the GitHub repo whose PRs carrying a `<work skill> · Train`
|
|
@@ -146,6 +167,18 @@ export function notePrefixes(profile) {
|
|
|
146
167
|
const names = profile ? [profile.skills.work, ...profile.skills.aliases] : ['work-issue'];
|
|
147
168
|
return names.map((skill) => `${skill} · `);
|
|
148
169
|
}
|
|
170
|
+
// The project's releases: `releases`, else the work skill's `work.releases`, which protocol 1
|
|
171
|
+
// profiles still give.
|
|
172
|
+
export function releasesOf(profile) {
|
|
173
|
+
if (profile.releases.length > 0)
|
|
174
|
+
return profile.releases;
|
|
175
|
+
return profile.work.releases.map(({ key, package: pkg, pipeline }) => ({
|
|
176
|
+
key,
|
|
177
|
+
kind: 'npm-stage',
|
|
178
|
+
package: pkg,
|
|
179
|
+
pipeline,
|
|
180
|
+
}));
|
|
181
|
+
}
|
|
149
182
|
// The key prefix of the project's items: the Linear team (ATK-311), or the Boards key (CAD-1234).
|
|
150
183
|
export function trackerKey(profile) {
|
|
151
184
|
return profile.tracker.kind === 'linear' ? profile.tracker.team : profile.tracker.key;
|
package/build/profile.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AAElD,oGAAoG;AACpG,mFAAmF;AACnF,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,CAAC;AAC1B,MAAM,CAAC,MAAM,YAAY,GAAG,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;AAE9D,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,mBAAmB,EAAE,8DAA8D,CAAC,CAAC;AACnH,MAAM,IAAI,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;AACtC,MAAM,IAAI,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"profile.js","sourceRoot":"","sources":["../src/profile.ts"],"names":[],"mappings":"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"}
|
package/build/runs.js
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { repoKey, repoOf } from "./code-host.js";
|
|
2
|
+
import { ConductorError } from "./errors.js";
|
|
3
|
+
import { answersTo, NotFound, pipelinesNamed, ProviderError, releasedRuns, runsVerdict, } from "./lib/providers/index.js";
|
|
4
|
+
import { releasesOf } from "./profile.js";
|
|
5
|
+
import { outputOf } from "./run.js";
|
|
6
|
+
// The git of a CI that reads none (GitHub Actions only asks for the runs of a SHA).
|
|
7
|
+
export const NO_GIT = {
|
|
8
|
+
isAncestor: () => Promise.reject(new Error('this CI reads no git')),
|
|
9
|
+
show: () => Promise.reject(new Error('this CI reads no git')),
|
|
10
|
+
};
|
|
11
|
+
// How long a merge may show no run before that means none: Azure DevOps can list a run ten
|
|
12
|
+
// minutes after the merge, GitHub queues a push's runs within seconds (the work-item helper's).
|
|
13
|
+
export const GRACE_MINUTES = { ado: 15, github: 5 };
|
|
14
|
+
// Why `conduct runs` can't read the repo's CI, or null. Another repo is built by its own host's CI;
|
|
15
|
+
// the project's repo by the profile's `ci`, which must be its code host's kind for now (Azure
|
|
16
|
+
// Pipelines building a GitHub repo would need an organization the profile doesn't name).
|
|
17
|
+
export function ciRefusal(profile, repo) {
|
|
18
|
+
if (!isOwnRepo(profile, repo))
|
|
19
|
+
return null;
|
|
20
|
+
if ((profile.ci.kind === 'ado-pipelines') === (repo.host === 'ado'))
|
|
21
|
+
return null;
|
|
22
|
+
const host = repo.host === 'ado' ? 'an Azure DevOps' : 'a GitHub';
|
|
23
|
+
return `the profile's ci is ${profile.ci.kind} beside ${host} code host, which conduct can't read yet`;
|
|
24
|
+
}
|
|
25
|
+
// Why each failed run of the verdict failed. A log that can't be read says why in its note.
|
|
26
|
+
export async function failedLogs(ci, report) {
|
|
27
|
+
const failed = report.pipelines.flatMap((r) => r.state === 'failed' && r.run !== null ? [{ ...r, run: r.run }] : []);
|
|
28
|
+
return Promise.all(failed.map((r) => failureLogOf(ci, r.run, { pipeline: r.pipeline.name, result: r.result ?? null, url: r.url })));
|
|
29
|
+
}
|
|
30
|
+
// Why a run failed, or, when its log can't be read, why not in the note.
|
|
31
|
+
export function failureLogOf(ci, run, about) {
|
|
32
|
+
return ci.failureLog(run).catch((error) => ({
|
|
33
|
+
log: null,
|
|
34
|
+
note: error instanceof Error ? error.message : String(error),
|
|
35
|
+
pipeline: about.pipeline,
|
|
36
|
+
result: about.result,
|
|
37
|
+
run,
|
|
38
|
+
tasks: [],
|
|
39
|
+
url: about.url,
|
|
40
|
+
}));
|
|
41
|
+
}
|
|
42
|
+
// The facts of a merge from a checkout of its repo: its full SHA, when it merged (the committer
|
|
43
|
+
// date) and the files it changed against its first parent. The base is fetched once when the
|
|
44
|
+
// checkout hasn't got the commit yet.
|
|
45
|
+
export async function gitMergeFacts(git, dir, base, sha) {
|
|
46
|
+
const resolve = async () => {
|
|
47
|
+
const found = await git(['rev-parse', '--verify', '--quiet', `${sha}^{commit}`], dir);
|
|
48
|
+
return found.code === 0 ? found.stdout.trim() : null;
|
|
49
|
+
};
|
|
50
|
+
let full = await resolve();
|
|
51
|
+
if (full === null) {
|
|
52
|
+
const fetched = await git(['fetch', '--quiet', 'origin', base], dir);
|
|
53
|
+
if (fetched.code !== 0) {
|
|
54
|
+
throw new ConductorError(`commit ${sha} isn't in ${dir}, and git fetch origin ${base} failed`, [
|
|
55
|
+
outputOf(fetched, 300),
|
|
56
|
+
]);
|
|
57
|
+
}
|
|
58
|
+
full = await resolve();
|
|
59
|
+
}
|
|
60
|
+
if (full === null)
|
|
61
|
+
throw new ConductorError(`unknown commit ${sha}`, [`not in ${dir}, even after fetching ${base}`]);
|
|
62
|
+
const date = await git(['log', '-1', '--format=%cI', full], dir);
|
|
63
|
+
const diff = await git(['diff', '--name-only', `${full}^1`, full], dir);
|
|
64
|
+
if (date.code !== 0 || diff.code !== 0) {
|
|
65
|
+
throw new ConductorError(`git can't read merge ${full.slice(0, 8)}`, [
|
|
66
|
+
outputOf(date.code === 0 ? diff : date, 300),
|
|
67
|
+
]);
|
|
68
|
+
}
|
|
69
|
+
return {
|
|
70
|
+
changed: diff.stdout.split(/\r?\n/).filter(Boolean),
|
|
71
|
+
mergedAt: Date.parse(date.stdout.trim()),
|
|
72
|
+
sha: full,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
// The Azure Pipelines adapter's git: a pipeline's YAML at the merge, and whether a batched run's
|
|
76
|
+
// commit contains it (fetching the base once for a commit the checkout hasn't got).
|
|
77
|
+
export function gitReader(git, dir, base) {
|
|
78
|
+
return {
|
|
79
|
+
isAncestor: async (ancestor, sha) => {
|
|
80
|
+
const ask = () => git(['merge-base', '--is-ancestor', ancestor, sha], dir);
|
|
81
|
+
let answer = await ask();
|
|
82
|
+
// 1 is "not an ancestor"; anything else is a commit git doesn't know.
|
|
83
|
+
if (answer.code !== 0 && answer.code !== 1) {
|
|
84
|
+
await git(['fetch', '--quiet', 'origin', base], dir);
|
|
85
|
+
answer = await ask();
|
|
86
|
+
}
|
|
87
|
+
return answer.code === 0;
|
|
88
|
+
},
|
|
89
|
+
show: async (sha, path) => {
|
|
90
|
+
const shown = await git(['show', `${sha}:${path}`], dir);
|
|
91
|
+
return shown.code === 0 ? shown.stdout : null;
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
// The facts of a merge from its code host, for a CI that reads no git (GitHub Actions): its full
|
|
96
|
+
// SHA and when it merged.
|
|
97
|
+
export function hostMergeFacts(commit) {
|
|
98
|
+
return { changed: [], mergedAt: Date.parse(commit.date), sha: commit.sha };
|
|
99
|
+
}
|
|
100
|
+
// Whether a repo is the profile's own (Azure Repos names are case-insensitive, and so are GitHub's).
|
|
101
|
+
export function isOwnRepo(profile, repo) {
|
|
102
|
+
return repoKey(repo).toLowerCase() === repoKey(repoOf(profile)).toLowerCase();
|
|
103
|
+
}
|
|
104
|
+
// A merge's runs in a wake, one line: the verdict, what it is about, and each release's stage, such
|
|
105
|
+
// as `merge 1a2b3c4d succeeded; cli @detergent-software/atk@8.6.2-dev.1 staged: npm stage approve
|
|
106
|
+
// <id> --otp=<code>`.
|
|
107
|
+
export function mergeLine(report) {
|
|
108
|
+
const at = `merge ${report.sha.slice(0, 8)}`;
|
|
109
|
+
const named = (state) => report.pipelines
|
|
110
|
+
.filter((r) => r.state === state)
|
|
111
|
+
.map((r) => r.pipeline.name)
|
|
112
|
+
.join(', ');
|
|
113
|
+
let line;
|
|
114
|
+
switch (report.outcome) {
|
|
115
|
+
case 'cancelled':
|
|
116
|
+
line = `${at} cancelled: ${named('cancelled')}`;
|
|
117
|
+
break;
|
|
118
|
+
case 'failed':
|
|
119
|
+
line = `${at} failed: ${named('failed')} (conduct runs ${report.sha.slice(0, 8)} has the logs)`;
|
|
120
|
+
break;
|
|
121
|
+
case 'missing':
|
|
122
|
+
line = `${at} missing: ${named('not-queued')} never queued`;
|
|
123
|
+
break;
|
|
124
|
+
case 'waiting-for-approval':
|
|
125
|
+
line = `${at} waiting-for-approval: ${report.pipelines
|
|
126
|
+
.filter((r) => r.state === 'waiting-for-approval')
|
|
127
|
+
.map((r) => `${r.pipeline.name}${r.approvalStages?.length ? ` (${r.approvalStages.join(', ')})` : ''}`)
|
|
128
|
+
.join(', ')}`;
|
|
129
|
+
break;
|
|
130
|
+
default:
|
|
131
|
+
line = `${at} ${report.outcome}`;
|
|
132
|
+
}
|
|
133
|
+
const stages = Object.entries(report.stages ?? {}).flatMap(([key, stage]) => {
|
|
134
|
+
if ('error' in stage)
|
|
135
|
+
return [`${key} stage unread: ${stage.error}`];
|
|
136
|
+
if (!stage.stageId)
|
|
137
|
+
return [];
|
|
138
|
+
const version = `${stage.package ?? '?'}@${stage.version ?? '?'}`;
|
|
139
|
+
return [stage.published === true ? `${key} ${version} published` : `${key} ${version} staged: ${stage.approve}`];
|
|
140
|
+
});
|
|
141
|
+
return [line, ...stages].join('; ');
|
|
142
|
+
}
|
|
143
|
+
// The runs of a merge on its repo's CI and their verdict. `only` (--for) names pipelines the verdict
|
|
144
|
+
// comes from alone; on a CI that lists every pipeline (Azure Pipelines) an unknown name is refused.
|
|
145
|
+
// On GitHub a workflow that hasn't run yet can't be told from one that doesn't exist, so a name is
|
|
146
|
+
// refused only once the grace period has passed with runs of the merge, none of which answers to it.
|
|
147
|
+
export async function mergeRuns({ base, ci, facts, git, now, only, repo, }) {
|
|
148
|
+
const runs = await ci.runsForMerge(facts, { base, git });
|
|
149
|
+
if (only && ci.triggersKnown) {
|
|
150
|
+
try {
|
|
151
|
+
pipelinesNamed(only, runs.map((r) => r.pipeline));
|
|
152
|
+
}
|
|
153
|
+
catch (error) {
|
|
154
|
+
throw new ConductorError(error instanceof Error ? error.message : String(error));
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
const verdict = runsVerdict({
|
|
158
|
+
graceMs: GRACE_MINUTES[repo.host] * 60_000,
|
|
159
|
+
mergedAt: facts.mergedAt,
|
|
160
|
+
now,
|
|
161
|
+
only,
|
|
162
|
+
runs,
|
|
163
|
+
triggersKnown: ci.triggersKnown,
|
|
164
|
+
});
|
|
165
|
+
const unknown = (only ?? []).filter((name) => !runs.some((r) => answersTo(r.pipeline, name)));
|
|
166
|
+
if (!ci.triggersKnown && verdict.outcome === 'none' && runs.length > 0 && unknown.length > 0) {
|
|
167
|
+
throw new ConductorError(`--for ${unknown.join(', ')}: no run of this merge answers to it`, [
|
|
168
|
+
`its runs: ${runs.map((r) => r.pipeline.file ?? r.pipeline.name).join(', ')}`,
|
|
169
|
+
]);
|
|
170
|
+
}
|
|
171
|
+
return {
|
|
172
|
+
...(only ? { for: [...only] } : {}),
|
|
173
|
+
mergedAt: new Date(facts.mergedAt).toISOString(),
|
|
174
|
+
repo: repoKey(repo),
|
|
175
|
+
sha: facts.sha,
|
|
176
|
+
...verdict,
|
|
177
|
+
};
|
|
178
|
+
}
|
|
179
|
+
// What each of the project's releases staged for the merge: for each release run that succeeded
|
|
180
|
+
// (watched or not), the version, stage id, approve command and whether npm has it. Only the
|
|
181
|
+
// project's own repo has releases. A run whose logs the provider won't give (a lasting refusal, or
|
|
182
|
+
// no such log) is `{ run, error }`, so nobody takes it for nothing staged. Anything else (a
|
|
183
|
+
// watcher's spent budget, a lost login, a transient failure) is thrown, so the caller asks again.
|
|
184
|
+
export async function releaseStages(ci, profile, repo, report) {
|
|
185
|
+
if (!isOwnRepo(profile, repo))
|
|
186
|
+
return {};
|
|
187
|
+
const ran = releasedRuns([...report.pipelines, ...(report.others ?? [])], releasesOf(profile));
|
|
188
|
+
const read = async (run) => {
|
|
189
|
+
try {
|
|
190
|
+
const stage = await ci.staged(run);
|
|
191
|
+
if (stage === null)
|
|
192
|
+
return { note: 'no "staged with id" line in the run logs: nothing staged', run, stageId: null };
|
|
193
|
+
return {
|
|
194
|
+
run,
|
|
195
|
+
...stage,
|
|
196
|
+
...(stage.stageId ? { published: await ci.published(stage.package, stage.version) } : {}),
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
catch (error) {
|
|
200
|
+
if (error instanceof NotFound || (error instanceof ProviderError && !error.transient)) {
|
|
201
|
+
return { error: error.message, run };
|
|
202
|
+
}
|
|
203
|
+
throw error;
|
|
204
|
+
}
|
|
205
|
+
};
|
|
206
|
+
return Object.fromEntries(await Promise.all(ran.map(async ({ key, run }) => [key, await read(run)])));
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=runs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runs.js","sourceRoot":"","sources":["../src/runs.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// The tracker's writes for a worker (providers design note, section 5): the item's state follows its
|
|
2
|
+
// phase notes, its PR is linked, a PR body carries the tracker's reference, and follow-ups are filed.
|
|
3
|
+
// Rules never come here: they write labels alone (linear-labels.ts).
|
|
4
|
+
export const PHASES = ['started', 'pr-opened', 'landed'];
|
|
5
|
+
// The notes whose posting moves the item, by their heading's phase.
|
|
6
|
+
export const NOTE_PHASES = {
|
|
7
|
+
Landed: 'landed',
|
|
8
|
+
'PR opened': 'pr-opened',
|
|
9
|
+
Started: 'started',
|
|
10
|
+
};
|
|
11
|
+
const DEFAULTS = {
|
|
12
|
+
// Scrum's: a PR doesn't change a work item's state.
|
|
13
|
+
'ado-boards': { landed: 'Done', 'pr-opened': null, started: 'Committed' },
|
|
14
|
+
linear: { landed: 'Done', 'pr-opened': 'In Review', started: 'In Progress' },
|
|
15
|
+
};
|
|
16
|
+
// A follow-up's links: each key once, upper-cased, with a blocker left out of the related ones (a
|
|
17
|
+
// board refuses two links to one item in the create).
|
|
18
|
+
export function followUpLinks(followUp) {
|
|
19
|
+
const blockedBy = uniqueKeys(followUp.blockedBy);
|
|
20
|
+
return { blockedBy, related: uniqueKeys([followUp.from, ...followUp.related]).filter((k) => !blockedBy.includes(k)) };
|
|
21
|
+
}
|
|
22
|
+
// Whether a phase leaves an item in a state of this type as it is: a `started` never reopens a
|
|
23
|
+
// closed item (a resumed worker's late Started). A PR opened on one does reopen it, for a follow-up
|
|
24
|
+
// PR on a landed item.
|
|
25
|
+
export function keepsClosed(phase, type) {
|
|
26
|
+
return phase === 'started' && (type === 'completed' || type === 'canceled');
|
|
27
|
+
}
|
|
28
|
+
// The PR a worker's `pr` names (`ado:<repository>#<n>`, `github:<owner>/<repo>#<n>`) with its URL,
|
|
29
|
+
// an ADO one in the profile's organization and project; null when it isn't one. An ADO repository's
|
|
30
|
+
// name may have spaces.
|
|
31
|
+
export function linkedPr(ref, profile) {
|
|
32
|
+
const match = /^(ado|github):([^#]+)#(\d+)$/.exec(ref.trim());
|
|
33
|
+
if (!match?.[1] || !match[2] || !match[3])
|
|
34
|
+
return null;
|
|
35
|
+
const number = Number(match[3]);
|
|
36
|
+
if (match[1] === 'github') {
|
|
37
|
+
const [owner, repo, ...rest] = match[2].split('/');
|
|
38
|
+
if (!owner || !repo || rest.length > 0 || !/^[\w.-]+$/.test(owner) || !/^[\w.-]+$/.test(repo))
|
|
39
|
+
return null;
|
|
40
|
+
return { number, repo: { host: 'github', owner, repo }, url: `https://github.com/${owner}/${repo}/pull/${number}` };
|
|
41
|
+
}
|
|
42
|
+
const host = profile.codeHost;
|
|
43
|
+
if (host.kind !== 'ado')
|
|
44
|
+
return null;
|
|
45
|
+
const organization = host.organization.replace(/\/+$/, '');
|
|
46
|
+
return {
|
|
47
|
+
number,
|
|
48
|
+
repo: { host: 'ado', organization, project: host.project, repository: match[2] },
|
|
49
|
+
url: `${organization}/${encodeURIComponent(host.project)}/_git/${encodeURIComponent(match[2])}/pullrequest/${number}`,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
// The same link, whatever its case, surrounding space or trailing slash.
|
|
53
|
+
export function sameUrl(a, b) {
|
|
54
|
+
const clean = (url) => url.trim().replace(/\/+$/, '').toLowerCase();
|
|
55
|
+
return clean(a) === clean(b);
|
|
56
|
+
}
|
|
57
|
+
// The state each phase moves an item to: the profile's `tracker.transitions` over its kind's
|
|
58
|
+
// defaults. Null leaves the state as it is.
|
|
59
|
+
export function transitionsOf(profile) {
|
|
60
|
+
const { kind, transitions } = profile.tracker;
|
|
61
|
+
return { ...DEFAULTS[kind], ...transitions };
|
|
62
|
+
}
|
|
63
|
+
// Item keys, each once and upper-cased.
|
|
64
|
+
export function uniqueKeys(keys) {
|
|
65
|
+
return [...new Set(keys.map((k) => k.trim().toUpperCase()))];
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=tracker-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tracker-writes.js","sourceRoot":"","sources":["../src/tracker-writes.ts"],"names":[],"mappings":"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"}
|
package/build/trackers.js
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { boardsWrites } from "./watchers/boards-writes.js";
|
|
2
|
+
import { linearWrites } from "./watchers/linear-writes.js";
|
|
1
3
|
// Each tracker seam, sent to the adapter of the item's project's tracker kind (Linear without a
|
|
2
4
|
// profile, as before there were others).
|
|
3
5
|
export function routedBriefs(byKind) {
|
|
@@ -14,4 +16,17 @@ export function routedNotes(byKind) {
|
|
|
14
16
|
export function routedQueue(byKind) {
|
|
15
17
|
return { read: (profile, inFlight, budget) => byKind[profile.tracker.kind].read(profile, inFlight, budget) };
|
|
16
18
|
}
|
|
19
|
+
export function routedWrites(byKind) {
|
|
20
|
+
const of = (profile) => byKind[profile.tracker.kind];
|
|
21
|
+
return {
|
|
22
|
+
file: (followUp, profile) => of(profile).file(followUp, profile),
|
|
23
|
+
linkPr: (item, pr, profile) => of(profile).linkPr(item, pr, profile),
|
|
24
|
+
prReference: (item, host, profile) => of(profile).prReference(item, host, profile),
|
|
25
|
+
transition: (item, phase, profile) => of(profile).transition(item, phase, profile),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
// The tracker writes as the projects' accounts, for the daemon and for a verb run in-process.
|
|
29
|
+
export function trackerWrites(options) {
|
|
30
|
+
return routedWrites({ 'ado-boards': boardsWrites(options), linear: linearWrites(options) });
|
|
31
|
+
}
|
|
17
32
|
//# sourceMappingURL=trackers.js.map
|
package/build/trackers.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trackers.js","sourceRoot":"","sources":["../src/trackers.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"trackers.js","sourceRoot":"","sources":["../src/trackers.ts"],"names":[],"mappings":"AASA,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,6BAA6B,CAAC;AAE3D,gGAAgG;AAChG,yCAAyC;AAEzC,MAAM,UAAU,YAAY,CAAC,MAAkD;IAC7E,OAAO,EAAE,IAAI,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AACvF,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAmD;IAC9E,OAAO;QACL,KAAK,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,OAAO,CAAC;KAC/G,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAkD;IAC5E,OAAO,EAAE,OAAO,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,QAAQ,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC,EAAE,CAAC;AACtH,CAAC;AAED,MAAM,UAAU,WAAW,CAAC,MAAkD;IAC5E,OAAO,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;AAC/G,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,MAAoD;IAC/E,MAAM,EAAE,GAAG,CAAC,OAAgB,EAAE,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC9D,OAAO;QACL,IAAI,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,OAAO,CAAC;QAChE,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC;QACpE,WAAW,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,OAAO,CAAC;QAClF,UAAU,EAAE,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC;KACnF,CAAC;AACJ,CAAC;AAED,8FAA8F;AAC9F,MAAM,UAAU,aAAa,CAAC,OAA2D;IACvF,OAAO,YAAY,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;AAC9F,CAAC"}
|
package/build/wait.js
CHANGED
|
@@ -115,6 +115,7 @@ export async function waitCommand(paths, args, options, io) {
|
|
|
115
115
|
sleep: io.sleep,
|
|
116
116
|
sources: io.sources ?? (credentials ? defaultSources(credentials) : []),
|
|
117
117
|
timeoutMs: timeoutMinutes * 60_000,
|
|
118
|
+
worktree: checkout,
|
|
118
119
|
});
|
|
119
120
|
if (resolution === null) {
|
|
120
121
|
io.out(`still waiting on ${formatCondition(condition)} after ${timeoutMinutes} min`);
|
package/build/wait.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../src/wait.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"wait.js","sourceRoot":"","sources":["../src/wait.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpD,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACvD,OAAO,EAAkB,eAAe,EAAE,SAAS,EAAE,QAAQ,EAAoB,MAAM,iBAAiB,CAAC;AACzG,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAoB,iBAAiB,EAAE,MAAM,cAAc,CAAC;AACnE,OAAO,EAAuB,QAAQ,EAAE,MAAM,YAAY,CAAC;AAC3D,OAAO,EAAgB,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AACnF,OAAO,EAAE,GAAG,EAAE,MAAM,UAAU,CAAC;AAC/B,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClE,OAAO,EAAe,MAAM,sBAAsB,CAAC;AAEnD,uGAAuG;AACvG,MAAM,CAAC,MAAM,uBAAuB,GAAG,EAAE,CAAC;AAC1C,iGAAiG;AACjG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,CAAC;AAqB3B,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC,CAAC;AACpE,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;AACpE,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;AAChD,MAAM,SAAS,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAE3F,4FAA4F;AAC5F,mGAAmG;AACnG,4DAA4D;AAC5D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,KAAqB,EACrB,QAAuB,EACvB,GAAuB;IAEvB,IAAI,OAAsB,CAAC;IAC3B,IAAI,CAAC;QACH,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,aAAa,CAAC;QACzC,OAAO,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC;IAC1C,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,KAAK,YAAY,eAAe;YAAE,OAAO,WAAW,CAAC;QACzD,IAAI,KAAK,YAAY,cAAc;YAAE,OAAO,aAAa,CAAC;QAC1D,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtB,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,IAAI,CAAC,CAAC,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;QACpH,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,MAAM,IAAI,cAAc,CAAC,cAAc,GAAG,aAAa,EAAE,CAAC,6BAA6B,CAAC,CAAC,CAAC;QAClH,OAAO,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;IAC1B,CAAC;IACD,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5F,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,GAAW;IAC3C,MAAM,MAAM,GAAG,MAAM,GAAG,CAAC,KAAK,EAAE,CAAC,WAAW,EAAE,iBAAiB,CAAC,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC;IAC9F,OAAO,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AAC1F,CAAC;AAED,4FAA4F;AAC5F,+FAA+F;AAC/F,4FAA4F;AAC5F,mGAAmG;AACnG,qDAAqD;AACrD,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,KAAqB,EACrB,IAAuB,EACvB,OAAoB,EACpB,EAAU;IAEV,MAAM,QAAQ,GAAG,MAAM,WAAW,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;IAC3C,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAEtD,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,KAAK,EAAE,QAAQ,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QACnE,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;YAC3B,gCAAgC;QAClC,CAAC;aAAM,IAAI,MAAM,KAAK,aAAa,IAAI,MAAM,KAAK,IAAI,EAAE,CAAC;YACvD,EAAE,CAAC,GAAG,CACJ,MAAM,KAAK,IAAI;gBACb,CAAC,CAAC,uFAAuF;gBACzF,CAAC,CAAC,mDAAmD,CACxD,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,uFAAuF;YACvF,oEAAoE;YACpE,MAAM,KAAK,GACT,OAAO,CAAC,MAAM,KAAK,SAAS;gBAC1B,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;gBAC/D,CAAC,CAAC,MAAM,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,CAAC;YAClG,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE;gBAC5C,IAAI,EAAE,EAAE,SAAS,EAAE,eAAe,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE;gBAClE,MAAM,EAAE,MAAM;gBACd,IAAI,EAAE,QAAQ;aACf,CAAC,CAAC;YACH,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;gBACnB,MAAM,KAAK,GAAG,SAAS,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;gBACxC,MAAM,IAAI,cAAc,CACtB,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,oBAAoB,MAAM,EAAE,EAC/D,KAAK,CAAC,IAAI,EAAE,OAAO,IAAI,EAAE,CAC1B,CAAC;YACJ,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACtC,EAAE,CAAC,GAAG,CACJ,cAAc,IAAI,CAAC,SAAS,UAAU,IAAI,CAAC,EAAE,QAAQ,MAAM,CAAC,IAAI,mEAAmE,CACpI,CAAC;YACF,OAAO,CAAC,CAAC;QACX,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;IACvD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC;IAC9D,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,uBAAuB,CAAC;IACzE,gFAAgF;IAChF,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3E,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;IAC1D,EAAE,CAAC,GAAG,CACJ,cAAc,eAAe,CAAC,SAAS,CAAC,wCAAwC,IAAI,CAAC,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC,gBAAgB,cAAc,MAAM,CAClJ,CAAC;IACF,wDAAwD;IACxD,MAAM,WAAW,GAAG,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,mBAAmB,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IAChG,IAAI,SAAS,CAAC,IAAI,KAAK,OAAO,IAAI,WAAW,EAAE,CAAC;QAC9C,MAAM,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC,OAAO,CAAC,CAAC;QAC3E,EAAE,CAAC,GAAG,CAAC,iBAAiB,OAAO,CAAC,KAAK,uBAAuB,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC;IACjF,CAAC;IACD,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC;QACnC,SAAS;QACT,UAAU;QACV,GAAG,EAAE,EAAE,CAAC,GAAG;QACX,SAAS;QACT,OAAO;QACP,MAAM,EAAE,EAAE,CAAC,GAAG;QACd,KAAK,EAAE,EAAE,CAAC,KAAK;QACf,OAAO,EAAE,EAAE,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,cAAc,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,SAAS,EAAE,cAAc,GAAG,MAAM;QAClC,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IACH,IAAI,UAAU,KAAK,IAAI,EAAE,CAAC;QACxB,EAAE,CAAC,GAAG,CAAC,oBAAoB,eAAe,CAAC,SAAS,CAAC,UAAU,cAAc,MAAM,CAAC,CAAC;QACrF,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,EAAE,CAAC,GAAG,CAAC,sBAAsB,UAAU,EAAE,CAAC,CAAC;IAC3C,OAAO,CAAC,CAAC;AACX,CAAC;AAED,2FAA2F;AAC3F,SAAS,MAAM,CAAC,QAAuB,EAAE,OAAuB;IAC9D,IAAI,QAAQ,KAAK,IAAI;QAAE,OAAO,IAAI,CAAC;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,IAAI,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC;IAC5D,MAAM,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACvD,OAAO,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,eAAe,IAAI,mBAAmB,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;AACxH,CAAC;AAED,sFAAsF;AACtF,SAAS,IAAI,CAAC,MAAqB,EAAE,SAAoB;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,SAAS,CAAC,CAAC;IACnC,IAAI,MAAM,KAAK,OAAO,IAAI,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC;IACvF,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,eAAe,GAAG,IAAI,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;AACxF,CAAC;AAED,sGAAsG;AACtG,SAAS,SAAS,CAAC,QAAgB;IACjC,OAAO,UAAU,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AACzF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,KAAqB,EAAE,OAAe;IACrE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,CAAC,CAAC;IACpF,IAAI,MAAM,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IAChC,OAAO,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,EAAE,OAAO,IAAI,IAAI,CAAC;AAC5F,CAAC"}
|
package/build/watchers/ado.js
CHANGED
|
@@ -1,28 +1,36 @@
|
|
|
1
|
+
import { runGit } from "../checkout.js";
|
|
2
|
+
import { bindCi } from "../code-host.js";
|
|
1
3
|
import { adoCodeHost, adoCodeHostWrites, adoHttp, adoPipelines, adoSend, checksSettled, needsAnswer, prVerdict, } from "../lib/providers/index.js";
|
|
2
4
|
import { notePrefixes } from "../profile.js";
|
|
5
|
+
import { gitMergeFacts, gitReader } from "../runs.js";
|
|
3
6
|
import { boardsWaits } from "./boards.js";
|
|
7
|
+
import { checkMerge, factsCache } from "./merge.js";
|
|
4
8
|
import { BudgetSpent, checksLine, perPass, perWait, spend, untilSpent, verdictLine, WaitProblem, } from "./source.js";
|
|
5
9
|
export {} from "./ado-api.js";
|
|
6
|
-
// ADO PRs (verdict, merged, checks, comment)
|
|
7
|
-
// Repos and Azure Pipelines adapters, and the waits on ADO Boards items
|
|
8
|
-
// them share one budget. The organization and project come from the
|
|
9
|
-
// the az token from its project's tenant. A pass reads each PR once,
|
|
10
|
-
// threads only when a wait needs them. A PR wait whose condition doesn't
|
|
11
|
-
// merge state, so a conflict with the base branch, which no build runs
|
|
12
|
-
// (conflicts.ts). A verdict wait on a landing `conduct land` armed keeps it
|
|
13
|
-
// an expired build queued again, a cleared vote restored (`kept`, which the
|
|
14
|
-
|
|
10
|
+
// ADO PRs (verdict, merged, checks, comment), pipeline runs (done) and a merge's runs (merge), read
|
|
11
|
+
// through the providers' Azure Repos and Azure Pipelines adapters, and the waits on ADO Boards items
|
|
12
|
+
// (approval, item), so all of them share one budget. The organization and project come from the
|
|
13
|
+
// waiting worker's profile, and the az token from its project's tenant. A pass reads each PR once,
|
|
14
|
+
// and its evaluations and threads only when a wait needs them. A PR wait whose condition doesn't
|
|
15
|
+
// hold yet reports the PR's merge state, so a conflict with the base branch, which no build runs
|
|
16
|
+
// on, can wake its worker (conflicts.ts). A verdict wait on a landing `conduct land` armed keeps it
|
|
17
|
+
// armed while it waits: an expired build queued again, a cleared vote restored (`kept`, which the
|
|
18
|
+
// watchers log). A merge wait reads the merge's git in the worker's worktree, once.
|
|
19
|
+
export function adoSource({ credentials, fetch: fetcher = globalThis.fetch, git = runGit, now = () => Date.now(), }) {
|
|
15
20
|
const boards = boardsWaits({ credentials, fetch: fetcher });
|
|
16
21
|
// The expired builds each verdict wait has queued again, so none is queued twice.
|
|
17
22
|
const requeued = new Map();
|
|
23
|
+
const merges = factsCache();
|
|
18
24
|
return {
|
|
19
25
|
check: async (waits, budget) => {
|
|
20
26
|
const outcomes = new Map();
|
|
21
|
-
// A wait that is no longer open (resolved, cancelled, its worker retired) forgets its requeues
|
|
27
|
+
// A wait that is no longer open (resolved, cancelled, its worker retired) forgets its requeues
|
|
28
|
+
// and its merge's facts.
|
|
22
29
|
const open = new Set(waits.map((w) => w.id));
|
|
23
30
|
for (const id of requeued.keys())
|
|
24
31
|
if (!open.has(id))
|
|
25
32
|
requeued.delete(id);
|
|
33
|
+
merges.forget(open);
|
|
26
34
|
// One client per account this pass, each URL asked once. A retry with a renewed token takes
|
|
27
35
|
// one more request from the budget.
|
|
28
36
|
const clients = new Map();
|
|
@@ -44,11 +52,26 @@ export function adoSource({ credentials, fetch: fetcher = globalThis.fetch, }) {
|
|
|
44
52
|
await untilSpent(async () => {
|
|
45
53
|
for (const wait of waits) {
|
|
46
54
|
const c = wait.condition;
|
|
47
|
-
if (
|
|
55
|
+
if (c.kind !== 'run' && !((c.kind === 'pr' || c.kind === 'merge') && c.host === 'ado'))
|
|
48
56
|
continue;
|
|
49
57
|
await perWait(outcomes, wait.id, async () => {
|
|
50
58
|
const repo = repoOf(wait.profile);
|
|
51
59
|
const { ci, host, writes } = clientOf(wait.profile);
|
|
60
|
+
if (c.kind === 'merge') {
|
|
61
|
+
const { worktree } = wait;
|
|
62
|
+
const base = wait.profile?.baseBranch;
|
|
63
|
+
if (!worktree || !base)
|
|
64
|
+
throw new WaitProblem("the waiting worker has no worktree to read the merge's git in");
|
|
65
|
+
return checkMerge({
|
|
66
|
+
ci: bindCi(repo, ci, fetcher),
|
|
67
|
+
condition: c,
|
|
68
|
+
facts: merges.of(wait.id, () => gitMergeFacts(git, worktree, base, c.sha)),
|
|
69
|
+
git: { base, reader: gitReader(git, worktree, base) },
|
|
70
|
+
now: now(),
|
|
71
|
+
profile: wait.profile,
|
|
72
|
+
repo,
|
|
73
|
+
});
|
|
74
|
+
}
|
|
52
75
|
if (c.kind === 'run') {
|
|
53
76
|
const run = await ci.run({ id: c.id, repo });
|
|
54
77
|
return run.status === 'completed' ? `run ${c.pipeline} ${c.id} ${run.result ?? 'completed'}` : null;
|