sfdx-hardis 6.9.1-alpha202510282151.0 → 6.10.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.
Files changed (74) hide show
  1. package/CHANGELOG.md +4 -4
  2. package/lib/commands/hardis/doc/mkdocs-to-cf.js +39 -38
  3. package/lib/commands/hardis/doc/mkdocs-to-cf.js.map +1 -1
  4. package/lib/commands/hardis/org/diagnose/storage-stats.d.ts +18 -0
  5. package/lib/commands/hardis/org/diagnose/storage-stats.js +278 -0
  6. package/lib/commands/hardis/org/diagnose/storage-stats.js.map +1 -0
  7. package/lib/commands/hardis/project/deploy/notify.js +23 -19
  8. package/lib/commands/hardis/project/deploy/notify.js.map +1 -1
  9. package/lib/commands/hardis/project/deploy/quick.js +2 -3
  10. package/lib/commands/hardis/project/deploy/quick.js.map +1 -1
  11. package/lib/commands/hardis/project/deploy/start.js +5 -4
  12. package/lib/commands/hardis/project/deploy/start.js.map +1 -1
  13. package/lib/commands/hardis/project/deploy/validate.js +3 -4
  14. package/lib/commands/hardis/project/deploy/validate.js.map +1 -1
  15. package/lib/commands/hardis/source/deploy.js +3 -4
  16. package/lib/commands/hardis/source/deploy.js.map +1 -1
  17. package/lib/common/gitProvider/azureDevops.d.ts +0 -1
  18. package/lib/common/gitProvider/azureDevops.js +3 -71
  19. package/lib/common/gitProvider/azureDevops.js.map +1 -1
  20. package/lib/common/gitProvider/bitbucket.d.ts +0 -1
  21. package/lib/common/gitProvider/bitbucket.js +2 -81
  22. package/lib/common/gitProvider/bitbucket.js.map +1 -1
  23. package/lib/common/gitProvider/gitProviderRoot.d.ts +0 -1
  24. package/lib/common/gitProvider/gitProviderRoot.js +0 -6
  25. package/lib/common/gitProvider/gitProviderRoot.js.map +1 -1
  26. package/lib/common/gitProvider/github.d.ts +0 -1
  27. package/lib/common/gitProvider/github.js +1 -74
  28. package/lib/common/gitProvider/github.js.map +1 -1
  29. package/lib/common/gitProvider/gitlab.d.ts +0 -3
  30. package/lib/common/gitProvider/gitlab.js +2 -110
  31. package/lib/common/gitProvider/gitlab.js.map +1 -1
  32. package/lib/common/gitProvider/index.d.ts +1 -1
  33. package/lib/common/gitProvider/index.js +5 -12
  34. package/lib/common/gitProvider/index.js.map +1 -1
  35. package/lib/common/utils/authUtils.d.ts +2 -15
  36. package/lib/common/utils/authUtils.js +29 -48
  37. package/lib/common/utils/authUtils.js.map +1 -1
  38. package/lib/common/utils/dataUtils.d.ts +2 -2
  39. package/lib/common/utils/dataUtils.js +1 -5
  40. package/lib/common/utils/dataUtils.js.map +1 -1
  41. package/lib/common/utils/deployTips.js +1 -2
  42. package/lib/common/utils/deployTips.js.map +1 -1
  43. package/lib/common/utils/deployUtils.d.ts +7 -0
  44. package/lib/common/utils/deployUtils.js +75 -28
  45. package/lib/common/utils/deployUtils.js.map +1 -1
  46. package/lib/common/utils/gitUtils.d.ts +0 -2
  47. package/lib/common/utils/gitUtils.js +1 -7
  48. package/lib/common/utils/gitUtils.js.map +1 -1
  49. package/lib/common/utils/orgUtils.d.ts +0 -1
  50. package/lib/common/utils/orgUtils.js +0 -12
  51. package/lib/common/utils/orgUtils.js.map +1 -1
  52. package/oclif.manifest.json +681 -567
  53. package/package.json +1 -1
  54. package/lib/common/actionsProvider/actionsProvider.d.ts +0 -41
  55. package/lib/common/actionsProvider/actionsProvider.js +0 -110
  56. package/lib/common/actionsProvider/actionsProvider.js.map +0 -1
  57. package/lib/common/actionsProvider/apexAction.d.ts +0 -6
  58. package/lib/common/actionsProvider/apexAction.js +0 -35
  59. package/lib/common/actionsProvider/apexAction.js.map +0 -1
  60. package/lib/common/actionsProvider/commandAction.d.ts +0 -6
  61. package/lib/common/actionsProvider/commandAction.js +0 -29
  62. package/lib/common/actionsProvider/commandAction.js.map +0 -1
  63. package/lib/common/actionsProvider/dataAction.d.ts +0 -6
  64. package/lib/common/actionsProvider/dataAction.js +0 -50
  65. package/lib/common/actionsProvider/dataAction.js.map +0 -1
  66. package/lib/common/actionsProvider/manualAction.d.ts +0 -6
  67. package/lib/common/actionsProvider/manualAction.js +0 -26
  68. package/lib/common/actionsProvider/manualAction.js.map +0 -1
  69. package/lib/common/actionsProvider/publishCommunityAction.d.ts +0 -6
  70. package/lib/common/actionsProvider/publishCommunityAction.js +0 -30
  71. package/lib/common/actionsProvider/publishCommunityAction.js.map +0 -1
  72. package/lib/common/utils/prePostCommandUtils.d.ts +0 -7
  73. package/lib/common/utils/prePostCommandUtils.js +0 -272
  74. package/lib/common/utils/prePostCommandUtils.js.map +0 -1
@@ -1,272 +0,0 @@
1
- import { SfError } from '@salesforce/core';
2
- import c from 'chalk';
3
- import fs from 'fs-extra';
4
- import yaml from 'js-yaml';
5
- import * as path from 'path';
6
- import { getConfig } from '../../config/index.js';
7
- import { uxLog } from './index.js';
8
- import { GitProvider } from '../gitProvider/index.js';
9
- import { checkSfdxHardisTraceAvailable, listMajorOrgs } from './orgConfigUtils.js';
10
- import { soqlQuery } from './apiUtils.js';
11
- // data import moved to DataAction class in actionsProvider
12
- import { getPullRequestData, setPullRequestData } from './gitUtils.js';
13
- import { ActionsProvider } from '../actionsProvider/actionsProvider.js';
14
- export async function executePrePostCommands(property, options) {
15
- const actionLabel = property === 'commandsPreDeploy' ? 'Pre-deployment actions' : 'Post-deployment actions';
16
- uxLog("action", this, c.cyan(`[DeploymentActions] Listing ${actionLabel}...`));
17
- const branchConfig = await getConfig('branch');
18
- const commands = [...(branchConfig[property] || []), ...(options.extraCommands || [])];
19
- await completeWithCommandsFromPullRequests(property, commands, options.checkOnly);
20
- if (commands.length === 0) {
21
- uxLog("action", this, c.cyan(`[DeploymentActions] No ${actionLabel} defined in branch config or pull requests`));
22
- uxLog("log", this, c.grey(`No ${property} found to run`));
23
- return;
24
- }
25
- uxLog("action", this, c.cyan(`[DeploymentActions] Found ${commands.length} ${actionLabel} to run`));
26
- uxLog("log", this, c.grey(commands.map(c => `- ${c.label} (${c.type || 'command'})`).join('\n')));
27
- for (const cmd of commands) {
28
- const actionsInstance = await ActionsProvider.buildActionInstance(cmd);
29
- const actionsIssues = await actionsInstance.checkValidityIssues(cmd);
30
- if (actionsIssues) {
31
- cmd.result = actionsIssues;
32
- uxLog("error", this, c.red(`[DeploymentActions] Action ${cmd.label} is not valid: ${actionsIssues.skippedReason}`));
33
- continue;
34
- }
35
- // If if skipIfError is true and deployment failed
36
- if (options.success === false && cmd.skipIfError === true) {
37
- uxLog("action", this, c.yellow(`[DeploymentActions] Skipping ${cmd.label} (skipIfError=true) `));
38
- cmd.result = {
39
- statusCode: "skipped",
40
- skippedReason: "skipIfError is true and deployment failed"
41
- };
42
- continue;
43
- }
44
- // Skip if we are in another context than the requested one
45
- const cmdContext = cmd.context || "all";
46
- if (cmdContext === "check-deployment-only" && options.checkOnly === false) {
47
- uxLog("action", this, c.grey(`[DeploymentActions] Skipping ${cmd.label}: check-deployment-only action, and we are in process deployment mode`));
48
- cmd.result = {
49
- statusCode: "skipped",
50
- skippedReason: "Action context is check-deployment-only but we are in process deployment mode"
51
- };
52
- continue;
53
- }
54
- if (cmdContext === "process-deployment-only" && options.checkOnly === true) {
55
- uxLog("action", this, c.grey(`[DeploymentActions] Skipping ${cmd.label}: process-deployment-only action as we are in check deployment mode`));
56
- cmd.result = {
57
- statusCode: "skipped",
58
- skippedReason: "Action context is process-deployment-only but we are in check deployment mode"
59
- };
60
- continue;
61
- }
62
- const runOnlyOnceByOrg = cmd.runOnlyOnceByOrg || false;
63
- if (runOnlyOnceByOrg) {
64
- await checkSfdxHardisTraceAvailable(options.conn);
65
- const commandTraceQuery = `SELECT Id,CreatedDate FROM SfdxHardisTrace__c WHERE Type__c='${property}' AND Key__c='${cmd.id}' LIMIT 1`;
66
- const commandTraceRes = await soqlQuery(commandTraceQuery, options.conn);
67
- if (commandTraceRes?.records?.length > 0) {
68
- uxLog("action", this, c.grey(`[DeploymentActions] Skipping ${cmd.label}: it has been defined with runOnlyOnceByOrg and has already been run on ${commandTraceRes.records[0].CreatedDate}`));
69
- cmd.result = {
70
- statusCode: "skipped",
71
- skippedReason: "runOnlyOnceByOrg is true and command has already been run on this org"
72
- };
73
- continue;
74
- }
75
- }
76
- // Run command
77
- uxLog("action", this, c.cyan(`[DeploymentActions] Running action ${cmd.label}`));
78
- await executeAction(cmd);
79
- if (cmd.result?.statusCode === "success" && runOnlyOnceByOrg) {
80
- const hardisTraceRecord = {
81
- Name: property + "--" + cmd.id,
82
- Type__c: property,
83
- Key__c: cmd.id
84
- };
85
- const insertRes = await options.conn.insert("SfdxHardisTrace__c", [hardisTraceRecord]);
86
- if (insertRes[0].success) {
87
- uxLog("success", this, c.green(`[DeploymentActions] Stored SfdxHardisTrace__c entry ${insertRes[0].id} with command [${cmd.id}] so it is not run again in the future (runOnlyOnceByOrg: true)`));
88
- }
89
- else {
90
- uxLog("error", this, c.red(`[DeploymentActions] Error storing SfdxHardisTrace__c entry :` + JSON.stringify(insertRes, null, 2)));
91
- }
92
- }
93
- else if (cmd.result?.statusCode === "failed" && cmd.allowFailure !== true) {
94
- uxLog("error", this, c.red(`[DeploymentActions] Action ${cmd.label} failed, stopping execution of further actions.`));
95
- break;
96
- }
97
- }
98
- manageResultMarkdownBody(property, commands);
99
- // Check commands results
100
- const failedCommands = commands.filter(c => c.result?.statusCode === "failed");
101
- if (failedCommands.length > 0) {
102
- uxLog("error", this, c.red(`[DeploymentActions] ${failedCommands.length} action(s) failed during ${actionLabel}:`));
103
- // throw error if failed and allowFailure is not set
104
- const failedAndNotAllowFailure = failedCommands.filter(c => c.allowFailure !== true);
105
- if (failedAndNotAllowFailure.length > 0) {
106
- let prData = getPullRequestData();
107
- prData = Object.assign(prData, {
108
- title: "❌ Error: Failed deployment actions",
109
- messageKey: prData.messageKey ?? 'deployment',
110
- });
111
- setPullRequestData(prData);
112
- await GitProvider.managePostPullRequestComment(options.checkOnly);
113
- throw new SfError(`One or more ${actionLabel} have failed. See logs for more details.`);
114
- }
115
- }
116
- }
117
- async function completeWithCommandsFromPullRequests(property, commands, checkOnly) {
118
- await checkForDraftCommandsFile(property, checkOnly);
119
- const pullRequests = await listAllPullRequestsToUse();
120
- for (const pr of pullRequests) {
121
- // Check if there is a .sfdx-hardis.PULL_REQUEST_ID.yml file in the PR
122
- const prConfigFileName = path.join("scripts", "actions", `.sfdx-hardis.${pr.idStr}.yml`);
123
- if (fs.existsSync(prConfigFileName)) {
124
- try {
125
- const prConfig = await fs.readFile(prConfigFileName, 'utf8');
126
- const prConfigParsed = yaml.load(prConfig);
127
- if (prConfigParsed && prConfigParsed[property] && Array.isArray(prConfigParsed[property])) {
128
- const prConfigCommands = prConfigParsed[property];
129
- for (const cmd of prConfigCommands) {
130
- cmd.pullRequest = pr;
131
- commands.push(cmd);
132
- }
133
- }
134
- }
135
- catch (e) {
136
- uxLog("error", this, c.red(`Error while parsing ${prConfigFileName} file: ${e.message}`));
137
- }
138
- }
139
- }
140
- }
141
- let _cachedPullRequests = null;
142
- async function listAllPullRequestsToUse() {
143
- if (_cachedPullRequests) {
144
- return _cachedPullRequests;
145
- }
146
- const gitProvider = await GitProvider.getInstance();
147
- if (!gitProvider) {
148
- uxLog("warning", this, c.yellow('No git provider configured, skipping retrieval of commands from pull requests'));
149
- return [];
150
- }
151
- const pullRequestInfo = await gitProvider.getPullRequestInfo();
152
- if (!pullRequestInfo) {
153
- uxLog("warning", this, c.yellow('No pull request info available, skipping retrieval of commands from pull requests'));
154
- return [];
155
- }
156
- const majorOrgs = await listMajorOrgs();
157
- const childBranchesNames = recursiveGetChildBranches(pullRequestInfo.targetBranch, majorOrgs);
158
- const pullRequests = await gitProvider.listPullRequestsInBranchSinceLastMerge(pullRequestInfo.sourceBranch, pullRequestInfo.targetBranch, [...childBranchesNames]);
159
- pullRequests.reverse(); // Oldest PR first
160
- if (!pullRequests.some(pr => pr.idStr === pullRequestInfo.idStr)) {
161
- pullRequests.push(pullRequestInfo);
162
- }
163
- _cachedPullRequests = pullRequests;
164
- return pullRequests;
165
- }
166
- function recursiveGetChildBranches(branchName, majorOrgs, collected = new Set()) {
167
- const directChildren = majorOrgs
168
- .filter((o) => o.mergeTargets.includes(branchName))
169
- .map((o) => o.branchName);
170
- for (const child of directChildren) {
171
- if (!collected.has(child)) {
172
- collected.add(child);
173
- recursiveGetChildBranches(child, majorOrgs, collected);
174
- }
175
- }
176
- return collected;
177
- }
178
- async function checkForDraftCommandsFile(property, checkOnly) {
179
- const prConfigFileName = path.join("scripts", "actions", `.sfdx-hardis.draft.yml`);
180
- if (fs.existsSync(prConfigFileName)) {
181
- let suggestedFileName = ".sfdx-hardis.PULL_REQUEST_ID.yml (ex: .sfdx-hardis.123.yml)";
182
- const prInfo = await GitProvider.getPullRequestInfo();
183
- if (prInfo && prInfo.idStr) {
184
- suggestedFileName = `.sfdx-hardis.${prInfo.idStr}.yml`;
185
- }
186
- const errorMessage = `Draft deployment actions file ${prConfigFileName} found.
187
-
188
- Please assign it to a Pull Request before proceeding, or delete the file it if you don't need it.
189
-
190
- To assign it, rename .sfdx-hardis.draft.yml into ${suggestedFileName}.
191
- `;
192
- const propertyFormatted = property === 'commandsPreDeploy' ? 'preDeployCommandsResultMarkdownBody' : 'postDeployCommandsResultMarkdownBody';
193
- let prData = getPullRequestData();
194
- prData = Object.assign(prData, {
195
- title: "❌ Error: Draft deployment actions file found",
196
- messageKey: prData.messageKey ?? 'deployment',
197
- [propertyFormatted]: errorMessage
198
- });
199
- setPullRequestData(prData);
200
- await GitProvider.managePostPullRequestComment(checkOnly);
201
- uxLog("error", this, c.red(`[DeploymentActions] ${errorMessage}`));
202
- throw new SfError(`Draft commands file ${prConfigFileName} found. Please assign it to a Pull Request or delete it before proceeding.`);
203
- }
204
- }
205
- async function executeAction(cmd) {
206
- // Use ActionsProvider classes to execute actions
207
- const actionInstance = await ActionsProvider.buildActionInstance(cmd);
208
- try {
209
- const res = await actionInstance.run(cmd);
210
- cmd.result = res;
211
- }
212
- catch (e) {
213
- uxLog("error", this, c.red(`[DeploymentActions] Exception while running action ${cmd.label}: ${e.message}`));
214
- cmd.result = {
215
- statusCode: 'failed',
216
- output: e.message
217
- };
218
- }
219
- }
220
- function manageResultMarkdownBody(property, commands) {
221
- let markdownBody = `### ${property === 'commandsPreDeploy' ? 'Pre-deployment Actions' : 'Post-deployment Actions'} Results\n\n`;
222
- // Build markdown table
223
- markdownBody += `| <!-- --> | Label | Type | Status | Details |\n`;
224
- markdownBody += `|:--------:|-------|------|--------|---------|\n`;
225
- for (const cmd of commands) {
226
- const statusIcon = cmd.result?.statusCode === "manual" ?
227
- "- [ ]" :
228
- cmd.result?.statusCode === "success" ? '✅' :
229
- (cmd.result?.statusCode === "failed" && cmd.allowFailure === true) ? '⚠️' :
230
- (cmd.result?.statusCode === "failed") ? '❌' :
231
- cmd.result?.statusCode === "skipped" ? '⚪' : '❓';
232
- const statusCol = `${cmd.result?.statusCode || 'not run'}`;
233
- const detailCol = cmd.result?.statusCode === "skipped" ?
234
- (cmd.result?.skippedReason || '<!-- -->') :
235
- (cmd.result?.statusCode === "failed" && cmd.allowFailure === true) ?
236
- (cmd.result.skippedReason ? `${cmd.result.skippedReason} (Allowed to fail)` : "(Allowed to fail)") :
237
- (cmd.result?.statusCode === "failed" && cmd.result.skippedReason) ?
238
- cmd.result.skippedReason :
239
- "See details below";
240
- const labelCol = cmd.pullRequest ?
241
- `${cmd.label} ([${cmd.pullRequest.idStr || "?"}](${cmd.pullRequest.webUrl || ""}))` :
242
- cmd.label;
243
- markdownBody += `| ${statusIcon} | ${labelCol} | ${cmd.type || 'command'} | ${statusCol} | ${detailCol} |\n`;
244
- }
245
- // Add details in html <detail> blocks, embedded in a root <details> block to avoid markdown rendering issues
246
- markdownBody += `\n<details>\n<summary>Expand to see details for each action</summary>\n\n`;
247
- for (const cmd of commands) {
248
- if (cmd.result?.output) {
249
- // Truncate output if too long
250
- const maxOutputLength = 10000;
251
- let outputForMarkdown = cmd.result.output;
252
- if (outputForMarkdown.length > maxOutputLength) {
253
- outputForMarkdown = outputForMarkdown.substring(0, maxOutputLength) + `\n\n... Output truncated to ${maxOutputLength} characters ...`;
254
- }
255
- const labeTitle = cmd.pullRequest ?
256
- `${cmd.label} (${cmd.pullRequest.idStr || "?"})` :
257
- cmd.label;
258
- markdownBody += `\n<details id="command-${cmd.id}">\n<summary>${labeTitle}</summary>\n\n`;
259
- markdownBody += '```\n';
260
- markdownBody += outputForMarkdown;
261
- markdownBody += '\n```\n';
262
- markdownBody += '</details>\n';
263
- }
264
- }
265
- markdownBody += `\n</details>\n`;
266
- const propertyFormatted = property === 'commandsPreDeploy' ? 'preDeployCommandsResultMarkdownBody' : 'postDeployCommandsResultMarkdownBody';
267
- const prData = {
268
- [propertyFormatted]: markdownBody
269
- };
270
- setPullRequestData(prData);
271
- }
272
- //# sourceMappingURL=prePostCommandUtils.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"prePostCommandUtils.js","sourceRoot":"","sources":["../../../src/common/utils/prePostCommandUtils.ts"],"names":[],"mappings":"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"}