@bloomreach/brxm-upgrade 0.1.2 → 0.1.3
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 +58 -0
- package/dist/commands/execute.d.ts.map +1 -1
- package/dist/commands/execute.js +4 -2
- package/dist/commands/execute.js.map +1 -1
- package/dist/commands/finalize.js +1 -1
- package/dist/commands/finalize.js.map +1 -1
- package/dist/commands/log-change.js +1 -1
- package/dist/commands/log-change.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +3 -1
- package/dist/commands/plan.js.map +1 -1
- package/dist/config/ai-status.d.ts +22 -0
- package/dist/config/ai-status.d.ts.map +1 -0
- package/dist/config/ai-status.js +54 -0
- package/dist/config/ai-status.js.map +1 -0
- package/dist/config/index.js +1 -1
- package/dist/config/index.js.map +1 -1
- package/dist/config/schema.js +2 -2
- package/dist/config/schema.js.map +1 -1
- package/dist/core/upgrade-state.d.ts +6 -0
- package/dist/core/upgrade-state.d.ts.map +1 -1
- package/dist/core/upgrade-state.js.map +1 -1
- package/dist/guide/GuideRunner.d.ts +28 -3
- package/dist/guide/GuideRunner.d.ts.map +1 -1
- package/dist/guide/GuideRunner.js +139 -43
- package/dist/guide/GuideRunner.js.map +1 -1
- package/dist/guide/env-status.d.ts +56 -0
- package/dist/guide/env-status.d.ts.map +1 -0
- package/dist/guide/env-status.js +274 -0
- package/dist/guide/env-status.js.map +1 -0
- package/dist/guide/phases/ExecutionPhase.d.ts +8 -0
- package/dist/guide/phases/ExecutionPhase.d.ts.map +1 -1
- package/dist/guide/phases/ExecutionPhase.js +60 -13
- package/dist/guide/phases/ExecutionPhase.js.map +1 -1
- package/dist/guide/phases/PlanPhase.d.ts.map +1 -1
- package/dist/guide/phases/PlanPhase.js +3 -1
- package/dist/guide/phases/PlanPhase.js.map +1 -1
- package/dist/guide/rendering/formatters.d.ts +2 -0
- package/dist/guide/rendering/formatters.d.ts.map +1 -1
- package/dist/guide/rendering/formatters.js +1 -2
- package/dist/guide/rendering/formatters.js.map +1 -1
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +59 -36
- package/dist/index.js.map +1 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/git.d.ts +19 -0
- package/dist/utils/git.d.ts.map +1 -0
- package/dist/utils/git.js +52 -0
- package/dist/utils/git.js.map +1 -0
- package/package.json +3 -2
|
@@ -1,15 +1,18 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
2
|
import chalk from 'chalk';
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
|
-
import { getAvailableVersions } from '../planning/manifest-loader.js';
|
|
5
4
|
import { DiscoveryPhase } from './phases/DiscoveryPhase.js';
|
|
6
5
|
import { PlanPhase } from './phases/PlanPhase.js';
|
|
7
6
|
import { ExecutionPhase } from './phases/ExecutionPhase.js';
|
|
8
7
|
import { formatWelcomeBanner, formatIntroExplanation, formatResumeBanner, formatTransition, } from './rendering/formatters.js';
|
|
9
8
|
import { ChatContextBuilder } from './chat/ChatContextBuilder.js';
|
|
10
9
|
import { ChatLoop } from './chat/ChatLoop.js';
|
|
11
|
-
import { pathExists, readTextFile, writeTextFile, joinPaths } from '../utils/fs.js';
|
|
10
|
+
import { pathExists, readTextFile, writeTextFile, joinPaths, removeDir } from '../utils/fs.js';
|
|
12
11
|
import { generateExportMarkdown } from '../commands/export.js';
|
|
12
|
+
import { checkEnvironment, formatEnvPanel, formatBlockers } from './env-status.js';
|
|
13
|
+
import { getCurrentHead } from '../utils/git.js';
|
|
14
|
+
import { loadUpgradeState, saveUpgradeState } from '../core/upgrade-state.js';
|
|
15
|
+
import { StateManager } from '../execution/state-manager.js';
|
|
13
16
|
/**
|
|
14
17
|
* Main orchestrator for the guided upgrade experience.
|
|
15
18
|
*
|
|
@@ -38,40 +41,39 @@ export class GuideRunner {
|
|
|
38
41
|
async run() {
|
|
39
42
|
try {
|
|
40
43
|
const context = this.createContext();
|
|
44
|
+
await this.captureInitialGitHead();
|
|
41
45
|
const resumeState = await this.detectResumeState();
|
|
42
|
-
|
|
46
|
+
const env = await checkEnvironment(this.config, this.projectRoot, this.manifestOptions);
|
|
43
47
|
const hasResumeState = resumeState.hasDiscovery || resumeState.hasPlan || resumeState.hasExecution;
|
|
48
|
+
// Hard blockers always exit, regardless of resume state. Welcome banner
|
|
49
|
+
// first per design — user always sees they're in the right tool — then
|
|
50
|
+
// actionable blocker text, then exit.
|
|
51
|
+
if (env.blockers.length > 0) {
|
|
52
|
+
console.log(formatWelcomeBanner());
|
|
53
|
+
console.log(formatBlockers(env.blockers));
|
|
54
|
+
process.exit(1);
|
|
55
|
+
}
|
|
56
|
+
// Banner: resume or welcome.
|
|
57
|
+
let startPhaseIndex = 0;
|
|
44
58
|
if (hasResumeState) {
|
|
45
|
-
|
|
59
|
+
console.log(formatResumeBanner(resumeState));
|
|
46
60
|
}
|
|
47
61
|
else {
|
|
48
62
|
console.log(formatWelcomeBanner());
|
|
63
|
+
}
|
|
64
|
+
// Panel: full when --verbose, warnings-only otherwise (silent when clean).
|
|
65
|
+
if (this.config.output.verbose) {
|
|
66
|
+
console.log(formatEnvPanel(env, 'full'));
|
|
67
|
+
}
|
|
68
|
+
else if (env.warnings.length > 0) {
|
|
69
|
+
console.log(formatEnvPanel(env, 'warnings-only'));
|
|
70
|
+
}
|
|
71
|
+
// Intro is fresh-launch flavor only. Resume goes straight to the prompt.
|
|
72
|
+
if (!hasResumeState) {
|
|
49
73
|
console.log(formatIntroExplanation());
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
if (versions.length === 0) {
|
|
54
|
-
console.log(chalk.yellow('No upgrade manifests found.'));
|
|
55
|
-
console.log('');
|
|
56
|
-
console.log('Manifests are distributed separately. To set them up:');
|
|
57
|
-
console.log('');
|
|
58
|
-
console.log(` ${chalk.bold('brxm-upgrade setup-manifests')}`);
|
|
59
|
-
console.log('');
|
|
60
|
-
console.log('Or manually:');
|
|
61
|
-
console.log(' mvn dependency:copy \\');
|
|
62
|
-
console.log(' -Dartifact=com.bloomreach.xm:brxm-upgrade-manifests:RELEASE:zip \\');
|
|
63
|
-
console.log(' -DoutputDirectory=.brxm-upgrade/ \\');
|
|
64
|
-
console.log(' -Dtransitive=false -q');
|
|
65
|
-
console.log(' unzip .brxm-upgrade/brxm-upgrade-manifests-*.zip \\');
|
|
66
|
-
console.log(' -d .brxm-upgrade/manifests/');
|
|
67
|
-
console.log('');
|
|
68
|
-
console.log('Then add to .brxmrc:');
|
|
69
|
-
console.log(' upgrade:');
|
|
70
|
-
console.log(' source: local');
|
|
71
|
-
console.log(' localPath: .brxm-upgrade/manifests');
|
|
72
|
-
console.log('');
|
|
73
|
-
process.exit(1);
|
|
74
|
-
}
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
startPhaseIndex = await this.handleResume(resumeState, context);
|
|
75
77
|
}
|
|
76
78
|
const phases = [
|
|
77
79
|
new DiscoveryPhase(),
|
|
@@ -83,12 +85,27 @@ export class GuideRunner {
|
|
|
83
85
|
const phase = phases[i];
|
|
84
86
|
const result = await phase.run(context);
|
|
85
87
|
if (!result.success) {
|
|
86
|
-
const
|
|
87
|
-
if (
|
|
88
|
-
i--; //
|
|
88
|
+
const choice = await this.promptRetryOrExit(phase.name, result);
|
|
89
|
+
if (choice === 'retry') {
|
|
90
|
+
i--; // for-loop i++ brings us back to the same phase
|
|
89
91
|
continue;
|
|
90
92
|
}
|
|
91
|
-
|
|
93
|
+
if (choice === 'skip-step') {
|
|
94
|
+
await this.skipFailedSteps();
|
|
95
|
+
i--; // re-enter the same phase; it will skip past failed steps
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
if (choice === 'return-to-plan') {
|
|
99
|
+
await this.returnToPlanPhase();
|
|
100
|
+
// Clear context fields populated by the failed phase so the
|
|
101
|
+
// restarted PlanPhase rebuilds them.
|
|
102
|
+
delete context.plan;
|
|
103
|
+
delete context.executionState;
|
|
104
|
+
delete context.executionResults;
|
|
105
|
+
i = 0; // for-loop i++ advances to index 1 (PlanPhase)
|
|
106
|
+
continue;
|
|
107
|
+
}
|
|
108
|
+
// choice === 'exit'
|
|
92
109
|
return this.buildFallbackSummary(context, startTime);
|
|
93
110
|
}
|
|
94
111
|
// Extract GuideSummary from ExecutionPhase data if available
|
|
@@ -121,6 +138,50 @@ export class GuideRunner {
|
|
|
121
138
|
docsClient: this.docsClient,
|
|
122
139
|
};
|
|
123
140
|
}
|
|
141
|
+
/**
|
|
142
|
+
* On fresh tool launch, capture the current git HEAD so the reject-and-abort
|
|
143
|
+
* flow (Bug #3) can offer a hard reset back to the user's pre-tool state.
|
|
144
|
+
* Idempotent: never overwrites a previously captured HEAD. Failures are
|
|
145
|
+
* silent — if git is unavailable, the reject flow simply skips the reset
|
|
146
|
+
* offer.
|
|
147
|
+
*/
|
|
148
|
+
async captureInitialGitHead() {
|
|
149
|
+
try {
|
|
150
|
+
const existing = await loadUpgradeState(this.projectRoot);
|
|
151
|
+
if (existing?.initialGitHead) {
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
const sha = getCurrentHead(this.projectRoot);
|
|
155
|
+
await saveUpgradeState(this.projectRoot, {
|
|
156
|
+
...(existing ?? {}),
|
|
157
|
+
initialGitHead: sha,
|
|
158
|
+
});
|
|
159
|
+
}
|
|
160
|
+
catch {
|
|
161
|
+
// Silent — git unavailable just disables the reset offer
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Delete all known state files under .brxm-upgrade/ but preserve the
|
|
166
|
+
* manifests/ subdirectory and any user-managed configuration.
|
|
167
|
+
*
|
|
168
|
+
* Called when the user chooses "Start fresh" at the resume prompt — Bug #5.
|
|
169
|
+
*/
|
|
170
|
+
async clearStateFiles() {
|
|
171
|
+
const baseDir = joinPaths(this.projectRoot, '.brxm-upgrade');
|
|
172
|
+
const stateFiles = [
|
|
173
|
+
'discovery.json',
|
|
174
|
+
'plan.json',
|
|
175
|
+
'execution-state.json',
|
|
176
|
+
'upgrade-state.json',
|
|
177
|
+
];
|
|
178
|
+
for (const file of stateFiles) {
|
|
179
|
+
const filePath = joinPaths(baseDir, file);
|
|
180
|
+
if (await pathExists(filePath)) {
|
|
181
|
+
await removeDir(filePath);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
124
185
|
/**
|
|
125
186
|
* Check for existing upgrade artifacts on disk to detect a previous session.
|
|
126
187
|
*/
|
|
@@ -186,7 +247,6 @@ export class GuideRunner {
|
|
|
186
247
|
* @returns The phase index to start from (0 = fresh start)
|
|
187
248
|
*/
|
|
188
249
|
async handleResume(resumeState, context) {
|
|
189
|
-
console.log(formatResumeBanner(resumeState));
|
|
190
250
|
const { choice } = (await inquirer.prompt([
|
|
191
251
|
{
|
|
192
252
|
type: 'select',
|
|
@@ -198,8 +258,10 @@ export class GuideRunner {
|
|
|
198
258
|
],
|
|
199
259
|
},
|
|
200
260
|
]));
|
|
201
|
-
if (choice === 'fresh')
|
|
261
|
+
if (choice === 'fresh') {
|
|
262
|
+
await this.clearStateFiles();
|
|
202
263
|
return 0;
|
|
264
|
+
}
|
|
203
265
|
// Populate context from resume state and determine start phase
|
|
204
266
|
if (resumeState.hasExecution && resumeState.executionState && resumeState.plan) {
|
|
205
267
|
context.discovery = resumeState.discovery;
|
|
@@ -229,24 +291,28 @@ export class GuideRunner {
|
|
|
229
291
|
return 0;
|
|
230
292
|
}
|
|
231
293
|
/**
|
|
232
|
-
* Prompt the user
|
|
233
|
-
*
|
|
234
|
-
*
|
|
294
|
+
* Prompt the user with recovery options when a phase fails. Bug #7:
|
|
295
|
+
* the Execution phase has additional recovery paths (skip failed steps,
|
|
296
|
+
* return to plan) that other phases don't.
|
|
235
297
|
*/
|
|
236
298
|
async promptRetryOrExit(phaseName, result) {
|
|
237
299
|
const errorDetail = result.error ?? result.summary;
|
|
300
|
+
const choices = [
|
|
301
|
+
{ name: 'Retry this phase', value: 'retry' },
|
|
302
|
+
];
|
|
303
|
+
if (phaseName === 'Execution') {
|
|
304
|
+
choices.push({ name: 'Skip failed step(s) and continue', value: 'skip-step' }, { name: 'Return to Plan phase', value: 'return-to-plan' });
|
|
305
|
+
}
|
|
306
|
+
choices.push({ name: 'Exit', value: 'exit' });
|
|
238
307
|
const { choice } = (await inquirer.prompt([
|
|
239
308
|
{
|
|
240
309
|
type: 'select',
|
|
241
310
|
name: 'choice',
|
|
242
311
|
message: `Phase "${phaseName}" failed: ${errorDetail}. What would you like to do?`,
|
|
243
|
-
choices
|
|
244
|
-
{ name: 'Retry this phase', value: 'retry' },
|
|
245
|
-
{ name: 'Exit', value: 'exit' },
|
|
246
|
-
],
|
|
312
|
+
choices,
|
|
247
313
|
},
|
|
248
314
|
]));
|
|
249
|
-
return choice
|
|
315
|
+
return choice;
|
|
250
316
|
}
|
|
251
317
|
/**
|
|
252
318
|
* Pause between phases so the user can review output.
|
|
@@ -371,6 +437,36 @@ export class GuideRunner {
|
|
|
371
437
|
+ ` Exported upgrade plan to ${context.config.output.exportPath}/upgrade-plan.md (${context.plan.summary.totalSteps} steps)`);
|
|
372
438
|
console.log('');
|
|
373
439
|
}
|
|
440
|
+
/**
|
|
441
|
+
* Bug #7: move every failed step into skippedSteps so the next ExecutionPhase
|
|
442
|
+
* iteration moves past them. No-op when no state has been persisted.
|
|
443
|
+
*/
|
|
444
|
+
async skipFailedSteps() {
|
|
445
|
+
const stateManager = new StateManager(this.projectRoot);
|
|
446
|
+
const state = await stateManager.loadState();
|
|
447
|
+
if (!state)
|
|
448
|
+
return;
|
|
449
|
+
for (const sn of state.failedSteps) {
|
|
450
|
+
if (!state.skippedSteps.includes(sn))
|
|
451
|
+
state.skippedSteps.push(sn);
|
|
452
|
+
}
|
|
453
|
+
state.failedSteps = [];
|
|
454
|
+
state.updatedAt = new Date().toISOString();
|
|
455
|
+
await stateManager.saveState(state);
|
|
456
|
+
}
|
|
457
|
+
/**
|
|
458
|
+
* Bug #7: drop the plan and execution state but keep discovery so the
|
|
459
|
+
* next loop iteration restarts at PlanPhase with the same project context.
|
|
460
|
+
*/
|
|
461
|
+
async returnToPlanPhase() {
|
|
462
|
+
const baseDir = joinPaths(this.projectRoot, '.brxm-upgrade');
|
|
463
|
+
const planPath = joinPaths(baseDir, 'plan.json');
|
|
464
|
+
if (await pathExists(planPath)) {
|
|
465
|
+
await removeDir(planPath);
|
|
466
|
+
}
|
|
467
|
+
const stateManager = new StateManager(this.projectRoot);
|
|
468
|
+
await stateManager.clearState();
|
|
469
|
+
}
|
|
374
470
|
/**
|
|
375
471
|
* Build a fallback GuideSummary when the ExecutionPhase did not provide one
|
|
376
472
|
* (e.g., early exit due to failure).
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GuideRunner.js","sourceRoot":"","sources":["../../src/guide/GuideRunner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"GuideRunner.js","sourceRoot":"","sources":["../../src/guide/GuideRunner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { BrxmUpgradeConfig } from '../config/index.js';
|
|
2
|
+
import type { ManifestLoadOptions } from '../planning/types.js';
|
|
3
|
+
export interface EnvStatus {
|
|
4
|
+
manifests: {
|
|
5
|
+
ok: boolean;
|
|
6
|
+
source: 'local' | 'bundled';
|
|
7
|
+
path?: string;
|
|
8
|
+
count: number;
|
|
9
|
+
};
|
|
10
|
+
ai: {
|
|
11
|
+
provider: string;
|
|
12
|
+
apiKeyEnv?: string;
|
|
13
|
+
apiKeyFound: boolean;
|
|
14
|
+
baseUrl?: string;
|
|
15
|
+
};
|
|
16
|
+
git: {
|
|
17
|
+
inRepo: boolean;
|
|
18
|
+
clean: boolean;
|
|
19
|
+
initialHeadCaptured: boolean;
|
|
20
|
+
};
|
|
21
|
+
build: {
|
|
22
|
+
mvn: {
|
|
23
|
+
found: boolean;
|
|
24
|
+
version?: string;
|
|
25
|
+
};
|
|
26
|
+
jdk: {
|
|
27
|
+
found: boolean;
|
|
28
|
+
majorVersion?: number;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
blockers: Array<{
|
|
32
|
+
key: string;
|
|
33
|
+
title: string;
|
|
34
|
+
instructions: string[];
|
|
35
|
+
}>;
|
|
36
|
+
warnings: Array<{
|
|
37
|
+
key: string;
|
|
38
|
+
message: string;
|
|
39
|
+
}>;
|
|
40
|
+
}
|
|
41
|
+
export declare function checkEnvironment(config: BrxmUpgradeConfig, projectRoot: string, manifestOptions: ManifestLoadOptions): Promise<EnvStatus>;
|
|
42
|
+
/**
|
|
43
|
+
* Render the blockers list as a human-readable, copyable error block.
|
|
44
|
+
* Plain text (not box-drawn) so the user can copy/paste commands easily.
|
|
45
|
+
*/
|
|
46
|
+
export declare function formatBlockers(blockers: EnvStatus['blockers']): string;
|
|
47
|
+
/**
|
|
48
|
+
* Render the environment status as either a compact warnings block or a
|
|
49
|
+
* full box-drawn 4-row panel matching the welcome banner's visual style.
|
|
50
|
+
*
|
|
51
|
+
* @param status The populated EnvStatus from checkEnvironment.
|
|
52
|
+
* @param mode 'warnings-only' renders only when warnings exist;
|
|
53
|
+
* 'full' always renders all four rows in a box.
|
|
54
|
+
*/
|
|
55
|
+
export declare function formatEnvPanel(status: EnvStatus, mode: 'warnings-only' | 'full'): string;
|
|
56
|
+
//# sourceMappingURL=env-status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"env-status.d.ts","sourceRoot":"","sources":["../../src/guide/env-status.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAC5D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAShE,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,OAAO,GAAG,SAAS,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC;IACtF,EAAE,EAAS;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC5F,GAAG,EAAQ;QAAE,MAAM,EAAE,OAAO,CAAC;QAAC,KAAK,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAA;KAAE,CAAC;IAC7E,KAAK,EAAM;QACT,GAAG,EAAE;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,OAAO,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;QAC1C,GAAG,EAAE;YAAE,KAAK,EAAE,OAAO,CAAC;YAAC,YAAY,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC;KAChD,CAAC;IACF,QAAQ,EAAG,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC,CAAC;IACzE,QAAQ,EAAG,KAAK,CAAC;QAAE,GAAG,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACpD;AAsGD,wBAAsB,gBAAgB,CACpC,MAAM,EAAE,iBAAiB,EACzB,WAAW,EAAE,MAAM,EACnB,eAAe,EAAE,mBAAmB,GACnC,OAAO,CAAC,SAAS,CAAC,CAoEpB;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,SAAS,CAAC,UAAU,CAAC,GAAG,MAAM,CAatE;AA8DD;;;;;;;GAOG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,SAAS,EACjB,IAAI,EAAE,eAAe,GAAG,MAAM,GAC7B,MAAM,CAgCR"}
|
|
@@ -0,0 +1,274 @@
|
|
|
1
|
+
import { getAvailableVersions } from '../planning/manifest-loader.js';
|
|
2
|
+
import { getApiKey } from '../config/index.js';
|
|
3
|
+
import { execFileSync, spawnSync } from 'node:child_process';
|
|
4
|
+
import { hasUncommittedChanges } from '../utils/git.js';
|
|
5
|
+
import { loadUpgradeState } from '../core/upgrade-state.js';
|
|
6
|
+
import chalk from 'chalk';
|
|
7
|
+
import { BANNER_BOX_WIDTH } from './rendering/formatters.js';
|
|
8
|
+
async function probeManifests(options) {
|
|
9
|
+
try {
|
|
10
|
+
const versions = await getAvailableVersions(options);
|
|
11
|
+
return {
|
|
12
|
+
ok: versions.length > 0,
|
|
13
|
+
source: options.source,
|
|
14
|
+
path: options.localPath,
|
|
15
|
+
count: versions.length,
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// getAvailableVersions throws when localPath is missing or unreadable.
|
|
20
|
+
// Treat as zero manifests; the blocker synthesizer (task 6) will surface
|
|
21
|
+
// this with the same actionable instructions as today's inline check.
|
|
22
|
+
return {
|
|
23
|
+
ok: false,
|
|
24
|
+
source: options.source,
|
|
25
|
+
path: options.localPath,
|
|
26
|
+
count: 0,
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
function probeAI(config) {
|
|
31
|
+
const apiKey = getApiKey(config.ai.provider, config.ai.apiKeyEnv);
|
|
32
|
+
return {
|
|
33
|
+
provider: config.ai.provider,
|
|
34
|
+
apiKeyEnv: config.ai.apiKeyEnv,
|
|
35
|
+
apiKeyFound: !!apiKey,
|
|
36
|
+
baseUrl: config.ai.baseUrl,
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
async function probeGit(projectRoot) {
|
|
40
|
+
let inRepo = false;
|
|
41
|
+
try {
|
|
42
|
+
execFileSync('git', ['rev-parse', '--is-inside-work-tree'], {
|
|
43
|
+
cwd: projectRoot,
|
|
44
|
+
encoding: 'utf-8',
|
|
45
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
46
|
+
});
|
|
47
|
+
inRepo = true;
|
|
48
|
+
}
|
|
49
|
+
catch {
|
|
50
|
+
// Not a git repo — caller will treat as a warning.
|
|
51
|
+
}
|
|
52
|
+
if (!inRepo) {
|
|
53
|
+
return { inRepo: false, clean: false, initialHeadCaptured: false };
|
|
54
|
+
}
|
|
55
|
+
const dirty = hasUncommittedChanges(projectRoot);
|
|
56
|
+
let initialHeadCaptured = false;
|
|
57
|
+
try {
|
|
58
|
+
const state = await loadUpgradeState(projectRoot);
|
|
59
|
+
initialHeadCaptured = !!state?.initialGitHead;
|
|
60
|
+
}
|
|
61
|
+
catch {
|
|
62
|
+
// Missing/corrupt upgrade-state.json — treat as not-yet-captured.
|
|
63
|
+
}
|
|
64
|
+
return { inRepo: true, clean: !dirty, initialHeadCaptured };
|
|
65
|
+
}
|
|
66
|
+
function probeBuild() {
|
|
67
|
+
const mvnResult = spawnSync('mvn', ['-version'], { encoding: 'utf-8' });
|
|
68
|
+
let mvn;
|
|
69
|
+
if (mvnResult.error || mvnResult.status !== 0) {
|
|
70
|
+
mvn = { found: false };
|
|
71
|
+
}
|
|
72
|
+
else {
|
|
73
|
+
const out = (mvnResult.stdout ?? '') + (mvnResult.stderr ?? '');
|
|
74
|
+
const match = /Apache Maven (\d+\.\d+\.\d+)/.exec(out);
|
|
75
|
+
mvn = match ? { found: true, version: match[1] } : { found: true };
|
|
76
|
+
}
|
|
77
|
+
const jdkResult = spawnSync('java', ['-version'], { encoding: 'utf-8' });
|
|
78
|
+
let jdk;
|
|
79
|
+
if (jdkResult.error || jdkResult.status !== 0) {
|
|
80
|
+
jdk = { found: false };
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
// Java prints to stderr, not stdout.
|
|
84
|
+
const out = (jdkResult.stderr ?? '') + (jdkResult.stdout ?? '');
|
|
85
|
+
// Modern: "21.0.1" → 21. Legacy: "1.8.0_xyz" → 8.
|
|
86
|
+
const m = /version "(\d+)\.(\d+)/.exec(out);
|
|
87
|
+
let majorVersion;
|
|
88
|
+
if (m) {
|
|
89
|
+
const first = parseInt(m[1], 10);
|
|
90
|
+
const second = parseInt(m[2], 10);
|
|
91
|
+
majorVersion = first === 1 ? second : first;
|
|
92
|
+
}
|
|
93
|
+
jdk = majorVersion !== undefined ? { found: true, majorVersion } : { found: true };
|
|
94
|
+
}
|
|
95
|
+
return { mvn, jdk };
|
|
96
|
+
}
|
|
97
|
+
export async function checkEnvironment(config, projectRoot, manifestOptions) {
|
|
98
|
+
// Stub probes to be replaced in subsequent tasks. Returning empty/default
|
|
99
|
+
// shapes lets the bootstrap test pass while we build out probes
|
|
100
|
+
// task-by-task.
|
|
101
|
+
const [manifests, ai, git, build] = await Promise.all([
|
|
102
|
+
probeManifests(manifestOptions),
|
|
103
|
+
Promise.resolve(probeAI(config)),
|
|
104
|
+
probeGit(projectRoot),
|
|
105
|
+
Promise.resolve(probeBuild()),
|
|
106
|
+
]);
|
|
107
|
+
const blockers = [];
|
|
108
|
+
const warnings = [];
|
|
109
|
+
if (!manifests.ok) {
|
|
110
|
+
blockers.push({
|
|
111
|
+
key: 'manifests.missing',
|
|
112
|
+
title: 'No upgrade manifests are installed.',
|
|
113
|
+
instructions: [
|
|
114
|
+
'Run:',
|
|
115
|
+
' brxm-upgrade setup-manifests',
|
|
116
|
+
'',
|
|
117
|
+
'Or manually:',
|
|
118
|
+
' mvn dependency:copy \\',
|
|
119
|
+
' -Dartifact=com.bloomreach.xm:brxm-upgrade-manifests:RELEASE:zip \\',
|
|
120
|
+
' -DoutputDirectory=.brxm-upgrade/ \\',
|
|
121
|
+
' -Dtransitive=false -q',
|
|
122
|
+
' unzip .brxm-upgrade/brxm-upgrade-manifests-*.zip \\',
|
|
123
|
+
' -d .brxm-upgrade/manifests/',
|
|
124
|
+
'',
|
|
125
|
+
'Then add to .brxmrc.yaml:',
|
|
126
|
+
' upgrade:',
|
|
127
|
+
' source: local',
|
|
128
|
+
' localPath: .brxm-upgrade/manifests',
|
|
129
|
+
],
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
if (!ai.apiKeyFound) {
|
|
133
|
+
const envHint = ai.apiKeyEnv ? ` (looked in $${ai.apiKeyEnv})` : '';
|
|
134
|
+
warnings.push({
|
|
135
|
+
key: 'ai.no-key',
|
|
136
|
+
message: `AI features disabled — no API key for provider "${ai.provider}"${envHint}.`,
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
if (!git.inRepo) {
|
|
140
|
+
warnings.push({
|
|
141
|
+
key: 'git.not-a-repo',
|
|
142
|
+
message: 'Git rollback disabled — not running inside a git working tree.',
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
if (!build.mvn.found) {
|
|
146
|
+
warnings.push({
|
|
147
|
+
key: 'build.mvn-missing',
|
|
148
|
+
message: 'Maven not found on PATH — execute phase will fail when it tries to run mvn.',
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
if (!build.jdk.found) {
|
|
152
|
+
warnings.push({
|
|
153
|
+
key: 'build.jdk-missing',
|
|
154
|
+
message: 'Java not found on PATH — execute phase will fail when it tries to invoke the JDK.',
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
return { manifests, ai, git, build, blockers, warnings };
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Render the blockers list as a human-readable, copyable error block.
|
|
161
|
+
* Plain text (not box-drawn) so the user can copy/paste commands easily.
|
|
162
|
+
*/
|
|
163
|
+
export function formatBlockers(blockers) {
|
|
164
|
+
if (blockers.length === 0)
|
|
165
|
+
return '';
|
|
166
|
+
const lines = [chalk.red.bold('brxm-upgrade cannot proceed:'), ''];
|
|
167
|
+
blockers.forEach((b, i) => {
|
|
168
|
+
lines.push(` ${i + 1}. ${chalk.bold(b.title)}`);
|
|
169
|
+
lines.push('');
|
|
170
|
+
for (const ins of b.instructions) {
|
|
171
|
+
lines.push(ins === '' ? '' : ` ${ins}`);
|
|
172
|
+
}
|
|
173
|
+
lines.push('');
|
|
174
|
+
});
|
|
175
|
+
return lines.join('\n');
|
|
176
|
+
}
|
|
177
|
+
// ── formatEnvPanel helpers ────────────────────────────────────────────────────
|
|
178
|
+
const ROW_LABEL_WIDTH = 11; // 'Manifests ', 'Build ', etc.
|
|
179
|
+
function statusGlyph(state) {
|
|
180
|
+
switch (state) {
|
|
181
|
+
case 'ok': return chalk.green('✓');
|
|
182
|
+
case 'warn': return chalk.yellow('⚠');
|
|
183
|
+
case 'err': return chalk.red('✗');
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
function describeManifests(s) {
|
|
187
|
+
if (!s.ok)
|
|
188
|
+
return { state: 'err', text: 'no manifests installed' };
|
|
189
|
+
return { state: 'ok', text: `${s.source} (${s.count} versions)` };
|
|
190
|
+
}
|
|
191
|
+
function describeAI(s) {
|
|
192
|
+
if (!s.apiKeyFound) {
|
|
193
|
+
const envHint = s.apiKeyEnv ? `no API key in $${s.apiKeyEnv}` : 'no API key';
|
|
194
|
+
return { state: 'warn', text: `${s.provider} — ${envHint}` };
|
|
195
|
+
}
|
|
196
|
+
const proxyHint = s.baseUrl ? ' (proxy)' : '';
|
|
197
|
+
return { state: 'ok', text: `${s.provider}${proxyHint}` };
|
|
198
|
+
}
|
|
199
|
+
function describeGit(s) {
|
|
200
|
+
if (!s.inRepo)
|
|
201
|
+
return { state: 'warn', text: 'not running inside a git working tree' };
|
|
202
|
+
const cleanText = s.clean ? 'clean working tree' : 'dirty working tree';
|
|
203
|
+
const headText = s.initialHeadCaptured ? ', HEAD captured' : '';
|
|
204
|
+
return { state: 'ok', text: `${cleanText}${headText}` };
|
|
205
|
+
}
|
|
206
|
+
function describeBuild(s) {
|
|
207
|
+
const parts = [];
|
|
208
|
+
if (s.mvn.found)
|
|
209
|
+
parts.push(s.mvn.version ? `Maven ${s.mvn.version}` : 'Maven');
|
|
210
|
+
else
|
|
211
|
+
parts.push('Maven not found');
|
|
212
|
+
if (s.jdk.found)
|
|
213
|
+
parts.push(s.jdk.majorVersion !== undefined ? `JDK ${s.jdk.majorVersion}` : 'JDK');
|
|
214
|
+
else
|
|
215
|
+
parts.push('JDK not found');
|
|
216
|
+
const state = s.mvn.found && s.jdk.found ? 'ok' : 'warn';
|
|
217
|
+
return { state, text: parts.join(', ') };
|
|
218
|
+
}
|
|
219
|
+
function visibleLength(s) {
|
|
220
|
+
// Strip ANSI escape sequences for width calculation.
|
|
221
|
+
// eslint-disable-next-line no-control-regex
|
|
222
|
+
return s.replace(/\x1b\[[0-9;]*m/g, '').length;
|
|
223
|
+
}
|
|
224
|
+
function padRow(label, glyph, text) {
|
|
225
|
+
// Layout: ' <label-padded><glyph> <text>' inside a box of BANNER_BOX_WIDTH.
|
|
226
|
+
// The prefix (before text) is: 2 spaces + ROW_LABEL_WIDTH + 1 (glyph) + 2 spaces = 16 chars.
|
|
227
|
+
const prefixWidth = 2 + ROW_LABEL_WIDTH + 1 + 2;
|
|
228
|
+
const maxTextWidth = BANNER_BOX_WIDTH - prefixWidth;
|
|
229
|
+
const truncated = text.length > maxTextWidth ? text.slice(0, maxTextWidth - 1) + '…' : text;
|
|
230
|
+
const inner = ` ${label.padEnd(ROW_LABEL_WIDTH)}${glyph} ${truncated}`;
|
|
231
|
+
const padding = ' '.repeat(Math.max(0, BANNER_BOX_WIDTH - visibleLength(inner)));
|
|
232
|
+
return chalk.bold('│') + inner + padding + chalk.bold('│');
|
|
233
|
+
}
|
|
234
|
+
/**
|
|
235
|
+
* Render the environment status as either a compact warnings block or a
|
|
236
|
+
* full box-drawn 4-row panel matching the welcome banner's visual style.
|
|
237
|
+
*
|
|
238
|
+
* @param status The populated EnvStatus from checkEnvironment.
|
|
239
|
+
* @param mode 'warnings-only' renders only when warnings exist;
|
|
240
|
+
* 'full' always renders all four rows in a box.
|
|
241
|
+
*/
|
|
242
|
+
export function formatEnvPanel(status, mode) {
|
|
243
|
+
if (mode === 'warnings-only') {
|
|
244
|
+
if (status.warnings.length === 0)
|
|
245
|
+
return '';
|
|
246
|
+
const header = status.warnings.length === 1
|
|
247
|
+
? 'ℹ One optional feature is unavailable:'
|
|
248
|
+
: 'ℹ Some optional features are unavailable:';
|
|
249
|
+
const lines = [chalk.yellow(header)];
|
|
250
|
+
for (const w of status.warnings) {
|
|
251
|
+
lines.push(chalk.dim(` • ${w.message}`));
|
|
252
|
+
}
|
|
253
|
+
lines.push('');
|
|
254
|
+
lines.push(chalk.dim(' Run `brxm-upgrade info` for setup details.'));
|
|
255
|
+
lines.push('');
|
|
256
|
+
return lines.join('\n');
|
|
257
|
+
}
|
|
258
|
+
// mode === 'full'
|
|
259
|
+
const rows = [
|
|
260
|
+
{ label: 'Manifests', ...describeManifests(status.manifests) },
|
|
261
|
+
{ label: 'AI', ...describeAI(status.ai) },
|
|
262
|
+
{ label: 'Git', ...describeGit(status.git) },
|
|
263
|
+
{ label: 'Build', ...describeBuild(status.build) },
|
|
264
|
+
];
|
|
265
|
+
const titleText = ' Environment ';
|
|
266
|
+
const titleDashes = '─'.repeat(Math.max(0, BANNER_BOX_WIDTH - titleText.length - 1));
|
|
267
|
+
const lines = [
|
|
268
|
+
chalk.bold('╭─') + chalk.bold(titleText) + chalk.bold(titleDashes) + chalk.bold('╮'),
|
|
269
|
+
...rows.map((r) => padRow(r.label, statusGlyph(r.state), r.text)),
|
|
270
|
+
chalk.bold('╰' + '─'.repeat(BANNER_BOX_WIDTH) + '╯'),
|
|
271
|
+
];
|
|
272
|
+
return lines.join('\n');
|
|
273
|
+
}
|
|
274
|
+
//# sourceMappingURL=env-status.js.map
|