@plexus-ms/lib 0.8.1 → 0.10.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/dist/ship.js CHANGED
@@ -1,17 +1,26 @@
1
1
  // ship: the release train (§ 1.5 PLX). Every train repo ships under ONE
2
- // version, tagged identically whether or not it changed:
2
+ // version, tagged identically whether or not it changed, in two phases:
3
3
  //
4
4
  // preflight (plx itself not behind its newest release, self.ts; every train
5
- // repo on main, clean, not behind origin, the latest tags in agreement) → write the train bookkeeping (bookkeeping.ts: galaxy
6
- // version, the preset's collection pin, workflow-ref examples, the map's
7
- // version and timestamp, `changed` on every standard module whose extracted
8
- // requirements moved) and commit it → tag every train repo → push →
9
- // propagate to every consumer (propagate.ts).
5
+ // repo on main, clean, not behind origin, the latest tags in agreement; gh
6
+ // logged in; no mutable release on any train repo)
7
+ // → phase one: primitives' bookkeeping (galaxy version, the train-versioned
8
+ // packages' manifests, its own workflow refs), commit, tag, push, GitHub
9
+ // release — which locks the tag and runs primitives' release workflow
10
+ // → wait until the three packages are on npm at the train number
11
+ // → phase two: the presets' and the compendium's bookkeeping (collection
12
+ // pin, workflow refs, plx and config pins, the map's version and
13
+ // timestamp, `changed` on every standard module whose requirements moved),
14
+ // commit, tag, push, release, repo by repo
15
+ // → propagate to every consumer as pull requests (propagate.ts).
10
16
  //
11
- // Substance commits stay human; ship writes only the mechanical bookkeeping.
12
- // A failure between the first tag and the last push leaves a half-tagged
13
- // train; the recovery is a re-run naming the same version, which skips the
14
- // repos already tagged and pushes the rest.
17
+ // The wait is what lets phase two pin the train number: the compendium's
18
+ // commit hook installs plx at that pin, and the presets hand it to every
19
+ // consumer. Substance commits stay human; ship writes only the mechanical
20
+ // bookkeeping. A failure between the first tag and the last release leaves a
21
+ // half-tagged train; the recovery is a re-run naming the same version, which
22
+ // skips the repos already tagged and the releases that exist. A release is
23
+ // never deleted: a deleted immutable release burns its number for good.
15
24
  //
16
25
  // plx ship ~/dev # next train = minor+1 over the latest
17
26
  // plx ship ~/dev --train 1.0.0 # explicit train version
@@ -19,70 +28,152 @@
19
28
  // # the propagation in scratch clones
20
29
  // plx -y ship ~/dev # unattended: no prompt, copier takes defaults
21
30
  import { join } from 'node:path';
22
- import { bumpCollectionPin, bumpGalaxyVersion, bumpWorkflowRefs, stampChanged, stampStandard, today as todayOf, WORKFLOW_REF, } from "./bookkeeping.js";
31
+ import { bumpCollectionPin, bumpConfigPin, bumpGalaxyVersion, bumpManifestVersion, bumpPlxPin, bumpWorkflowRefs, CONFIG_PIN, PLX_PIN, stampChanged, stampStandard, today as todayOf, WORKFLOW_REF, } from "./bookkeeping.js";
23
32
  import { frontmatterField } from "./frontmatter.js";
24
33
  import { run, write } from "./plan.js";
25
34
  import { propagate } from "./propagate.js";
26
35
  import { extractRequirements, MAP_PAGE, modulePages } from "./requirements.js";
27
36
  import { preflightSelf } from "./self.js";
28
- import { preflightRelease, readTrain, resolveVersion, UPSTREAM } from "./train.js";
37
+ import { PRIMITIVES, phasesOf, preflightForge, preflightRelease, readTrain, resolveVersion, TRAIN_PACKAGES, UPSTREAM, } from "./train.js";
38
+ const DEFAULT_WAIT = { interval: 15_000, timeout: 20 * 60_000 };
29
39
  export async function ship(ctx, options) {
30
40
  const upstream = join(options.workspace, UPSTREAM);
31
41
  const propagateOnly = options.propagateOnly ?? false;
32
42
  if (options.plx)
33
43
  await preflightSelf(ctx, options.plx);
34
44
  const train = await readTrain(ctx, upstream);
35
- if (!propagateOnly)
45
+ await preflightForge(ctx);
46
+ if (!propagateOnly) {
36
47
  await preflightRelease(ctx, train);
48
+ await preflightImmutable(ctx, train);
49
+ }
37
50
  const next = resolveVersion(train, options.train, propagateOnly);
38
51
  if (!propagateOnly)
39
- await release(ctx, train, next, options.today ?? todayOf());
52
+ await release(ctx, train, next, options.today ?? todayOf(), { ...DEFAULT_WAIT, ...options.wait });
40
53
  const summary = await propagate(ctx, options.workspace, next);
41
54
  return { ...summary, released: !propagateOnly };
42
55
  }
43
- async function release(ctx, train, next, today) {
56
+ /**
57
+ * The immutable-releases setting is not readable through the API, but every
58
+ * release says whether it is immutable: a train repo whose newest release is
59
+ * mutable had the setting off when it was cut, and the train stops before
60
+ * another number is spent. A repo with no release yet is checked on its first
61
+ * one, right after creation (tagAndRelease).
62
+ */
63
+ async function preflightImmutable(ctx, train) {
64
+ for (const repo of train.repos) {
65
+ const newest = (await ctx
66
+ .read('gh', ['api', 'repos/{owner}/{repo}/releases?per_page=1', '--jq', '.[0].immutable'], { cwd: repo.path })
67
+ .catch(() => '')).trim();
68
+ if (newest === 'false')
69
+ throw new Error(mutableRelease(`${repo.name}: its newest GitHub release is not immutable`));
70
+ }
71
+ }
72
+ const mutableRelease = (what) => `${what} — enable immutable releases on the plexus-ms organisation (Settings → General → Releases); existing releases stay as they are (never delete one: a deleted immutable release burns its number)`;
73
+ async function release(ctx, train, next, today, wait) {
44
74
  ctx.say(`→ train ${train.last ?? 'none'} → ${next}`);
45
75
  for (const repo of train.repos) {
46
76
  if (repo.pending.length === 0)
47
77
  ctx.say(` ${repo.name}: no changes since ${repo.latest} — tag only`);
48
78
  else {
49
79
  ctx.say(` ${repo.name} (since ${repo.latest ?? 'the beginning'}):`);
50
- for (const line of repo.pending)
80
+ for (const line of repo.pending.slice(0, PENDING_SHOWN))
51
81
  ctx.say(` ${line}`);
82
+ if (repo.pending.length > PENDING_SHOWN)
83
+ ctx.say(` … and ${repo.pending.length - PENDING_SHOWN} more`);
52
84
  }
53
85
  }
54
- if (!(await ctx.confirm(`tag all ${train.repos.length} repos as ${next} and push?`)))
86
+ if (!(await ctx.confirm(`tag all ${train.repos.length} repos as ${next}, release them and push?`)))
55
87
  throw new Error('aborted');
88
+ const [one = [], two = []] = phasesOf(train);
56
89
  try {
57
- const plan = await planBookkeeping(ctx, train, next, today);
58
- await ctx.apply(plan);
59
- for (const repo of train.repos) {
60
- const tagged = await ctx
61
- .read('git', ['rev-parse', '-q', '--verify', `refs/tags/${next}`], { cwd: repo.path })
62
- .then(() => true)
63
- .catch(() => false);
64
- if (tagged)
65
- ctx.say(`• ${repo.name}: already tagged ${next}`);
66
- else
67
- await ctx.apply([run('git', ['tag', '-a', next, '-m', `train ${next}`], { cwd: repo.path })]);
68
- await ctx.apply([run('git', ['push', 'origin', 'main', next], { cwd: repo.path })]);
69
- }
90
+ await releasePhase(ctx, train, one, next, today);
91
+ await awaitPublished(ctx, next, wait);
92
+ await releasePhase(ctx, train, two, next, today);
70
93
  }
71
94
  catch (error) {
72
95
  const message = error instanceof Error ? error.message : String(error);
73
- throw new Error(`${message}\n✗ ship stopped during the release; re-run with --train ${next} to finish it (tagged repos are skipped)`);
96
+ throw new Error(`${message}\n✗ ship stopped during the release; re-run with --train ${next} to finish it (tagged repos and existing releases are skipped; if the registry already has ${next}, update plx first: it is the same code, built from the commit phase one tagged)`);
74
97
  }
75
98
  }
76
- /** The bookkeeping writes, then one commit per train repo that has any. */
77
- async function planBookkeeping(ctx, train, next, today) {
99
+ /** A repo never tagged lists its whole history as pending; this many lines of it are shown. */
100
+ const PENDING_SHOWN = 20;
101
+ /** One phase: the bookkeeping of its repos, then each tagged, pushed and released. */
102
+ async function releasePhase(ctx, train, repos, next, today) {
103
+ ctx.say(`→ phase: ${repos.map((r) => r.name).join(', ')}`);
104
+ await ctx.apply(await planBookkeeping(ctx, train, repos, next, today));
105
+ for (const repo of repos)
106
+ await tagAndRelease(ctx, repo, next);
107
+ }
108
+ async function tagAndRelease(ctx, repo, next) {
109
+ const tagged = await ctx
110
+ .read('git', ['rev-parse', '-q', '--verify', `refs/tags/${next}`], { cwd: repo.path })
111
+ .then(() => true)
112
+ .catch(() => false);
113
+ if (tagged)
114
+ ctx.say(`• ${repo.name}: already tagged ${next}`);
115
+ else
116
+ await ctx.apply([run('git', ['tag', '-a', next, '-m', `train ${next}`], { cwd: repo.path })]);
117
+ await ctx.apply([run('git', ['push', 'origin', 'main', next], { cwd: repo.path })]);
118
+ // The GitHub release is what makes the tag immutable, and on primitives it
119
+ // is what triggers the publish: nothing is ever published from a tag that
120
+ // can still move. --verify-tag refuses to create a tag of its own.
121
+ const released = await ctx
122
+ .read('gh', ['release', 'view', next], { cwd: repo.path })
123
+ .then(() => true)
124
+ .catch(() => false);
125
+ if (released) {
126
+ ctx.say(`• ${repo.name}: release ${next} exists`);
127
+ return;
128
+ }
129
+ await ctx.apply([
130
+ run('gh', ['release', 'create', next, '--verify-tag', '--generate-notes', '--title', next], { cwd: repo.path }),
131
+ ]);
132
+ if (ctx.dryRun)
133
+ return;
134
+ const immutable = (await ctx.read('gh', ['api', `repos/{owner}/{repo}/releases/tags/${next}`, '--jq', '.immutable'], {
135
+ cwd: repo.path,
136
+ })).trim();
137
+ if (immutable !== 'true')
138
+ throw new Error(mutableRelease(`${repo.name}: release ${next} was created mutable, and its tag can still move`));
139
+ }
140
+ /**
141
+ * Between the phases: primitives' release workflow publishes the three
142
+ * train-versioned packages, and phase two pins them. Polled with the same
143
+ * question an operator would ask (`npm view <name>@<train> version`); the dry
144
+ * run names the wait and moves on.
145
+ */
146
+ async function awaitPublished(ctx, next, wait) {
147
+ const names = TRAIN_PACKAGES.map((p) => p.name);
148
+ const list = names.map((n) => `${n}@${next}`).join(', ');
149
+ if (ctx.dryRun) {
150
+ ctx.say(`⏳ [dry-run] would wait for ${list} on npm (${PRIMITIVES}' release workflow publishes them)`);
151
+ return;
152
+ }
153
+ ctx.say(`⏳ waiting for ${list} on npm (${PRIMITIVES}' release workflow publishes them)`);
154
+ const started = Date.now();
155
+ let missing = [...names];
156
+ for (;;) {
157
+ const still = [];
158
+ for (const name of missing) {
159
+ const seen = (await ctx.read('npm', ['view', `${name}@${next}`, 'version']).catch(() => '')).trim();
160
+ if (seen !== next)
161
+ still.push(name);
162
+ }
163
+ missing = still;
164
+ if (missing.length === 0)
165
+ break;
166
+ if (Date.now() - started >= wait.timeout)
167
+ throw new Error(`${missing.join(', ')} not on npm at ${next} after ${Math.round(wait.timeout / 60_000)} min — check the release workflow (gh run list -R plexus-ms/${PRIMITIVES})`);
168
+ await new Promise((resolve) => setTimeout(resolve, wait.interval));
169
+ }
170
+ ctx.say(` ✓ ${list} on npm`);
171
+ }
172
+ /** The bookkeeping writes of the given repos, then one commit per repo that has any. */
173
+ async function planBookkeeping(ctx, train, repos, next, today) {
78
174
  const plan = [];
79
175
  const touched = new Set();
80
- const repo = (name) => {
81
- const r = train.repos.find((r) => r.name === name);
82
- if (!r)
83
- throw new Error(`${name} is not a train repo`);
84
- return r;
85
- };
176
+ const repo = (name) => repos.find((r) => r.name === name);
86
177
  /** Plan a write when the transform changes the file, saying what it does; a missing file is left alone. */
87
178
  const edit = async (r, rel, what, transform) => {
88
179
  const path = join(r.path, rel);
@@ -96,32 +187,46 @@ async function planBookkeeping(ctx, train, next, today) {
96
187
  plan.push(write(path, edited));
97
188
  touched.add(r);
98
189
  };
99
- await edit(repo('platform'), 'ansible/galaxy.yml', `version → ${next}`, (t) => bumpGalaxyVersion(t, next));
190
+ /** The tracked files of a repo containing a string, by pathspec. */
191
+ const grep = async (r, needle, pathspecs) => (await ctx.read('git', ['grep', '-l', needle, '--', ...pathspecs], { cwd: r.path }).catch(() => ''))
192
+ .split('\n')
193
+ .filter(Boolean);
194
+ const primitives = repo(PRIMITIVES);
195
+ if (primitives) {
196
+ await edit(primitives, 'ansible/galaxy.yml', `version → ${next}`, (t) => bumpGalaxyVersion(t, next));
197
+ for (const p of TRAIN_PACKAGES)
198
+ await edit(primitives, `${p.dir}/package.json`, `${p.name} → ${next}`, (t) => bumpManifestVersion(t, next));
199
+ }
100
200
  // Only the plexus.platform collection's pin: a second collection in the same file stays untouched.
101
- await edit(repo('preset-repo-platform'), 'template/requirements.yml', `plexus.platform pin → ${next}`, (t) => bumpCollectionPin(t, next));
102
- for (const r of train.repos) {
103
- const files = await ctx
104
- .read('git', ['grep', '-l', WORKFLOW_REF, '--', '*.yml', '*.yaml', '*.jinja'], { cwd: r.path })
105
- .catch(() => '');
106
- for (const f of files.split('\n').filter(Boolean))
107
- await edit(r, f, `ci-cd refs → @${next}`, (t) => bumpWorkflowRefs(t, next));
201
+ const platformPreset = repo('preset-repo-platform');
202
+ if (platformPreset)
203
+ await edit(platformPreset, 'template/requirements.yml', `plexus.platform pin → ${next}`, (t) => bumpCollectionPin(t, next));
204
+ for (const r of repos) {
205
+ for (const f of await grep(r, WORKFLOW_REF, ['*.yml', '*.yaml', '*.jinja']))
206
+ await edit(r, f, `workflow refs → @${next}`, (t) => bumpWorkflowRefs(t, next));
207
+ for (const f of await grep(r, PLX_PIN, ['*.toml', '*.toml.jinja']))
208
+ await edit(r, f, `plx pin → ${next}`, (t) => bumpPlxPin(t, next));
209
+ for (const f of await grep(r, `"${CONFIG_PIN}"`, ['*package.json', '*package.json.jinja']))
210
+ await edit(r, f, `${CONFIG_PIN} pin → ${next}`, (t) => bumpConfigPin(t, next));
108
211
  }
109
212
  // The map carries the train version and the date it was cut (§ 1.5 PLX); a
110
213
  // standard module is stamped `changed` when its extracted requirement lines
111
214
  // differ from the previous train's, read with the same extractor the
112
215
  // compendium's check runs, so the two never disagree.
113
216
  const comp = repo('compendium');
114
- await edit(comp, MAP_PAGE, `version → ${next}, timestamp → ${today}`, (t) => stampStandard(t, next, today));
115
- for (const page of await modulePages(ctx, comp.path)) {
116
- const text = await ctx.readFile(join(comp.path, page));
117
- if (frontmatterField(text, 'maturity') !== 'standard')
118
- continue;
119
- const previous = comp.tag
120
- ? await ctx.read('git', ['show', `${comp.tag}:${page}`], { cwd: comp.path }).catch(() => '')
121
- : '';
122
- if (extractRequirements(text).join('\n') === extractRequirements(previous).join('\n'))
123
- continue;
124
- await edit(comp, page, `requirements changed since ${comp.latest ?? 'the beginning'} → changed: ${next}`, (t) => stampChanged(t, next));
217
+ if (comp) {
218
+ await edit(comp, MAP_PAGE, `version → ${next}, timestamp → ${today}`, (t) => stampStandard(t, next, today));
219
+ for (const page of await modulePages(ctx, comp.path)) {
220
+ const text = await ctx.readFile(join(comp.path, page));
221
+ if (frontmatterField(text, 'maturity') !== 'standard')
222
+ continue;
223
+ const previous = comp.tag
224
+ ? await ctx.read('git', ['show', `${comp.tag}:${page}`], { cwd: comp.path }).catch(() => '')
225
+ : '';
226
+ if (extractRequirements(text).join('\n') === extractRequirements(previous).join('\n'))
227
+ continue;
228
+ await edit(comp, page, `requirements changed since ${comp.latest ?? 'the beginning'} → changed: ${next}`, (t) => stampChanged(t, next));
229
+ }
125
230
  }
126
231
  for (const r of train.repos) {
127
232
  if (!touched.has(r))
package/dist/ship.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ship.js","sourceRoot":"","sources":["../src/ship.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ship.js","sourceRoot":"","sources":["../src/ship.ts"],"names":[],"mappings":"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"}
package/dist/train.d.ts CHANGED
@@ -1,6 +1,26 @@
1
1
  import type { Context } from './context.ts';
2
+ /** The repo whose tag publishes the train-versioned packages; it is released first. */
3
+ export declare const PRIMITIVES = "primitives";
2
4
  /** The repos stamped with the train tag, in release order. */
3
- export declare const TRAIN_REPOS: readonly ["platform", "ci-cd", "preset-repo-web", "preset-app-nextjs", "preset-repo-platform", "compendium"];
5
+ export declare const TRAIN_REPOS: readonly ["primitives", "preset-repo-web", "preset-app-nextjs", "preset-repo-platform", "compendium"];
6
+ /**
7
+ * The train is cut in two phases: `primitives` alone, whose release publishes
8
+ * the train-versioned packages, then every other repo once those packages are
9
+ * on npm, because the presets and the compendium pin them at the train number
10
+ * and their commit hooks install the pin.
11
+ */
12
+ export declare const PHASES: readonly (readonly string[])[];
13
+ /** The packages published at the train number from `primitives` (§ 1.6 PLX), by their directory there. */
14
+ export declare const TRAIN_PACKAGES: readonly [{
15
+ readonly name: "@plexus-ms/cli";
16
+ readonly dir: "packages/cli";
17
+ }, {
18
+ readonly name: "@plexus-ms/lib";
19
+ readonly dir: "packages/lib";
20
+ }, {
21
+ readonly name: "@plexus-ms/config";
22
+ readonly dir: "packages/config";
23
+ }];
4
24
  /** The umbrella directory holding the train repos, relative to the workspace. */
5
25
  export declare const UPSTREAM = "plexus-ms";
6
26
  /** A train version is plain semver, no `v` prefix (§ 1.5 PLX). */
@@ -31,8 +51,15 @@ export interface Train {
31
51
  }
32
52
  /** Fetch every train repo and read its tags and pending commits. */
33
53
  export declare function readTrain(ctx: Context, upstream: string): Promise<Train>;
54
+ /** The train's repos in release order, grouped by phase. */
55
+ export declare const phasesOf: (train: Train) => TrainRepo[][];
34
56
  /** Every train repo on main, clean, and not behind origin; throws naming the first offender. */
35
57
  export declare function preflightRelease(ctx: Context, train: Train): Promise<void>;
58
+ /**
59
+ * The forge CLI is what creates the releases and the consumers' pull requests;
60
+ * an expired login is found here, before anything is written.
61
+ */
62
+ export declare function preflightForge(ctx: Context): Promise<void>;
36
63
  /**
37
64
  * The version a run releases or propagates. `propagateOnly` takes the current
38
65
  * train; a release takes the explicit version or the next minor, refusing to
@@ -1 +1 @@
1
- {"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../src/train.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,8DAA8D;AAC9D,eAAO,MAAM,WAAW,8GAOd,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,QAAQ,cAAc,CAAC;AAEpC,kEAAkE;AAClE,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,KAAG,OAAoC,CAAC;AAEhF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAK5D;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,IAAI,EAAE,OAAO,CAAC;CACf;AAED,oEAAoE;AACpE,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAwB9E;AAED,gGAAgG;AAChG,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhF;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAgBzG;AAED,sFAAsF;AACtF,qBAAa,UAAW,SAAQ,KAAK;CAAG"}
1
+ {"version":3,"file":"train.d.ts","sourceRoot":"","sources":["../src/train.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAG5C,uFAAuF;AACvF,eAAO,MAAM,UAAU,eAAe,CAAC;AAEvC,8DAA8D;AAC9D,eAAO,MAAM,WAAW,uGAMd,CAAC;AAEX;;;;;GAKG;AACH,eAAO,MAAM,MAAM,EAAE,SAAS,CAAC,SAAS,MAAM,EAAE,CAAC,EAAgE,CAAC;AAElH,0GAA0G;AAC1G,eAAO,MAAM,cAAc;;;;;;;;;EAIjB,CAAC;AAEX,iFAAiF;AACjF,eAAO,MAAM,QAAQ,cAAc,CAAC;AAEpC,kEAAkE;AAClE,eAAO,MAAM,cAAc,GAAI,GAAG,MAAM,KAAG,OAAoC,CAAC;AAEhF,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAGjD;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,SAAS,CAK5D;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,wDAAwD;IACxD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,gDAAgD;IAChD,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,KAAK;IACpB,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,oDAAoD;IACpD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,6EAA6E;IAC7E,IAAI,EAAE,OAAO,CAAC;CACf;AAED,oEAAoE;AACpE,wBAAsB,SAAS,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAwB9E;AAED,4DAA4D;AAC5D,eAAO,MAAM,QAAQ,GAAI,OAAO,KAAK,KAAG,SAAS,EAAE,EACuB,CAAC;AAE3E,gGAAgG;AAChG,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAYhF;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAMhE;AAED;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,aAAa,EAAE,OAAO,GAAG,MAAM,CAgBzG;AAED,sFAAsF;AACtF,qBAAa,UAAW,SAAQ,KAAK;CAAG"}
package/dist/train.js CHANGED
@@ -4,15 +4,29 @@
4
4
  // next version; `ship` acts on it.
5
5
  import { join } from 'node:path';
6
6
  import { compareTrains } from "./doctor.js";
7
+ /** The repo whose tag publishes the train-versioned packages; it is released first. */
8
+ export const PRIMITIVES = 'primitives';
7
9
  /** The repos stamped with the train tag, in release order. */
8
10
  export const TRAIN_REPOS = [
9
- 'platform',
10
- 'ci-cd',
11
+ PRIMITIVES,
11
12
  'preset-repo-web',
12
13
  'preset-app-nextjs',
13
14
  'preset-repo-platform',
14
15
  'compendium',
15
16
  ];
17
+ /**
18
+ * The train is cut in two phases: `primitives` alone, whose release publishes
19
+ * the train-versioned packages, then every other repo once those packages are
20
+ * on npm, because the presets and the compendium pin them at the train number
21
+ * and their commit hooks install the pin.
22
+ */
23
+ export const PHASES = [[PRIMITIVES], TRAIN_REPOS.filter((r) => r !== PRIMITIVES)];
24
+ /** The packages published at the train number from `primitives` (§ 1.6 PLX), by their directory there. */
25
+ export const TRAIN_PACKAGES = [
26
+ { name: '@plexus-ms/cli', dir: 'packages/cli' },
27
+ { name: '@plexus-ms/lib', dir: 'packages/lib' },
28
+ { name: '@plexus-ms/config', dir: 'packages/config' },
29
+ ];
16
30
  /** The umbrella directory holding the train repos, relative to the workspace. */
17
31
  export const UPSTREAM = 'plexus-ms';
18
32
  /** A train version is plain semver, no `v` prefix (§ 1.5 PLX). */
@@ -61,6 +75,8 @@ export async function readTrain(ctx, upstream) {
61
75
  const latest = repos.map((r) => r.latest);
62
76
  return { repos, last: latestTag([...all]), skew: latest.some((l) => l !== latest[0]) };
63
77
  }
78
+ /** The train's repos in release order, grouped by phase. */
79
+ export const phasesOf = (train) => PHASES.map((names) => train.repos.filter((r) => names.includes(r.name)));
64
80
  /** Every train repo on main, clean, and not behind origin; throws naming the first offender. */
65
81
  export async function preflightRelease(ctx, train) {
66
82
  for (const { name, path } of train.repos) {
@@ -74,6 +90,18 @@ export async function preflightRelease(ctx, train) {
74
90
  throw new Error(`${name} is ${behind} commit(s) behind origin/main — pull first, or the tag lands on a stale commit`);
75
91
  }
76
92
  }
93
+ /**
94
+ * The forge CLI is what creates the releases and the consumers' pull requests;
95
+ * an expired login is found here, before anything is written.
96
+ */
97
+ export async function preflightForge(ctx) {
98
+ try {
99
+ await ctx.read('gh', ['auth', 'status']);
100
+ }
101
+ catch {
102
+ throw new Error('gh is not logged in (gh auth status failed) — run gh auth login first');
103
+ }
104
+ }
77
105
  /**
78
106
  * The version a run releases or propagates. `propagateOnly` takes the current
79
107
  * train; a release takes the explicit version or the next minor, refusing to
package/dist/train.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"train.js","sourceRoot":"","sources":["../src/train.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"train.js","sourceRoot":"","sources":["../src/train.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@plexus-ms/lib",
3
- "version": "0.8.1",
3
+ "version": "0.10.0",
4
4
  "description": "The Plexus verbs as a library: the plan-then-apply core behind plx, and the one parser of Plexus's own file shapes",
5
5
  "license": "GPL-3.0-or-later",
6
6
  "type": "module",