putitoutthere 0.0.1 → 0.1.0
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/README.md +115 -5
- package/dist/action.d.ts +6 -4
- package/dist/action.d.ts.map +1 -1
- package/dist/action.js +24 -9
- package/dist/action.js.map +1 -1
- package/dist/cascade.d.ts.map +1 -1
- package/dist/cascade.js +2 -0
- package/dist/cascade.js.map +1 -1
- package/dist/cli.d.ts +10 -3
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +161 -13
- package/dist/cli.js.map +1 -1
- package/dist/completeness.js +13 -0
- package/dist/completeness.js.map +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +5 -0
- package/dist/config.js.map +1 -1
- package/dist/doctor.d.ts +26 -0
- package/dist/doctor.d.ts.map +1 -0
- package/dist/doctor.js +45 -0
- package/dist/doctor.js.map +1 -0
- package/dist/git.d.ts +1 -0
- package/dist/git.d.ts.map +1 -1
- package/dist/git.js +12 -0
- package/dist/git.js.map +1 -1
- package/dist/handlers/crates.d.ts +24 -3
- package/dist/handlers/crates.d.ts.map +1 -1
- package/dist/handlers/crates.js +122 -13
- package/dist/handlers/crates.js.map +1 -1
- package/dist/handlers/npm-platform.d.ts +60 -0
- package/dist/handlers/npm-platform.d.ts.map +1 -0
- package/dist/handlers/npm-platform.js +203 -0
- package/dist/handlers/npm-platform.js.map +1 -0
- package/dist/handlers/npm.d.ts +7 -2
- package/dist/handlers/npm.d.ts.map +1 -1
- package/dist/handlers/npm.js +140 -12
- package/dist/handlers/npm.js.map +1 -1
- package/dist/handlers/pypi.d.ts +19 -1
- package/dist/handlers/pypi.d.ts.map +1 -1
- package/dist/handlers/pypi.js +146 -11
- package/dist/handlers/pypi.js.map +1 -1
- package/dist/init.d.ts +33 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +94 -0
- package/dist/init.js.map +1 -0
- package/dist/log.d.ts.map +1 -1
- package/dist/log.js +6 -1
- package/dist/log.js.map +1 -1
- package/dist/plan.d.ts +28 -0
- package/dist/plan.d.ts.map +1 -0
- package/dist/plan.js +218 -0
- package/dist/plan.js.map +1 -0
- package/dist/publish.d.ts +35 -0
- package/dist/publish.d.ts.map +1 -0
- package/dist/publish.js +188 -0
- package/dist/publish.js.map +1 -0
- package/dist/release.d.ts +36 -0
- package/dist/release.d.ts.map +1 -0
- package/dist/release.js +102 -0
- package/dist/release.js.map +1 -0
- package/dist/retry.js +1 -0
- package/dist/retry.js.map +1 -1
- package/dist/templates.d.ts +22 -0
- package/dist/templates.d.ts.map +1 -0
- package/dist/templates.js +222 -0
- package/dist/templates.js.map +1 -0
- package/dist/trailer.js +1 -0
- package/dist/trailer.js.map +1 -1
- package/dist/types.d.ts +14 -4
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +7 -6
package/dist/plan.js
ADDED
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere plan` — the planner.
|
|
3
|
+
*
|
|
4
|
+
* Composes config, trailer, cascade, version, git into the matrix-row
|
|
5
|
+
* array consumed by the GHA `build` job. Per plan.md §12.4. Pure
|
|
6
|
+
* function over (config + git state) → matrix; deterministic for the
|
|
7
|
+
* same inputs so CI golden-file checks have something to compare.
|
|
8
|
+
*
|
|
9
|
+
* Issue #21.
|
|
10
|
+
*/
|
|
11
|
+
import { join } from 'node:path';
|
|
12
|
+
import { computeCascade } from './cascade.js';
|
|
13
|
+
import { loadConfig } from './config.js';
|
|
14
|
+
import { commitBody, commitParents, diffNames, headCommit, lastTag } from './git.js';
|
|
15
|
+
import { parseTrailer } from './trailer.js';
|
|
16
|
+
import { bump as bumpVersion, firstVersion } from './version.js';
|
|
17
|
+
export function plan(opts) {
|
|
18
|
+
const cwd = opts.cwd;
|
|
19
|
+
const cfgPath = opts.configPath ?? join(cwd, 'putitoutthere.toml');
|
|
20
|
+
const config = loadConfig(cfgPath);
|
|
21
|
+
// What changed since the last release per package?
|
|
22
|
+
const head = headCommit({ cwd });
|
|
23
|
+
const trailer = resolveTrailer(head, cwd);
|
|
24
|
+
if (trailer?.bump === 'skip') {
|
|
25
|
+
return Promise.resolve([]);
|
|
26
|
+
}
|
|
27
|
+
// Compute cascade. For each package with a last tag, diff against
|
|
28
|
+
// that tag. Packages without a last tag are first-release: force-
|
|
29
|
+
// cascade without globbing (avoids walking the working tree).
|
|
30
|
+
const { changes, firstRelease } = collectChanges(config.packages, cwd);
|
|
31
|
+
const cascaded = new Set(computeCascade(config.packages, changes).map((p) => p.name));
|
|
32
|
+
for (const name of firstRelease)
|
|
33
|
+
cascaded.add(name);
|
|
34
|
+
// Trailer can additionally force-include packages by name.
|
|
35
|
+
const forced = new Set(trailer?.packages ?? []);
|
|
36
|
+
for (const name of forced)
|
|
37
|
+
cascaded.add(name);
|
|
38
|
+
if (cascaded.size === 0)
|
|
39
|
+
return Promise.resolve([]);
|
|
40
|
+
const rows = [];
|
|
41
|
+
for (const p of config.packages) {
|
|
42
|
+
if (!cascaded.has(p.name))
|
|
43
|
+
continue;
|
|
44
|
+
const version = nextVersion(p, trailer?.bump, cwd, forced);
|
|
45
|
+
rows.push(...rowsForPackage(p, version));
|
|
46
|
+
}
|
|
47
|
+
return Promise.resolve(rows);
|
|
48
|
+
}
|
|
49
|
+
/* ----------------------------- internals ----------------------------- */
|
|
50
|
+
function collectChanges(packages, cwd) {
|
|
51
|
+
const changes = new Set();
|
|
52
|
+
const firstRelease = new Set();
|
|
53
|
+
for (const p of packages) {
|
|
54
|
+
const tag = lastTag(p.name, { cwd });
|
|
55
|
+
if (tag === null) {
|
|
56
|
+
firstRelease.add(p.name);
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
for (const f of diffNames(tag, 'HEAD', { cwd }))
|
|
60
|
+
changes.add(f);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
return { changes: [...changes], firstRelease };
|
|
64
|
+
}
|
|
65
|
+
function nextVersion(pkg, trailerBump, cwd, trailerPackages) {
|
|
66
|
+
const tag = lastTag(pkg.name, { cwd });
|
|
67
|
+
if (tag === null) {
|
|
68
|
+
return firstVersion(pkg);
|
|
69
|
+
}
|
|
70
|
+
const lastVersion = tag.replace(`${pkg.name}-v`, '');
|
|
71
|
+
// Trailer bump applies to every cascaded package, OR specifically to
|
|
72
|
+
// packages listed in [trailer.packages]. If the trailer scoped the
|
|
73
|
+
// list, only listed packages get the trailer's bump; unlisted
|
|
74
|
+
// cascaded packages still go at default patch.
|
|
75
|
+
const wantsBump = trailerBump !== undefined &&
|
|
76
|
+
trailerBump !== 'skip' &&
|
|
77
|
+
(trailerPackages.size === 0 || trailerPackages.has(pkg.name));
|
|
78
|
+
const bumpType = wantsBump ? trailerBump : 'patch';
|
|
79
|
+
return bumpVersion(lastVersion, bumpType);
|
|
80
|
+
}
|
|
81
|
+
function rowsForPackage(pkg, version) {
|
|
82
|
+
switch (pkg.kind) {
|
|
83
|
+
case 'crates':
|
|
84
|
+
return [
|
|
85
|
+
{
|
|
86
|
+
name: pkg.name,
|
|
87
|
+
kind: 'crates',
|
|
88
|
+
version,
|
|
89
|
+
target: 'noarch',
|
|
90
|
+
runs_on: 'ubuntu-latest',
|
|
91
|
+
artifact_name: `${pkg.name}-crate`,
|
|
92
|
+
artifact_path: `${pkg.path}/target/package/*.crate`,
|
|
93
|
+
path: pkg.path,
|
|
94
|
+
},
|
|
95
|
+
];
|
|
96
|
+
case 'pypi': {
|
|
97
|
+
const build = pkg.build;
|
|
98
|
+
const targets = pkg.targets ?? [];
|
|
99
|
+
const out = [];
|
|
100
|
+
if (build === 'maturin' && targets.length > 0) {
|
|
101
|
+
for (const t of targets) {
|
|
102
|
+
out.push({
|
|
103
|
+
name: pkg.name,
|
|
104
|
+
kind: 'pypi',
|
|
105
|
+
version,
|
|
106
|
+
target: t,
|
|
107
|
+
runs_on: defaultRunsOn(t),
|
|
108
|
+
artifact_name: `${pkg.name}-wheel-${t}`,
|
|
109
|
+
artifact_path: `${pkg.path}/dist/*.whl`,
|
|
110
|
+
path: pkg.path,
|
|
111
|
+
build,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// Always emit an sdist row for pypi.
|
|
116
|
+
out.push({
|
|
117
|
+
name: pkg.name,
|
|
118
|
+
kind: 'pypi',
|
|
119
|
+
version,
|
|
120
|
+
target: 'sdist',
|
|
121
|
+
runs_on: 'ubuntu-latest',
|
|
122
|
+
artifact_name: `${pkg.name}-sdist`,
|
|
123
|
+
artifact_path: `${pkg.path}/dist/*.tar.gz`,
|
|
124
|
+
path: pkg.path,
|
|
125
|
+
...(build !== undefined ? { build } : {}),
|
|
126
|
+
});
|
|
127
|
+
return out;
|
|
128
|
+
}
|
|
129
|
+
case 'npm': {
|
|
130
|
+
const build = pkg.build;
|
|
131
|
+
const targets = pkg.targets ?? [];
|
|
132
|
+
if (build === 'napi' || build === 'bundled-cli') {
|
|
133
|
+
const out = [];
|
|
134
|
+
for (const t of targets) {
|
|
135
|
+
out.push({
|
|
136
|
+
name: pkg.name,
|
|
137
|
+
kind: 'npm',
|
|
138
|
+
version,
|
|
139
|
+
target: t,
|
|
140
|
+
runs_on: defaultRunsOn(t),
|
|
141
|
+
artifact_name: `${pkg.name}-${t}`,
|
|
142
|
+
artifact_path: `${pkg.path}/build/${t}`,
|
|
143
|
+
path: pkg.path,
|
|
144
|
+
build,
|
|
145
|
+
});
|
|
146
|
+
}
|
|
147
|
+
// Plus the main package row.
|
|
148
|
+
out.push({
|
|
149
|
+
name: pkg.name,
|
|
150
|
+
kind: 'npm',
|
|
151
|
+
version,
|
|
152
|
+
target: 'main',
|
|
153
|
+
runs_on: 'ubuntu-latest',
|
|
154
|
+
artifact_name: `${pkg.name}-main`,
|
|
155
|
+
artifact_path: pkg.path,
|
|
156
|
+
path: pkg.path,
|
|
157
|
+
build,
|
|
158
|
+
});
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
// Vanilla mode: single noarch row.
|
|
162
|
+
return [
|
|
163
|
+
{
|
|
164
|
+
name: pkg.name,
|
|
165
|
+
kind: 'npm',
|
|
166
|
+
version,
|
|
167
|
+
target: 'noarch',
|
|
168
|
+
runs_on: 'ubuntu-latest',
|
|
169
|
+
artifact_name: `${pkg.name}-pkg`,
|
|
170
|
+
artifact_path: pkg.path,
|
|
171
|
+
path: pkg.path,
|
|
172
|
+
...(build !== undefined ? { build } : {}),
|
|
173
|
+
},
|
|
174
|
+
];
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* Per-target default GHA runner. Native runners where available, else
|
|
180
|
+
* cross-compile on ubuntu. Plan §12.3 calls these out as "opinionated
|
|
181
|
+
* defaults; user can override".
|
|
182
|
+
*/
|
|
183
|
+
function defaultRunsOn(target) {
|
|
184
|
+
if (target.includes('apple-darwin') || target.includes('darwin') || target.includes('mac')) {
|
|
185
|
+
return 'macos-latest';
|
|
186
|
+
}
|
|
187
|
+
if (target.includes('windows') || target.includes('win32') || target.includes('msvc')) {
|
|
188
|
+
return 'windows-latest';
|
|
189
|
+
}
|
|
190
|
+
if (target.includes('aarch64-unknown-linux') || target.includes('aarch64-linux')) {
|
|
191
|
+
// Native arm runners are free for public repos.
|
|
192
|
+
return 'ubuntu-24.04-arm';
|
|
193
|
+
}
|
|
194
|
+
return 'ubuntu-latest';
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Read the release trailer starting from `head`. If `head` carries no
|
|
198
|
+
* trailer but is a merge commit, fall back to the non-first-parent — by
|
|
199
|
+
* GitHub convention that's the feature branch tip whose commit message
|
|
200
|
+
* the operator actually wrote the trailer into. Without this fallback,
|
|
201
|
+
* merge-commit merges silently strand every release.
|
|
202
|
+
*/
|
|
203
|
+
function resolveTrailer(head, cwd) {
|
|
204
|
+
const direct = parseTrailer(commitBody(head, { cwd }));
|
|
205
|
+
if (direct)
|
|
206
|
+
return direct;
|
|
207
|
+
const parents = commitParents(head, { cwd });
|
|
208
|
+
if (parents.length < 2)
|
|
209
|
+
return null;
|
|
210
|
+
for (let i = 1; i < parents.length; i++) {
|
|
211
|
+
const parentSha = parents[i];
|
|
212
|
+
const t = parseTrailer(commitBody(parentSha, { cwd }));
|
|
213
|
+
if (t)
|
|
214
|
+
return t;
|
|
215
|
+
}
|
|
216
|
+
return null;
|
|
217
|
+
}
|
|
218
|
+
//# sourceMappingURL=plan.js.map
|
package/dist/plan.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../src/plan.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere publish` — the big integration.
|
|
3
|
+
*
|
|
4
|
+
* Flow per plan.md §13:
|
|
5
|
+
* 1. Re-run plan (registry state may have moved since build).
|
|
6
|
+
* 2. Pre-flight auth check (#14). Abort on any missing creds.
|
|
7
|
+
* 3. Artifact completeness check (#13). Abort per-package on missing
|
|
8
|
+
* targets.
|
|
9
|
+
* 4. For each package (in cascade / depends-on order):
|
|
10
|
+
* writeVersion → handler.publish → git tag + push.
|
|
11
|
+
* 5. On handler failure: verbose dump (#15); re-throw and stop.
|
|
12
|
+
*
|
|
13
|
+
* No-push tag model (§13.6): tag points at the merge commit; no bump
|
|
14
|
+
* commit is pushed to main.
|
|
15
|
+
*
|
|
16
|
+
* Issue #22.
|
|
17
|
+
*/
|
|
18
|
+
import type { Handler, PublishResult } from './types.js';
|
|
19
|
+
export interface PublishOptions {
|
|
20
|
+
cwd: string;
|
|
21
|
+
configPath?: string;
|
|
22
|
+
dryRun?: boolean;
|
|
23
|
+
/** Override for tests. */
|
|
24
|
+
handlerFor?: (kind: Handler['kind']) => Handler;
|
|
25
|
+
}
|
|
26
|
+
export interface PublishOutput {
|
|
27
|
+
ok: boolean;
|
|
28
|
+
published: Array<{
|
|
29
|
+
package: string;
|
|
30
|
+
version: string;
|
|
31
|
+
result: PublishResult;
|
|
32
|
+
}>;
|
|
33
|
+
}
|
|
34
|
+
export declare function publish(opts: PublishOptions): Promise<PublishOutput>;
|
|
35
|
+
//# sourceMappingURL=publish.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.d.ts","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAYH,OAAO,KAAK,EAAO,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAG9D,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,0BAA0B;IAC1B,UAAU,CAAC,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,OAAO,CAAC;CACjD;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,SAAS,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,aAAa,CAAA;KAAE,CAAC,CAAC;CAC/E;AAED,wBAAsB,OAAO,CAAC,IAAI,EAAE,cAAc,GAAG,OAAO,CAAC,aAAa,CAAC,CA4H1E"}
|
package/dist/publish.js
ADDED
|
@@ -0,0 +1,188 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `putitoutthere publish` — the big integration.
|
|
3
|
+
*
|
|
4
|
+
* Flow per plan.md §13:
|
|
5
|
+
* 1. Re-run plan (registry state may have moved since build).
|
|
6
|
+
* 2. Pre-flight auth check (#14). Abort on any missing creds.
|
|
7
|
+
* 3. Artifact completeness check (#13). Abort per-package on missing
|
|
8
|
+
* targets.
|
|
9
|
+
* 4. For each package (in cascade / depends-on order):
|
|
10
|
+
* writeVersion → handler.publish → git tag + push.
|
|
11
|
+
* 5. On handler failure: verbose dump (#15); re-throw and stop.
|
|
12
|
+
*
|
|
13
|
+
* No-push tag model (§13.6): tag points at the merge commit; no bump
|
|
14
|
+
* commit is pushed to main.
|
|
15
|
+
*
|
|
16
|
+
* Issue #22.
|
|
17
|
+
*/
|
|
18
|
+
import { join } from 'node:path';
|
|
19
|
+
import { loadConfig } from './config.js';
|
|
20
|
+
import { checkCompleteness } from './completeness.js';
|
|
21
|
+
import { createTag, headCommit, pushTag } from './git.js';
|
|
22
|
+
import { handlerFor as defaultHandlerFor } from './handlers/index.js';
|
|
23
|
+
import { createLogger } from './log.js';
|
|
24
|
+
import { plan } from './plan.js';
|
|
25
|
+
import { requireAuth } from './preflight.js';
|
|
26
|
+
import { createGitHubRelease, generateReleaseNotes } from './release.js';
|
|
27
|
+
import { dumpFailure } from './verbose.js';
|
|
28
|
+
export async function publish(opts) {
|
|
29
|
+
const cwd = opts.cwd;
|
|
30
|
+
/* v8 ignore next -- tests always set explicit paths */
|
|
31
|
+
const cfgPath = opts.configPath ?? join(cwd, 'putitoutthere.toml');
|
|
32
|
+
const config = loadConfig(cfgPath);
|
|
33
|
+
/* v8 ignore next -- tests always inject handlerFor */
|
|
34
|
+
const handlerFor = opts.handlerFor ?? defaultHandlerFor;
|
|
35
|
+
const log = createLogger();
|
|
36
|
+
// 1. Re-run plan.
|
|
37
|
+
const matrix = await plan({ cwd, configPath: cfgPath });
|
|
38
|
+
if (matrix.length === 0) {
|
|
39
|
+
log.info('publish: plan is empty; nothing to release');
|
|
40
|
+
return { ok: true, published: [] };
|
|
41
|
+
}
|
|
42
|
+
// Collapse matrix rows back into per-package entries. Multiple rows
|
|
43
|
+
// per package (one per target) share a single version.
|
|
44
|
+
const perPackage = groupByPackage(matrix, config.packages);
|
|
45
|
+
// 2. Pre-flight auth.
|
|
46
|
+
requireAuth([...perPackage.keys()].map((name) => mustGet(config.packages, name)));
|
|
47
|
+
// 3. Artifact completeness, unless dry-run (no artifacts to check).
|
|
48
|
+
if (!opts.dryRun) {
|
|
49
|
+
const completeness = checkCompleteness(matrix, artifactsRoot(cwd));
|
|
50
|
+
const incomplete = [...completeness.entries()].filter(([, r]) => !r.ok);
|
|
51
|
+
if (incomplete.length > 0) {
|
|
52
|
+
const lines = ['Artifact completeness check failed:'];
|
|
53
|
+
for (const [name, r] of incomplete) {
|
|
54
|
+
for (const m of r.missing) {
|
|
55
|
+
lines.push(` ${name} / ${m.row.target}: ${m.reason}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
throw new Error(lines.join('\n'));
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
// 4. Publish each package in dep-graph order.
|
|
62
|
+
const published = [];
|
|
63
|
+
const head = headCommit({ cwd });
|
|
64
|
+
const order = publishOrder(config.packages, [...perPackage.keys()]);
|
|
65
|
+
for (const name of order) {
|
|
66
|
+
const pkg = mustGet(config.packages, name);
|
|
67
|
+
const rows = perPackage.get(name);
|
|
68
|
+
const version = rows[0].version;
|
|
69
|
+
const handler = handlerFor(pkg.kind);
|
|
70
|
+
const ctx = {
|
|
71
|
+
cwd,
|
|
72
|
+
dryRun: Boolean(opts.dryRun),
|
|
73
|
+
log,
|
|
74
|
+
env: process.env,
|
|
75
|
+
artifacts: {
|
|
76
|
+
get: (n) => join(artifactsRoot(cwd), n),
|
|
77
|
+
has: () => true, // completeness check already ran
|
|
78
|
+
},
|
|
79
|
+
artifactsRoot: artifactsRoot(cwd),
|
|
80
|
+
};
|
|
81
|
+
try {
|
|
82
|
+
if (await handler.isPublished(pkg, version, ctx)) {
|
|
83
|
+
log.info(`publish: ${name}@${version} already published; skipping`);
|
|
84
|
+
continue;
|
|
85
|
+
}
|
|
86
|
+
if (opts.dryRun) {
|
|
87
|
+
// Dry-run stops before any side effect, including writeVersion
|
|
88
|
+
// (which edits the CI worktree) and publish itself. Reporters
|
|
89
|
+
// still see the package in the "would publish" list.
|
|
90
|
+
log.info(`publish: DRY-RUN would publish ${name}@${version}`);
|
|
91
|
+
published.push({ package: name, version, result: { status: 'skipped' } });
|
|
92
|
+
continue;
|
|
93
|
+
}
|
|
94
|
+
await handler.writeVersion(pkg, version, ctx);
|
|
95
|
+
const result = await handler.publish(pkg, version, ctx);
|
|
96
|
+
published.push({ package: name, version, result });
|
|
97
|
+
if (result.status === 'published') {
|
|
98
|
+
const tagName = `${name}-v${version}`;
|
|
99
|
+
createTag(tagName, head, { cwd, message: `Release ${tagName}` });
|
|
100
|
+
try {
|
|
101
|
+
pushTag(tagName, { cwd });
|
|
102
|
+
}
|
|
103
|
+
catch (err) {
|
|
104
|
+
/* v8 ignore next -- local tests use a throwaway repo without a remote */
|
|
105
|
+
log.warn(`publish: failed to push tag ${tagName}: ${err instanceof Error ? err.message : String(err)}`);
|
|
106
|
+
}
|
|
107
|
+
// Best-effort GitHub Release. Silent no-op when GITHUB_TOKEN or
|
|
108
|
+
// GITHUB_REPOSITORY aren't set (local / non-Actions runs).
|
|
109
|
+
try {
|
|
110
|
+
const body = generateReleaseNotes(name, tagName, { cwd });
|
|
111
|
+
const release = await createGitHubRelease({
|
|
112
|
+
tag: tagName,
|
|
113
|
+
title: `${name} ${version}`,
|
|
114
|
+
body,
|
|
115
|
+
});
|
|
116
|
+
if (release)
|
|
117
|
+
log.info(`publish: GitHub Release created at ${release.url}`);
|
|
118
|
+
/* v8 ignore start -- tests don't exercise real GitHub API */
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
log.warn(`publish: GitHub Release creation failed (tag still published): ${err instanceof Error ? err.message : String(err)}`);
|
|
122
|
+
}
|
|
123
|
+
/* v8 ignore stop */
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
catch (err) {
|
|
127
|
+
const error = err instanceof Error ? err : new Error(String(err));
|
|
128
|
+
dumpFailure(error, {
|
|
129
|
+
package: name,
|
|
130
|
+
handler: pkg.kind,
|
|
131
|
+
command: [],
|
|
132
|
+
stdout: '',
|
|
133
|
+
stderr: error.message,
|
|
134
|
+
exitCode: -1,
|
|
135
|
+
}, { log });
|
|
136
|
+
throw error;
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
return { ok: true, published };
|
|
140
|
+
}
|
|
141
|
+
/* ----------------------------- internals ----------------------------- */
|
|
142
|
+
function artifactsRoot(cwd) {
|
|
143
|
+
return join(cwd, 'artifacts');
|
|
144
|
+
}
|
|
145
|
+
function mustGet(packages, name) {
|
|
146
|
+
const p = packages.find((x) => x.name === name);
|
|
147
|
+
/* v8 ignore next -- name came from the plan output; always exists */
|
|
148
|
+
if (!p)
|
|
149
|
+
throw new Error(`publish: unknown package: ${name}`);
|
|
150
|
+
return p;
|
|
151
|
+
}
|
|
152
|
+
function groupByPackage(rows, _packages) {
|
|
153
|
+
const out = new Map();
|
|
154
|
+
for (const r of rows) {
|
|
155
|
+
const arr = out.get(r.name) ?? [];
|
|
156
|
+
arr.push(r);
|
|
157
|
+
out.set(r.name, arr);
|
|
158
|
+
}
|
|
159
|
+
return out;
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* Toposort over depends_on so upstream packages publish before
|
|
163
|
+
* downstream ones that depend on them. Cycle detection already
|
|
164
|
+
* happened in cascade; we can assume acyclic.
|
|
165
|
+
*/
|
|
166
|
+
function publishOrder(packages, selected) {
|
|
167
|
+
const inSet = new Set(selected);
|
|
168
|
+
const deps = new Map();
|
|
169
|
+
for (const p of packages) {
|
|
170
|
+
if (inSet.has(p.name)) {
|
|
171
|
+
deps.set(p.name, (p.depends_on ?? []).filter((d) => inSet.has(d)));
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
const order = [];
|
|
175
|
+
const visited = new Set();
|
|
176
|
+
const visit = (name) => {
|
|
177
|
+
if (visited.has(name))
|
|
178
|
+
return;
|
|
179
|
+
visited.add(name);
|
|
180
|
+
for (const d of deps.get(name) ?? [])
|
|
181
|
+
visit(d);
|
|
182
|
+
order.push(name);
|
|
183
|
+
};
|
|
184
|
+
for (const n of selected)
|
|
185
|
+
visit(n);
|
|
186
|
+
return order;
|
|
187
|
+
}
|
|
188
|
+
//# sourceMappingURL=publish.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"publish.js","sourceRoot":"","sources":["../src/publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Release creation.
|
|
3
|
+
*
|
|
4
|
+
* After a successful tag push (§13.6), create a Release on GitHub so
|
|
5
|
+
* the new version shows up in the repo's Releases UI with body notes
|
|
6
|
+
* generated from the commit history since the previous tag.
|
|
7
|
+
*
|
|
8
|
+
* No external action dependency -- uses the GitHub REST API via
|
|
9
|
+
* fetch with the caller-supplied GITHUB_TOKEN (or the default
|
|
10
|
+
* GITHUB_TOKEN available to every Actions run).
|
|
11
|
+
*
|
|
12
|
+
* Issue #26. Plan: §15.
|
|
13
|
+
*/
|
|
14
|
+
export interface CreateReleaseOptions {
|
|
15
|
+
tag: string;
|
|
16
|
+
title: string;
|
|
17
|
+
body: string;
|
|
18
|
+
/** Override for tests. Defaults to global fetch. */
|
|
19
|
+
fetchFn?: typeof fetch;
|
|
20
|
+
}
|
|
21
|
+
export interface ReleaseResult {
|
|
22
|
+
url: string;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Generate release notes from `git log <prev_tag>..<this_tag>` subject
|
|
26
|
+
* lines. If no prior tag exists for this package, falls back to the
|
|
27
|
+
* full history (first release).
|
|
28
|
+
*
|
|
29
|
+
* The filter is subject-only -- commit bodies add noise and are
|
|
30
|
+
* already available on the tag itself.
|
|
31
|
+
*/
|
|
32
|
+
export declare function generateReleaseNotes(packageName: string, tagName: string, opts: {
|
|
33
|
+
cwd: string;
|
|
34
|
+
}): string;
|
|
35
|
+
export declare function createGitHubRelease(opts: CreateReleaseOptions): Promise<ReleaseResult | null>;
|
|
36
|
+
//# sourceMappingURL=release.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release.d.ts","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAIH,MAAM,WAAW,oBAAoB;IACnC,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,oDAAoD;IACpD,OAAO,CAAC,EAAE,OAAO,KAAK,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;CACb;AAED;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;IAAE,GAAG,EAAE,MAAM,CAAA;CAAE,GACpB,MAAM,CAKR;AAED,wBAAsB,mBAAmB,CACvC,IAAI,EAAE,oBAAoB,GACzB,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC,CAiC/B"}
|
package/dist/release.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* GitHub Release creation.
|
|
3
|
+
*
|
|
4
|
+
* After a successful tag push (§13.6), create a Release on GitHub so
|
|
5
|
+
* the new version shows up in the repo's Releases UI with body notes
|
|
6
|
+
* generated from the commit history since the previous tag.
|
|
7
|
+
*
|
|
8
|
+
* No external action dependency -- uses the GitHub REST API via
|
|
9
|
+
* fetch with the caller-supplied GITHUB_TOKEN (or the default
|
|
10
|
+
* GITHUB_TOKEN available to every Actions run).
|
|
11
|
+
*
|
|
12
|
+
* Issue #26. Plan: §15.
|
|
13
|
+
*/
|
|
14
|
+
import { execFileSync } from 'node:child_process';
|
|
15
|
+
/**
|
|
16
|
+
* Generate release notes from `git log <prev_tag>..<this_tag>` subject
|
|
17
|
+
* lines. If no prior tag exists for this package, falls back to the
|
|
18
|
+
* full history (first release).
|
|
19
|
+
*
|
|
20
|
+
* The filter is subject-only -- commit bodies add noise and are
|
|
21
|
+
* already available on the tag itself.
|
|
22
|
+
*/
|
|
23
|
+
export function generateReleaseNotes(packageName, tagName, opts) {
|
|
24
|
+
const prev = findPreviousTag(packageName, tagName, opts.cwd);
|
|
25
|
+
const range = prev ? `${prev}..${tagName}` : tagName;
|
|
26
|
+
const out = runGit(['log', range, '--format=- %s', '--no-merges'], opts.cwd);
|
|
27
|
+
return out.trim();
|
|
28
|
+
}
|
|
29
|
+
export async function createGitHubRelease(opts) {
|
|
30
|
+
const token = process.env.GITHUB_TOKEN;
|
|
31
|
+
const repository = process.env.GITHUB_REPOSITORY;
|
|
32
|
+
if (!token || !repository) {
|
|
33
|
+
// Local runs (putitoutthere doctor, operator on laptop) don't have
|
|
34
|
+
// these. Silent-skip so we don't confuse operators with a failure
|
|
35
|
+
// that doesn't matter outside Actions.
|
|
36
|
+
return null;
|
|
37
|
+
}
|
|
38
|
+
const fetchFn = opts.fetchFn ?? fetch;
|
|
39
|
+
const url = `https://api.github.com/repos/${repository}/releases`;
|
|
40
|
+
const res = await fetchFn(url, {
|
|
41
|
+
method: 'POST',
|
|
42
|
+
headers: {
|
|
43
|
+
authorization: `Bearer ${token}`,
|
|
44
|
+
'content-type': 'application/json',
|
|
45
|
+
accept: 'application/vnd.github+json',
|
|
46
|
+
'user-agent': 'putitoutthere',
|
|
47
|
+
},
|
|
48
|
+
body: JSON.stringify({
|
|
49
|
+
tag_name: opts.tag,
|
|
50
|
+
name: opts.title,
|
|
51
|
+
body: opts.body,
|
|
52
|
+
draft: false,
|
|
53
|
+
prerelease: isPrerelease(opts.tag),
|
|
54
|
+
}),
|
|
55
|
+
});
|
|
56
|
+
if (!res.ok) {
|
|
57
|
+
const msg = await res.text().catch(() => '');
|
|
58
|
+
throw new Error(`GitHub release API ${res.status}: ${msg}`);
|
|
59
|
+
}
|
|
60
|
+
const data = (await res.json());
|
|
61
|
+
return { url: data.html_url ?? '' };
|
|
62
|
+
}
|
|
63
|
+
/* ------------------------------ internals ------------------------------ */
|
|
64
|
+
function isPrerelease(tag) {
|
|
65
|
+
return /-(rc|beta|alpha)(\.|$)/.test(tag);
|
|
66
|
+
}
|
|
67
|
+
function runGit(args, cwd) {
|
|
68
|
+
try {
|
|
69
|
+
return execFileSync('git', args, { cwd, encoding: 'utf8' });
|
|
70
|
+
/* v8 ignore start -- defensive wrap */
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
const stderr = err.stderr?.toString('utf8') ?? '';
|
|
74
|
+
throw new Error(`git ${args.join(' ')} failed: ${stderr.trim()}`);
|
|
75
|
+
}
|
|
76
|
+
/* v8 ignore stop */
|
|
77
|
+
}
|
|
78
|
+
function findPreviousTag(packageName, currentTag, cwd) {
|
|
79
|
+
const prefix = `${packageName}-v`;
|
|
80
|
+
const tags = runGit(['tag', '-l', `${prefix}*.*.*`], cwd)
|
|
81
|
+
.split('\n')
|
|
82
|
+
.filter((t) => t && t !== currentTag)
|
|
83
|
+
.sort(compareSemverTags(prefix));
|
|
84
|
+
return tags.length > 0 ? tags[tags.length - 1] : null;
|
|
85
|
+
}
|
|
86
|
+
function compareSemverTags(prefix) {
|
|
87
|
+
return (a, b) => {
|
|
88
|
+
const [am, an, ap] = parseVer(a.slice(prefix.length));
|
|
89
|
+
const [bm, bn, bp] = parseVer(b.slice(prefix.length));
|
|
90
|
+
if (am !== bm)
|
|
91
|
+
return am - bm;
|
|
92
|
+
if (an !== bn)
|
|
93
|
+
return an - bn;
|
|
94
|
+
return ap - bp;
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
function parseVer(v) {
|
|
98
|
+
const parts = v.split('.').map((n) => parseInt(n, 10));
|
|
99
|
+
/* v8 ignore next -- tag-glob filter already enforces x.y.z shape */
|
|
100
|
+
return [parts[0] ?? 0, parts[1] ?? 0, parts[2] ?? 0];
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=release.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"release.js","sourceRoot":"","sources":["../src/release.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAclD;;;;;;;GAOG;AACH,MAAM,UAAU,oBAAoB,CAClC,WAAmB,EACnB,OAAe,EACf,IAAqB;IAErB,MAAM,IAAI,GAAG,eAAe,CAAC,WAAW,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,KAAK,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;IACrD,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,eAAe,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7E,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,IAA0B;IAE1B,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC;IACvC,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;IACjD,IAAI,CAAC,KAAK,IAAI,CAAC,UAAU,EAAE,CAAC;QAC1B,mEAAmE;QACnE,kEAAkE;QAClE,uCAAuC;QACvC,OAAO,IAAI,CAAC;IACd,CAAC;IACD,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC;IACtC,MAAM,GAAG,GAAG,gCAAgC,UAAU,WAAW,CAAC;IAClE,MAAM,GAAG,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE;QAC7B,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,aAAa,EAAE,UAAU,KAAK,EAAE;YAChC,cAAc,EAAE,kBAAkB;YAClC,MAAM,EAAE,6BAA6B;YACrC,YAAY,EAAE,eAAe;SAC9B;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC;YACnB,QAAQ,EAAE,IAAI,CAAC,GAAG;YAClB,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,KAAK,EAAE,KAAK;YACZ,UAAU,EAAE,YAAY,CAAC,IAAI,CAAC,GAAG,CAAC;SACnC,CAAC;KACH,CAAC,CAAC;IACH,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC;QAC7C,MAAM,IAAI,KAAK,CAAC,sBAAsB,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC,CAAC;IAC9D,CAAC;IACD,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAA0B,CAAC;IACzD,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAC;AACtC,CAAC;AAED,6EAA6E;AAE7E,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,wBAAwB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC5C,CAAC;AAED,SAAS,MAAM,CAAC,IAAc,EAAE,GAAW;IACzC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;QAC5D,uCAAuC;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,MAAM,GAAI,GAA2B,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC3E,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IACpE,CAAC;IACD,oBAAoB;AACtB,CAAC;AAED,SAAS,eAAe,CACtB,WAAmB,EACnB,UAAkB,EAClB,GAAW;IAEX,MAAM,MAAM,GAAG,GAAG,WAAW,IAAI,CAAC;IAClC,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,MAAM,OAAO,CAAC,EAAE,GAAG,CAAC;SACtD,KAAK,CAAC,IAAI,CAAC;SACX,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,UAAU,CAAC;SACpC,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IACnC,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AACzD,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAc;IACvC,OAAO,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;QACd,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,MAAM,CAAC,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;QACtD,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,IAAI,EAAE,KAAK,EAAE;YAAE,OAAO,EAAE,GAAG,EAAE,CAAC;QAC9B,OAAO,EAAE,GAAG,EAAE,CAAC;IACjB,CAAC,CAAC;AACJ,CAAC;AAED,SAAS,QAAQ,CAAC,CAAS;IACzB,MAAM,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACvD,oEAAoE;IACpE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AACvD,CAAC"}
|
package/dist/retry.js
CHANGED
package/dist/retry.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"retry.js","sourceRoot":"","sources":["../src/retry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AASvD,MAAM,QAAQ,GAA2B;IACvC,OAAO,EAAE,CAAC;IACV,cAAc,EAAE,IAAI;IACpB,UAAU,EAAE,CAAC;IACb,MAAM,EAAE,IAAI;CACb,CAAC;AAEF,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,EAAoB,EACpB,OAAqB,EAAE;IAEvB,MAAM,EAAE,OAAO,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,IAAI,EAAE,CAAC;IAEjF,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAgB,CAAC;IACrB,OAAO,OAAO,GAAG,OAAO,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,GAAG,GAAG,CAAC;YACd,OAAO,EAAE,CAAC;YACV,IAAI,OAAO,IAAI,OAAO,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC5C,MAAM,GAAG,CAAC;YACZ,CAAC;YACD,MAAM,SAAS,GAAG,cAAc,GAAG,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,GAAG,CAAC,CAAC,CAAC;YACrE,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;YACjC,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,GAAG,YAAY,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC;YAC5E,MAAM,KAAK,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;IACH,CAAC;IACD,2EAA2E;IAC3E,sBAAsB;IACtB,MAAM,OAAO,CAAC;AAChB,CAAC;AAED,SAAS,WAAW,CAAC,GAAY;IAC/B,IAAI,GAAG,YAAY,SAAS;QAAE,OAAO,KAAK,CAAC;IAC3C,IAAI,GAAG,YAAY,cAAc;QAAE,OAAO,IAAI,CAAC;IAC/C,yDAAyD;IACzD,MAAM,IAAI,GAAG,WAAW,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;IACtC,IAAI,IAAI,KAAK,YAAY,IAAI,IAAI,KAAK,WAAW;QAAE,OAAO,IAAI,CAAC;IAC/D,gDAAgD;IAChD,MAAM,MAAM,GAAG,WAAW,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAC1C,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,IAAI,MAAM,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QAChC,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;YAAE,OAAO,IAAI,CAAC;IACjD,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,GAAY;IAChC,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC1C,IAAI,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,GAAG,CAAC;QAAE,OAAO,EAAE,GAAG,IAAI,CAAC;IACvD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,SAAS,WAAW,CAAC,GAAY,EAAE,GAAW;IAC5C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;QACjD,OAAQ,GAA+B,CAAC,GAAG,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,YAAY,CAAC,SAAiB,EAAE,QAAgB;IACvD,6EAA6E;IAC7E,IAAI,QAAQ,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC5B,+BAA+B;IAC/B,MAAM,GAAG,GAAG,SAAS,GAAG,QAAQ,CAAC;IACjC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,CAAC;AACvC,CAAC;AAED,SAAS,KAAK,CAAC,EAAU;IACvB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,CAAC"}
|