@plexus-ms/lib 0.2.0 → 0.3.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/bookkeeping.d.ts +26 -0
- package/dist/bookkeeping.d.ts.map +1 -0
- package/dist/bookkeeping.js +51 -0
- package/dist/bookkeeping.js.map +1 -0
- package/dist/consumers.d.ts +31 -0
- package/dist/consumers.d.ts.map +1 -0
- package/dist/consumers.js +70 -0
- package/dist/consumers.js.map +1 -0
- package/dist/context.d.ts +7 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +19 -3
- package/dist/context.js.map +1 -1
- package/dist/frontmatter.d.ts +9 -0
- package/dist/frontmatter.d.ts.map +1 -0
- package/dist/frontmatter.js +42 -0
- package/dist/frontmatter.js.map +1 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -0
- package/dist/index.js.map +1 -1
- package/dist/io.d.ts +5 -1
- package/dist/io.d.ts.map +1 -1
- package/dist/io.js +5 -1
- package/dist/io.js.map +1 -1
- package/dist/plan.d.ts +2 -0
- package/dist/plan.d.ts.map +1 -1
- package/dist/plan.js.map +1 -1
- package/dist/propagate.d.ts +20 -0
- package/dist/propagate.d.ts.map +1 -0
- package/dist/propagate.js +226 -0
- package/dist/propagate.js.map +1 -0
- package/dist/requirements.d.ts +27 -0
- package/dist/requirements.d.ts.map +1 -0
- package/dist/requirements.js +188 -0
- package/dist/requirements.js.map +1 -0
- package/dist/ship.d.ts +18 -0
- package/dist/ship.d.ts.map +1 -0
- package/dist/ship.js +131 -0
- package/dist/ship.js.map +1 -0
- package/dist/train.d.ts +45 -0
- package/dist/train.d.ts.map +1 -0
- package/dist/train.js +102 -0
- package/dist/train.js.map +1 -0
- package/package.json +2 -2
package/dist/ship.js.map
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ship.js","sourceRoot":"","sources":["../src/ship.ts"],"names":[],"mappings":"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"}
|
package/dist/train.d.ts
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import type { Context } from './context.ts';
|
|
2
|
+
/** 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"];
|
|
4
|
+
/** The umbrella directory holding the train repos, relative to the workspace. */
|
|
5
|
+
export declare const UPSTREAM = "plexus-ms";
|
|
6
|
+
/** A train version is plain semver, no `v` prefix (§ 1.5 PLX). */
|
|
7
|
+
export declare const isTrainVersion: (v: string) => boolean;
|
|
8
|
+
export declare function nextMinor(version: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* The newest tag of a repo across both eras (`v0.21` and `0.22.0`), compared
|
|
11
|
+
* numerically on the v-stripped form: a plain version sort would rank every
|
|
12
|
+
* v-tag above every plain tag.
|
|
13
|
+
*/
|
|
14
|
+
export declare function latestTag(tags: string[]): string | undefined;
|
|
15
|
+
export interface TrainRepo {
|
|
16
|
+
name: string;
|
|
17
|
+
path: string;
|
|
18
|
+
/** The latest tag as git has it; undefined for a repo never tagged. */
|
|
19
|
+
tag?: string;
|
|
20
|
+
/** The same, v-stripped: the train version it names. */
|
|
21
|
+
latest?: string;
|
|
22
|
+
/** `git log --oneline` since the latest tag. */
|
|
23
|
+
pending: string[];
|
|
24
|
+
}
|
|
25
|
+
export interface Train {
|
|
26
|
+
repos: TrainRepo[];
|
|
27
|
+
/** The highest tag across all repos, v-stripped. */
|
|
28
|
+
last?: string;
|
|
29
|
+
/** True when the repos' latest tags disagree: a run that stopped mid-tag. */
|
|
30
|
+
skew: boolean;
|
|
31
|
+
}
|
|
32
|
+
/** Fetch every train repo and read its tags and pending commits. */
|
|
33
|
+
export declare function readTrain(ctx: Context, upstream: string): Promise<Train>;
|
|
34
|
+
/** Every train repo on main, clean, and not behind origin; throws naming the first offender. */
|
|
35
|
+
export declare function preflightRelease(ctx: Context, train: Train): Promise<void>;
|
|
36
|
+
/**
|
|
37
|
+
* The version a run releases or propagates. `propagateOnly` takes the current
|
|
38
|
+
* train; a release takes the explicit version or the next minor, refusing to
|
|
39
|
+
* derive one while the repos' tags disagree.
|
|
40
|
+
*/
|
|
41
|
+
export declare function resolveVersion(train: Train, explicit: string | undefined, propagateOnly: boolean): string;
|
|
42
|
+
/** A mistake in the arguments, as opposed to a failed run: exit code 2 in the CLI. */
|
|
43
|
+
export declare class UsageError extends Error {
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=train.d.ts.map
|
|
@@ -0,0 +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"}
|
package/dist/train.js
ADDED
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
// The train (§ 1.5 PLX): one version, tagged identically on every train repo
|
|
2
|
+
// whether or not it changed. This file reads the train's state from the
|
|
3
|
+
// upstream umbrella (the `plexus-ms` directory of a workspace) and decides the
|
|
4
|
+
// next version; `ship` acts on it.
|
|
5
|
+
import { join } from 'node:path';
|
|
6
|
+
import { compareTrains } from "./doctor.js";
|
|
7
|
+
/** The repos stamped with the train tag, in release order. */
|
|
8
|
+
export const TRAIN_REPOS = [
|
|
9
|
+
'platform',
|
|
10
|
+
'ci-cd',
|
|
11
|
+
'preset-repo-web',
|
|
12
|
+
'preset-app-nextjs',
|
|
13
|
+
'preset-repo-platform',
|
|
14
|
+
'compendium',
|
|
15
|
+
];
|
|
16
|
+
/** The umbrella directory holding the train repos, relative to the workspace. */
|
|
17
|
+
export const UPSTREAM = 'plexus-ms';
|
|
18
|
+
/** A train version is plain semver, no `v` prefix (§ 1.5 PLX). */
|
|
19
|
+
export const isTrainVersion = (v) => /^\d+\.\d+\.\d+$/.test(v);
|
|
20
|
+
export function nextMinor(version) {
|
|
21
|
+
const [major = '0', minor = '0'] = version.split('.');
|
|
22
|
+
return `${major}.${Number(minor) + 1}.0`;
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* The newest tag of a repo across both eras (`v0.21` and `0.22.0`), compared
|
|
26
|
+
* numerically on the v-stripped form: a plain version sort would rank every
|
|
27
|
+
* v-tag above every plain tag.
|
|
28
|
+
*/
|
|
29
|
+
export function latestTag(tags) {
|
|
30
|
+
return tags
|
|
31
|
+
.filter((t) => /^v?\d/.test(t))
|
|
32
|
+
.sort((a, b) => compareTrains(a.replace(/^v/, ''), b.replace(/^v/, '')))
|
|
33
|
+
.at(-1);
|
|
34
|
+
}
|
|
35
|
+
/** Fetch every train repo and read its tags and pending commits. */
|
|
36
|
+
export async function readTrain(ctx, upstream) {
|
|
37
|
+
const repos = [];
|
|
38
|
+
const all = new Set();
|
|
39
|
+
for (const name of TRAIN_REPOS) {
|
|
40
|
+
const path = join(upstream, name);
|
|
41
|
+
try {
|
|
42
|
+
await ctx.read('git', ['rev-parse', '--git-dir'], { cwd: path });
|
|
43
|
+
}
|
|
44
|
+
catch {
|
|
45
|
+
throw new Error(`${path} is not a git repo`);
|
|
46
|
+
}
|
|
47
|
+
try {
|
|
48
|
+
await ctx.read('git', ['fetch', 'origin', '--tags', '--quiet'], { cwd: path });
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
throw new Error(`${name}: fetch from origin failed`);
|
|
52
|
+
}
|
|
53
|
+
const tags = (await ctx.read('git', ['tag', '--list', 'v*', '[0-9]*'], { cwd: path })).split('\n').filter(Boolean);
|
|
54
|
+
for (const t of tags)
|
|
55
|
+
all.add(t.replace(/^v/, ''));
|
|
56
|
+
const tag = latestTag(tags);
|
|
57
|
+
const range = tag ? `${tag}..HEAD` : 'HEAD';
|
|
58
|
+
const pending = (await ctx.read('git', ['log', '--oneline', range], { cwd: path })).split('\n').filter(Boolean);
|
|
59
|
+
repos.push({ name, path, tag, latest: tag?.replace(/^v/, ''), pending });
|
|
60
|
+
}
|
|
61
|
+
const latest = repos.map((r) => r.latest);
|
|
62
|
+
return { repos, last: latestTag([...all]), skew: latest.some((l) => l !== latest[0]) };
|
|
63
|
+
}
|
|
64
|
+
/** Every train repo on main, clean, and not behind origin; throws naming the first offender. */
|
|
65
|
+
export async function preflightRelease(ctx, train) {
|
|
66
|
+
for (const { name, path } of train.repos) {
|
|
67
|
+
const branch = (await ctx.read('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { cwd: path })).trim();
|
|
68
|
+
if (branch !== 'main')
|
|
69
|
+
throw new Error(`${name} is on '${branch}', trains cut from main`);
|
|
70
|
+
if ((await ctx.read('git', ['status', '--porcelain'], { cwd: path })).trim() !== '')
|
|
71
|
+
throw new Error(`${name} has uncommitted changes — commit first`);
|
|
72
|
+
const behind = (await ctx.read('git', ['rev-list', '--count', 'main..origin/main'], { cwd: path })).trim();
|
|
73
|
+
if (behind !== '0')
|
|
74
|
+
throw new Error(`${name} is ${behind} commit(s) behind origin/main — pull first, or the tag lands on a stale commit`);
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* The version a run releases or propagates. `propagateOnly` takes the current
|
|
79
|
+
* train; a release takes the explicit version or the next minor, refusing to
|
|
80
|
+
* derive one while the repos' tags disagree.
|
|
81
|
+
*/
|
|
82
|
+
export function resolveVersion(train, explicit, propagateOnly) {
|
|
83
|
+
if (explicit !== undefined && !isTrainVersion(explicit))
|
|
84
|
+
throw new UsageError(`'${explicit}' is not plain semver (X.Y.Z, no v)`);
|
|
85
|
+
if (propagateOnly) {
|
|
86
|
+
const v = explicit ?? train.last;
|
|
87
|
+
if (!v)
|
|
88
|
+
throw new Error('no train version found to propagate');
|
|
89
|
+
return v;
|
|
90
|
+
}
|
|
91
|
+
if (explicit)
|
|
92
|
+
return explicit;
|
|
93
|
+
if (train.skew) {
|
|
94
|
+
const report = train.repos.map((r) => ` ${r.name}: ${r.latest ?? 'none'}`).join('\n');
|
|
95
|
+
throw new Error(`the train repos' latest tags disagree:\n${report}\npass the version explicitly (--train ${train.last}) to finish the half-tagged train, or a higher one to start a new one`);
|
|
96
|
+
}
|
|
97
|
+
return train.last ? nextMinor(train.last) : '0.1.0';
|
|
98
|
+
}
|
|
99
|
+
/** A mistake in the arguments, as opposed to a failed run: exit code 2 in the CLI. */
|
|
100
|
+
export class UsageError extends Error {
|
|
101
|
+
}
|
|
102
|
+
//# sourceMappingURL=train.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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.
|
|
3
|
+
"version": "0.3.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",
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
"yaml": "^2.9.1"
|
|
31
31
|
},
|
|
32
32
|
"devDependencies": {
|
|
33
|
-
"@types/node": "^26.
|
|
33
|
+
"@types/node": "^26.6.5",
|
|
34
34
|
"typescript": "^6.0.3"
|
|
35
35
|
},
|
|
36
36
|
"scripts": {
|