@jterrats/smart-deployment 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -0
- package/lib/analysis/metadata-capability-definitions.d.ts +2 -0
- package/lib/analysis/metadata-capability-definitions.js +260 -0
- package/lib/analysis/metadata-capability-definitions.js.map +1 -0
- package/lib/analysis/metadata-capability-registry.d.ts +11 -0
- package/lib/analysis/metadata-capability-registry.js +142 -0
- package/lib/analysis/metadata-capability-registry.js.map +1 -0
- package/lib/analysis/metadata-gap-analysis-service.d.ts +51 -0
- package/lib/analysis/metadata-gap-analysis-service.js +277 -0
- package/lib/analysis/metadata-gap-analysis-service.js.map +1 -0
- package/lib/commands/ci-publish.d.ts +6 -2
- package/lib/commands/ci-publish.js +23 -8
- package/lib/commands/ci-publish.js.map +1 -1
- package/lib/commands/metadata/gaps.d.ts +15 -0
- package/lib/commands/metadata/gaps.js +84 -0
- package/lib/commands/metadata/gaps.js.map +1 -0
- package/lib/commands/resume.js +5 -4
- package/lib/commands/resume.js.map +1 -1
- package/lib/commands/start.d.ts +6 -0
- package/lib/commands/start.js +43 -14
- package/lib/commands/start.js.map +1 -1
- package/lib/commands/status.js +5 -2
- package/lib/commands/status.js.map +1 -1
- package/lib/commands/validate.d.ts +7 -0
- package/lib/commands/validate.js +24 -2
- package/lib/commands/validate.js.map +1 -1
- package/lib/constants/deployment-order.js +1 -0
- package/lib/constants/deployment-order.js.map +1 -1
- package/lib/deployment/commit-scope-service.d.ts +7 -0
- package/lib/deployment/commit-scope-service.js +104 -21
- package/lib/deployment/commit-scope-service.js.map +1 -1
- package/lib/deployment/deployment-runner.d.ts +1 -1
- package/lib/deployment/deployment-runner.js +23 -22
- package/lib/deployment/deployment-runner.js.map +1 -1
- package/lib/deployment/deployment-status-service.d.ts +8 -7
- package/lib/deployment/deployment-status-service.js +45 -27
- package/lib/deployment/deployment-status-service.js.map +1 -1
- package/lib/deployment/deployment-validation-service.d.ts +2 -0
- package/lib/deployment/deployment-validation-service.js +2 -0
- package/lib/deployment/deployment-validation-service.js.map +1 -1
- package/lib/deployment/resume-deployment-service.d.ts +5 -4
- package/lib/deployment/resume-deployment-service.js +18 -21
- package/lib/deployment/resume-deployment-service.js.map +1 -1
- package/lib/deployment/sf-cli-integration.d.ts +5 -2
- package/lib/deployment/sf-cli-integration.js +26 -14
- package/lib/deployment/sf-cli-integration.js.map +1 -1
- package/lib/deployment/special-deployment-plan.js +36 -49
- package/lib/deployment/special-deployment-plan.js.map +1 -1
- package/lib/deployment/start-execution-service.js +1 -1
- package/lib/deployment/start-execution-service.js.map +1 -1
- package/lib/presentation/release-report-presenter.d.ts +10 -0
- package/lib/presentation/release-report-presenter.js +35 -0
- package/lib/presentation/release-report-presenter.js.map +1 -0
- package/lib/presentation/validate-command-presenter.js +13 -0
- package/lib/presentation/validate-command-presenter.js.map +1 -1
- package/lib/reports/release-report-builder.d.ts +6 -0
- package/lib/reports/release-report-builder.js +115 -0
- package/lib/reports/release-report-builder.js.map +1 -0
- package/lib/reports/release-report-command-adapter.d.ts +14 -0
- package/lib/reports/release-report-command-adapter.js +28 -0
- package/lib/reports/release-report-command-adapter.js.map +1 -0
- package/lib/reports/release-report-facts-factory.d.ts +14 -0
- package/lib/reports/release-report-facts-factory.js +140 -0
- package/lib/reports/release-report-facts-factory.js.map +1 -0
- package/lib/reports/release-report-sanitizer.d.ts +5 -0
- package/lib/reports/release-report-sanitizer.js +120 -0
- package/lib/reports/release-report-sanitizer.js.map +1 -0
- package/lib/reports/release-report-service.d.ts +43 -0
- package/lib/reports/release-report-service.js +80 -0
- package/lib/reports/release-report-service.js.map +1 -0
- package/lib/reports/release-report-store.d.ts +30 -0
- package/lib/reports/release-report-store.js +57 -0
- package/lib/reports/release-report-store.js.map +1 -0
- package/lib/reports/start-release-report-coordinator.d.ts +15 -0
- package/lib/reports/start-release-report-coordinator.js +23 -0
- package/lib/reports/start-release-report-coordinator.js.map +1 -0
- package/lib/services/metadata-scanner-service.js +12 -2
- package/lib/services/metadata-scanner-service.js.map +1 -1
- package/lib/services/scanners/automation-ai-metadata-scanner.d.ts +2 -1
- package/lib/services/scanners/automation-ai-metadata-scanner.js +48 -0
- package/lib/services/scanners/automation-ai-metadata-scanner.js.map +1 -1
- package/lib/types/index.d.ts +2 -0
- package/lib/types/index.js +2 -0
- package/lib/types/index.js.map +1 -1
- package/lib/types/metadata-capability.d.ts +39 -0
- package/lib/types/metadata-capability.js +2 -0
- package/lib/types/metadata-capability.js.map +1 -0
- package/lib/types/metadata.d.ts +7 -1
- package/lib/types/release-report.d.ts +89 -0
- package/lib/types/release-report.js +42 -0
- package/lib/types/release-report.js.map +1 -0
- package/messages/metadata.gaps.json +12 -0
- package/messages/start.json +2 -0
- package/messages/validate.json +3 -1
- package/npm-shrinkwrap.json +417 -901
- package/oclif.lock +415 -718
- package/oclif.manifest.json +93 -10
- package/package.json +18 -14
|
@@ -0,0 +1,277 @@
|
|
|
1
|
+
import * as path from 'node:path';
|
|
2
|
+
import { readFile } from 'node:fs/promises';
|
|
3
|
+
import { SfdxProjectDetector } from '../scanner/sfdx-project-detector.js';
|
|
4
|
+
import { findDirectories, findFiles, fileExists } from '../services/scanners/scanner-runtime.js';
|
|
5
|
+
import { parseXml } from '../utils/xml.js';
|
|
6
|
+
import { metadataCapabilityRegistry } from './metadata-capability-registry.js';
|
|
7
|
+
const SOURCE_DIRECTORY_TYPES = {
|
|
8
|
+
aiAuthoringBundles: 'AiAuthoringBundle',
|
|
9
|
+
aura: 'AuraDefinitionBundle',
|
|
10
|
+
bots: 'Bot',
|
|
11
|
+
brandingSets: 'BrandingSet',
|
|
12
|
+
classes: 'ApexClass',
|
|
13
|
+
customMetadata: 'CustomMetadataRecord',
|
|
14
|
+
digitalExperiences: 'DigitalExperienceBundle',
|
|
15
|
+
email: 'EmailTemplate',
|
|
16
|
+
embeddedServiceConfigs: 'EmbeddedServiceConfig',
|
|
17
|
+
flexipages: 'FlexiPage',
|
|
18
|
+
flows: 'Flow',
|
|
19
|
+
genAiPlannerBundles: 'GenAiPlannerBundle',
|
|
20
|
+
genAiPromptTemplates: 'GenAiPromptTemplate',
|
|
21
|
+
layouts: 'Layout',
|
|
22
|
+
lwc: 'LightningComponentBundle',
|
|
23
|
+
networks: 'Network',
|
|
24
|
+
objects: 'CustomObject',
|
|
25
|
+
applications: 'CustomApplication',
|
|
26
|
+
pages: 'VisualforcePage',
|
|
27
|
+
permissionsets: 'PermissionSet',
|
|
28
|
+
profiles: 'Profile',
|
|
29
|
+
queues: 'Queue',
|
|
30
|
+
sites: 'CustomSite',
|
|
31
|
+
standardValueSets: 'StandardValueSet',
|
|
32
|
+
triggers: 'ApexTrigger',
|
|
33
|
+
};
|
|
34
|
+
const FILE_SUFFIX_TYPES = [
|
|
35
|
+
['.cls-meta.xml', 'ApexClass'],
|
|
36
|
+
['.trigger-meta.xml', 'ApexTrigger'],
|
|
37
|
+
['.flow-meta.xml', 'Flow'],
|
|
38
|
+
['.flexipage-meta.xml', 'FlexiPage'],
|
|
39
|
+
['.layout-meta.xml', 'Layout'],
|
|
40
|
+
['.permissionset-meta.xml', 'PermissionSet'],
|
|
41
|
+
['.profile-meta.xml', 'Profile'],
|
|
42
|
+
['.bot-meta.xml', 'Bot'],
|
|
43
|
+
['.botVersion-meta.xml', 'BotVersion'],
|
|
44
|
+
['.site-meta.xml', 'CustomSite'],
|
|
45
|
+
['.network-meta.xml', 'Network'],
|
|
46
|
+
['.queue-meta.xml', 'Queue'],
|
|
47
|
+
['.standardValueSet-meta.xml', 'StandardValueSet'],
|
|
48
|
+
['.embeddedServiceConfig-meta.xml', 'EmbeddedServiceConfig'],
|
|
49
|
+
['.app-meta.xml', 'CustomApplication'],
|
|
50
|
+
['.matchingRule-meta.xml', 'MatchingRules'],
|
|
51
|
+
];
|
|
52
|
+
export class MetadataGapAnalysisService {
|
|
53
|
+
capabilityRegistry;
|
|
54
|
+
constructor(capabilityRegistry = metadataCapabilityRegistry) {
|
|
55
|
+
this.capabilityRegistry = capabilityRegistry;
|
|
56
|
+
}
|
|
57
|
+
async analyze(options = {}) {
|
|
58
|
+
const sourcePath = options.sourcePath ?? process.cwd();
|
|
59
|
+
const project = await SfdxProjectDetector.detect(sourcePath);
|
|
60
|
+
if (!project.detected) {
|
|
61
|
+
throw new Error(`SFDX project not found in ${sourcePath}`);
|
|
62
|
+
}
|
|
63
|
+
const evidenceByType = new Map();
|
|
64
|
+
await this.collectManifestTypes(project.projectRoot, evidenceByType);
|
|
65
|
+
await Promise.all(project.packageDirectories.map((packageDir) => this.collectSourceTypes(packageDir, project.projectRoot, evidenceByType)));
|
|
66
|
+
const detectedTypes = [...evidenceByType.values()]
|
|
67
|
+
.map((entry) => this.toDetectedType(project.projectRoot, project.apiVersion, entry))
|
|
68
|
+
.sort((left, right) => left.metadataType.localeCompare(right.metadataType));
|
|
69
|
+
const gaps = detectedTypes.filter((type) => type.supportStatus !== 'supported').map((type) => this.toGap(type));
|
|
70
|
+
const result = {
|
|
71
|
+
success: true,
|
|
72
|
+
analysisMode: options.aiExplain === true ? 'deterministic-with-ai-context' : 'deterministic',
|
|
73
|
+
projectRoot: project.projectRoot,
|
|
74
|
+
apiVersion: project.apiVersion,
|
|
75
|
+
detectedTypes,
|
|
76
|
+
gaps,
|
|
77
|
+
summary: {
|
|
78
|
+
detectedTypeCount: detectedTypes.length,
|
|
79
|
+
supportedTypeCount: detectedTypes.filter((type) => type.supportStatus === 'supported').length,
|
|
80
|
+
gapCount: gaps.length,
|
|
81
|
+
humanReviewCount: gaps.filter((gap) => gap.requiresHumanReview).length,
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
if (options.aiExplain === true) {
|
|
85
|
+
result.aiContext = this.buildAIContext(result);
|
|
86
|
+
}
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
async collectManifestTypes(projectRoot, evidenceByType) {
|
|
90
|
+
const manifestFiles = await findFiles(projectRoot, '**/{package,destructiveChanges,destructiveChangesPre,destructiveChangesPost}.xml');
|
|
91
|
+
await Promise.all(manifestFiles.map(async (manifestPath) => {
|
|
92
|
+
const parsed = parseXml(await readFile(manifestPath, 'utf-8'));
|
|
93
|
+
const entries = toArray(parsed.Package?.types);
|
|
94
|
+
for (const entry of entries) {
|
|
95
|
+
if (typeof entry.name !== 'string' || entry.name.length === 0) {
|
|
96
|
+
continue;
|
|
97
|
+
}
|
|
98
|
+
const members = toArray(entry.members);
|
|
99
|
+
const memberCount = members.length;
|
|
100
|
+
this.addEvidence(evidenceByType, entry.name, `${manifestPath}${memberCount > 0 ? ` (${memberCount} members)` : ''}`, 'package-manifest');
|
|
101
|
+
}
|
|
102
|
+
}));
|
|
103
|
+
}
|
|
104
|
+
async collectSourceTypes(packageDir, projectRoot, evidenceByType) {
|
|
105
|
+
if (!(await fileExists(packageDir))) {
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
const metadataFiles = await findFiles(packageDir, '**/*-meta.xml');
|
|
109
|
+
for (const filePath of metadataFiles) {
|
|
110
|
+
const inferredType = inferTypeFromFilePath(filePath);
|
|
111
|
+
if (inferredType) {
|
|
112
|
+
this.addEvidence(evidenceByType, inferredType, filePath, 'source-path');
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const directories = await findDirectories(packageDir, '**/*');
|
|
116
|
+
for (const directoryPath of directories) {
|
|
117
|
+
const relativeParts = path.relative(projectRoot, directoryPath).split(path.sep);
|
|
118
|
+
const type = relativeParts.map((part) => SOURCE_DIRECTORY_TYPES[part]).find((value) => value !== undefined);
|
|
119
|
+
if (type) {
|
|
120
|
+
this.addEvidence(evidenceByType, type, directoryPath, 'source-path');
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
addEvidence(evidenceByType, metadataType, evidence, detectedFrom) {
|
|
125
|
+
const entry = evidenceByType.get(metadataType) ??
|
|
126
|
+
{
|
|
127
|
+
metadataType,
|
|
128
|
+
evidence: new Set(),
|
|
129
|
+
detectedFrom: new Set(),
|
|
130
|
+
};
|
|
131
|
+
entry.evidence.add(evidence);
|
|
132
|
+
entry.detectedFrom.add(detectedFrom);
|
|
133
|
+
evidenceByType.set(metadataType, entry);
|
|
134
|
+
}
|
|
135
|
+
toDetectedType(projectRoot, apiVersion, entry) {
|
|
136
|
+
return {
|
|
137
|
+
metadataType: entry.metadataType,
|
|
138
|
+
supportStatus: getSupportStatus(this.capabilityRegistry, entry.metadataType, apiVersion),
|
|
139
|
+
evidence: [...entry.evidence].map((evidence) => relativizeEvidence(projectRoot, evidence)).sort(),
|
|
140
|
+
detectedFrom: [...entry.detectedFrom].sort(),
|
|
141
|
+
};
|
|
142
|
+
}
|
|
143
|
+
toGap(type) {
|
|
144
|
+
const classification = classifyGap(type.metadataType, type.supportStatus);
|
|
145
|
+
return {
|
|
146
|
+
...type,
|
|
147
|
+
classification,
|
|
148
|
+
reason: describeClassification(type.metadataType, type.supportStatus, classification),
|
|
149
|
+
suggestedImplementation: suggestImplementation(type.metadataType, type.supportStatus, classification),
|
|
150
|
+
requiresHumanReview: classification === 'provider-owned' || classification === 'human-review-required',
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
buildAIContext(result) {
|
|
154
|
+
const gapLines = result.gaps.length === 0
|
|
155
|
+
? ['No metadata support gaps detected.']
|
|
156
|
+
: result.gaps.map((gap) => `- ${gap.metadataType}: ${gap.classification}, ${gap.supportStatus}, evidence=${gap.evidence.join(', ')}`);
|
|
157
|
+
return {
|
|
158
|
+
mode: 'workflow-prompt',
|
|
159
|
+
directProviderApiAllowed: false,
|
|
160
|
+
recommendedCommand: 'sf setup-agents workflow run --story PLUGIN-AI-METADATA-GAP-DETECTION',
|
|
161
|
+
prompt: [
|
|
162
|
+
'Analyze this deterministic smart-deployment metadata gap report.',
|
|
163
|
+
'Do not call provider APIs from the plugin runtime.',
|
|
164
|
+
'For safe gaps, propose scoped code, fixture, and test changes.',
|
|
165
|
+
'For provider-owned or human-review gaps, keep them blocked and explain the review evidence needed.',
|
|
166
|
+
'',
|
|
167
|
+
`Project root: ${result.projectRoot}`,
|
|
168
|
+
`API version: ${result.apiVersion}`,
|
|
169
|
+
`Detected metadata types: ${result.summary.detectedTypeCount}`,
|
|
170
|
+
`Gap count: ${result.summary.gapCount}`,
|
|
171
|
+
'',
|
|
172
|
+
...gapLines,
|
|
173
|
+
].join('\n'),
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function inferTypeFromFilePath(filePath) {
|
|
178
|
+
const fileName = path.basename(filePath);
|
|
179
|
+
const explicit = FILE_SUFFIX_TYPES.find(([suffix]) => fileName.endsWith(suffix));
|
|
180
|
+
if (explicit) {
|
|
181
|
+
return explicit[1];
|
|
182
|
+
}
|
|
183
|
+
const genericSuffix = /\.([A-Za-z][A-Za-z0-9]*)-meta\.xml$/u.exec(fileName);
|
|
184
|
+
return genericSuffix ? toMetadataTypeName(genericSuffix[1]) : undefined;
|
|
185
|
+
}
|
|
186
|
+
function toMetadataTypeName(rawType) {
|
|
187
|
+
return rawType
|
|
188
|
+
.split(/[-_]/u)
|
|
189
|
+
.filter((part) => part.length > 0)
|
|
190
|
+
.map((part) => part.charAt(0).toUpperCase() + part.slice(1))
|
|
191
|
+
.join('');
|
|
192
|
+
}
|
|
193
|
+
function getSupportStatus(registry, metadataType, apiVersion) {
|
|
194
|
+
const entry = registry.resolve(metadataType, apiVersion);
|
|
195
|
+
if (entry?.capabilities.discovery.status === 'proven') {
|
|
196
|
+
return 'supported';
|
|
197
|
+
}
|
|
198
|
+
return entry?.capabilities.ordering.status === 'proven' ? 'ordered-only' : 'unsupported';
|
|
199
|
+
}
|
|
200
|
+
function classifyGap(metadataType, supportStatus) {
|
|
201
|
+
if (isProviderOwned(metadataType)) {
|
|
202
|
+
return 'provider-owned';
|
|
203
|
+
}
|
|
204
|
+
if (isHumanReviewRequired(metadataType)) {
|
|
205
|
+
return 'human-review-required';
|
|
206
|
+
}
|
|
207
|
+
if (isOrderingSpecial(metadataType)) {
|
|
208
|
+
return 'ordering-special';
|
|
209
|
+
}
|
|
210
|
+
if (supportStatus === 'ordered-only' || needsDependencyRules(metadataType)) {
|
|
211
|
+
return 'dependency-rule';
|
|
212
|
+
}
|
|
213
|
+
return 'registry-only';
|
|
214
|
+
}
|
|
215
|
+
function isProviderOwned(metadataType) {
|
|
216
|
+
return /(Ai|Einstein|GenAi|Ml|Bot|DigitalExperience|Experience|Network|Site|Lwr)/u.test(metadataType);
|
|
217
|
+
}
|
|
218
|
+
function isHumanReviewRequired(metadataType) {
|
|
219
|
+
return /(Profile|Permission|Sharing|Territory|License|AuthProvider|ConnectedApp|Certificate|Credential)/u.test(metadataType);
|
|
220
|
+
}
|
|
221
|
+
function isOrderingSpecial(metadataType) {
|
|
222
|
+
return /(Settings|Credential|RemoteSite|ExternalData|DataSource|CspTrusted|CorsWhitelist)/u.test(metadataType);
|
|
223
|
+
}
|
|
224
|
+
function needsDependencyRules(metadataType) {
|
|
225
|
+
return /(Rule|Layout|Field|Object|Flow|Action|Application|RecordType|Duplicate|Matching|Assignment|Escalation)/u.test(metadataType);
|
|
226
|
+
}
|
|
227
|
+
function describeClassification(metadataType, supportStatus, classification) {
|
|
228
|
+
if (supportStatus === 'ordered-only') {
|
|
229
|
+
return `${metadataType} has deployment ordering but no scanner/parser coverage, so dependency behavior is not proven.`;
|
|
230
|
+
}
|
|
231
|
+
const descriptions = {
|
|
232
|
+
'registry-only': `${metadataType} appears to be a simple metadata type that may only need registry and fixture coverage.`,
|
|
233
|
+
'dependency-rule': `${metadataType} likely references other metadata and needs parser or dependency rules before it is safe.`,
|
|
234
|
+
'ordering-special': `${metadataType} likely has deployment ordering constraints that must be validated before support is enabled.`,
|
|
235
|
+
'provider-owned': `${metadataType} may require provider publish, activation, or lifecycle handling outside standard metadata deploy.`,
|
|
236
|
+
'human-review-required': `${metadataType} affects security, access, credentials, or org-level behavior and requires explicit review.`,
|
|
237
|
+
};
|
|
238
|
+
return descriptions[classification];
|
|
239
|
+
}
|
|
240
|
+
function suggestImplementation(metadataType, supportStatus, classification) {
|
|
241
|
+
const suggestions = [
|
|
242
|
+
`Add ${metadataType} fixtures covering package.xml and source-path detection.`,
|
|
243
|
+
'Add metadata gap analysis unit coverage before marking the type supported.',
|
|
244
|
+
];
|
|
245
|
+
if (supportStatus === 'unsupported') {
|
|
246
|
+
suggestions.push('Add deployment ordering only after fixture validation proves safe ordering.');
|
|
247
|
+
}
|
|
248
|
+
if (classification === 'dependency-rule') {
|
|
249
|
+
suggestions.push('Add parser or dependency extraction rules for referenced metadata.');
|
|
250
|
+
}
|
|
251
|
+
else if (classification === 'ordering-special') {
|
|
252
|
+
suggestions.push('Add explicit ordering tests and deploy-validate evidence.');
|
|
253
|
+
}
|
|
254
|
+
else if (classification === 'provider-owned') {
|
|
255
|
+
suggestions.push('Define publish/activate lifecycle handling or keep the type blocked.');
|
|
256
|
+
}
|
|
257
|
+
else if (classification === 'human-review-required') {
|
|
258
|
+
suggestions.push('Require human review before enabling deploy automation for this type.');
|
|
259
|
+
}
|
|
260
|
+
else {
|
|
261
|
+
suggestions.push('Register the type as scanner-supported only after deterministic fixture tests pass.');
|
|
262
|
+
}
|
|
263
|
+
return suggestions;
|
|
264
|
+
}
|
|
265
|
+
function toArray(value) {
|
|
266
|
+
if (value === undefined) {
|
|
267
|
+
return [];
|
|
268
|
+
}
|
|
269
|
+
return Array.isArray(value) ? value : [value];
|
|
270
|
+
}
|
|
271
|
+
function relativizeEvidence(projectRoot, evidence) {
|
|
272
|
+
const suffix = evidence.match(/ \(\d+ members\)$/u)?.[0] ?? '';
|
|
273
|
+
const pathPart = suffix ? evidence.slice(0, -suffix.length) : evidence;
|
|
274
|
+
const relative = path.isAbsolute(pathPart) ? path.relative(projectRoot, pathPart) : pathPart;
|
|
275
|
+
return suffix ? `${relative}${suffix}` : relative;
|
|
276
|
+
}
|
|
277
|
+
//# sourceMappingURL=metadata-gap-analysis-service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"metadata-gap-analysis-service.js","sourceRoot":"","sources":["../../src/analysis/metadata-gap-analysis-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
2
|
import { type SpecialDeploymentPlan } from '../deployment/special-deployment-plan.js';
|
|
3
|
-
|
|
3
|
+
import { type ReleaseReportCommandOutput } from '../reports/release-report-command-adapter.js';
|
|
4
|
+
type CiPublishResult = SpecialDeploymentPlan & ReleaseReportCommandOutput;
|
|
5
|
+
export default class CiPublish extends SfCommand<CiPublishResult> {
|
|
4
6
|
static readonly aliases: string[];
|
|
5
7
|
static readonly summary = "Build a coordinated metadata, Agentforce, LWR, and OmniStudio publish plan for CI.";
|
|
6
8
|
static readonly examples: string[];
|
|
@@ -11,7 +13,9 @@ export default class CiPublish extends SfCommand<SpecialDeploymentPlan> {
|
|
|
11
13
|
'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
12
14
|
'auto-activate': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
13
15
|
};
|
|
14
|
-
run(): Promise<
|
|
16
|
+
run(): Promise<CiPublishResult>;
|
|
17
|
+
private finalizeReleaseReport;
|
|
15
18
|
private reportPlan;
|
|
16
19
|
private reportExecutionFailure;
|
|
17
20
|
}
|
|
21
|
+
export {};
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
-
import { SpecialDeploymentPlanExecutor } from '../deployment/special-deployment-executor.js';
|
|
2
|
+
import { SpecialDeploymentPlanExecutor, } from '../deployment/special-deployment-executor.js';
|
|
3
3
|
import { SpecialDeploymentPlanService } from '../deployment/special-deployment-plan.js';
|
|
4
|
+
import { ReleaseReportCommandAdapter, } from '../reports/release-report-command-adapter.js';
|
|
5
|
+
import { buildCiPublishReportFacts } from '../reports/release-report-facts-factory.js';
|
|
4
6
|
import { getLogger } from '../utils/logger.js';
|
|
5
7
|
const logger = getLogger('CiPublishCommand');
|
|
8
|
+
const releaseReportAdapter = new ReleaseReportCommandAdapter();
|
|
6
9
|
export default class CiPublish extends SfCommand {
|
|
7
10
|
static aliases = ['smart-deployment ci-publish'];
|
|
8
11
|
static summary = 'Build a coordinated metadata, Agentforce, LWR, and OmniStudio publish plan for CI.';
|
|
@@ -47,22 +50,34 @@ export default class CiPublish extends SfCommand {
|
|
|
47
50
|
autoActivate,
|
|
48
51
|
});
|
|
49
52
|
this.reportPlan(plan);
|
|
53
|
+
let execution;
|
|
54
|
+
let resultPlan = plan;
|
|
55
|
+
let executionFailure;
|
|
50
56
|
if (!dryRun) {
|
|
51
|
-
|
|
57
|
+
execution = await new SpecialDeploymentPlanExecutor().execute(plan);
|
|
52
58
|
if (!execution.success) {
|
|
53
59
|
const message = execution.errors[0] ?? 'Coordinated publish failed.';
|
|
54
|
-
|
|
60
|
+
executionFailure = message;
|
|
61
|
+
resultPlan = {
|
|
55
62
|
...plan,
|
|
56
63
|
success: false,
|
|
57
64
|
errors: [...plan.errors, message],
|
|
58
65
|
};
|
|
59
66
|
this.reportExecutionFailure(execution.failedPhase, execution.exitCode, message);
|
|
60
|
-
return failedPlan;
|
|
61
67
|
}
|
|
62
|
-
|
|
63
|
-
|
|
68
|
+
else {
|
|
69
|
+
this.log('');
|
|
70
|
+
this.log('Coordinated publish execution completed successfully.');
|
|
71
|
+
}
|
|
64
72
|
}
|
|
65
|
-
|
|
73
|
+
const result = await this.finalizeReleaseReport(resultPlan, execution);
|
|
74
|
+
if (executionFailure)
|
|
75
|
+
this.error(executionFailure);
|
|
76
|
+
return result;
|
|
77
|
+
}
|
|
78
|
+
async finalizeReleaseReport(plan, execution) {
|
|
79
|
+
const releaseReport = await releaseReportAdapter.finalize(this, { kind: 'succeeded', value: plan }, buildCiPublishReportFacts(plan, execution), { projectRoot: plan.projectRoot });
|
|
80
|
+
return { ...plan, ...releaseReport };
|
|
66
81
|
}
|
|
67
82
|
reportPlan(plan) {
|
|
68
83
|
this.log('Coordinated publish plan');
|
|
@@ -93,7 +108,7 @@ export default class CiPublish extends SfCommand {
|
|
|
93
108
|
}
|
|
94
109
|
reportExecutionFailure(failedPhase, exitCode, message) {
|
|
95
110
|
this.log('');
|
|
96
|
-
this.
|
|
111
|
+
this.warn(`Coordinated publish failed in phase ${failedPhase ?? 'unknown'} with exit code ${exitCode ?? 'unknown'}: ${message}`);
|
|
97
112
|
}
|
|
98
113
|
}
|
|
99
114
|
//# sourceMappingURL=ci-publish.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ci-publish.js","sourceRoot":"","sources":["../../src/commands/ci-publish.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"ci-publish.js","sourceRoot":"","sources":["../../src/commands/ci-publish.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
2
|
+
import { type MetadataGapAnalysisResult } from '../../analysis/metadata-gap-analysis-service.js';
|
|
3
|
+
export default class MetadataGaps extends SfCommand<MetadataGapAnalysisResult> {
|
|
4
|
+
static readonly aliases: string[];
|
|
5
|
+
static readonly summary: string;
|
|
6
|
+
static readonly description: string;
|
|
7
|
+
static readonly examples: string[];
|
|
8
|
+
static readonly flags: {
|
|
9
|
+
'source-path': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
|
+
'ai-explain': import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
11
|
+
};
|
|
12
|
+
run(): Promise<MetadataGapAnalysisResult>;
|
|
13
|
+
private withJsonConsoleSuppressed;
|
|
14
|
+
private reportResult;
|
|
15
|
+
}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { Messages } from '@salesforce/core';
|
|
2
|
+
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
3
|
+
import { MetadataGapAnalysisService, } from '../../analysis/metadata-gap-analysis-service.js';
|
|
4
|
+
import { getLogger } from '../../utils/logger.js';
|
|
5
|
+
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
6
|
+
const messages = Messages.loadMessages('@jterrats/smart-deployment', 'metadata.gaps');
|
|
7
|
+
const logger = getLogger('MetadataGapsCommand');
|
|
8
|
+
const metadataGapAnalysisService = new MetadataGapAnalysisService();
|
|
9
|
+
export default class MetadataGaps extends SfCommand {
|
|
10
|
+
static aliases = ['smart-deployment metadata gaps'];
|
|
11
|
+
static summary = messages.getMessage('summary');
|
|
12
|
+
static description = messages.getMessage('description');
|
|
13
|
+
static examples = messages.getMessages('examples');
|
|
14
|
+
static flags = {
|
|
15
|
+
'source-path': Flags.string({
|
|
16
|
+
summary: messages.getMessage('flags.source-path.summary'),
|
|
17
|
+
description: messages.getMessage('flags.source-path.description'),
|
|
18
|
+
}),
|
|
19
|
+
'ai-explain': Flags.boolean({
|
|
20
|
+
summary: messages.getMessage('flags.ai-explain.summary'),
|
|
21
|
+
description: messages.getMessage('flags.ai-explain.description'),
|
|
22
|
+
default: false,
|
|
23
|
+
}),
|
|
24
|
+
};
|
|
25
|
+
async run() {
|
|
26
|
+
const { flags } = await this.parse(MetadataGaps);
|
|
27
|
+
try {
|
|
28
|
+
const result = await this.withJsonConsoleSuppressed(async () => metadataGapAnalysisService.analyze({
|
|
29
|
+
sourcePath: typeof flags['source-path'] === 'string' ? flags['source-path'] : undefined,
|
|
30
|
+
aiExplain: flags['ai-explain'] === true,
|
|
31
|
+
}));
|
|
32
|
+
if (!this.jsonEnabled()) {
|
|
33
|
+
this.reportResult(result);
|
|
34
|
+
}
|
|
35
|
+
return result;
|
|
36
|
+
}
|
|
37
|
+
catch (error) {
|
|
38
|
+
logger.error('Metadata gap analysis failed', { error });
|
|
39
|
+
this.error(`Metadata gap analysis failed: ${error instanceof Error ? error.message : String(error)}`);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async withJsonConsoleSuppressed(operation) {
|
|
43
|
+
if (!this.jsonEnabled()) {
|
|
44
|
+
return operation();
|
|
45
|
+
}
|
|
46
|
+
// eslint-disable-next-line no-console
|
|
47
|
+
const originalLog = console.log;
|
|
48
|
+
// eslint-disable-next-line no-console
|
|
49
|
+
const originalWarn = console.warn;
|
|
50
|
+
try {
|
|
51
|
+
// eslint-disable-next-line no-console
|
|
52
|
+
console.log = () => { };
|
|
53
|
+
// eslint-disable-next-line no-console
|
|
54
|
+
console.warn = () => { };
|
|
55
|
+
return await operation();
|
|
56
|
+
}
|
|
57
|
+
finally {
|
|
58
|
+
// eslint-disable-next-line no-console
|
|
59
|
+
console.log = originalLog;
|
|
60
|
+
// eslint-disable-next-line no-console
|
|
61
|
+
console.warn = originalWarn;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
reportResult(result) {
|
|
65
|
+
this.log('Smart deployment metadata gaps');
|
|
66
|
+
this.log(`Analysis mode: ${result.analysisMode}`);
|
|
67
|
+
this.log(`Detected metadata types: ${result.summary.detectedTypeCount}`);
|
|
68
|
+
this.log(`Supported metadata types: ${result.summary.supportedTypeCount}`);
|
|
69
|
+
this.log(`Gaps: ${result.summary.gapCount}`);
|
|
70
|
+
this.log(`Human review required: ${result.summary.humanReviewCount}`);
|
|
71
|
+
if (result.gaps.length > 0) {
|
|
72
|
+
this.log('');
|
|
73
|
+
this.log('Unsupported or incomplete metadata support');
|
|
74
|
+
for (const gap of result.gaps) {
|
|
75
|
+
this.log(`- ${gap.metadataType}: ${gap.classification} (${gap.supportStatus})`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
if (result.aiContext) {
|
|
79
|
+
this.log('');
|
|
80
|
+
this.log(`AI workflow context: ${result.aiContext.recommendedCommand}`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
//# sourceMappingURL=gaps.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gaps.js","sourceRoot":"","sources":["../../../src/commands/metadata/gaps.ts"],"names":[],"mappings":"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"}
|
package/lib/commands/resume.js
CHANGED
|
@@ -26,6 +26,7 @@ export default class Resume extends SfCommand {
|
|
|
26
26
|
static flags = {
|
|
27
27
|
'target-org': Flags.string({
|
|
28
28
|
summary: messages.getMessage('flags.target-org.summary'),
|
|
29
|
+
char: 'o',
|
|
29
30
|
}),
|
|
30
31
|
'source-path': Flags.directory({
|
|
31
32
|
summary: messages.getMessage('flags.source-path.summary'),
|
|
@@ -38,15 +39,15 @@ export default class Resume extends SfCommand {
|
|
|
38
39
|
}),
|
|
39
40
|
};
|
|
40
41
|
async run() {
|
|
41
|
-
const
|
|
42
|
+
const parseResult = await this.parse(Resume);
|
|
43
|
+
const { flags } = parseResult;
|
|
42
44
|
const sourcePath = typeof flags['source-path'] === 'string' ? flags['source-path'] : undefined;
|
|
45
|
+
const targetOrg = this.getTargetOrgIdentifier(flags['target-org']);
|
|
43
46
|
try {
|
|
44
47
|
logger.info('Resuming deployment', { flags });
|
|
45
48
|
const retryStrategy = flags['retry-strategy'];
|
|
46
49
|
const resumeService = new ResumeDeploymentService(new StateManager({ baseDir: sourcePath }));
|
|
47
|
-
const summary = await resumeService.prepareResume(retryStrategy, {
|
|
48
|
-
targetOrg: this.getTargetOrgIdentifier(flags['target-org']),
|
|
49
|
-
});
|
|
50
|
+
const summary = await resumeService.prepareResume(retryStrategy, { targetOrg });
|
|
50
51
|
presenter.reportResumePreparation(this, summary, retryStrategy);
|
|
51
52
|
return {
|
|
52
53
|
success: true,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAGH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,uBAAuB,EAA4B,MAAM,4CAA4C,CAAC;AAC/G,OAAO,EAAE,sBAAsB,EAAE,MAAM,6CAA6C,CAAC;AACrF,OAAO,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAC/C,OAAO,EAAE,YAAY,EAAE,MAAM,gCAAgC,CAAC;AAE9D,MAAM,MAAM,GAAG,SAAS,CAAC,eAAe,CAAC,CAAC;AAC1C,QAAQ,CAAC,kCAAkC,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC7D,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,4BAA4B,EAAE,QAAQ,CAAC,CAAC;AAC/E,MAAM,SAAS,GAAG,IAAI,sBAAsB,EAAE,CAAC;AAS/C,MAAM,CAAC,OAAO,OAAO,MAAO,SAAQ,SAAuB;IAClD,MAAM,CAAU,OAAO,GAAG,CAAC,yBAAyB,CAAC,CAAC;IACtD,MAAM,CAAU,OAAO,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC;IACzD,MAAM,CAAU,QAAQ,GAAG,QAAQ,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;IAC5D,MAAM,CAAU,KAAK,GAAyB;QACnD,YAAY,EAAE,KAAK,CAAC,MAAM,CAAC;YACzB,OAAO,EAAE,QAAQ,CAAC,UAAU,CAAC,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"resume.js","sourceRoot":"","sources":["../../src/commands/resume.ts"],"names":[],"mappings":"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"}
|
package/lib/commands/start.d.ts
CHANGED
|
@@ -17,6 +17,7 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { type Interfaces } from '@oclif/core';
|
|
19
19
|
import { SfCommand } from '@salesforce/sf-plugins-core';
|
|
20
|
+
import type { ReleaseReportV1 } from '../types/release-report.js';
|
|
20
21
|
/**
|
|
21
22
|
* @ac US-046-AC-1: Analyzes metadata automatically
|
|
22
23
|
* @ac US-046-AC-2: Generates deployment waves
|
|
@@ -34,8 +35,10 @@ type StartResult = {
|
|
|
34
35
|
commits: string[];
|
|
35
36
|
changedComponents: string[];
|
|
36
37
|
dependencyComponents: string[];
|
|
38
|
+
explicitComponents: string[];
|
|
37
39
|
includedComponents: string[];
|
|
38
40
|
ignoredComponents: string[];
|
|
41
|
+
manifestPath?: string;
|
|
39
42
|
};
|
|
40
43
|
rollback?: {
|
|
41
44
|
enabled: boolean;
|
|
@@ -54,6 +57,9 @@ type StartResult = {
|
|
|
54
57
|
inferredDependencies?: number;
|
|
55
58
|
inferenceFallback?: boolean;
|
|
56
59
|
};
|
|
60
|
+
releaseReport?: ReleaseReportV1;
|
|
61
|
+
releaseReportPath?: string;
|
|
62
|
+
releaseReportWarning?: string;
|
|
57
63
|
};
|
|
58
64
|
export default class Start extends SfCommand<StartResult> {
|
|
59
65
|
static readonly aliases: string[];
|