@ethlete/cli 2.1.0-next.9 → 3.0.0-next.16
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 +78 -0
- package/README.md +22 -7
- package/design/define-call.ts +8 -8
- package/design/web/frame.ts +11 -5
- package/design/web/host.css +4 -4
- package/design/web/host.ts +68 -68
- package/package.json +3 -3
- package/src/index.d.ts +1 -0
- package/src/index.js +18 -4
- package/src/index.js.map +1 -1
- package/src/lib/api/clear.js +13 -3
- package/src/lib/api/clear.js.map +1 -1
- package/src/lib/api/compose.js +5 -1
- package/src/lib/api/compose.js.map +1 -1
- package/src/lib/api/git.d.ts +11 -4
- package/src/lib/api/git.js +35 -8
- package/src/lib/api/git.js.map +1 -1
- package/src/lib/api/load-definitions.js +10 -1
- package/src/lib/api/load-definitions.js.map +1 -1
- package/src/lib/api/ports.js +12 -3
- package/src/lib/api/ports.js.map +1 -1
- package/src/lib/api/run.js +8 -3
- package/src/lib/api/run.js.map +1 -1
- package/src/lib/api/setup.js +1 -1
- package/src/lib/api/setup.js.map +1 -1
- package/src/lib/api/state.js +7 -5
- package/src/lib/api/state.js.map +1 -1
- package/src/lib/auth/composer-auth.js +3 -2
- package/src/lib/auth/composer-auth.js.map +1 -1
- package/src/lib/auth/gitlab-token.js +1 -1
- package/src/lib/auth/gitlab-token.js.map +1 -1
- package/src/lib/config/diagnose.js +15 -9
- package/src/lib/config/diagnose.js.map +1 -1
- package/src/lib/config/local-config.d.ts +1 -1
- package/src/lib/design/check.js +27 -16
- package/src/lib/design/check.js.map +1 -1
- package/src/lib/design/serve.js +5 -5
- package/src/lib/design/serve.js.map +1 -1
- package/src/lib/design/vite-paths.d.ts +7 -0
- package/src/lib/design/vite-paths.js +15 -0
- package/src/lib/design/vite-paths.js.map +1 -0
- package/src/lib/doctor/doctor-command.js +18 -4
- package/src/lib/doctor/doctor-command.js.map +1 -1
- package/src/lib/release.d.ts +38 -1
- package/src/lib/release.js +150 -43
- package/src/lib/release.js.map +1 -1
- package/src/lib/update/agent-rules-sync.d.ts +37 -0
- package/src/lib/update/agent-rules-sync.js +40 -0
- package/src/lib/update/agent-rules-sync.js.map +1 -0
- package/src/lib/update/agent-setup.d.ts +33 -0
- package/src/lib/update/agent-setup.js +124 -0
- package/src/lib/update/agent-setup.js.map +1 -0
- package/src/lib/update/ai.d.ts +37 -8
- package/src/lib/update/ai.js +193 -24
- package/src/lib/update/ai.js.map +1 -1
- package/src/lib/update/args.d.ts +2 -0
- package/src/lib/update/args.js +22 -2
- package/src/lib/update/args.js.map +1 -1
- package/src/lib/update/available-migrations.d.ts +10 -0
- package/src/lib/update/available-migrations.js +23 -0
- package/src/lib/update/available-migrations.js.map +1 -0
- package/src/lib/update/commits.d.ts +63 -0
- package/src/lib/update/commits.js +146 -0
- package/src/lib/update/commits.js.map +1 -0
- package/src/lib/update/gitignore.d.ts +8 -0
- package/src/lib/update/gitignore.js +22 -0
- package/src/lib/update/gitignore.js.map +1 -0
- package/src/lib/update/index.d.ts +6 -0
- package/src/lib/update/index.js +6 -0
- package/src/lib/update/index.js.map +1 -1
- package/src/lib/update/migration-manifest.d.ts +10 -0
- package/src/lib/update/migration-manifest.js +15 -3
- package/src/lib/update/migration-manifest.js.map +1 -1
- package/src/lib/update/migration-record.d.ts +24 -0
- package/src/lib/update/migration-record.js +48 -0
- package/src/lib/update/migration-record.js.map +1 -0
- package/src/lib/update/migrations-command.d.ts +14 -0
- package/src/lib/update/migrations-command.js +212 -0
- package/src/lib/update/migrations-command.js.map +1 -0
- package/src/lib/update/package-manager.d.ts +20 -1
- package/src/lib/update/package-manager.js +34 -15
- package/src/lib/update/package-manager.js.map +1 -1
- package/src/lib/update/packages.js +31 -9
- package/src/lib/update/packages.js.map +1 -1
- package/src/lib/update/pending.d.ts +16 -0
- package/src/lib/update/pending.js +21 -5
- package/src/lib/update/pending.js.map +1 -1
- package/src/lib/update/plan.d.ts +28 -2
- package/src/lib/update/plan.js +54 -3
- package/src/lib/update/plan.js.map +1 -1
- package/src/lib/update/registry.d.ts +32 -4
- package/src/lib/update/registry.js +145 -8
- package/src/lib/update/registry.js.map +1 -1
- package/src/lib/update/run-migrations.d.ts +2 -0
- package/src/lib/update/run-migrations.js +20 -15
- package/src/lib/update/run-migrations.js.map +1 -1
- package/src/lib/update/scan.d.ts +14 -0
- package/src/lib/update/scan.js +57 -0
- package/src/lib/update/scan.js.map +1 -0
- package/src/lib/update/semver.js +2 -1
- package/src/lib/update/semver.js.map +1 -1
- package/src/lib/update/tasks.d.ts +18 -1
- package/src/lib/update/tasks.js +114 -43
- package/src/lib/update/tasks.js.map +1 -1
- package/src/lib/update/update-command.d.ts +7 -0
- package/src/lib/update/update-command.js +286 -64
- package/src/lib/update/update-command.js.map +1 -1
package/src/lib/update/args.js
CHANGED
|
@@ -2,8 +2,19 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.parseUpdateArgs = exports.fullPackageName = void 0;
|
|
4
4
|
const packages_1 = require("./packages");
|
|
5
|
+
const semver_1 = require("./semver");
|
|
5
6
|
const VALUE_FLAGS = ['--tag', '--to', '--from'];
|
|
6
|
-
const BOOLEAN_FLAGS = [
|
|
7
|
+
const BOOLEAN_FLAGS = [
|
|
8
|
+
'--check',
|
|
9
|
+
'--dry-run',
|
|
10
|
+
'--no-install',
|
|
11
|
+
'--no-commit',
|
|
12
|
+
'--continue',
|
|
13
|
+
'--ai',
|
|
14
|
+
'--force',
|
|
15
|
+
'--help',
|
|
16
|
+
'-h',
|
|
17
|
+
];
|
|
7
18
|
/** `core` and `@ethlete/core` both name the same package on the command line. */
|
|
8
19
|
const fullPackageName = (name) => (name.includes('/') ? name : `${packages_1.ETHLETE_SCOPE}${name}`);
|
|
9
20
|
exports.fullPackageName = fullPackageName;
|
|
@@ -22,6 +33,7 @@ const parseUpdateArgs = (argv) => {
|
|
|
22
33
|
check: false,
|
|
23
34
|
dryRun: false,
|
|
24
35
|
install: true,
|
|
36
|
+
commit: true,
|
|
25
37
|
resume: false,
|
|
26
38
|
ai: false,
|
|
27
39
|
force: false,
|
|
@@ -39,7 +51,7 @@ const parseUpdateArgs = (argv) => {
|
|
|
39
51
|
const value = inline !== null && inline !== void 0 ? inline : argv[index + 1];
|
|
40
52
|
if (inline === undefined)
|
|
41
53
|
index += 1;
|
|
42
|
-
if (value
|
|
54
|
+
if (!value || value.startsWith('-')) {
|
|
43
55
|
args.problems.push(`${flag} needs a value.`);
|
|
44
56
|
continue;
|
|
45
57
|
}
|
|
@@ -53,6 +65,8 @@ const parseUpdateArgs = (argv) => {
|
|
|
53
65
|
const version = separator > 0 ? value.slice(separator + 1) : undefined;
|
|
54
66
|
if (!name || !version)
|
|
55
67
|
args.problems.push(`--from needs <package>@<version>, not "${value}".`);
|
|
68
|
+
else if (!(0, semver_1.isValidVersion)(version))
|
|
69
|
+
args.problems.push(`--from ${value}: "${version}" is not a version.`);
|
|
56
70
|
else
|
|
57
71
|
args.from[(0, exports.fullPackageName)(name)] = version;
|
|
58
72
|
}
|
|
@@ -62,12 +76,18 @@ const parseUpdateArgs = (argv) => {
|
|
|
62
76
|
args.problems.push(`Unknown flag "${flag}".`);
|
|
63
77
|
continue;
|
|
64
78
|
}
|
|
79
|
+
if (inline !== undefined) {
|
|
80
|
+
args.problems.push(`${flag} takes no value.`);
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
65
83
|
if (flag === '--check')
|
|
66
84
|
args.check = true;
|
|
67
85
|
if (flag === '--dry-run')
|
|
68
86
|
args.dryRun = true;
|
|
69
87
|
if (flag === '--no-install')
|
|
70
88
|
args.install = false;
|
|
89
|
+
if (flag === '--no-commit')
|
|
90
|
+
args.commit = false;
|
|
71
91
|
if (flag === '--continue')
|
|
72
92
|
args.resume = true;
|
|
73
93
|
if (flag === '--ai')
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/args.ts"],"names":[],"mappings":";;;AAAA,yCAA2C;
|
|
1
|
+
{"version":3,"file":"args.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/args.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { PendingMigration } from './plan';
|
|
2
|
+
export type AvailableMigration = PendingMigration & {
|
|
3
|
+
/** The installed version of the package. */
|
|
4
|
+
installed: string;
|
|
5
|
+
};
|
|
6
|
+
/** The recommended and optional migrations of every installed `@ethlete/*` package that have not run yet. */
|
|
7
|
+
export declare const collectAvailableMigrations: (root: string) => {
|
|
8
|
+
available: AvailableMigration[];
|
|
9
|
+
problems: string[];
|
|
10
|
+
};
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.collectAvailableMigrations = void 0;
|
|
4
|
+
const migration_manifest_1 = require("./migration-manifest");
|
|
5
|
+
const migration_record_1 = require("./migration-record");
|
|
6
|
+
const packages_1 = require("./packages");
|
|
7
|
+
const plan_1 = require("./plan");
|
|
8
|
+
/** The recommended and optional migrations of every installed `@ethlete/*` package that have not run yet. */
|
|
9
|
+
const collectAvailableMigrations = (root) => {
|
|
10
|
+
const { record, problems } = (0, migration_record_1.readMigrationRecord)(root);
|
|
11
|
+
const available = [];
|
|
12
|
+
for (const declared of (0, packages_1.declaredEthletePackages)({ root })) {
|
|
13
|
+
const installed = declared.installedVersion;
|
|
14
|
+
if (installed === undefined)
|
|
15
|
+
continue;
|
|
16
|
+
const packageMigrations = (0, migration_manifest_1.readPackageMigrations)({ root, packageName: declared.name });
|
|
17
|
+
problems.push(...packageMigrations.problems);
|
|
18
|
+
available.push(...(0, plan_1.availableMigrations)({ packageMigrations, installed, record }).map((entry) => (Object.assign(Object.assign({}, entry), { installed }))));
|
|
19
|
+
}
|
|
20
|
+
return { available: (0, plan_1.orderAvailableMigrations)(available), problems };
|
|
21
|
+
};
|
|
22
|
+
exports.collectAvailableMigrations = collectAvailableMigrations;
|
|
23
|
+
//# sourceMappingURL=available-migrations.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"available-migrations.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/available-migrations.ts"],"names":[],"mappings":";;;AAAA,6DAA6D;AAC7D,yDAAyD;AACzD,yCAAqD;AACrD,iCAAyF;AAOzF,6GAA6G;AACtG,MAAM,0BAA0B,GAAG,CAAC,IAAY,EAAE,EAAE;IACzD,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAA,sCAAmB,EAAC,IAAI,CAAC,CAAC;IACvD,MAAM,SAAS,GAAyB,EAAE,CAAC;IAE3C,KAAK,MAAM,QAAQ,IAAI,IAAA,kCAAuB,EAAC,EAAE,IAAI,EAAE,CAAC,EAAE,CAAC;QACzD,MAAM,SAAS,GAAG,QAAQ,CAAC,gBAAgB,CAAC;QAE5C,IAAI,SAAS,KAAK,SAAS;YAAE,SAAS;QAEtC,MAAM,iBAAiB,GAAG,IAAA,0CAAqB,EAAC,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAEtF,QAAQ,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC7C,SAAS,CAAC,IAAI,CACZ,GAAG,IAAA,0BAAmB,EAAC,EAAE,iBAAiB,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,iCAAM,KAAK,KAAE,SAAS,IAAG,CAAC,CAC3G,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,SAAS,EAAE,IAAA,+BAAwB,EAAC,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;AACtE,CAAC,CAAC;AAlBW,QAAA,0BAA0B,8BAkBrC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/** Repo-relative paths git reports as changed or untracked, each with a hash of its content. */
|
|
2
|
+
export type DirtySnapshot = Record<string, string>;
|
|
3
|
+
/** What the commits of one update compare against. It lives in the pending update, so a `--continue` keeps it. */
|
|
4
|
+
export type CommitState = {
|
|
5
|
+
/** The paths that were dirty before the update wrote anything: the user's own work, never committed. */
|
|
6
|
+
baseline: DirtySnapshot;
|
|
7
|
+
/** The dirty paths after the last step, so the next step commits only what it changed. */
|
|
8
|
+
snapshot: DirtySnapshot;
|
|
9
|
+
bumped: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type StepCommit = {
|
|
12
|
+
state: 'unchanged';
|
|
13
|
+
} | {
|
|
14
|
+
state: 'committed';
|
|
15
|
+
hash: string;
|
|
16
|
+
paths: string[];
|
|
17
|
+
} | {
|
|
18
|
+
state: 'blocked';
|
|
19
|
+
paths: string[];
|
|
20
|
+
} | {
|
|
21
|
+
state: 'failed';
|
|
22
|
+
reason: string;
|
|
23
|
+
paths: string[];
|
|
24
|
+
};
|
|
25
|
+
/** The paths of `git status --porcelain -z`, a rename's source included. */
|
|
26
|
+
export declare const parsePorcelain: (output: string) => string[];
|
|
27
|
+
/** The dirty paths of the checkout `root` sits in, or `undefined` outside a git checkout. */
|
|
28
|
+
export declare const dirtySnapshot: (root: string) => DirtySnapshot | undefined;
|
|
29
|
+
/** The commit state of an update that starts now, or `undefined` outside a git checkout. */
|
|
30
|
+
export declare const startCommits: (root: string) => CommitState | undefined;
|
|
31
|
+
/**
|
|
32
|
+
* Commits what one step changed since the last one, and nothing else. A step that touched a path the user
|
|
33
|
+
* had changed before the update is not committed at all, so their work never lands in an update commit.
|
|
34
|
+
*/
|
|
35
|
+
export declare const commitStep: (options: {
|
|
36
|
+
root: string;
|
|
37
|
+
state: CommitState;
|
|
38
|
+
message: string;
|
|
39
|
+
body?: string;
|
|
40
|
+
}) => {
|
|
41
|
+
state: CommitState;
|
|
42
|
+
commit: StepCommit;
|
|
43
|
+
};
|
|
44
|
+
/** Moves the snapshot past a step that is not committed, so the next step does not pick up what it left. */
|
|
45
|
+
export declare const skipStep: (options: {
|
|
46
|
+
root: string;
|
|
47
|
+
state: CommitState;
|
|
48
|
+
}) => CommitState;
|
|
49
|
+
export type StepCommitter = {
|
|
50
|
+
readonly state: CommitState;
|
|
51
|
+
commit: (step: {
|
|
52
|
+
message: string;
|
|
53
|
+
body?: string;
|
|
54
|
+
}) => StepCommit;
|
|
55
|
+
skip: () => void;
|
|
56
|
+
markBumped: () => void;
|
|
57
|
+
};
|
|
58
|
+
/** Commits the steps of one update in order, and hands every new state to `save`. */
|
|
59
|
+
export declare const createStepCommitter: (options: {
|
|
60
|
+
root: string;
|
|
61
|
+
state: CommitState;
|
|
62
|
+
save: (state: CommitState) => void;
|
|
63
|
+
}) => StepCommitter;
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createStepCommitter = exports.skipStep = exports.commitStep = exports.startCommits = exports.dirtySnapshot = exports.parsePorcelain = void 0;
|
|
4
|
+
const child_process_1 = require("child_process");
|
|
5
|
+
const crypto_1 = require("crypto");
|
|
6
|
+
const fs_1 = require("fs");
|
|
7
|
+
const path_1 = require("path");
|
|
8
|
+
const tasks_1 = require("./tasks");
|
|
9
|
+
const git = (cwd, args) => {
|
|
10
|
+
var _a, _b, _c, _d, _e;
|
|
11
|
+
const result = (0, child_process_1.spawnSync)('git', args, { cwd, encoding: 'utf8' });
|
|
12
|
+
return {
|
|
13
|
+
status: result.error ? 1 : ((_a = result.status) !== null && _a !== void 0 ? _a : 1),
|
|
14
|
+
stdout: (_b = result.stdout) !== null && _b !== void 0 ? _b : '',
|
|
15
|
+
stderr: ((_c = result.stderr) !== null && _c !== void 0 ? _c : '').trim() || ((_e = (_d = result.error) === null || _d === void 0 ? void 0 : _d.message) !== null && _e !== void 0 ? _e : ''),
|
|
16
|
+
};
|
|
17
|
+
};
|
|
18
|
+
const contentHash = (path) => {
|
|
19
|
+
try {
|
|
20
|
+
return (0, crypto_1.createHash)('sha1').update((0, fs_1.readFileSync)(path)).digest('hex');
|
|
21
|
+
}
|
|
22
|
+
catch (_a) {
|
|
23
|
+
return 'missing';
|
|
24
|
+
}
|
|
25
|
+
};
|
|
26
|
+
const topLevel = (root) => {
|
|
27
|
+
const result = git(root, ['rev-parse', '--show-toplevel']);
|
|
28
|
+
const top = result.stdout.trim();
|
|
29
|
+
return result.status === 0 && top.length > 0 ? top : undefined;
|
|
30
|
+
};
|
|
31
|
+
/** The paths of `git status --porcelain -z`, a rename's source included. */
|
|
32
|
+
const parsePorcelain = (output) => {
|
|
33
|
+
var _a;
|
|
34
|
+
const entries = output.split('\0').filter((entry) => entry.length > 0);
|
|
35
|
+
const paths = [];
|
|
36
|
+
for (let index = 0; index < entries.length; index += 1) {
|
|
37
|
+
const entry = (_a = entries[index]) !== null && _a !== void 0 ? _a : '';
|
|
38
|
+
const status = entry.slice(0, 2);
|
|
39
|
+
paths.push(entry.slice(3));
|
|
40
|
+
if (status.includes('R') || status.includes('C')) {
|
|
41
|
+
const source = entries[index + 1];
|
|
42
|
+
if (source !== undefined)
|
|
43
|
+
paths.push(source);
|
|
44
|
+
index += 1;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
return paths;
|
|
48
|
+
};
|
|
49
|
+
exports.parsePorcelain = parsePorcelain;
|
|
50
|
+
const updateDirPrefix = (options) => {
|
|
51
|
+
const fromTop = (0, path_1.relative)(options.top, (0, fs_1.realpathSync)(options.root)).split(path_1.sep).join('/');
|
|
52
|
+
return fromTop.length === 0 ? `${tasks_1.UPDATE_DIR}/` : `${fromTop}/${tasks_1.UPDATE_DIR}/`;
|
|
53
|
+
};
|
|
54
|
+
/** The dirty paths of the checkout `root` sits in, or `undefined` outside a git checkout. */
|
|
55
|
+
const dirtySnapshot = (root) => {
|
|
56
|
+
const top = topLevel(root);
|
|
57
|
+
if (top === undefined)
|
|
58
|
+
return undefined;
|
|
59
|
+
const status = git(top, ['status', '--porcelain', '-z', '--untracked-files=all']);
|
|
60
|
+
if (status.status !== 0)
|
|
61
|
+
return undefined;
|
|
62
|
+
const ignored = updateDirPrefix({ root, top });
|
|
63
|
+
return Object.fromEntries((0, exports.parsePorcelain)(status.stdout)
|
|
64
|
+
.filter((path) => !path.startsWith(ignored))
|
|
65
|
+
.map((path) => [path, contentHash((0, path_1.join)(top, path))]));
|
|
66
|
+
};
|
|
67
|
+
exports.dirtySnapshot = dirtySnapshot;
|
|
68
|
+
/** The commit state of an update that starts now, or `undefined` outside a git checkout. */
|
|
69
|
+
const startCommits = (root) => {
|
|
70
|
+
const snapshot = (0, exports.dirtySnapshot)(root);
|
|
71
|
+
return snapshot === undefined ? undefined : { baseline: snapshot, snapshot, bumped: false };
|
|
72
|
+
};
|
|
73
|
+
exports.startCommits = startCommits;
|
|
74
|
+
const changedSince = (options) => Object.keys(options.now).filter((path) => options.before[path] !== options.now[path]);
|
|
75
|
+
/**
|
|
76
|
+
* Commits what one step changed since the last one, and nothing else. A step that touched a path the user
|
|
77
|
+
* had changed before the update is not committed at all, so their work never lands in an update commit.
|
|
78
|
+
*/
|
|
79
|
+
const commitStep = (options) => {
|
|
80
|
+
const { root, state, message, body } = options;
|
|
81
|
+
const now = (0, exports.dirtySnapshot)(root);
|
|
82
|
+
const top = topLevel(root);
|
|
83
|
+
if (now === undefined || top === undefined) {
|
|
84
|
+
return { state, commit: { state: 'failed', reason: 'git status failed', paths: [] } };
|
|
85
|
+
}
|
|
86
|
+
const paths = changedSince({ before: state.snapshot, now });
|
|
87
|
+
const settle = (commit) => { var _a; return ({ state: Object.assign(Object.assign({}, state), { snapshot: (_a = (0, exports.dirtySnapshot)(root)) !== null && _a !== void 0 ? _a : now }), commit }); };
|
|
88
|
+
if (paths.length === 0)
|
|
89
|
+
return settle({ state: 'unchanged' });
|
|
90
|
+
const blocked = paths.filter((path) => path in state.baseline);
|
|
91
|
+
if (blocked.length > 0)
|
|
92
|
+
return settle({ state: 'blocked', paths: blocked });
|
|
93
|
+
const added = git(top, ['add', '--', ...paths]);
|
|
94
|
+
if (added.status !== 0)
|
|
95
|
+
return settle({ state: 'failed', reason: added.stderr, paths });
|
|
96
|
+
const committed = git(top, ['commit', '-m', message, ...(body === undefined ? [] : ['-m', body]), '--', ...paths]);
|
|
97
|
+
if (committed.status !== 0) {
|
|
98
|
+
const reason = committed.stderr || committed.stdout.trim() || `git commit exited with ${committed.status}`;
|
|
99
|
+
git(top, ['reset', '--quiet', '--', ...paths]);
|
|
100
|
+
return settle({ state: 'failed', reason, paths });
|
|
101
|
+
}
|
|
102
|
+
return settle({ state: 'committed', hash: git(top, ['rev-parse', '--short', 'HEAD']).stdout.trim(), paths });
|
|
103
|
+
};
|
|
104
|
+
exports.commitStep = commitStep;
|
|
105
|
+
/** Moves the snapshot past a step that is not committed, so the next step does not pick up what it left. */
|
|
106
|
+
const skipStep = (options) => {
|
|
107
|
+
var _a;
|
|
108
|
+
return (Object.assign(Object.assign({}, options.state), { snapshot: (_a = (0, exports.dirtySnapshot)(options.root)) !== null && _a !== void 0 ? _a : options.state.snapshot }));
|
|
109
|
+
};
|
|
110
|
+
exports.skipStep = skipStep;
|
|
111
|
+
const printCommit = (options) => {
|
|
112
|
+
const { message, commit } = options;
|
|
113
|
+
if (commit.state === 'committed')
|
|
114
|
+
console.log(`\n Committed ${commit.hash}: ${message}`);
|
|
115
|
+
if (commit.state === 'blocked') {
|
|
116
|
+
console.error(`\n Not committed: ${commit.paths.join(', ')} had uncommitted changes before the update. ` +
|
|
117
|
+
`Commit "${message}" yourself.`);
|
|
118
|
+
}
|
|
119
|
+
if (commit.state === 'failed') {
|
|
120
|
+
console.error(`\n The commit "${message}" failed, so its changes stay in the working tree:\n${commit.reason}`);
|
|
121
|
+
}
|
|
122
|
+
};
|
|
123
|
+
/** Commits the steps of one update in order, and hands every new state to `save`. */
|
|
124
|
+
const createStepCommitter = (options) => {
|
|
125
|
+
const { root, save } = options;
|
|
126
|
+
let state = options.state;
|
|
127
|
+
const update = (next) => {
|
|
128
|
+
state = next;
|
|
129
|
+
save(state);
|
|
130
|
+
};
|
|
131
|
+
return {
|
|
132
|
+
get state() {
|
|
133
|
+
return state;
|
|
134
|
+
},
|
|
135
|
+
commit: (step) => {
|
|
136
|
+
const result = (0, exports.commitStep)(Object.assign({ root, state }, step));
|
|
137
|
+
update(result.state);
|
|
138
|
+
printCommit({ message: step.message, commit: result.commit });
|
|
139
|
+
return result.commit;
|
|
140
|
+
},
|
|
141
|
+
skip: () => update((0, exports.skipStep)({ root, state })),
|
|
142
|
+
markBumped: () => update(Object.assign(Object.assign({}, state), { bumped: true })),
|
|
143
|
+
};
|
|
144
|
+
};
|
|
145
|
+
exports.createStepCommitter = createStepCommitter;
|
|
146
|
+
//# sourceMappingURL=commits.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"commits.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/commits.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export declare const UPDATE_IGNORE_ENTRY = ".ethlete/update/";
|
|
2
|
+
/** Appends `entry` to `.gitignore` unless git ignores `probe` already. True when it wrote the line. */
|
|
3
|
+
export declare const ignoreEntry: (options: {
|
|
4
|
+
root: string;
|
|
5
|
+
entry: string;
|
|
6
|
+
probe?: string;
|
|
7
|
+
}) => boolean;
|
|
8
|
+
export declare const ignoreUpdateDir: (root: string) => boolean;
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ignoreUpdateDir = exports.ignoreEntry = exports.UPDATE_IGNORE_ENTRY = void 0;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const git_1 = require("../api/git");
|
|
7
|
+
exports.UPDATE_IGNORE_ENTRY = '.ethlete/update/';
|
|
8
|
+
/** Appends `entry` to `.gitignore` unless git ignores `probe` already. True when it wrote the line. */
|
|
9
|
+
const ignoreEntry = (options) => {
|
|
10
|
+
const { root, entry, probe = entry } = options;
|
|
11
|
+
if ((0, git_1.ignoredByGit)(root, probe) !== false)
|
|
12
|
+
return false;
|
|
13
|
+
const path = (0, path_1.join)(root, '.gitignore');
|
|
14
|
+
const current = (0, fs_1.existsSync)(path) ? (0, fs_1.readFileSync)(path, 'utf8') : '';
|
|
15
|
+
const separator = current.length === 0 || current.endsWith('\n') ? '' : '\n';
|
|
16
|
+
(0, fs_1.writeFileSync)(path, `${current}${separator}${entry}\n`, 'utf8');
|
|
17
|
+
return true;
|
|
18
|
+
};
|
|
19
|
+
exports.ignoreEntry = ignoreEntry;
|
|
20
|
+
const ignoreUpdateDir = (root) => (0, exports.ignoreEntry)({ root, entry: exports.UPDATE_IGNORE_ENTRY, probe: `${exports.UPDATE_IGNORE_ENTRY}pending.json` });
|
|
21
|
+
exports.ignoreUpdateDir = ignoreUpdateDir;
|
|
22
|
+
//# sourceMappingURL=gitignore.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gitignore.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/gitignore.ts"],"names":[],"mappings":";;;AAAA,2BAA6D;AAC7D,+BAA4B;AAC5B,oCAA0C;AAE7B,QAAA,mBAAmB,GAAG,kBAAkB,CAAC;AAEtD,uGAAuG;AAChG,MAAM,WAAW,GAAG,CAAC,OAAwD,EAAE,EAAE;IACtF,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAE/C,IAAI,IAAA,kBAAY,EAAC,IAAI,EAAE,KAAK,CAAC,KAAK,KAAK;QAAE,OAAO,KAAK,CAAC;IAEtD,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,YAAY,CAAC,CAAC;IACtC,MAAM,OAAO,GAAG,IAAA,eAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IACnE,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,KAAK,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;IAE7E,IAAA,kBAAa,EAAC,IAAI,EAAE,GAAG,OAAO,GAAG,SAAS,GAAG,KAAK,IAAI,EAAE,MAAM,CAAC,CAAC;IAEhE,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAZW,QAAA,WAAW,eAYtB;AAEK,MAAM,eAAe,GAAG,CAAC,IAAY,EAAE,EAAE,CAC9C,IAAA,mBAAW,EAAC,EAAE,IAAI,EAAE,KAAK,EAAE,2BAAmB,EAAE,KAAK,EAAE,GAAG,2BAAmB,cAAc,EAAE,CAAC,CAAC;AADpF,QAAA,eAAe,mBACqE"}
|
|
@@ -1,12 +1,18 @@
|
|
|
1
|
+
export * from './agent-rules-sync';
|
|
1
2
|
export * from './ai';
|
|
2
3
|
export * from './args';
|
|
4
|
+
export * from './available-migrations';
|
|
5
|
+
export * from './commits';
|
|
3
6
|
export * from './migration-manifest';
|
|
7
|
+
export * from './migration-record';
|
|
8
|
+
export * from './migrations-command';
|
|
4
9
|
export * from './package-manager';
|
|
5
10
|
export * from './packages';
|
|
6
11
|
export * from './pending';
|
|
7
12
|
export * from './plan';
|
|
8
13
|
export * from './registry';
|
|
9
14
|
export * from './run-migrations';
|
|
15
|
+
export * from './scan';
|
|
10
16
|
export * from './semver';
|
|
11
17
|
export * from './tasks';
|
|
12
18
|
export * from './update-command';
|
package/src/lib/update/index.js
CHANGED
|
@@ -1,15 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const tslib_1 = require("tslib");
|
|
4
|
+
tslib_1.__exportStar(require("./agent-rules-sync"), exports);
|
|
4
5
|
tslib_1.__exportStar(require("./ai"), exports);
|
|
5
6
|
tslib_1.__exportStar(require("./args"), exports);
|
|
7
|
+
tslib_1.__exportStar(require("./available-migrations"), exports);
|
|
8
|
+
tslib_1.__exportStar(require("./commits"), exports);
|
|
6
9
|
tslib_1.__exportStar(require("./migration-manifest"), exports);
|
|
10
|
+
tslib_1.__exportStar(require("./migration-record"), exports);
|
|
11
|
+
tslib_1.__exportStar(require("./migrations-command"), exports);
|
|
7
12
|
tslib_1.__exportStar(require("./package-manager"), exports);
|
|
8
13
|
tslib_1.__exportStar(require("./packages"), exports);
|
|
9
14
|
tslib_1.__exportStar(require("./pending"), exports);
|
|
10
15
|
tslib_1.__exportStar(require("./plan"), exports);
|
|
11
16
|
tslib_1.__exportStar(require("./registry"), exports);
|
|
12
17
|
tslib_1.__exportStar(require("./run-migrations"), exports);
|
|
18
|
+
tslib_1.__exportStar(require("./scan"), exports);
|
|
13
19
|
tslib_1.__exportStar(require("./semver"), exports);
|
|
14
20
|
tslib_1.__exportStar(require("./tasks"), exports);
|
|
15
21
|
tslib_1.__exportStar(require("./update-command"), exports);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/index.ts"],"names":[],"mappings":";;;AAAA,+CAAqB;AACrB,iDAAuB;AACvB,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B;AAC3B,2DAAiC;AACjC,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/index.ts"],"names":[],"mappings":";;;AAAA,6DAAmC;AACnC,+CAAqB;AACrB,iDAAuB;AACvB,iEAAuC;AACvC,oDAA0B;AAC1B,+DAAqC;AACrC,6DAAmC;AACnC,+DAAqC;AACrC,4DAAkC;AAClC,qDAA2B;AAC3B,oDAA0B;AAC1B,iDAAuB;AACvB,qDAA2B;AAC3B,2DAAiC;AACjC,iDAAuB;AACvB,mDAAyB;AACzB,kDAAwB;AACxB,2DAAiC"}
|
|
@@ -2,17 +2,27 @@
|
|
|
2
2
|
export declare const MIGRATIONS_MANIFEST_KEY = "ethlete";
|
|
3
3
|
export declare const MIGRATION_KINDS: readonly ["auto", "manual", "assisted"];
|
|
4
4
|
export type MigrationKind = (typeof MIGRATION_KINDS)[number];
|
|
5
|
+
export declare const MIGRATION_LEVELS: readonly ["required", "recommended", "optional"];
|
|
6
|
+
export type MigrationLevel = (typeof MIGRATION_LEVELS)[number];
|
|
5
7
|
export type Migration = {
|
|
6
8
|
/** Unique inside its package, and stable: it names the migration in every report. */
|
|
7
9
|
name: string;
|
|
8
10
|
/** The version the change landed in. The migration is pending for an update that crosses it. */
|
|
9
11
|
version: string;
|
|
10
12
|
kind: MigrationKind;
|
|
13
|
+
/** Whether `et update` must run it. A manifest entry without a level is `required`. */
|
|
14
|
+
level: MigrationLevel;
|
|
11
15
|
description: string;
|
|
12
16
|
/** `auto` only: the Nx generator that rewrites the code, as `@ethlete/core:migrate-x`. */
|
|
13
17
|
generator?: string;
|
|
14
18
|
/** `auto` only: flags handed to the generator, for example `{ skipFormat: true }`. */
|
|
15
19
|
options?: Record<string, string | number | boolean>;
|
|
20
|
+
/**
|
|
21
|
+
* An Nx generator that finds the files the migration would touch and changes none. `et migrations` runs it
|
|
22
|
+
* with `--dry-run`, the migration's `options` and the env var `ETHLETE_SCAN_FILE` set to a path, and the
|
|
23
|
+
* generator writes a JSON array of the affected workspace-relative paths to that file.
|
|
24
|
+
*/
|
|
25
|
+
scan?: string;
|
|
16
26
|
/** Markdown next to the manifest: the recommendation for `manual`, the prompt for `assisted`. */
|
|
17
27
|
instructions?: string;
|
|
18
28
|
/** Path on the docs site, for example `/components/button`. */
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.instructionsPath = exports.readPackageMigrations = exports.MIGRATION_KINDS = exports.MIGRATIONS_MANIFEST_KEY = void 0;
|
|
3
|
+
exports.instructionsPath = exports.readPackageMigrations = exports.MIGRATION_LEVELS = exports.MIGRATION_KINDS = exports.MIGRATIONS_MANIFEST_KEY = void 0;
|
|
4
4
|
const fs_1 = require("fs");
|
|
5
5
|
const path_1 = require("path");
|
|
6
6
|
const semver_1 = require("./semver");
|
|
7
7
|
/** The `package.json` field a package points at its own migration manifest with. */
|
|
8
8
|
exports.MIGRATIONS_MANIFEST_KEY = 'ethlete';
|
|
9
9
|
exports.MIGRATION_KINDS = ['auto', 'manual', 'assisted'];
|
|
10
|
+
exports.MIGRATION_LEVELS = ['required', 'recommended', 'optional'];
|
|
10
11
|
const isRecord = (value) => typeof value === 'object' && value !== null && !Array.isArray(value);
|
|
11
12
|
const readJson = (path) => {
|
|
12
13
|
try {
|
|
@@ -31,6 +32,7 @@ const readOptions = (value) => {
|
|
|
31
32
|
return options;
|
|
32
33
|
};
|
|
33
34
|
const parseEntry = (options) => {
|
|
35
|
+
var _a;
|
|
34
36
|
const { value, origin, index } = options;
|
|
35
37
|
const at = `${origin} entry ${index}`;
|
|
36
38
|
if (!isRecord(value))
|
|
@@ -38,9 +40,13 @@ const parseEntry = (options) => {
|
|
|
38
40
|
const name = readString(value, 'name');
|
|
39
41
|
const version = readString(value, 'version');
|
|
40
42
|
const kind = readString(value, 'kind');
|
|
43
|
+
const level = (_a = readString(value, 'level')) !== null && _a !== void 0 ? _a : 'required';
|
|
41
44
|
const description = readString(value, 'description');
|
|
42
45
|
if (!name)
|
|
43
46
|
return { problem: `${at} has no "name".` };
|
|
47
|
+
if (!/^[\w.-]+$/.test(name) || /^\.+$/.test(name)) {
|
|
48
|
+
return { problem: `${origin} "${name}" has a name outside letters, digits, ".", "_" and "-".` };
|
|
49
|
+
}
|
|
44
50
|
if (!version)
|
|
45
51
|
return { problem: `${origin} "${name}" has no "version".` };
|
|
46
52
|
if (!(0, semver_1.isValidVersion)(version))
|
|
@@ -50,12 +56,18 @@ const parseEntry = (options) => {
|
|
|
50
56
|
if (!exports.MIGRATION_KINDS.includes(kind)) {
|
|
51
57
|
return { problem: `${origin} "${name}" has kind "${kind}" — use one of ${exports.MIGRATION_KINDS.join(', ')}.` };
|
|
52
58
|
}
|
|
59
|
+
if (!exports.MIGRATION_LEVELS.includes(level)) {
|
|
60
|
+
return { problem: `${origin} "${name}" has level "${level}" — use one of ${exports.MIGRATION_LEVELS.join(', ')}.` };
|
|
61
|
+
}
|
|
53
62
|
if (!description)
|
|
54
63
|
return { problem: `${origin} "${name}" has no "description".` };
|
|
55
64
|
const generator = readString(value, 'generator');
|
|
56
65
|
const instructions = readString(value, 'instructions');
|
|
57
66
|
if (kind === 'auto' && !generator)
|
|
58
67
|
return { problem: `${origin} "${name}" is auto but names no "generator".` };
|
|
68
|
+
if (instructions && ((0, path_1.isAbsolute)(instructions) || instructions.split(/[\\/]/).includes('..'))) {
|
|
69
|
+
return { problem: `${origin} "${name}" names "instructions" outside its package: ${instructions}.` };
|
|
70
|
+
}
|
|
59
71
|
if (kind === 'assisted' && !instructions) {
|
|
60
72
|
return { problem: `${origin} "${name}" is assisted but names no "instructions" file.` };
|
|
61
73
|
}
|
|
@@ -64,9 +76,11 @@ const parseEntry = (options) => {
|
|
|
64
76
|
name,
|
|
65
77
|
version,
|
|
66
78
|
kind: kind,
|
|
79
|
+
level: level,
|
|
67
80
|
description,
|
|
68
81
|
generator,
|
|
69
82
|
options: readOptions(value['options']),
|
|
83
|
+
scan: readString(value, 'scan'),
|
|
70
84
|
instructions,
|
|
71
85
|
docs: readString(value, 'docs'),
|
|
72
86
|
},
|
|
@@ -129,8 +143,6 @@ const instructionsPath = (options) => {
|
|
|
129
143
|
const { manifestPath, migration } = options;
|
|
130
144
|
if (!migration.instructions)
|
|
131
145
|
return undefined;
|
|
132
|
-
if ((0, path_1.isAbsolute)(migration.instructions))
|
|
133
|
-
return migration.instructions;
|
|
134
146
|
return manifestPath ? (0, path_1.resolve)((0, path_1.dirname)(manifestPath), migration.instructions) : undefined;
|
|
135
147
|
};
|
|
136
148
|
exports.instructionsPath = instructionsPath;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migration-manifest.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/migration-manifest.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAA0D;AAC1D,qCAA0C;AAE1C,oFAAoF;AACvE,QAAA,uBAAuB,GAAG,SAAS,CAAC;AAEpC,QAAA,eAAe,GAAG,CAAC,MAAM,EAAE,QAAQ,EAAE,UAAU,CAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"migration-manifest.js","sourceRoot":"","sources":["../../../../../../libs/cli/src/lib/update/migration-manifest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
export declare const MIGRATION_RECORD_FILE: string;
|
|
2
|
+
export type MigrationRun = {
|
|
3
|
+
/** The installed version of the package when the migration ran. */
|
|
4
|
+
version: string;
|
|
5
|
+
ranAt: string;
|
|
6
|
+
};
|
|
7
|
+
/** The runs of the recommended and optional migrations, keyed by `<package>:<name>`. */
|
|
8
|
+
export type MigrationRecord = Record<string, MigrationRun>;
|
|
9
|
+
export type ReadMigrationRecord = {
|
|
10
|
+
record: MigrationRecord;
|
|
11
|
+
problems: string[];
|
|
12
|
+
};
|
|
13
|
+
export declare const migrationKey: (options: {
|
|
14
|
+
packageName: string;
|
|
15
|
+
name: string;
|
|
16
|
+
}) => string;
|
|
17
|
+
export declare const readMigrationRecord: (root: string) => ReadMigrationRecord;
|
|
18
|
+
/** Adds one run to the record, keeping the runs that are there. */
|
|
19
|
+
export declare const writeMigrationRun: (options: {
|
|
20
|
+
root: string;
|
|
21
|
+
packageName: string;
|
|
22
|
+
name: string;
|
|
23
|
+
run: MigrationRun;
|
|
24
|
+
}) => void;
|