specweave 0.32.3 → 0.32.6
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/CLAUDE.md +12 -9
- package/bin/specweave.js +78 -0
- package/dist/src/cli/commands/docs.d.ts +45 -0
- package/dist/src/cli/commands/docs.d.ts.map +1 -0
- package/dist/src/cli/commands/docs.js +307 -0
- package/dist/src/cli/commands/docs.js.map +1 -0
- package/dist/src/cli/commands/init-multiproject.js +1 -1
- package/dist/src/cli/commands/init-multiproject.js.map +1 -1
- package/dist/src/cli/commands/migrate-to-multiproject.js +2 -2
- package/dist/src/cli/commands/migrate-to-multiproject.js.map +1 -1
- package/dist/src/cli/helpers/init/repository-setup.d.ts +14 -2
- package/dist/src/cli/helpers/init/repository-setup.d.ts.map +1 -1
- package/dist/src/cli/helpers/init/repository-setup.js +292 -188
- package/dist/src/cli/helpers/init/repository-setup.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/index.js +9 -3
- package/dist/src/cli/helpers/issue-tracker/index.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts +18 -2
- package/dist/src/cli/helpers/issue-tracker/jira.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/jira.js +325 -25
- package/dist/src/cli/helpers/issue-tracker/jira.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js +61 -1
- package/dist/src/cli/helpers/issue-tracker/sync-config-writer.js.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.d.ts +25 -0
- package/dist/src/cli/helpers/issue-tracker/types.d.ts.map +1 -1
- package/dist/src/cli/helpers/issue-tracker/types.js.map +1 -1
- package/dist/src/core/living-docs/cross-project-sync.d.ts +97 -0
- package/dist/src/core/living-docs/cross-project-sync.d.ts.map +1 -0
- package/dist/src/core/living-docs/cross-project-sync.js +135 -0
- package/dist/src/core/living-docs/cross-project-sync.js.map +1 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.d.ts +106 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.d.ts.map +1 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.js +146 -0
- package/dist/src/core/living-docs/external-sync-orchestrator.js.map +1 -0
- package/dist/src/core/living-docs/intelligent-analyzer/organization-synthesizer.js +1 -1
- package/dist/src/core/living-docs/living-docs-sync.d.ts +1 -0
- package/dist/src/core/living-docs/living-docs-sync.d.ts.map +1 -1
- package/dist/src/core/living-docs/living-docs-sync.js +77 -2
- package/dist/src/core/living-docs/living-docs-sync.js.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/generators.d.ts +8 -1
- package/dist/src/core/living-docs/sync-helpers/generators.d.ts.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/generators.js +18 -1
- package/dist/src/core/living-docs/sync-helpers/generators.js.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/index.d.ts +1 -1
- package/dist/src/core/living-docs/sync-helpers/index.d.ts.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/index.js.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/parsers.d.ts +3 -1
- package/dist/src/core/living-docs/sync-helpers/parsers.d.ts.map +1 -1
- package/dist/src/core/living-docs/sync-helpers/parsers.js +24 -2
- package/dist/src/core/living-docs/sync-helpers/parsers.js.map +1 -1
- package/dist/src/core/living-docs/types.d.ts +6 -0
- package/dist/src/core/living-docs/types.d.ts.map +1 -1
- package/dist/src/core/living-docs/validators/index.d.ts +7 -0
- package/dist/src/core/living-docs/validators/index.d.ts.map +1 -0
- package/dist/src/core/living-docs/validators/index.js +7 -0
- package/dist/src/core/living-docs/validators/index.js.map +1 -0
- package/dist/src/core/living-docs/validators/project-validator.d.ts +92 -0
- package/dist/src/core/living-docs/validators/project-validator.d.ts.map +1 -0
- package/dist/src/core/living-docs/validators/project-validator.js +142 -0
- package/dist/src/core/living-docs/validators/project-validator.js.map +1 -0
- package/dist/src/core/project/project-manager.d.ts.map +1 -1
- package/dist/src/core/project/project-manager.js +19 -17
- package/dist/src/core/project/project-manager.js.map +1 -1
- package/dist/src/core/types/config.d.ts +4 -2
- package/dist/src/core/types/config.d.ts.map +1 -1
- package/dist/src/core/types/config.js.map +1 -1
- package/dist/src/core/types/increment-metadata.d.ts +34 -0
- package/dist/src/core/types/increment-metadata.d.ts.map +1 -1
- package/dist/src/utils/cross-cutting-detector.d.ts +66 -0
- package/dist/src/utils/cross-cutting-detector.d.ts.map +1 -0
- package/dist/src/utils/cross-cutting-detector.js +179 -0
- package/dist/src/utils/cross-cutting-detector.js.map +1 -0
- package/dist/src/utils/docs-preview/config-generator.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/config-generator.js +12 -16
- package/dist/src/utils/docs-preview/config-generator.js.map +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/docusaurus-setup.js +24 -5
- package/dist/src/utils/docs-preview/docusaurus-setup.js.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.d.ts +3 -0
- package/dist/src/utils/docs-preview/package-installer.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/package-installer.js +18 -9
- package/dist/src/utils/docs-preview/package-installer.js.map +1 -1
- package/dist/src/utils/docs-preview/server-manager.d.ts.map +1 -1
- package/dist/src/utils/docs-preview/server-manager.js +2 -1
- package/dist/src/utils/docs-preview/server-manager.js.map +1 -1
- package/dist/src/utils/project-detection.d.ts +12 -8
- package/dist/src/utils/project-detection.d.ts.map +1 -1
- package/dist/src/utils/project-detection.js +13 -19
- package/dist/src/utils/project-detection.js.map +1 -1
- package/dist/src/utils/validators/jira-validator.d.ts +25 -1
- package/dist/src/utils/validators/jira-validator.d.ts.map +1 -1
- package/dist/src/utils/validators/jira-validator.js +254 -172
- package/dist/src/utils/validators/jira-validator.js.map +1 -1
- package/package.json +1 -1
- package/plugins/specweave/commands/specweave-status.md +64 -0
- package/plugins/specweave/hooks/hooks.json +1 -1
- package/plugins/specweave/hooks/spec-project-validator.sh +2 -1
- package/plugins/specweave/lib/vendor/core/types/increment-metadata.d.ts +34 -0
- package/plugins/specweave/skills/increment-planner/SKILL.md +77 -2
- package/plugins/specweave/skills/spec-generator/SKILL.md +78 -7
- package/plugins/specweave/commands/specweave-switch-project.md +0 -168
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../../src/utils/project-detection.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"project-detection.js","sourceRoot":"","sources":["../../../src/utils/project-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,10 @@
|
|
|
4
4
|
* Validates and creates Jira resources (projects, boards).
|
|
5
5
|
* Split from external-resource-validator.ts for maintainability.
|
|
6
6
|
*
|
|
7
|
+
* NEW (v0.33.0): Reads configuration from config.json (ADR-0050 compliant)
|
|
8
|
+
* - Secrets (API token, email) from .env
|
|
9
|
+
* - Configuration (domain, strategy, projects, boards) from config.json
|
|
10
|
+
*
|
|
7
11
|
* @module utils/validators/jira-validator
|
|
8
12
|
*/
|
|
9
13
|
import type { JiraProject, JiraBoard, JiraValidationResult } from './types.js';
|
|
@@ -13,11 +17,23 @@ export declare class JiraResourceValidator {
|
|
|
13
17
|
private email;
|
|
14
18
|
private domain;
|
|
15
19
|
private envPath;
|
|
20
|
+
private projectRoot;
|
|
16
21
|
constructor(envPath?: string);
|
|
17
22
|
/**
|
|
18
|
-
* Load .env file
|
|
23
|
+
* Load .env file (secrets only)
|
|
19
24
|
*/
|
|
20
25
|
private loadEnv;
|
|
26
|
+
/**
|
|
27
|
+
* Load config.json (ADR-0050: non-secrets configuration)
|
|
28
|
+
*
|
|
29
|
+
* NEW (v0.33.0): Configuration is read from config.json, NOT .env
|
|
30
|
+
* This aligns JIRA with ADO init pattern.
|
|
31
|
+
*/
|
|
32
|
+
private loadConfig;
|
|
33
|
+
/**
|
|
34
|
+
* Update config.json with new values (for project/board IDs after validation)
|
|
35
|
+
*/
|
|
36
|
+
private updateConfig;
|
|
21
37
|
/**
|
|
22
38
|
* Update .env file with new values
|
|
23
39
|
*/
|
|
@@ -60,6 +76,14 @@ export declare class JiraResourceValidator {
|
|
|
60
76
|
private getOrCreateFilter;
|
|
61
77
|
/**
|
|
62
78
|
* Validate and fix Jira configuration
|
|
79
|
+
*
|
|
80
|
+
* NEW (v0.33.0): Reads configuration from config.json (ADR-0050 compliant)
|
|
81
|
+
* - Secrets (API token, email) from .env
|
|
82
|
+
* - Configuration (domain, strategy, projects, boards) from config.json
|
|
83
|
+
*
|
|
84
|
+
* Structure levels:
|
|
85
|
+
* - 1-level: project only (issueTracker.projects[].key)
|
|
86
|
+
* - 2-level: project + boards (issueTracker.projects[].boards[])
|
|
63
87
|
*/
|
|
64
88
|
validate(): Promise<JiraValidationResult>;
|
|
65
89
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"jira-validator.d.ts","sourceRoot":"","sources":["../../../../src/utils/validators/jira-validator.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"jira-validator.d.ts","sourceRoot":"","sources":["../../../../src/utils/validators/jira-validator.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAK/E,YAAY,EAAE,WAAW,EAAE,SAAS,EAAE,oBAAoB,EAAE,CAAC;AA2B7D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,WAAW,CAAS;gBAEhB,OAAO,GAAE,MAAe;IAepC;;OAEG;IACH,OAAO,CAAC,OAAO;IAwBf;;;;;OAKG;IACH,OAAO,CAAC,UAAU;IAclB;;OAEG;YACW,YAAY;IAuB1B;;OAEG;YACW,SAAS;IAyBvB;;OAEG;YACW,WAAW;IA8BzB;;OAEG;IACG,aAAa,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAa7C;;OAEG;IACG,YAAY,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAanE;;OAEG;IACG,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IAwBlF;;OAEG;YACW,gBAAgB;IAS9B;;OAEG;IACG,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,EAAE,CAAC;IAa3D;;OAEG;IACG,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,GAAG,IAAI,CAAC;IA8B5D;;OAEG;IACG,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,SAAS,CAAC;IA2B5E;;OAEG;YACW,iBAAiB;IAgB/B;;;;;;;;;;OAUG;IACG,QAAQ,IAAI,OAAO,CAAC,oBAAoB,CAAC;CAuYhD;AAMD;;GAEG;AACH,wBAAsB,qBAAqB,CACzC,OAAO,GAAE,MAAe,GACvB,OAAO,CAAC,oBAAoB,CAAC,CAG/B"}
|
|
@@ -4,9 +4,14 @@
|
|
|
4
4
|
* Validates and creates Jira resources (projects, boards).
|
|
5
5
|
* Split from external-resource-validator.ts for maintainability.
|
|
6
6
|
*
|
|
7
|
+
* NEW (v0.33.0): Reads configuration from config.json (ADR-0050 compliant)
|
|
8
|
+
* - Secrets (API token, email) from .env
|
|
9
|
+
* - Configuration (domain, strategy, projects, boards) from config.json
|
|
10
|
+
*
|
|
7
11
|
* @module utils/validators/jira-validator
|
|
8
12
|
*/
|
|
9
13
|
import * as fs from '../fs-native.js';
|
|
14
|
+
import * as path from 'path';
|
|
10
15
|
import { select, input } from '@inquirer/prompts';
|
|
11
16
|
import chalk from 'chalk';
|
|
12
17
|
import { exec } from 'child_process';
|
|
@@ -15,14 +20,18 @@ const execAsync = promisify(exec);
|
|
|
15
20
|
export class JiraResourceValidator {
|
|
16
21
|
constructor(envPath = '.env') {
|
|
17
22
|
this.envPath = envPath;
|
|
18
|
-
//
|
|
23
|
+
// Derive project root from envPath (e.g., '/path/to/project/.env' -> '/path/to/project')
|
|
24
|
+
this.projectRoot = path.dirname(path.resolve(envPath));
|
|
25
|
+
// Load secrets from .env (API token, email)
|
|
19
26
|
const env = this.loadEnv();
|
|
20
27
|
this.apiToken = env.JIRA_API_TOKEN || '';
|
|
21
28
|
this.email = env.JIRA_EMAIL || '';
|
|
22
|
-
|
|
29
|
+
// Load domain from config.json (ADR-0050: non-secrets in config.json)
|
|
30
|
+
const config = this.loadConfig();
|
|
31
|
+
this.domain = config.issueTracker?.domain || env.JIRA_DOMAIN || '';
|
|
23
32
|
}
|
|
24
33
|
/**
|
|
25
|
-
* Load .env file
|
|
34
|
+
* Load .env file (secrets only)
|
|
26
35
|
*/
|
|
27
36
|
loadEnv() {
|
|
28
37
|
try {
|
|
@@ -45,6 +54,48 @@ export class JiraResourceValidator {
|
|
|
45
54
|
return {};
|
|
46
55
|
}
|
|
47
56
|
}
|
|
57
|
+
/**
|
|
58
|
+
* Load config.json (ADR-0050: non-secrets configuration)
|
|
59
|
+
*
|
|
60
|
+
* NEW (v0.33.0): Configuration is read from config.json, NOT .env
|
|
61
|
+
* This aligns JIRA with ADO init pattern.
|
|
62
|
+
*/
|
|
63
|
+
loadConfig() {
|
|
64
|
+
try {
|
|
65
|
+
const configPath = path.join(this.projectRoot, '.specweave', 'config.json');
|
|
66
|
+
if (!fs.existsSync(configPath)) {
|
|
67
|
+
return {};
|
|
68
|
+
}
|
|
69
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
70
|
+
return JSON.parse(content);
|
|
71
|
+
}
|
|
72
|
+
catch (error) {
|
|
73
|
+
return {};
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Update config.json with new values (for project/board IDs after validation)
|
|
78
|
+
*/
|
|
79
|
+
async updateConfig(updates) {
|
|
80
|
+
try {
|
|
81
|
+
const configPath = path.join(this.projectRoot, '.specweave', 'config.json');
|
|
82
|
+
let config = {};
|
|
83
|
+
if (fs.existsSync(configPath)) {
|
|
84
|
+
const content = fs.readFileSync(configPath, 'utf-8');
|
|
85
|
+
config = JSON.parse(content);
|
|
86
|
+
}
|
|
87
|
+
// Deep merge updates
|
|
88
|
+
if (updates.issueTracker) {
|
|
89
|
+
config.issueTracker = { ...config.issueTracker, ...updates.issueTracker };
|
|
90
|
+
}
|
|
91
|
+
fs.writeFileSync(configPath, JSON.stringify(config, null, 2));
|
|
92
|
+
console.log(chalk.green(`✅ Updated .specweave/config.json`));
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.error(chalk.red(`❌ Failed to update config.json: ${error.message}`));
|
|
96
|
+
throw error;
|
|
97
|
+
}
|
|
98
|
+
}
|
|
48
99
|
/**
|
|
49
100
|
* Update .env file with new values
|
|
50
101
|
*/
|
|
@@ -266,6 +317,14 @@ export class JiraResourceValidator {
|
|
|
266
317
|
}
|
|
267
318
|
/**
|
|
268
319
|
* Validate and fix Jira configuration
|
|
320
|
+
*
|
|
321
|
+
* NEW (v0.33.0): Reads configuration from config.json (ADR-0050 compliant)
|
|
322
|
+
* - Secrets (API token, email) from .env
|
|
323
|
+
* - Configuration (domain, strategy, projects, boards) from config.json
|
|
324
|
+
*
|
|
325
|
+
* Structure levels:
|
|
326
|
+
* - 1-level: project only (issueTracker.projects[].key)
|
|
327
|
+
* - 2-level: project + boards (issueTracker.projects[].boards[])
|
|
269
328
|
*/
|
|
270
329
|
async validate() {
|
|
271
330
|
console.log(chalk.blue('\n🔍 Validating Jira configuration...\n'));
|
|
@@ -275,44 +334,53 @@ export class JiraResourceValidator {
|
|
|
275
334
|
boards: { valid: true, existing: [], missing: [], created: [] },
|
|
276
335
|
envUpdated: false,
|
|
277
336
|
};
|
|
278
|
-
|
|
279
|
-
const
|
|
280
|
-
|
|
337
|
+
// Load configuration from config.json (ADR-0050)
|
|
338
|
+
const config = this.loadConfig();
|
|
339
|
+
const issueTracker = config.issueTracker;
|
|
340
|
+
if (!issueTracker || issueTracker.provider !== 'jira') {
|
|
341
|
+
console.log(chalk.red('❌ Jira not configured in .specweave/config.json'));
|
|
342
|
+
console.log(chalk.gray(' Expected: issueTracker.provider = "jira"'));
|
|
343
|
+
console.log(chalk.gray(' Run: specweave init to configure Jira'));
|
|
344
|
+
result.valid = false;
|
|
345
|
+
return result;
|
|
346
|
+
}
|
|
347
|
+
const strategy = issueTracker.strategy || 'project-per-team';
|
|
348
|
+
// Determine project key(s) from config.json (NOT .env!)
|
|
281
349
|
let projectKeys = [];
|
|
282
|
-
if (
|
|
283
|
-
//
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
}
|
|
290
|
-
projectKeys = projectsEnv.split(',').map(p => p.trim()).filter(p => p);
|
|
350
|
+
if (issueTracker.projects && issueTracker.projects.length > 0) {
|
|
351
|
+
// NEW: Read from config.json issueTracker.projects array
|
|
352
|
+
projectKeys = issueTracker.projects.map(p => p.key);
|
|
353
|
+
}
|
|
354
|
+
else if (issueTracker.project) {
|
|
355
|
+
// Single project (component-based or board-based strategy)
|
|
356
|
+
projectKeys = [issueTracker.project];
|
|
291
357
|
}
|
|
292
358
|
else {
|
|
293
|
-
//
|
|
294
|
-
const
|
|
295
|
-
if (
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
359
|
+
// Fallback: Try to read from sync profiles
|
|
360
|
+
const syncProfiles = config.sync?.profiles;
|
|
361
|
+
if (syncProfiles) {
|
|
362
|
+
for (const profile of Object.values(syncProfiles)) {
|
|
363
|
+
if (profile.config?.projects) {
|
|
364
|
+
projectKeys = profile.config.projects;
|
|
365
|
+
break;
|
|
366
|
+
}
|
|
367
|
+
else if (profile.config?.projectKey) {
|
|
368
|
+
projectKeys = [profile.config.projectKey];
|
|
369
|
+
break;
|
|
370
|
+
}
|
|
371
|
+
}
|
|
299
372
|
}
|
|
300
|
-
|
|
373
|
+
}
|
|
374
|
+
if (projectKeys.length === 0) {
|
|
375
|
+
console.log(chalk.red('❌ No Jira projects configured in .specweave/config.json'));
|
|
376
|
+
console.log(chalk.gray(' Expected: issueTracker.projects[].key or issueTracker.project'));
|
|
377
|
+
console.log(chalk.gray(' Run: specweave init to configure Jira projects'));
|
|
378
|
+
result.valid = false;
|
|
379
|
+
return result;
|
|
301
380
|
}
|
|
302
381
|
// 1. Validate project(s)
|
|
303
382
|
console.log(chalk.gray(`Strategy: ${strategy}`));
|
|
304
383
|
console.log(chalk.gray(`Checking project(s): ${projectKeys.join(', ')}...\n`));
|
|
305
|
-
// NEW: Validate per-project var naming (detect orphaned configs)
|
|
306
|
-
const perProjectBoardVars = Object.keys(env).filter(key => key.startsWith('JIRA_BOARDS_'));
|
|
307
|
-
for (const varName of perProjectBoardVars) {
|
|
308
|
-
const projectFromVar = varName.split('JIRA_BOARDS_')[1];
|
|
309
|
-
if (!projectKeys.includes(projectFromVar)) {
|
|
310
|
-
console.log(chalk.yellow(`⚠️ Configuration warning: ${varName}`));
|
|
311
|
-
console.log(chalk.gray(` Project "${projectFromVar}" not found in JIRA_PROJECTS`));
|
|
312
|
-
console.log(chalk.gray(` Expected projects: ${projectKeys.join(', ')}`));
|
|
313
|
-
console.log(chalk.gray(` This configuration will be ignored.\n`));
|
|
314
|
-
}
|
|
315
|
-
}
|
|
316
384
|
// Track all validated/created projects (for multi-project IDs)
|
|
317
385
|
const allProjects = [];
|
|
318
386
|
for (const projectKey of projectKeys) {
|
|
@@ -423,172 +491,186 @@ export class JiraResourceValidator {
|
|
|
423
491
|
}
|
|
424
492
|
}
|
|
425
493
|
console.log(); // Empty line after project validation
|
|
426
|
-
// Update .
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
await this.
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
for (const projectKey of projectKeys) {
|
|
444
|
-
const perProjectKey = `JIRA_BOARDS_${projectKey}`;
|
|
445
|
-
if (env[perProjectKey]) {
|
|
446
|
-
hasPerProjectBoards = true;
|
|
447
|
-
break;
|
|
448
|
-
}
|
|
494
|
+
// Update config.json with project IDs (for multi-project strategy)
|
|
495
|
+
// NOTE: In v0.33.0+, we update config.json, NOT .env (ADR-0050)
|
|
496
|
+
if (allProjects.length > 0) {
|
|
497
|
+
// Update issueTracker.projects with validated IDs
|
|
498
|
+
const updatedProjects = allProjects.map(p => ({
|
|
499
|
+
key: p.key,
|
|
500
|
+
id: p.id,
|
|
501
|
+
name: p.name
|
|
502
|
+
}));
|
|
503
|
+
await this.updateConfig({
|
|
504
|
+
issueTracker: {
|
|
505
|
+
...issueTracker,
|
|
506
|
+
projects: updatedProjects
|
|
507
|
+
}
|
|
508
|
+
});
|
|
509
|
+
result.envUpdated = true; // Renamed but still indicates config was updated
|
|
510
|
+
console.log(chalk.green(`✅ Updated config.json with project IDs\n`));
|
|
449
511
|
}
|
|
512
|
+
// 2. Validate boards (from config.json issueTracker.projects[].boards)
|
|
513
|
+
result.boards = { valid: true, existing: [], missing: [], created: [] };
|
|
514
|
+
// Check if any project has boards configured in config.json
|
|
515
|
+
const projectsWithBoards = issueTracker.projects?.filter(p => p.boards && p.boards.length > 0) || [];
|
|
516
|
+
const hasPerProjectBoards = projectsWithBoards.length > 0;
|
|
517
|
+
// Also check legacy board-based strategy (issueTracker.boards)
|
|
518
|
+
const legacyBoards = issueTracker.boards || [];
|
|
450
519
|
if (hasPerProjectBoards) {
|
|
451
|
-
// Per-project boards (
|
|
520
|
+
// Per-project boards from config.json (2-level structure)
|
|
452
521
|
console.log(chalk.gray(`Checking per-project boards...\n`));
|
|
453
522
|
// Track board names to detect conflicts across projects
|
|
454
523
|
const boardNamesSeen = new Map(); // name -> project
|
|
455
|
-
for (const
|
|
456
|
-
const
|
|
457
|
-
const
|
|
458
|
-
if (
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
const
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
524
|
+
for (const projectConfig of issueTracker.projects || []) {
|
|
525
|
+
const projectKey = projectConfig.key;
|
|
526
|
+
const boards = projectConfig.boards || [];
|
|
527
|
+
if (boards.length > 0) {
|
|
528
|
+
console.log(chalk.gray(` Project: ${projectKey} (${boards.length} boards)`));
|
|
529
|
+
const finalBoardIds = [];
|
|
530
|
+
for (const boardConfig of boards) {
|
|
531
|
+
const boardIdStr = boardConfig.id;
|
|
532
|
+
const isNumeric = /^\d+$/.test(boardIdStr);
|
|
533
|
+
if (isNumeric) {
|
|
534
|
+
// Entry is a board ID - validate it exists AND belongs to this project
|
|
535
|
+
const boardId = parseInt(boardIdStr, 10);
|
|
536
|
+
const board = await this.checkBoard(boardId);
|
|
537
|
+
if (board) {
|
|
538
|
+
// Validate board belongs to the correct project
|
|
539
|
+
if (board.location?.projectKey && board.location.projectKey !== projectKey) {
|
|
540
|
+
console.log(chalk.yellow(` ⚠️ Board ${boardId}: ${board.name} belongs to project ${board.location.projectKey}, not ${projectKey}`));
|
|
541
|
+
console.log(chalk.gray(` Expected: ${projectKey}, Found: ${board.location.projectKey}`));
|
|
542
|
+
result.boards.missing.push(boardIdStr);
|
|
543
|
+
result.boards.valid = false;
|
|
544
|
+
}
|
|
545
|
+
else {
|
|
546
|
+
// Board exists and belongs to correct project
|
|
547
|
+
if (board.location?.projectKey) {
|
|
548
|
+
console.log(chalk.green(` ✅ Board ${boardId}: ${board.name} (project: ${board.location.projectKey})`));
|
|
476
549
|
}
|
|
477
550
|
else {
|
|
478
|
-
|
|
479
|
-
if (board.location?.projectKey) {
|
|
480
|
-
console.log(chalk.green(` ✅ Board ${boardId}: ${board.name} (project: ${board.location.projectKey})`));
|
|
481
|
-
}
|
|
482
|
-
else {
|
|
483
|
-
console.log(chalk.green(` ✅ Board ${boardId}: ${board.name} (project verification skipped)`));
|
|
484
|
-
}
|
|
485
|
-
result.boards.existing.push(board.id);
|
|
486
|
-
finalBoardIds.push(board.id);
|
|
551
|
+
console.log(chalk.green(` ✅ Board ${boardId}: ${board.name} (project verification skipped)`));
|
|
487
552
|
}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
console.log(chalk.yellow(` ⚠️ Board ${boardId}: Not found`));
|
|
491
|
-
result.boards.missing.push(entry);
|
|
492
|
-
result.boards.valid = false;
|
|
553
|
+
result.boards.existing.push(board.id);
|
|
554
|
+
finalBoardIds.push({ id: String(board.id), name: board.name });
|
|
493
555
|
}
|
|
494
556
|
}
|
|
495
557
|
else {
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
500
|
-
|
|
501
|
-
|
|
502
|
-
|
|
503
|
-
|
|
558
|
+
console.log(chalk.yellow(` ⚠️ Board ${boardId}: Not found`));
|
|
559
|
+
result.boards.missing.push(boardIdStr);
|
|
560
|
+
result.boards.valid = false;
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
else {
|
|
564
|
+
// Entry is a board name - check for conflicts, then create it
|
|
565
|
+
const boardName = boardConfig.name || boardIdStr;
|
|
566
|
+
if (boardNamesSeen.has(boardName)) {
|
|
567
|
+
const existingProject = boardNamesSeen.get(boardName);
|
|
568
|
+
console.log(chalk.yellow(` ⚠️ Board name conflict: "${boardName}" already used in project ${existingProject}`));
|
|
569
|
+
console.log(chalk.gray(` Tip: Use unique board names or append project suffix (e.g., "${boardName}-${projectKey}")`));
|
|
570
|
+
result.boards.missing.push(boardName);
|
|
571
|
+
result.boards.valid = false;
|
|
572
|
+
}
|
|
573
|
+
else {
|
|
574
|
+
console.log(chalk.blue(` 📦 Creating board: ${boardName}...`));
|
|
575
|
+
try {
|
|
576
|
+
const board = await this.createBoard(boardName, projectKey);
|
|
577
|
+
console.log(chalk.green(` ✅ Created: ${boardName} (ID: ${board.id})`));
|
|
578
|
+
result.boards.created.push({ name: boardName, id: board.id });
|
|
579
|
+
finalBoardIds.push({ id: String(board.id), name: board.name });
|
|
580
|
+
boardNamesSeen.set(boardName, projectKey);
|
|
504
581
|
}
|
|
505
|
-
|
|
506
|
-
console.log(chalk.
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
console.log(chalk.green(` ✅ Created: ${entry} (ID: ${board.id})`));
|
|
510
|
-
result.boards.created.push({ name: entry, id: board.id });
|
|
511
|
-
finalBoardIds.push(board.id);
|
|
512
|
-
boardNamesSeen.set(entry, projectKey); // Track this board name
|
|
513
|
-
}
|
|
514
|
-
catch (error) {
|
|
515
|
-
console.log(chalk.red(` ❌ Failed to create ${entry}: ${error.message}`));
|
|
516
|
-
result.boards.missing.push(entry);
|
|
517
|
-
result.boards.valid = false;
|
|
518
|
-
}
|
|
582
|
+
catch (error) {
|
|
583
|
+
console.log(chalk.red(` ❌ Failed to create ${boardName}: ${error.message}`));
|
|
584
|
+
result.boards.missing.push(boardName);
|
|
585
|
+
result.boards.valid = false;
|
|
519
586
|
}
|
|
520
587
|
}
|
|
521
588
|
}
|
|
522
|
-
|
|
523
|
-
|
|
524
|
-
|
|
525
|
-
|
|
526
|
-
|
|
527
|
-
|
|
589
|
+
}
|
|
590
|
+
// Update config.json with validated board IDs
|
|
591
|
+
if (finalBoardIds.length > 0) {
|
|
592
|
+
const currentConfig = this.loadConfig();
|
|
593
|
+
const updatedProjects = (currentConfig.issueTracker?.projects || []).map(p => {
|
|
594
|
+
if (p.key === projectKey) {
|
|
595
|
+
return { ...p, boards: finalBoardIds };
|
|
596
|
+
}
|
|
597
|
+
return p;
|
|
598
|
+
});
|
|
599
|
+
await this.updateConfig({
|
|
600
|
+
issueTracker: {
|
|
601
|
+
...currentConfig.issueTracker,
|
|
602
|
+
projects: updatedProjects
|
|
603
|
+
}
|
|
604
|
+
});
|
|
605
|
+
result.envUpdated = true;
|
|
606
|
+
console.log(chalk.green(` ✅ Updated config.json with board IDs for ${projectKey}`));
|
|
528
607
|
}
|
|
529
608
|
}
|
|
530
609
|
}
|
|
531
610
|
console.log();
|
|
532
611
|
}
|
|
533
|
-
else {
|
|
534
|
-
// Legacy: Global boards (backward compatibility)
|
|
535
|
-
|
|
536
|
-
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
const
|
|
541
|
-
const
|
|
542
|
-
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
548
|
-
|
|
549
|
-
|
|
550
|
-
result.boards.existing.push(board.id);
|
|
551
|
-
finalBoardIds.push(board.id);
|
|
552
|
-
}
|
|
553
|
-
else {
|
|
554
|
-
console.log(chalk.yellow(` ⚠️ Board ${boardId}: Not found`));
|
|
555
|
-
result.boards.missing.push(entry);
|
|
556
|
-
result.boards.valid = false;
|
|
557
|
-
}
|
|
612
|
+
else if (legacyBoards.length > 0 && strategy === 'board-based') {
|
|
613
|
+
// Legacy: Global boards from config.json (backward compatibility)
|
|
614
|
+
console.log(chalk.gray(`Checking boards: ${legacyBoards.map(b => b.id).join(', ')}...`));
|
|
615
|
+
// For board-based strategy, use the single project key
|
|
616
|
+
const projectKeyForBoards = projectKeys[0];
|
|
617
|
+
const finalBoardIds = [];
|
|
618
|
+
for (const boardConfig of legacyBoards) {
|
|
619
|
+
const boardIdStr = boardConfig.id;
|
|
620
|
+
const isNumeric = /^\d+$/.test(boardIdStr);
|
|
621
|
+
if (isNumeric) {
|
|
622
|
+
// Entry is a board ID - validate it exists
|
|
623
|
+
const boardId = parseInt(boardIdStr, 10);
|
|
624
|
+
const board = await this.checkBoard(boardId);
|
|
625
|
+
if (board) {
|
|
626
|
+
console.log(chalk.green(` ✅ Board ${boardId}: ${board.name} (exists)`));
|
|
627
|
+
result.boards.existing.push(board.id);
|
|
628
|
+
finalBoardIds.push({ id: String(board.id), name: board.name });
|
|
558
629
|
}
|
|
559
630
|
else {
|
|
560
|
-
|
|
561
|
-
|
|
562
|
-
|
|
563
|
-
const board = await this.createBoard(entry, projectKeyForBoards);
|
|
564
|
-
console.log(chalk.green(` ✅ Created: ${entry} (ID: ${board.id})`));
|
|
565
|
-
result.boards.created.push({ name: entry, id: board.id });
|
|
566
|
-
finalBoardIds.push(board.id);
|
|
567
|
-
}
|
|
568
|
-
catch (error) {
|
|
569
|
-
console.log(chalk.red(` ❌ Failed to create ${entry}: ${error.message}`));
|
|
570
|
-
result.boards.missing.push(entry);
|
|
571
|
-
result.boards.valid = false;
|
|
572
|
-
}
|
|
631
|
+
console.log(chalk.yellow(` ⚠️ Board ${boardId}: Not found`));
|
|
632
|
+
result.boards.missing.push(boardIdStr);
|
|
633
|
+
result.boards.valid = false;
|
|
573
634
|
}
|
|
574
635
|
}
|
|
575
|
-
// Update .env if any boards were created
|
|
576
|
-
if (result.boards.created.length > 0) {
|
|
577
|
-
console.log(chalk.blue('\n📝 Updating .env with board IDs...'));
|
|
578
|
-
await this.updateEnv({ JIRA_BOARDS: finalBoardIds.join(',') });
|
|
579
|
-
result.boards.existing = finalBoardIds;
|
|
580
|
-
result.envUpdated = true;
|
|
581
|
-
console.log(chalk.green(`✅ Updated JIRA_BOARDS: ${finalBoardIds.join(',')}`));
|
|
582
|
-
}
|
|
583
|
-
// Summary
|
|
584
|
-
console.log();
|
|
585
|
-
if (result.boards.missing.length > 0) {
|
|
586
|
-
console.log(chalk.yellow(`⚠️ Issues found: ${result.boards.missing.length} board(s)\n`));
|
|
587
|
-
}
|
|
588
636
|
else {
|
|
589
|
-
|
|
637
|
+
// Entry is a board name - create it
|
|
638
|
+
const boardName = boardConfig.name || boardIdStr;
|
|
639
|
+
console.log(chalk.blue(` 📦 Creating board: ${boardName}...`));
|
|
640
|
+
try {
|
|
641
|
+
const board = await this.createBoard(boardName, projectKeyForBoards);
|
|
642
|
+
console.log(chalk.green(` ✅ Created: ${boardName} (ID: ${board.id})`));
|
|
643
|
+
result.boards.created.push({ name: boardName, id: board.id });
|
|
644
|
+
finalBoardIds.push({ id: String(board.id), name: board.name });
|
|
645
|
+
}
|
|
646
|
+
catch (error) {
|
|
647
|
+
console.log(chalk.red(` ❌ Failed to create ${boardName}: ${error.message}`));
|
|
648
|
+
result.boards.missing.push(boardName);
|
|
649
|
+
result.boards.valid = false;
|
|
650
|
+
}
|
|
590
651
|
}
|
|
591
652
|
}
|
|
653
|
+
// Update config.json if any boards were validated/created
|
|
654
|
+
if (finalBoardIds.length > 0) {
|
|
655
|
+
console.log(chalk.blue('\n📝 Updating config.json with board IDs...'));
|
|
656
|
+
await this.updateConfig({
|
|
657
|
+
issueTracker: {
|
|
658
|
+
...issueTracker,
|
|
659
|
+
boards: finalBoardIds
|
|
660
|
+
}
|
|
661
|
+
});
|
|
662
|
+
result.boards.existing = finalBoardIds.map(b => parseInt(b.id, 10));
|
|
663
|
+
result.envUpdated = true;
|
|
664
|
+
console.log(chalk.green(`✅ Updated issueTracker.boards in config.json`));
|
|
665
|
+
}
|
|
666
|
+
// Summary
|
|
667
|
+
console.log();
|
|
668
|
+
if (result.boards.missing.length > 0) {
|
|
669
|
+
console.log(chalk.yellow(`⚠️ Issues found: ${result.boards.missing.length} board(s)\n`));
|
|
670
|
+
}
|
|
671
|
+
else {
|
|
672
|
+
console.log(chalk.green(`✅ All boards validated/created successfully\n`));
|
|
673
|
+
}
|
|
592
674
|
}
|
|
593
675
|
return result;
|
|
594
676
|
}
|