@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
|
@@ -0,0 +1,198 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { ConductorError } from "../errors.js";
|
|
3
|
+
import { followUpLinks, keepsClosed, sameUrl, transitionsOf, } from "../tracker-writes.js";
|
|
4
|
+
import { linearApi } from "./linear-api.js";
|
|
5
|
+
// Linear's side of the tracker writes, with the project's key (which needs write access, as for
|
|
6
|
+
// notes): the state and assignee by `issueUpdate`, a PR as an attachment, a follow-up by
|
|
7
|
+
// `issueCreate` and its relations. Linear has no ADO integration, so a PR on either host is an
|
|
8
|
+
// attachment, and a PR body carries nothing for it.
|
|
9
|
+
const STATES = 'states(first: 100) { nodes { id name type } }';
|
|
10
|
+
const TRANSITION_READ = `query TransitionIssue($id: String!) {
|
|
11
|
+
viewer { id }
|
|
12
|
+
issue(id: $id) { id state { id name } assignee { id } team { ${STATES} } }
|
|
13
|
+
}`;
|
|
14
|
+
const UPDATE = `mutation Transition($id: String!, $input: IssueUpdateInput!) {
|
|
15
|
+
issueUpdate(id: $id, input: $input) { success issue { state { name } assignee { id } } }
|
|
16
|
+
}`;
|
|
17
|
+
const ATTACHMENTS = 'query PrLinks($id: String!) { issue(id: $id) { id attachments(first: 100) { nodes { url } } } }';
|
|
18
|
+
const ATTACH = `mutation LinkPr($input: AttachmentCreateInput!) {
|
|
19
|
+
attachmentCreate(input: $input) { success attachment { id } }
|
|
20
|
+
}`;
|
|
21
|
+
const FILE_CONTEXT = `query FileContext($from: String!, $group: String!, $names: [String!]!) {
|
|
22
|
+
issue(id: $from) { id team { id ${STATES} } project { id } }
|
|
23
|
+
areas: issueLabels(first: 250, filter: { parent: { name: { eq: $group } } }) { nodes { id name team { id } } }
|
|
24
|
+
named: issueLabels(first: 50, filter: { name: { in: $names } }) { nodes { id name team { id } } }
|
|
25
|
+
}`;
|
|
26
|
+
const CREATE = `mutation File($input: IssueCreateInput!) {
|
|
27
|
+
issueCreate(input: $input) { success issue { id identifier url } }
|
|
28
|
+
}`;
|
|
29
|
+
const ISSUE_ID = 'query IssueId($id: String!) { issue(id: $id) { id } }';
|
|
30
|
+
const RELATE = `mutation Relate($input: IssueRelationCreateInput!) {
|
|
31
|
+
issueRelationCreate(input: $input) { success }
|
|
32
|
+
}`;
|
|
33
|
+
const state = z.object({ id: z.string(), name: z.string(), type: z.string() });
|
|
34
|
+
const label = z.object({ id: z.string(), name: z.string(), team: z.object({ id: z.string() }).nullable() });
|
|
35
|
+
const transitionRead = z.object({
|
|
36
|
+
issue: z
|
|
37
|
+
.object({
|
|
38
|
+
assignee: z.object({ id: z.string() }).nullable(),
|
|
39
|
+
id: z.string(),
|
|
40
|
+
state: z.object({ id: z.string(), name: z.string() }),
|
|
41
|
+
team: z.object({ states: z.object({ nodes: z.array(state) }) }),
|
|
42
|
+
})
|
|
43
|
+
.nullable(),
|
|
44
|
+
viewer: z.object({ id: z.string() }),
|
|
45
|
+
});
|
|
46
|
+
const updated = z.object({
|
|
47
|
+
issueUpdate: z.object({
|
|
48
|
+
issue: z
|
|
49
|
+
.object({ assignee: z.object({ id: z.string() }).nullable(), state: z.object({ name: z.string() }) })
|
|
50
|
+
.nullable(),
|
|
51
|
+
success: z.boolean(),
|
|
52
|
+
}),
|
|
53
|
+
});
|
|
54
|
+
const attachments = z.object({
|
|
55
|
+
issue: z
|
|
56
|
+
.object({ attachments: z.object({ nodes: z.array(z.object({ url: z.string() })) }), id: z.string() })
|
|
57
|
+
.nullable(),
|
|
58
|
+
});
|
|
59
|
+
const attached = z.object({ attachmentCreate: z.object({ success: z.boolean() }) });
|
|
60
|
+
const fileContext = z.object({
|
|
61
|
+
areas: z.object({ nodes: z.array(label) }),
|
|
62
|
+
issue: z
|
|
63
|
+
.object({
|
|
64
|
+
id: z.string(),
|
|
65
|
+
project: z.object({ id: z.string() }).nullable(),
|
|
66
|
+
team: z.object({ id: z.string(), states: z.object({ nodes: z.array(state) }) }),
|
|
67
|
+
})
|
|
68
|
+
.nullable(),
|
|
69
|
+
named: z.object({ nodes: z.array(label) }),
|
|
70
|
+
});
|
|
71
|
+
const created = z.object({
|
|
72
|
+
issueCreate: z.object({
|
|
73
|
+
issue: z.object({ id: z.string(), identifier: z.string(), url: z.string().nullable() }).nullable(),
|
|
74
|
+
success: z.boolean(),
|
|
75
|
+
}),
|
|
76
|
+
});
|
|
77
|
+
const issueId = z.object({ issue: z.object({ id: z.string() }).nullable() });
|
|
78
|
+
const related = z.object({ issueRelationCreate: z.object({ success: z.boolean() }) });
|
|
79
|
+
export function linearWrites(options) {
|
|
80
|
+
const request = linearApi(options);
|
|
81
|
+
const ask = (query, variables, profile) => request(query, variables, profile.name);
|
|
82
|
+
return {
|
|
83
|
+
file: async (followUp, profile) => {
|
|
84
|
+
const tracker = linearTracker(profile);
|
|
85
|
+
const names = [tracker.triageLabel, followUp.human ? tracker.humanLabel : undefined].flatMap((n) => n === undefined ? [] : [n]);
|
|
86
|
+
const context = fileContext.parse(await ask(FILE_CONTEXT, { from: followUp.from, group: tracker.areaLabelGroup, names }, profile));
|
|
87
|
+
if (!context.issue)
|
|
88
|
+
throw new ConductorError(`Linear has no issue ${followUp.from}`);
|
|
89
|
+
const team = context.issue.team;
|
|
90
|
+
// The team's label, else a workspace one.
|
|
91
|
+
const pick = (nodes, name) => {
|
|
92
|
+
const named = nodes.filter((l) => l.name.toLowerCase() === name.toLowerCase());
|
|
93
|
+
return named.find((l) => l.team?.id === team.id) ?? named.find((l) => l.team === null);
|
|
94
|
+
};
|
|
95
|
+
const area = pick(context.areas.nodes, followUp.area);
|
|
96
|
+
if (!area) {
|
|
97
|
+
const known = [...new Set(context.areas.nodes.map((l) => l.name))].sort();
|
|
98
|
+
throw new ConductorError(`"${followUp.area}" isn't an Area: a label of the ${tracker.areaLabelGroup} group`, [
|
|
99
|
+
`the Areas: ${known.join(', ') || 'none'}`,
|
|
100
|
+
]);
|
|
101
|
+
}
|
|
102
|
+
const others = names.map((name) => {
|
|
103
|
+
const found = pick(context.named.nodes, name);
|
|
104
|
+
if (!found)
|
|
105
|
+
throw new ConductorError(`Linear has no label "${name}" for ${followUp.from}'s team: create it first`);
|
|
106
|
+
return found.id;
|
|
107
|
+
});
|
|
108
|
+
const backlog = team.states.nodes.find((s) => s.type === 'backlog') ?? team.states.nodes.find((s) => s.type === 'unstarted');
|
|
109
|
+
if (!backlog)
|
|
110
|
+
throw new ConductorError(`${followUp.from}'s team has no Backlog or Todo state`);
|
|
111
|
+
const input = {
|
|
112
|
+
description: followUp.body,
|
|
113
|
+
labelIds: [area.id, ...others],
|
|
114
|
+
stateId: backlog.id,
|
|
115
|
+
teamId: team.id,
|
|
116
|
+
title: followUp.title,
|
|
117
|
+
...(context.issue.project ? { projectId: context.issue.project.id } : {}),
|
|
118
|
+
};
|
|
119
|
+
const { issueCreate } = created.parse(await ask(CREATE, { input }, profile));
|
|
120
|
+
if (!issueCreate.success || !issueCreate.issue)
|
|
121
|
+
throw new ConductorError("Linear didn't create the follow-up");
|
|
122
|
+
const filed = { key: issueCreate.issue.identifier, url: issueCreate.issue.url, warnings: [] };
|
|
123
|
+
// The issue exists now: a relation that doesn't take is a warning on it, not a failed filing.
|
|
124
|
+
const relate = async (other, input, said) => {
|
|
125
|
+
try {
|
|
126
|
+
const found = issueId.parse(await ask(ISSUE_ID, { id: other }, profile)).issue;
|
|
127
|
+
if (!found)
|
|
128
|
+
throw new Error(`Linear has no issue ${other}`);
|
|
129
|
+
const { issueRelationCreate } = related.parse(await ask(RELATE, { input: input(found.id) }, profile));
|
|
130
|
+
if (!issueRelationCreate.success)
|
|
131
|
+
throw new Error("Linear didn't create it");
|
|
132
|
+
}
|
|
133
|
+
catch (error) {
|
|
134
|
+
filed.warnings.push(`${said} ${other}: ${error instanceof Error ? error.message : String(error)}`);
|
|
135
|
+
}
|
|
136
|
+
};
|
|
137
|
+
const newId = issueCreate.issue.id;
|
|
138
|
+
const links = followUpLinks(followUp);
|
|
139
|
+
for (const other of links.related) {
|
|
140
|
+
await relate(other, (id) => ({ issueId: newId, relatedIssueId: id, type: 'related' }), 'not related to');
|
|
141
|
+
}
|
|
142
|
+
// "A blocks B" is stored on A, the blocker.
|
|
143
|
+
for (const other of links.blockedBy) {
|
|
144
|
+
await relate(other, (id) => ({ issueId: id, relatedIssueId: newId, type: 'blocks' }), 'not blocked by');
|
|
145
|
+
}
|
|
146
|
+
return filed;
|
|
147
|
+
},
|
|
148
|
+
linkPr: async (item, pr, profile) => {
|
|
149
|
+
const { issue } = attachments.parse(await ask(ATTACHMENTS, { id: item }, profile));
|
|
150
|
+
if (!issue)
|
|
151
|
+
throw new ConductorError(`Linear has no issue ${item}`);
|
|
152
|
+
if (issue.attachments.nodes.some((a) => sameUrl(a.url, pr.url)))
|
|
153
|
+
return 'already';
|
|
154
|
+
const input = { issueId: issue.id, title: `PR ${pr.number}`, url: pr.url };
|
|
155
|
+
const { attachmentCreate } = attached.parse(await ask(ATTACH, { input }, profile));
|
|
156
|
+
if (!attachmentCreate.success)
|
|
157
|
+
throw new ConductorError(`Linear didn't attach ${pr.url} to ${item}`);
|
|
158
|
+
return 'linked';
|
|
159
|
+
},
|
|
160
|
+
prReference: () => null,
|
|
161
|
+
transition: async (item, phase, profile) => {
|
|
162
|
+
const name = transitionsOf(profile)[phase];
|
|
163
|
+
// A phase with no state moves nothing, but `started` still assigns.
|
|
164
|
+
if (name === null && phase !== 'started')
|
|
165
|
+
return { result: 'skipped', state: null };
|
|
166
|
+
const { issue, viewer } = transitionRead.parse(await ask(TRANSITION_READ, { id: item }, profile));
|
|
167
|
+
if (!issue)
|
|
168
|
+
throw new ConductorError(`Linear has no issue ${item}`);
|
|
169
|
+
const current = issue.team.states.nodes.find((s) => s.id === issue.state.id);
|
|
170
|
+
if (keepsClosed(phase, current?.type ?? null))
|
|
171
|
+
return { result: 'kept', state: issue.state.name };
|
|
172
|
+
const target = name === null ? null : issue.team.states.nodes.find((s) => s.name.toLowerCase() === name.toLowerCase());
|
|
173
|
+
if (target === undefined) {
|
|
174
|
+
throw new ConductorError(`${item}'s team has no state "${name ?? ''}"`, [
|
|
175
|
+
`its states: ${issue.team.states.nodes.map((s) => s.name).join(', ')}`,
|
|
176
|
+
]);
|
|
177
|
+
}
|
|
178
|
+
const assign = phase === 'started' && issue.assignee?.id !== viewer.id;
|
|
179
|
+
const move = target !== null && issue.state.id !== target.id;
|
|
180
|
+
if (!move && !assign)
|
|
181
|
+
return { result: target === null ? 'skipped' : 'already', state: target?.name ?? null };
|
|
182
|
+
const input = { ...(move ? { stateId: target.id } : {}), ...(assign ? { assigneeId: viewer.id } : {}) };
|
|
183
|
+
const { issueUpdate } = updated.parse(await ask(UPDATE, { id: issue.id, input }, profile));
|
|
184
|
+
const after = issueUpdate.issue;
|
|
185
|
+
if (!issueUpdate.success || (target !== null && after?.state.name !== target.name))
|
|
186
|
+
throw new ConductorError(`Linear didn't move ${item} to ${target?.name ?? 'its state'}`);
|
|
187
|
+
if (assign && after?.assignee?.id !== viewer.id)
|
|
188
|
+
throw new ConductorError(`Linear didn't assign ${item}`);
|
|
189
|
+
return { result: target === null ? 'skipped' : 'moved', state: target?.name ?? null };
|
|
190
|
+
},
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function linearTracker(profile) {
|
|
194
|
+
if (profile.tracker.kind !== 'linear')
|
|
195
|
+
throw new ConductorError(`project ${profile.name}'s tracker isn't Linear`);
|
|
196
|
+
return profile.tracker;
|
|
197
|
+
}
|
|
198
|
+
//# sourceMappingURL=linear-writes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"linear-writes.js","sourceRoot":"","sources":["../../src/watchers/linear-writes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAEL,aAAa,EACb,WAAW,EACX,OAAO,EAEP,aAAa,GACd,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,SAAS,EAAyB,MAAM,iBAAiB,CAAC;AAEnE,gGAAgG;AAChG,yFAAyF;AACzF,+FAA+F;AAC/F,oDAAoD;AAEpD,MAAM,MAAM,GAAG,+CAA+C,CAAC;AAE/D,MAAM,eAAe,GAAG;;iEAEyC,MAAM;EACrE,CAAC;AACH,MAAM,MAAM,GAAG;;EAEb,CAAC;AACH,MAAM,WAAW,GAAG,iGAAiG,CAAC;AACtH,MAAM,MAAM,GAAG;;EAEb,CAAC;AACH,MAAM,YAAY,GAAG;oCACe,MAAM;;;EAGxC,CAAC;AACH,MAAM,MAAM,GAAG;;EAEb,CAAC;AACH,MAAM,QAAQ,GAAG,uDAAuD,CAAC;AACzE,MAAM,MAAM,GAAG;;EAEb,CAAC;AAEH,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;AAC/E,MAAM,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAE5G,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;QACjD,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;QACrD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;KAChE,CAAC;SACD,QAAQ,EAAE;IACb,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;CACrC,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC;aACL,MAAM,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,EAAE,CAAC;aACpG,QAAQ,EAAE;QACb,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;CACH,CAAC,CAAC;AACH,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC;SACL,MAAM,CAAC,EAAE,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC;SACpG,QAAQ,EAAE;CACd,CAAC,CAAC;AACH,MAAM,QAAQ,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AACpF,MAAM,WAAW,GAAG,CAAC,CAAC,MAAM,CAAC;IAC3B,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAC1C,KAAK,EAAE,CAAC;SACL,MAAM,CAAC;QACN,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE;QACd,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;QAChD,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,CAAC;KAChF,CAAC;SACD,QAAQ,EAAE;IACb,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;CAC3C,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IACvB,WAAW,EAAE,CAAC,CAAC,MAAM,CAAC;QACpB,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE;QAClG,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE;KACrB,CAAC;CACH,CAAC,CAAC;AACH,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;AAC7E,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,EAAE,mBAAmB,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC;AAEtF,MAAM,UAAU,YAAY,CAAC,OAAyB;IACpD,MAAM,OAAO,GAAG,SAAS,CAAC,OAAO,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,CAAC,KAAa,EAAE,SAAkC,EAAE,OAAgB,EAAE,EAAE,CAClF,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1C,OAAO;QACL,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,EAAE;YAChC,MAAM,OAAO,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC;YACvC,MAAM,KAAK,GAAG,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CACjG,CAAC,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC3B,CAAC;YACF,MAAM,OAAO,GAAG,WAAW,CAAC,KAAK,CAC/B,MAAM,GAAG,CAAC,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,EAAE,OAAO,CAAC,cAAc,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAChG,CAAC;YACF,IAAI,CAAC,OAAO,CAAC,KAAK;gBAAE,MAAM,IAAI,cAAc,CAAC,uBAAuB,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;YACrF,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;YAChC,0CAA0C;YAC1C,MAAM,IAAI,GAAG,CAAC,KAAwC,EAAE,IAAY,EAAE,EAAE;gBACtE,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;gBAC/E,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;YACzF,CAAC,CAAC;YACF,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC;YACtD,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;gBAC1E,MAAM,IAAI,cAAc,CAAC,IAAI,QAAQ,CAAC,IAAI,mCAAmC,OAAO,CAAC,cAAc,QAAQ,EAAE;oBAC3G,cAAc,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,MAAM,EAAE;iBAC3C,CAAC,CAAC;YACL,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;gBAChC,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;gBAC9C,IAAI,CAAC,KAAK;oBACR,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,SAAS,QAAQ,CAAC,IAAI,0BAA0B,CAAC,CAAC;gBACzG,OAAO,KAAK,CAAC,EAAE,CAAC;YAClB,CAAC,CAAC,CAAC;YACH,MAAM,OAAO,GACX,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;YAC/G,IAAI,CAAC,OAAO;gBAAE,MAAM,IAAI,cAAc,CAAC,GAAG,QAAQ,CAAC,IAAI,sCAAsC,CAAC,CAAC;YAC/F,MAAM,KAAK,GAAG;gBACZ,WAAW,EAAE,QAAQ,CAAC,IAAI;gBAC1B,QAAQ,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,MAAM,CAAC;gBAC9B,OAAO,EAAE,OAAO,CAAC,EAAE;gBACnB,MAAM,EAAE,IAAI,CAAC,EAAE;gBACf,KAAK,EAAE,QAAQ,CAAC,KAAK;gBACrB,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC;YACF,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAC7E,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,WAAW,CAAC,KAAK;gBAAE,MAAM,IAAI,cAAc,CAAC,oCAAoC,CAAC,CAAC;YAC/G,MAAM,KAAK,GAAU,EAAE,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,UAAU,EAAE,GAAG,EAAE,WAAW,CAAC,KAAK,CAAC,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC;YACrG,8FAA8F;YAC9F,MAAM,MAAM,GAAG,KAAK,EAAE,KAAa,EAAE,KAA8C,EAAE,IAAY,EAAE,EAAE;gBACnG,IAAI,CAAC;oBACH,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC;oBAC/E,IAAI,CAAC,KAAK;wBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,EAAE,CAAC,CAAC;oBAC5D,MAAM,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;oBACtG,IAAI,CAAC,mBAAmB,CAAC,OAAO;wBAAE,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;gBAC/E,CAAC;gBAAC,OAAO,KAAK,EAAE,CAAC;oBACf,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,IAAI,IAAI,KAAK,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;gBACrG,CAAC;YACH,CAAC,CAAC;YACF,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,EAAE,CAAC;YACnC,MAAM,KAAK,GAAG,aAAa,CAAC,QAAQ,CAAC,CAAC;YACtC,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;gBAClC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,cAAc,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC3G,CAAC;YACD,4CAA4C;YAC5C,KAAK,MAAM,KAAK,IAAI,KAAK,CAAC,SAAS,EAAE,CAAC;gBACpC,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,cAAc,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,EAAE,gBAAgB,CAAC,CAAC;YAC1G,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;QACD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE;YAClC,MAAM,EAAE,KAAK,EAAE,GAAG,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,WAAW,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YACnF,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,cAAc,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YACpE,IAAI,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAC;YAClF,MAAM,KAAK,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE,GAAG,EAAE,EAAE,CAAC,GAAG,EAAE,CAAC;YAC3E,MAAM,EAAE,gBAAgB,EAAE,GAAG,QAAQ,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YACnF,IAAI,CAAC,gBAAgB,CAAC,OAAO;gBAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,EAAE,CAAC,GAAG,OAAO,IAAI,EAAE,CAAC,CAAC;YACrG,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,WAAW,EAAE,GAAG,EAAE,CAAC,IAAI;QACvB,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,EAAE;YACzC,MAAM,IAAI,GAAG,aAAa,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3C,oEAAoE;YACpE,IAAI,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS;gBAAE,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;YACpF,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,cAAc,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,eAAe,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAClG,IAAI,CAAC,KAAK;gBAAE,MAAM,IAAI,cAAc,CAAC,uBAAuB,IAAI,EAAE,CAAC,CAAC;YACpE,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC7E,IAAI,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,IAAI,IAAI,CAAC;gBAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YAClG,MAAM,MAAM,GACV,IAAI,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1G,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,cAAc,CAAC,GAAG,IAAI,yBAAyB,IAAI,IAAI,EAAE,GAAG,EAAE;oBACtE,eAAe,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACvE,CAAC,CAAC;YACL,CAAC;YACD,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;YACvE,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,EAAE,KAAK,MAAM,CAAC,EAAE,CAAC;YAC7D,IAAI,CAAC,IAAI,IAAI,CAAC,MAAM;gBAAE,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;YAC9G,MAAM,KAAK,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC;YACxG,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,KAAK,CAAC,EAAE,EAAE,KAAK,EAAE,EAAE,OAAO,CAAC,CAAC,CAAC;YAC3F,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAChC,IAAI,CAAC,WAAW,CAAC,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,IAAI,KAAK,EAAE,KAAK,CAAC,IAAI,KAAK,MAAM,CAAC,IAAI,CAAC;gBAChF,MAAM,IAAI,cAAc,CAAC,sBAAsB,IAAI,OAAO,MAAM,EAAE,IAAI,IAAI,WAAW,EAAE,CAAC,CAAC;YAC3F,IAAI,MAAM,IAAI,KAAK,EAAE,QAAQ,EAAE,EAAE,KAAK,MAAM,CAAC,EAAE;gBAAE,MAAM,IAAI,cAAc,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;YAC1G,OAAO,EAAE,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,IAAI,IAAI,EAAE,CAAC;QACxF,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CAAC,OAAgB;IACrC,IAAI,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,QAAQ;QAAE,MAAM,IAAI,cAAc,CAAC,WAAW,OAAO,CAAC,IAAI,yBAAyB,CAAC,CAAC;IAClH,OAAO,OAAO,CAAC,OAAO,CAAC;AACzB,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { LoginNeeded } from "../credentials.js";
|
|
2
|
+
import { ConductorError } from "../errors.js";
|
|
3
|
+
import { mergeLine, mergeRuns, NO_GIT, releaseStages } from "../runs.js";
|
|
4
|
+
import { WaitProblem } from "./source.js";
|
|
5
|
+
// The wake line once the merge's runs settled, or null while they still settle. Without a profile
|
|
6
|
+
// (a GitHub repo waited on from no project's checkout) there are no releases to read.
|
|
7
|
+
export async function checkMerge(check) {
|
|
8
|
+
const { ci, condition, profile, repo } = check;
|
|
9
|
+
let report;
|
|
10
|
+
try {
|
|
11
|
+
report = await mergeRuns({
|
|
12
|
+
// Only Azure Pipelines reads the base, with its git; GitHub Actions asks for the SHA's runs.
|
|
13
|
+
base: check.git?.base ?? '',
|
|
14
|
+
ci,
|
|
15
|
+
facts: await check.facts(),
|
|
16
|
+
git: check.git?.reader ?? NO_GIT,
|
|
17
|
+
now: check.now,
|
|
18
|
+
only: condition.only,
|
|
19
|
+
repo,
|
|
20
|
+
});
|
|
21
|
+
}
|
|
22
|
+
catch (error) {
|
|
23
|
+
// A merge git doesn't know, or a --for name no pipeline answers to, is this wait's problem; a
|
|
24
|
+
// lost login stays one (perWait), and anything else is the API's.
|
|
25
|
+
if (error instanceof ConductorError && !(error instanceof LoginNeeded))
|
|
26
|
+
throw new WaitProblem(error.message);
|
|
27
|
+
throw error;
|
|
28
|
+
}
|
|
29
|
+
if (report.outcome === 'waiting')
|
|
30
|
+
return null;
|
|
31
|
+
return mergeLine({ ...report, stages: profile ? await releaseStages(ci, profile, repo, report) : {} });
|
|
32
|
+
}
|
|
33
|
+
// Each wait's merge facts, read once: they don't change once the merge exists. A wait no longer
|
|
34
|
+
// open forgets them.
|
|
35
|
+
export function factsCache() {
|
|
36
|
+
const known = new Map();
|
|
37
|
+
return {
|
|
38
|
+
forget: (open) => {
|
|
39
|
+
for (const id of known.keys())
|
|
40
|
+
if (!open.has(id))
|
|
41
|
+
known.delete(id);
|
|
42
|
+
},
|
|
43
|
+
of: (wait, read) => async () => {
|
|
44
|
+
const found = known.get(wait);
|
|
45
|
+
if (found)
|
|
46
|
+
return found;
|
|
47
|
+
const facts = await read();
|
|
48
|
+
known.set(wait, facts);
|
|
49
|
+
return facts;
|
|
50
|
+
},
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=merge.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"merge.js","sourceRoot":"","sources":["../../src/watchers/merge.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAC;AAC9C,OAAO,EAAgB,SAAS,EAAoB,SAAS,EAAE,MAAM,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACzG,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAgB1C,kGAAkG;AAClG,sFAAsF;AACtF,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAAiB;IAChD,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC/C,IAAI,MAAmB,CAAC;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,SAAS,CAAC;YACvB,6FAA6F;YAC7F,IAAI,EAAE,KAAK,CAAC,GAAG,EAAE,IAAI,IAAI,EAAE;YAC3B,EAAE;YACF,KAAK,EAAE,MAAM,KAAK,CAAC,KAAK,EAAE;YAC1B,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,MAAM,IAAI,MAAM;YAChC,GAAG,EAAE,KAAK,CAAC,GAAG;YACd,IAAI,EAAE,SAAS,CAAC,IAAI;YACpB,IAAI;SACL,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,8FAA8F;QAC9F,kEAAkE;QAClE,IAAI,KAAK,YAAY,cAAc,IAAI,CAAC,CAAC,KAAK,YAAY,WAAW,CAAC;YAAE,MAAM,IAAI,WAAW,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC7G,MAAM,KAAK,CAAC;IACd,CAAC;IACD,IAAI,MAAM,CAAC,OAAO,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAC9C,OAAO,SAAS,CAAC,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,aAAa,CAAC,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACzG,CAAC;AAED,gGAAgG;AAChG,qBAAqB;AACrB,MAAM,UAAU,UAAU;IAIxB,MAAM,KAAK,GAAG,IAAI,GAAG,EAAsB,CAAC;IAC5C,OAAO;QACL,MAAM,EAAE,CAAC,IAAI,EAAE,EAAE;YACf,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE;gBAAE,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;oBAAE,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACrE,CAAC;QACD,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,EAAE,CAAC,KAAK,IAAI,EAAE;YAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAC9B,IAAI,KAAK;gBAAE,OAAO,KAAK,CAAC;YACxB,MAAM,KAAK,GAAG,MAAM,IAAI,EAAE,CAAC;YAC3B,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACvB,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC;AACJ,CAAC"}
|
package/build/watchers/npm.js
CHANGED
|
@@ -1,24 +1,15 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
// A
|
|
6
|
-
// so a stage approved a moment ago shows on the next pass. One request per package per pass.
|
|
1
|
+
import { NPM_REGISTRY, npmStage } from "../lib/providers/index.js";
|
|
2
|
+
import { perPass, perWait, untilSpent } from "./source.js";
|
|
3
|
+
// A version on a dist-tag, through the npm-stage release adapter's dist-tags read: a few bytes, with
|
|
4
|
+
// no cache, so a stage approved a moment ago shows on the next pass. One request per package per
|
|
5
|
+
// pass. A package npm hasn't got is that wait's problem (NotFound); npm failing is the source's.
|
|
7
6
|
export function npmSource({ fetch: fetcher = globalThis.fetch, registry = NPM_REGISTRY } = {}) {
|
|
7
|
+
const release = npmStage({ fetch: fetcher, registry });
|
|
8
8
|
return {
|
|
9
9
|
check: async (waits, budget) => {
|
|
10
10
|
const outcomes = new Map();
|
|
11
11
|
const ask = perPass(budget);
|
|
12
|
-
const tagsOf = (pkg) => ask(pkg,
|
|
13
|
-
const { body, status } = await getJson(fetcher, `${registry}/-/package/${pkg.replace('/', '%2f')}/dist-tags`, {
|
|
14
|
-
headers: { accept: 'application/json', 'cache-control': 'no-cache' },
|
|
15
|
-
});
|
|
16
|
-
if (status === 404)
|
|
17
|
-
throw new WaitProblem(`npm has no package ${pkg}`);
|
|
18
|
-
if (status !== 200)
|
|
19
|
-
throw new Error(`npm answered ${status} for ${pkg}'s dist-tags`);
|
|
20
|
-
return distTags.parse(body);
|
|
21
|
-
});
|
|
12
|
+
const tagsOf = (pkg) => ask(pkg, () => release.distTags(pkg));
|
|
22
13
|
await untilSpent(async () => {
|
|
23
14
|
for (const wait of waits) {
|
|
24
15
|
const c = wait.condition;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/watchers/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"npm.js","sourceRoot":"","sources":["../../src/watchers/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAgB,OAAO,EAAE,OAAO,EAAe,UAAU,EAAE,MAAM,aAAa,CAAC;AAEtF,qGAAqG;AACrG,iGAAiG;AACjG,iGAAiG;AACjG,MAAM,UAAU,SAAS,CAAC,EAAE,KAAK,EAAE,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,QAAQ,GAAG,YAAY,EAAE,GAAG,EAAE;IAC3F,MAAM,OAAO,GAAG,QAAQ,CAAC,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,CAAC;IACvD,OAAO;QACL,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YAC7B,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAmB,CAAC;YAC5C,MAAM,GAAG,GAAG,OAAO,CAAyB,MAAM,CAAC,CAAC;YACpD,MAAM,MAAM,GAAG,CAAC,GAAW,EAAmC,EAAE,CAAC,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;YACvG,MAAM,UAAU,CAAC,KAAK,IAAI,EAAE;gBAC1B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;oBACzB,MAAM,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;oBACzB,IAAI,CAAC,CAAC,IAAI,KAAK,KAAK;wBAAE,SAAS;oBAC/B,MAAM,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,EAAE,EAAE,KAAK,IAAI,EAAE,CAC1C,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,OAAO,OAAO,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CACpG,CAAC;gBACJ,CAAC;YACH,CAAC,CAAC,CAAC;YACH,OAAO,QAAQ,CAAC;QAClB,CAAC;QACD,IAAI,EAAE,KAAK;KACZ,CAAC;AACJ,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/watchers/source.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAwC,QAAQ,EAAkB,MAAM,2BAA2B,CAAC;
|
|
1
|
+
{"version":3,"file":"source.js","sourceRoot":"","sources":["../../src/watchers/source.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED