sfdx-hardis 6.9.1-alpha202510262222.0 → 6.9.1-alpha202510262348.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/lib/common/docBuilder/docBuilderObject.js +1 -1
- package/lib/common/docBuilder/docBuilderObject.js.map +1 -1
- package/lib/common/gitProvider/azureDevops.js +1 -1
- package/lib/common/gitProvider/azureDevops.js.map +1 -1
- package/lib/common/gitProvider/bitbucket.js +1 -1
- package/lib/common/gitProvider/bitbucket.js.map +1 -1
- package/lib/common/gitProvider/github.js +1 -1
- package/lib/common/gitProvider/github.js.map +1 -1
- package/lib/common/gitProvider/gitlab.js +1 -1
- package/lib/common/gitProvider/gitlab.js.map +1 -1
- package/lib/common/gitProvider/index.js +2 -2
- package/lib/common/gitProvider/index.js.map +1 -1
- package/lib/common/utils/prePostCommandUtils.js +15 -5
- package/lib/common/utils/prePostCommandUtils.js.map +1 -1
- package/oclif.manifest.json +1654 -1654
- package/package.json +1 -1
package/oclif.manifest.json
CHANGED
|
@@ -132,12 +132,13 @@
|
|
|
132
132
|
"clear:cache:hardis"
|
|
133
133
|
]
|
|
134
134
|
},
|
|
135
|
-
"hardis:
|
|
135
|
+
"hardis:auth:login": {
|
|
136
136
|
"aliases": [],
|
|
137
137
|
"args": {},
|
|
138
|
-
"description": "\n## Command Behavior\n\n**
|
|
138
|
+
"description": "\n## Command Behavior\n\n**Authenticates to a Salesforce org, primarily designed for CI/CD workflows.**\n\nThis command facilitates secure and automated logins to Salesforce organizations within continuous integration and continuous delivery pipelines. It leverages pre-configured authentication details, ensuring that CI/CD processes can interact with Salesforce without manual intervention.\n\nKey aspects:\n\n- **Configuration-Driven:** It relies on authentication variables and files set up by dedicated configuration commands:\n - For CI/CD repositories: [Configure Org CI Authentication](https://sfdx-hardis.cloudity.com/hardis/project/configure/auth/)\n - For Monitoring repositories: [Configure Org Monitoring](https://sfdx-hardis.cloudity.com/hardis/org/configure/monitoring/)\n- **Technical Org Support:** Supports authentication to a 'technical org' (e.g., for calling Agentforce from another org) by utilizing the `SFDX_AUTH_URL_TECHNICAL_ORG` environment variable. If this variable is set, the command authenticates to this org with the alias `TECHNICAL_ORG`.\n\nTo obtain the `SFDX_AUTH_URL_TECHNICAL_ORG` value, you can run `sf org display --verbose --json` and copy the `sfdxAuthUrl` field from the output.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical flow involves:\n\n- **Flag Parsing:** It parses command-line flags such as `instanceurl`, `devhub`, `scratchorg`, and `debug` to determine the authentication context.\n- **Authentication Hook:** It triggers an internal authentication hook (`this.config.runHook('auth', ...`)) which is responsible for executing the actual authentication logic based on the provided flags (e.g., whether it's a Dev Hub or a scratch org).\n- **Environment Variable Check:** It checks for the presence of `SFDX_AUTH_URL_TECHNICAL_ORG` or `TECHNICAL_ORG_ALIAS` environment variables.\n- **`authOrg` Utility:** If a technical org is configured, it calls the `authOrg` utility function to perform the authentication for that specific org, ensuring it's connected and available for subsequent operations.\n- **Salesforce CLI Integration:** It integrates with the Salesforce CLI's authentication mechanisms to establish and manage org connections.\n</details>\n",
|
|
139
139
|
"examples": [
|
|
140
|
-
"$ sf hardis:
|
|
140
|
+
"$ sf hardis:auth:login",
|
|
141
|
+
"CI=true CI_COMMIT_REF_NAME=monitoring_myclient sf hardis:auth:login"
|
|
141
142
|
],
|
|
142
143
|
"flags": {
|
|
143
144
|
"json": {
|
|
@@ -155,20 +156,28 @@
|
|
|
155
156
|
"multiple": false,
|
|
156
157
|
"type": "option"
|
|
157
158
|
},
|
|
158
|
-
"
|
|
159
|
-
"char": "
|
|
160
|
-
"description": "
|
|
161
|
-
"name": "
|
|
162
|
-
"default": "project",
|
|
159
|
+
"instanceurl": {
|
|
160
|
+
"char": "r",
|
|
161
|
+
"description": "URL of org instance",
|
|
162
|
+
"name": "instanceurl",
|
|
163
163
|
"hasDynamicHelp": false,
|
|
164
164
|
"multiple": false,
|
|
165
|
-
"options": [
|
|
166
|
-
"project",
|
|
167
|
-
"branch",
|
|
168
|
-
"user"
|
|
169
|
-
],
|
|
170
165
|
"type": "option"
|
|
171
166
|
},
|
|
167
|
+
"devhub": {
|
|
168
|
+
"char": "h",
|
|
169
|
+
"description": "Also connect associated DevHub",
|
|
170
|
+
"name": "devhub",
|
|
171
|
+
"allowNo": false,
|
|
172
|
+
"type": "boolean"
|
|
173
|
+
},
|
|
174
|
+
"scratchorg": {
|
|
175
|
+
"char": "s",
|
|
176
|
+
"description": "Scratch org",
|
|
177
|
+
"name": "scratchorg",
|
|
178
|
+
"allowNo": false,
|
|
179
|
+
"type": "boolean"
|
|
180
|
+
},
|
|
172
181
|
"debug": {
|
|
173
182
|
"char": "d",
|
|
174
183
|
"description": "Activate debug mode (more logs)",
|
|
@@ -192,39 +201,38 @@
|
|
|
192
201
|
},
|
|
193
202
|
"hasDynamicHelp": false,
|
|
194
203
|
"hiddenAliases": [],
|
|
195
|
-
"id": "hardis:
|
|
204
|
+
"id": "hardis:auth:login",
|
|
196
205
|
"pluginAlias": "sfdx-hardis",
|
|
197
206
|
"pluginName": "sfdx-hardis",
|
|
198
207
|
"pluginType": "core",
|
|
199
208
|
"strict": true,
|
|
200
209
|
"enableJsonFlag": true,
|
|
201
|
-
"title": "
|
|
210
|
+
"title": "Login",
|
|
202
211
|
"requiresProject": false,
|
|
203
212
|
"isESM": true,
|
|
204
213
|
"relativePath": [
|
|
205
214
|
"lib",
|
|
206
215
|
"commands",
|
|
207
216
|
"hardis",
|
|
208
|
-
"
|
|
209
|
-
"
|
|
217
|
+
"auth",
|
|
218
|
+
"login.js"
|
|
210
219
|
],
|
|
211
220
|
"aliasPermutations": [],
|
|
212
221
|
"permutations": [
|
|
213
|
-
"hardis:
|
|
214
|
-
"
|
|
215
|
-
"
|
|
216
|
-
"hardis:
|
|
217
|
-
"
|
|
218
|
-
"
|
|
222
|
+
"hardis:auth:login",
|
|
223
|
+
"auth:hardis:login",
|
|
224
|
+
"auth:login:hardis",
|
|
225
|
+
"hardis:login:auth",
|
|
226
|
+
"login:hardis:auth",
|
|
227
|
+
"login:auth:hardis"
|
|
219
228
|
]
|
|
220
229
|
},
|
|
221
|
-
"hardis:
|
|
230
|
+
"hardis:config:get": {
|
|
222
231
|
"aliases": [],
|
|
223
232
|
"args": {},
|
|
224
|
-
"description": "\n## Command Behavior\n\n**
|
|
233
|
+
"description": "\n## Command Behavior\n\n**Retrieves and displays the sfdx-hardis configuration for a specified level.**\n\nThis command allows you to inspect the configuration that is currently in effect for your project, which is useful for debugging and understanding how sfdx-hardis will behave.\n\n- **Configuration levels:** It can retrieve configuration from three different levels:\n - **Project:** The configuration defined in the project's `.sfdx-hardis.yml` file.\n - **Branch:** The configuration defined in a branch-specific configuration file (e.g., `.sfdx-hardis.production.yml`).\n - **User:** The global user-level configuration.\n\n## Technical explanations\n\nThe command's logic is straightforward:\n\n- **`getConfig` function:** It calls the `getConfig` utility function, passing the desired configuration level as an argument.\n- **Configuration loading:** The `getConfig` function is responsible for finding the appropriate configuration file, reading its contents, and parsing it as YAML or JSON.\n- **Output:** The retrieved configuration is then displayed to the user as a JSON string.\n",
|
|
225
234
|
"examples": [
|
|
226
|
-
"$ sf hardis:
|
|
227
|
-
"CI=true CI_COMMIT_REF_NAME=monitoring_myclient sf hardis:auth:login"
|
|
235
|
+
"$ sf hardis:project:deploy:sources:metadata"
|
|
228
236
|
],
|
|
229
237
|
"flags": {
|
|
230
238
|
"json": {
|
|
@@ -242,28 +250,20 @@
|
|
|
242
250
|
"multiple": false,
|
|
243
251
|
"type": "option"
|
|
244
252
|
},
|
|
245
|
-
"
|
|
246
|
-
"char": "
|
|
247
|
-
"description": "
|
|
248
|
-
"name": "
|
|
253
|
+
"level": {
|
|
254
|
+
"char": "l",
|
|
255
|
+
"description": "project,branch or user",
|
|
256
|
+
"name": "level",
|
|
257
|
+
"default": "project",
|
|
249
258
|
"hasDynamicHelp": false,
|
|
250
259
|
"multiple": false,
|
|
260
|
+
"options": [
|
|
261
|
+
"project",
|
|
262
|
+
"branch",
|
|
263
|
+
"user"
|
|
264
|
+
],
|
|
251
265
|
"type": "option"
|
|
252
266
|
},
|
|
253
|
-
"devhub": {
|
|
254
|
-
"char": "h",
|
|
255
|
-
"description": "Also connect associated DevHub",
|
|
256
|
-
"name": "devhub",
|
|
257
|
-
"allowNo": false,
|
|
258
|
-
"type": "boolean"
|
|
259
|
-
},
|
|
260
|
-
"scratchorg": {
|
|
261
|
-
"char": "s",
|
|
262
|
-
"description": "Scratch org",
|
|
263
|
-
"name": "scratchorg",
|
|
264
|
-
"allowNo": false,
|
|
265
|
-
"type": "boolean"
|
|
266
|
-
},
|
|
267
267
|
"debug": {
|
|
268
268
|
"char": "d",
|
|
269
269
|
"description": "Activate debug mode (more logs)",
|
|
@@ -287,30 +287,30 @@
|
|
|
287
287
|
},
|
|
288
288
|
"hasDynamicHelp": false,
|
|
289
289
|
"hiddenAliases": [],
|
|
290
|
-
"id": "hardis:
|
|
290
|
+
"id": "hardis:config:get",
|
|
291
291
|
"pluginAlias": "sfdx-hardis",
|
|
292
292
|
"pluginName": "sfdx-hardis",
|
|
293
293
|
"pluginType": "core",
|
|
294
294
|
"strict": true,
|
|
295
295
|
"enableJsonFlag": true,
|
|
296
|
-
"title": "
|
|
296
|
+
"title": "Deploy metadata sources to org",
|
|
297
297
|
"requiresProject": false,
|
|
298
298
|
"isESM": true,
|
|
299
299
|
"relativePath": [
|
|
300
300
|
"lib",
|
|
301
301
|
"commands",
|
|
302
302
|
"hardis",
|
|
303
|
-
"
|
|
304
|
-
"
|
|
303
|
+
"config",
|
|
304
|
+
"get.js"
|
|
305
305
|
],
|
|
306
306
|
"aliasPermutations": [],
|
|
307
307
|
"permutations": [
|
|
308
|
-
"hardis:
|
|
309
|
-
"
|
|
310
|
-
"
|
|
311
|
-
"hardis:
|
|
312
|
-
"
|
|
313
|
-
"
|
|
308
|
+
"hardis:config:get",
|
|
309
|
+
"config:hardis:get",
|
|
310
|
+
"config:get:hardis",
|
|
311
|
+
"hardis:get:config",
|
|
312
|
+
"get:hardis:config",
|
|
313
|
+
"get:config:hardis"
|
|
314
314
|
]
|
|
315
315
|
},
|
|
316
316
|
"hardis:doc:fieldusage": {
|
|
@@ -5539,15 +5539,12 @@
|
|
|
5539
5539
|
"import:data:org:hardis"
|
|
5540
5540
|
]
|
|
5541
5541
|
},
|
|
5542
|
-
"hardis:org:
|
|
5542
|
+
"hardis:org:files:export": {
|
|
5543
5543
|
"aliases": [],
|
|
5544
5544
|
"args": {},
|
|
5545
|
-
"description": "
|
|
5545
|
+
"description": "\n## Command Behavior\n\n**Exports file attachments (ContentVersion, Attachment) from a Salesforce org based on a predefined configuration.**\n\nThis command enables the mass download of files associated with Salesforce records, providing a robust solution for backing up files, migrating them to other systems, or integrating them with external document management solutions.\n\nKey functionalities:\n\n- **Configuration-Driven Export:** Relies on an `export.json` file within a designated file export project to define the export criteria, including the SOQL query for parent records, file types to export, output naming conventions, and file size filtering.\n- **File Size Filtering:** Supports minimum file size filtering via the `fileSizeMin` configuration parameter (in KB). Files smaller than the specified size will be skipped during export.\n- **File Validation:** After downloading each file, validates the integrity by:\n - **Checksum Validation:** For ContentVersion files, compares MD5 checksum with Salesforce's stored checksum\n - **Size Validation:** For both ContentVersion and Attachment files, verifies actual file size matches expected size\n - **Status Tracking:** Files are categorized with specific statuses: `success` (valid files), `failed` (download errors), `skipped` (filtered files), `invalid` (downloaded but failed validation)\n - All validation results are logged in the CSV export log for audit purposes\n- **Resume/Restart Capability:** \n - **Resume Mode:** When `--resume` flag is used (default in CI environments), checks existing downloaded files for validity. Valid files are skipped, invalid files are re-downloaded.\n - **Restart Mode:** When resume is disabled, clears the output folder and starts a fresh export.\n - **Interactive Mode:** When existing files are found and `--resume` is not explicitly specified (non-CI environments), prompts the user to choose between resume or restart.\n- **Interactive Project Selection:** If the file export project path is not provided via the `--path` flag, it interactively prompts the user to select one.\n- **Configurable Export Options:** Allows overriding default export settings such as `chunksize` (number of records processed in a batch), `polltimeout` (timeout for Bulk API calls), and `startchunknumber` (to resume a failed export).\n- **Support for ContentVersion and Attachment:** Handles both modern Salesforce Files (ContentVersion) and older Attachments.\n\nSee this article for a practical example:\n\n[](https://nicolas.vuillamy.fr/how-to-mass-download-notes-and-attachments-files-from-a-salesforce-org-83a028824afd)\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **FilesExporter Class:** The core logic is encapsulated within the `FilesExporter` class, which orchestrates the entire export process.\n- **SOQL Queries (Bulk API):** It uses Salesforce Bulk API queries to efficiently retrieve large volumes of parent record IDs and file metadata, including checksums and file sizes.\n- **File Download:** Downloads the actual file content from Salesforce.\n- **File Validation:** After each successful download, validates file integrity by comparing checksums (ContentVersion) and file sizes (both ContentVersion and Attachment) against Salesforce metadata.\n- **Resume Logic:** In resume mode, checks for existing files before downloading, validates their integrity, and only re-downloads invalid or missing files. This enables efficient recovery from interrupted exports.\n- **File System Operations:** Writes the downloaded files to the local file system, organizing them into folders based on the configured naming conventions.\n- **Configuration Loading:** Reads the `export.json` file to get the export configuration. It also allows for interactive overriding of these settings.\n- **Interactive Prompts:** Uses `selectFilesWorkspace` to allow the user to choose a file export project, `promptFilesExportConfiguration` for customizing export options, and prompts for resume/restart choice when existing files are found.\n- **Error Handling:** Includes mechanisms to handle potential errors during the export process, such as network issues, API limits, and file validation failures. Each file is assigned a specific status (`success`, `failed`, `skipped`, `invalid`) for comprehensive tracking and troubleshooting.\n</details>\n",
|
|
5546
5546
|
"examples": [
|
|
5547
|
-
"$ sf hardis:org:
|
|
5548
|
-
"$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com",
|
|
5549
|
-
"$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com,bertrand@titi.com",
|
|
5550
|
-
"$ sf hardis:org:diagnose:audittrail --lastndays 5"
|
|
5547
|
+
"$ sf hardis:org:files:export"
|
|
5551
5548
|
],
|
|
5552
5549
|
"flags": {
|
|
5553
5550
|
"json": {
|
|
@@ -5565,30 +5562,48 @@
|
|
|
5565
5562
|
"multiple": false,
|
|
5566
5563
|
"type": "option"
|
|
5567
5564
|
},
|
|
5568
|
-
"
|
|
5569
|
-
"char": "
|
|
5570
|
-
"description": "
|
|
5571
|
-
"name": "
|
|
5565
|
+
"path": {
|
|
5566
|
+
"char": "p",
|
|
5567
|
+
"description": "Path to the file export project",
|
|
5568
|
+
"name": "path",
|
|
5572
5569
|
"hasDynamicHelp": false,
|
|
5573
5570
|
"multiple": false,
|
|
5574
5571
|
"type": "option"
|
|
5575
5572
|
},
|
|
5576
|
-
"
|
|
5573
|
+
"chunksize": {
|
|
5574
|
+
"char": "c",
|
|
5575
|
+
"description": "Number of records to add in a chunk before it is processed",
|
|
5576
|
+
"name": "chunksize",
|
|
5577
|
+
"default": 1000,
|
|
5578
|
+
"hasDynamicHelp": false,
|
|
5579
|
+
"multiple": false,
|
|
5580
|
+
"type": "option"
|
|
5581
|
+
},
|
|
5582
|
+
"polltimeout": {
|
|
5577
5583
|
"char": "t",
|
|
5578
|
-
"description": "
|
|
5579
|
-
"name": "
|
|
5584
|
+
"description": "Timeout in MS for Bulk API calls",
|
|
5585
|
+
"name": "polltimeout",
|
|
5586
|
+
"default": 300000,
|
|
5580
5587
|
"hasDynamicHelp": false,
|
|
5581
5588
|
"multiple": false,
|
|
5582
5589
|
"type": "option"
|
|
5583
5590
|
},
|
|
5584
|
-
"
|
|
5585
|
-
"char": "
|
|
5586
|
-
"description": "
|
|
5587
|
-
"name": "
|
|
5591
|
+
"startchunknumber": {
|
|
5592
|
+
"char": "s",
|
|
5593
|
+
"description": "Chunk number to start from",
|
|
5594
|
+
"name": "startchunknumber",
|
|
5595
|
+
"default": 0,
|
|
5588
5596
|
"hasDynamicHelp": false,
|
|
5589
5597
|
"multiple": false,
|
|
5590
5598
|
"type": "option"
|
|
5591
5599
|
},
|
|
5600
|
+
"resume": {
|
|
5601
|
+
"char": "r",
|
|
5602
|
+
"description": "Resume previous export by checking existing files (default in CI)",
|
|
5603
|
+
"name": "resume",
|
|
5604
|
+
"allowNo": false,
|
|
5605
|
+
"type": "boolean"
|
|
5606
|
+
},
|
|
5592
5607
|
"debug": {
|
|
5593
5608
|
"char": "d",
|
|
5594
5609
|
"description": "Activate debug mode (more logs)",
|
|
@@ -5627,13 +5642,13 @@
|
|
|
5627
5642
|
},
|
|
5628
5643
|
"hasDynamicHelp": true,
|
|
5629
5644
|
"hiddenAliases": [],
|
|
5630
|
-
"id": "hardis:org:
|
|
5645
|
+
"id": "hardis:org:files:export",
|
|
5631
5646
|
"pluginAlias": "sfdx-hardis",
|
|
5632
5647
|
"pluginName": "sfdx-hardis",
|
|
5633
5648
|
"pluginType": "core",
|
|
5634
5649
|
"strict": true,
|
|
5635
5650
|
"enableJsonFlag": true,
|
|
5636
|
-
"title": "
|
|
5651
|
+
"title": "Export files",
|
|
5637
5652
|
"requiresProject": false,
|
|
5638
5653
|
"isESM": true,
|
|
5639
5654
|
"relativePath": [
|
|
@@ -5641,43 +5656,43 @@
|
|
|
5641
5656
|
"commands",
|
|
5642
5657
|
"hardis",
|
|
5643
5658
|
"org",
|
|
5644
|
-
"
|
|
5645
|
-
"
|
|
5659
|
+
"files",
|
|
5660
|
+
"export.js"
|
|
5646
5661
|
],
|
|
5647
5662
|
"aliasPermutations": [],
|
|
5648
5663
|
"permutations": [
|
|
5649
|
-
"hardis:org:
|
|
5650
|
-
"org:hardis:
|
|
5651
|
-
"org:
|
|
5652
|
-
"org:
|
|
5653
|
-
"hardis:
|
|
5654
|
-
"
|
|
5655
|
-
"
|
|
5656
|
-
"
|
|
5657
|
-
"hardis:
|
|
5658
|
-
"
|
|
5659
|
-
"
|
|
5660
|
-
"
|
|
5661
|
-
"hardis:org:
|
|
5662
|
-
"org:hardis:
|
|
5663
|
-
"org:
|
|
5664
|
-
"org:
|
|
5665
|
-
"hardis:
|
|
5666
|
-
"
|
|
5667
|
-
"
|
|
5668
|
-
"
|
|
5669
|
-
"hardis:
|
|
5670
|
-
"
|
|
5671
|
-
"
|
|
5672
|
-
"
|
|
5664
|
+
"hardis:org:files:export",
|
|
5665
|
+
"org:hardis:files:export",
|
|
5666
|
+
"org:files:hardis:export",
|
|
5667
|
+
"org:files:export:hardis",
|
|
5668
|
+
"hardis:files:org:export",
|
|
5669
|
+
"files:hardis:org:export",
|
|
5670
|
+
"files:org:hardis:export",
|
|
5671
|
+
"files:org:export:hardis",
|
|
5672
|
+
"hardis:files:export:org",
|
|
5673
|
+
"files:hardis:export:org",
|
|
5674
|
+
"files:export:hardis:org",
|
|
5675
|
+
"files:export:org:hardis",
|
|
5676
|
+
"hardis:org:export:files",
|
|
5677
|
+
"org:hardis:export:files",
|
|
5678
|
+
"org:export:hardis:files",
|
|
5679
|
+
"org:export:files:hardis",
|
|
5680
|
+
"hardis:export:org:files",
|
|
5681
|
+
"export:hardis:org:files",
|
|
5682
|
+
"export:org:hardis:files",
|
|
5683
|
+
"export:org:files:hardis",
|
|
5684
|
+
"hardis:export:files:org",
|
|
5685
|
+
"export:hardis:files:org",
|
|
5686
|
+
"export:files:hardis:org",
|
|
5687
|
+
"export:files:org:hardis"
|
|
5673
5688
|
]
|
|
5674
5689
|
},
|
|
5675
|
-
"hardis:org:
|
|
5690
|
+
"hardis:org:files:import": {
|
|
5676
5691
|
"aliases": [],
|
|
5677
5692
|
"args": {},
|
|
5678
|
-
"description": "\
|
|
5693
|
+
"description": "\nThis command facilitates the mass upload of files into Salesforce, allowing you to populate records with associated documents, images, or other file types. It's a crucial tool for data migration, content seeding, or synchronizing external file repositories with Salesforce.\n\nKey functionalities:\n\n- **Configuration-Driven Import:** Relies on an `export.json` file within a designated file export project (created using `sf hardis:org:configure:files`) to determine which files to import and how they should be associated with Salesforce records.\n- **Interactive Project Selection:** If the file import project path is not provided via the `--path` flag, it interactively prompts the user to select one.\n- **Overwrite Option:** The `--overwrite` flag allows you to replace existing files in Salesforce with local versions that have the same name. Be aware that this option doubles the number of API calls used.\n- **Support for ContentVersion and Attachment:** Handles both modern Salesforce Files (ContentVersion) and older Attachments.\n\nSee this article for how to export files, which is often a prerequisite for importing:\n\n[](https://nicolas.vuillamy.fr/how-to-mass-download-notes-and-attachments-files-from-a-salesforce-org-83a028824afd)\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **FilesImporter Class:** The core logic is encapsulated within the `FilesImporter` class, which orchestrates the entire import process.\n- **File System Scan:** Scans the local file system within the configured project directory to identify files for import.\n- **Salesforce API Interaction:** Uses Salesforce APIs (e.g., ContentVersion, Attachment) to upload files and associate them with records.\n- **Configuration Loading:** Reads the `export.json` file to get the import configuration, including SOQL queries to identify parent records for file association.\n- **Interactive Prompts:** Uses `selectFilesWorkspace` to allow the user to choose a file import project and `prompts` for confirming the overwrite behavior.\n- **Error Handling:** Includes mechanisms to handle potential errors during the import process, such as API limits or file upload failures.\n</details>\n",
|
|
5679
5694
|
"examples": [
|
|
5680
|
-
"$ sf hardis:org:
|
|
5695
|
+
"$ sf hardis:org:files:import"
|
|
5681
5696
|
],
|
|
5682
5697
|
"flags": {
|
|
5683
5698
|
"json": {
|
|
@@ -5695,6 +5710,21 @@
|
|
|
5695
5710
|
"multiple": false,
|
|
5696
5711
|
"type": "option"
|
|
5697
5712
|
},
|
|
5713
|
+
"path": {
|
|
5714
|
+
"char": "p",
|
|
5715
|
+
"description": "Path to the file export project",
|
|
5716
|
+
"name": "path",
|
|
5717
|
+
"hasDynamicHelp": false,
|
|
5718
|
+
"multiple": false,
|
|
5719
|
+
"type": "option"
|
|
5720
|
+
},
|
|
5721
|
+
"overwrite": {
|
|
5722
|
+
"char": "f",
|
|
5723
|
+
"description": "Override existing files (doubles the number of API calls)",
|
|
5724
|
+
"name": "overwrite",
|
|
5725
|
+
"allowNo": false,
|
|
5726
|
+
"type": "boolean"
|
|
5727
|
+
},
|
|
5698
5728
|
"debug": {
|
|
5699
5729
|
"char": "d",
|
|
5700
5730
|
"description": "Activate debug mode (more logs)",
|
|
@@ -5733,13 +5763,13 @@
|
|
|
5733
5763
|
},
|
|
5734
5764
|
"hasDynamicHelp": true,
|
|
5735
5765
|
"hiddenAliases": [],
|
|
5736
|
-
"id": "hardis:org:
|
|
5766
|
+
"id": "hardis:org:files:import",
|
|
5737
5767
|
"pluginAlias": "sfdx-hardis",
|
|
5738
5768
|
"pluginName": "sfdx-hardis",
|
|
5739
5769
|
"pluginType": "core",
|
|
5740
5770
|
"strict": true,
|
|
5741
5771
|
"enableJsonFlag": true,
|
|
5742
|
-
"title": "
|
|
5772
|
+
"title": "Import files",
|
|
5743
5773
|
"requiresProject": false,
|
|
5744
5774
|
"isESM": true,
|
|
5745
5775
|
"relativePath": [
|
|
@@ -5747,23 +5777,262 @@
|
|
|
5747
5777
|
"commands",
|
|
5748
5778
|
"hardis",
|
|
5749
5779
|
"org",
|
|
5750
|
-
"
|
|
5751
|
-
"
|
|
5780
|
+
"files",
|
|
5781
|
+
"import.js"
|
|
5752
5782
|
],
|
|
5753
5783
|
"aliasPermutations": [],
|
|
5754
5784
|
"permutations": [
|
|
5755
|
-
"hardis:org:
|
|
5756
|
-
"org:hardis:
|
|
5757
|
-
"org:
|
|
5758
|
-
"org:
|
|
5759
|
-
"hardis:
|
|
5760
|
-
"
|
|
5761
|
-
"
|
|
5762
|
-
"
|
|
5763
|
-
"hardis:
|
|
5764
|
-
"
|
|
5765
|
-
"
|
|
5766
|
-
"
|
|
5785
|
+
"hardis:org:files:import",
|
|
5786
|
+
"org:hardis:files:import",
|
|
5787
|
+
"org:files:hardis:import",
|
|
5788
|
+
"org:files:import:hardis",
|
|
5789
|
+
"hardis:files:org:import",
|
|
5790
|
+
"files:hardis:org:import",
|
|
5791
|
+
"files:org:hardis:import",
|
|
5792
|
+
"files:org:import:hardis",
|
|
5793
|
+
"hardis:files:import:org",
|
|
5794
|
+
"files:hardis:import:org",
|
|
5795
|
+
"files:import:hardis:org",
|
|
5796
|
+
"files:import:org:hardis",
|
|
5797
|
+
"hardis:org:import:files",
|
|
5798
|
+
"org:hardis:import:files",
|
|
5799
|
+
"org:import:hardis:files",
|
|
5800
|
+
"org:import:files:hardis",
|
|
5801
|
+
"hardis:import:org:files",
|
|
5802
|
+
"import:hardis:org:files",
|
|
5803
|
+
"import:org:hardis:files",
|
|
5804
|
+
"import:org:files:hardis",
|
|
5805
|
+
"hardis:import:files:org",
|
|
5806
|
+
"import:hardis:files:org",
|
|
5807
|
+
"import:files:hardis:org",
|
|
5808
|
+
"import:files:org:hardis"
|
|
5809
|
+
]
|
|
5810
|
+
},
|
|
5811
|
+
"hardis:org:diagnose:audittrail": {
|
|
5812
|
+
"aliases": [],
|
|
5813
|
+
"args": {},
|
|
5814
|
+
"description": "Export Audit trail into a CSV file with selected criteria, and highlight suspect actions\n\nAlso detects updates of Custom Settings values (disable by defining `SKIP_AUDIT_TRAIL_CUSTOM_SETTINGS=true`)\n\nRegular setup actions performed in major orgs are filtered.\n\n- \"\"\n - createScratchOrg\n - changedsenderemail\n - deleteScratchOrg\n - loginasgrantedtopartnerbt\n- Certificate and Key Management\n - insertCertificate\n- Custom App Licenses\n - addeduserpackagelicense\n - granteduserpackagelicense\n - revokeduserpackagelicense\n- Customer Portal\n - createdcustomersuccessuser\n - CSPUserDisabled\n- Currency\n - updateddatedexchrate\n- Data Management\n - queueMembership\n- Email Administration\n - dkimRotationPreparationSuccessful\n - dkimRotationSuccessful\n- External Objects\n - xdsEncryptedFieldChange\n- Groups\n - groupMembership\n- Holidays\n - holiday_insert\n- Inbox mobile and legacy desktop apps\n - enableSIQUserNonEAC\n - siqUserAcceptedTOS\n- Manage Users\n - activateduser\n - createduser\n - changedcommunitynickname\n - changedemail\n - changedfederationid\n - changedpassword\n - changedinteractionuseroffon\n - changedinteractionuseronoff\n - changedmarketinguseroffon\n - changedmarketinguseronoff\n - changedofflineuseroffon\n - changedprofileforuserstdtostd\n - changedprofileforuser\n - changedprofileforusercusttostd\n - changedprofileforuserstdtocust\n - changedroleforusertonone\n - changedroleforuser\n - changedroleforuserfromnone\n - changedUserAdminVerifiedStatusVerified\n - changedUserEmailVerifiedStatusUnverified\n - changedUserEmailVerifiedStatusVerified\n - changedknowledgeuseroffon\n - changedsfcontentuseroffon\n - changedsupportuseroffon\n - changedusername\n - changedUserPhoneNumber\n - changedUserPhoneVerifiedStatusUnverified\n - changedUserPhoneVerifiedStatusVerified\n - deactivateduser\n - deleteAuthenticatorPairing\n - deleteTwoFactorInfo2\n - deleteTwoFactorTempCode\n - frozeuser\n - insertAuthenticatorPairing\n - insertTwoFactorInfo2\n - insertTwoFactorTempCode\n - lightningloginenroll\n - PermSetAssign\n - PermSetGroupAssign\n - PermSetGroupUnassign\n - PermSetLicenseAssign\n - PermSetUnassign\n - PermSetLicenseUnassign\n - registeredUserPhoneNumber\n - resetpassword\n - suNetworkAdminLogin\n - suNetworkAdminLogout\n - suOrgAdminLogin\n - suOrgAdminLogout\n - unfrozeuser\n - useremailchangesent\n- Mobile Administration\n - assigneduserstomobileconfig\n- Reporting Snapshots\n - createdReportJob\n - deletedReportJob\n- Sandboxes\n - DeleteSandbox\n\nBy default, deployment user defined in .sfdx-hardis.yml targetUsername property will be excluded.\n\nYou can define additional users to exclude in .sfdx-hardis.yml **monitoringExcludeUsernames** property.\n\nYou can also add more sections / actions considered as not suspect using property **monitoringAllowedSectionsActions**\n\nExample:\n\n```yaml\nmonitoringExcludeUsernames:\n - deploymentuser@cloudity.com\n - marketingcloud@cloudity.com\n - integration-user@cloudity.com\n\nmonitoringAllowedSectionsActions:\n \"Some section\": [] // Will ignore all actions from such section\n \"Some other section\": [\"actionType1\",\"actionType2\",\"actionType3\"] // Will ignore only those 3 actions from section \"Some other section\". Other actions in the same section will be considered as suspect.\n```\n\n## Excel output example\n\n\n\n## Local output example\n\n\n\nThis command is part of [sfdx-hardis Monitoring](https://sfdx-hardis.cloudity.com/salesforce-monitoring-suspect-audit-trail/) and can output Grafana, Slack and MsTeams Notifications.\n",
|
|
5815
|
+
"examples": [
|
|
5816
|
+
"$ sf hardis:org:diagnose:audittrail",
|
|
5817
|
+
"$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com",
|
|
5818
|
+
"$ sf hardis:org:diagnose:audittrail --excludeusers baptiste@titi.com,bertrand@titi.com",
|
|
5819
|
+
"$ sf hardis:org:diagnose:audittrail --lastndays 5"
|
|
5820
|
+
],
|
|
5821
|
+
"flags": {
|
|
5822
|
+
"json": {
|
|
5823
|
+
"description": "Format output as json.",
|
|
5824
|
+
"helpGroup": "GLOBAL",
|
|
5825
|
+
"name": "json",
|
|
5826
|
+
"allowNo": false,
|
|
5827
|
+
"type": "boolean"
|
|
5828
|
+
},
|
|
5829
|
+
"flags-dir": {
|
|
5830
|
+
"helpGroup": "GLOBAL",
|
|
5831
|
+
"name": "flags-dir",
|
|
5832
|
+
"summary": "Import flag values from a directory.",
|
|
5833
|
+
"hasDynamicHelp": false,
|
|
5834
|
+
"multiple": false,
|
|
5835
|
+
"type": "option"
|
|
5836
|
+
},
|
|
5837
|
+
"excludeusers": {
|
|
5838
|
+
"char": "e",
|
|
5839
|
+
"description": "Comma-separated list of usernames to exclude",
|
|
5840
|
+
"name": "excludeusers",
|
|
5841
|
+
"hasDynamicHelp": false,
|
|
5842
|
+
"multiple": false,
|
|
5843
|
+
"type": "option"
|
|
5844
|
+
},
|
|
5845
|
+
"lastndays": {
|
|
5846
|
+
"char": "t",
|
|
5847
|
+
"description": "Number of days to extract from today (included)",
|
|
5848
|
+
"name": "lastndays",
|
|
5849
|
+
"hasDynamicHelp": false,
|
|
5850
|
+
"multiple": false,
|
|
5851
|
+
"type": "option"
|
|
5852
|
+
},
|
|
5853
|
+
"outputfile": {
|
|
5854
|
+
"char": "f",
|
|
5855
|
+
"description": "Force the path and name of output report file. Must end with .csv",
|
|
5856
|
+
"name": "outputfile",
|
|
5857
|
+
"hasDynamicHelp": false,
|
|
5858
|
+
"multiple": false,
|
|
5859
|
+
"type": "option"
|
|
5860
|
+
},
|
|
5861
|
+
"debug": {
|
|
5862
|
+
"char": "d",
|
|
5863
|
+
"description": "Activate debug mode (more logs)",
|
|
5864
|
+
"name": "debug",
|
|
5865
|
+
"allowNo": false,
|
|
5866
|
+
"type": "boolean"
|
|
5867
|
+
},
|
|
5868
|
+
"websocket": {
|
|
5869
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
5870
|
+
"name": "websocket",
|
|
5871
|
+
"hasDynamicHelp": false,
|
|
5872
|
+
"multiple": false,
|
|
5873
|
+
"type": "option"
|
|
5874
|
+
},
|
|
5875
|
+
"skipauth": {
|
|
5876
|
+
"description": "Skip authentication check when a default username is required",
|
|
5877
|
+
"name": "skipauth",
|
|
5878
|
+
"allowNo": false,
|
|
5879
|
+
"type": "boolean"
|
|
5880
|
+
},
|
|
5881
|
+
"target-org": {
|
|
5882
|
+
"aliases": [
|
|
5883
|
+
"targetusername",
|
|
5884
|
+
"u"
|
|
5885
|
+
],
|
|
5886
|
+
"char": "o",
|
|
5887
|
+
"deprecateAliases": true,
|
|
5888
|
+
"name": "target-org",
|
|
5889
|
+
"noCacheDefault": true,
|
|
5890
|
+
"required": true,
|
|
5891
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
5892
|
+
"hasDynamicHelp": true,
|
|
5893
|
+
"multiple": false,
|
|
5894
|
+
"type": "option"
|
|
5895
|
+
}
|
|
5896
|
+
},
|
|
5897
|
+
"hasDynamicHelp": true,
|
|
5898
|
+
"hiddenAliases": [],
|
|
5899
|
+
"id": "hardis:org:diagnose:audittrail",
|
|
5900
|
+
"pluginAlias": "sfdx-hardis",
|
|
5901
|
+
"pluginName": "sfdx-hardis",
|
|
5902
|
+
"pluginType": "core",
|
|
5903
|
+
"strict": true,
|
|
5904
|
+
"enableJsonFlag": true,
|
|
5905
|
+
"title": "Diagnose content of Setup Audit Trail",
|
|
5906
|
+
"requiresProject": false,
|
|
5907
|
+
"isESM": true,
|
|
5908
|
+
"relativePath": [
|
|
5909
|
+
"lib",
|
|
5910
|
+
"commands",
|
|
5911
|
+
"hardis",
|
|
5912
|
+
"org",
|
|
5913
|
+
"diagnose",
|
|
5914
|
+
"audittrail.js"
|
|
5915
|
+
],
|
|
5916
|
+
"aliasPermutations": [],
|
|
5917
|
+
"permutations": [
|
|
5918
|
+
"hardis:org:diagnose:audittrail",
|
|
5919
|
+
"org:hardis:diagnose:audittrail",
|
|
5920
|
+
"org:diagnose:hardis:audittrail",
|
|
5921
|
+
"org:diagnose:audittrail:hardis",
|
|
5922
|
+
"hardis:diagnose:org:audittrail",
|
|
5923
|
+
"diagnose:hardis:org:audittrail",
|
|
5924
|
+
"diagnose:org:hardis:audittrail",
|
|
5925
|
+
"diagnose:org:audittrail:hardis",
|
|
5926
|
+
"hardis:diagnose:audittrail:org",
|
|
5927
|
+
"diagnose:hardis:audittrail:org",
|
|
5928
|
+
"diagnose:audittrail:hardis:org",
|
|
5929
|
+
"diagnose:audittrail:org:hardis",
|
|
5930
|
+
"hardis:org:audittrail:diagnose",
|
|
5931
|
+
"org:hardis:audittrail:diagnose",
|
|
5932
|
+
"org:audittrail:hardis:diagnose",
|
|
5933
|
+
"org:audittrail:diagnose:hardis",
|
|
5934
|
+
"hardis:audittrail:org:diagnose",
|
|
5935
|
+
"audittrail:hardis:org:diagnose",
|
|
5936
|
+
"audittrail:org:hardis:diagnose",
|
|
5937
|
+
"audittrail:org:diagnose:hardis",
|
|
5938
|
+
"hardis:audittrail:diagnose:org",
|
|
5939
|
+
"audittrail:hardis:diagnose:org",
|
|
5940
|
+
"audittrail:diagnose:hardis:org",
|
|
5941
|
+
"audittrail:diagnose:org:hardis"
|
|
5942
|
+
]
|
|
5943
|
+
},
|
|
5944
|
+
"hardis:org:diagnose:instanceupgrade": {
|
|
5945
|
+
"aliases": [],
|
|
5946
|
+
"args": {},
|
|
5947
|
+
"description": "\n## Command Behavior\n\n**Retrieves and displays the scheduled upgrade date for a Salesforce org's instance.**\n\nThis command provides crucial information about when your Salesforce instance will be upgraded to the next major release (Spring, Summer, or Winter). This is vital for release planning, testing, and ensuring compatibility with upcoming Salesforce features.\n\nKey functionalities:\n\n- **Instance Identification:** Determines the Salesforce instance name of your target org.\n- **Upgrade Date Retrieval:** Fetches the planned start time of the next major core service upgrade for that instance from the Salesforce Status API.\n- **Days Until Upgrade:** Calculates and displays the number of days remaining until the next major upgrade.\n- **Severity-Based Logging:** Adjusts the log severity (info, warning) based on the proximity of the upgrade date, providing a visual cue for urgency.\n- **Notifications:** Sends notifications to configured channels (e.g., Slack, MS Teams, Grafana) with the upgrade information, making it suitable for automated monitoring.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **Salesforce SOQL Query:** It first queries the `Organization` object in Salesforce to get the `InstanceName` of the target org.\n- **Salesforce Status API Integration:** It makes an HTTP GET request to the Salesforce Status API (`https://api.status.salesforce.com/v1/instances/{instanceName}/status`) to retrieve detailed information about the instance, including scheduled maintenances.\n- **Data Parsing:** It parses the JSON response from the Status API to extract the relevant major release upgrade information.\n- **Date Calculation:** Uses the `moment` library to calculate the difference in days between the current date and the planned upgrade date.\n- **Notification Integration:** It integrates with the `NotifProvider` to send notifications, including the instance name, upgrade date, and days remaining, along with relevant metrics for monitoring dashboards.\n- **User Feedback:** Provides clear messages to the user about the upgrade status and proximity.\n</details>\n",
|
|
5948
|
+
"examples": [
|
|
5949
|
+
"$ sf hardis:org:diagnose:instanceupgrade"
|
|
5950
|
+
],
|
|
5951
|
+
"flags": {
|
|
5952
|
+
"json": {
|
|
5953
|
+
"description": "Format output as json.",
|
|
5954
|
+
"helpGroup": "GLOBAL",
|
|
5955
|
+
"name": "json",
|
|
5956
|
+
"allowNo": false,
|
|
5957
|
+
"type": "boolean"
|
|
5958
|
+
},
|
|
5959
|
+
"flags-dir": {
|
|
5960
|
+
"helpGroup": "GLOBAL",
|
|
5961
|
+
"name": "flags-dir",
|
|
5962
|
+
"summary": "Import flag values from a directory.",
|
|
5963
|
+
"hasDynamicHelp": false,
|
|
5964
|
+
"multiple": false,
|
|
5965
|
+
"type": "option"
|
|
5966
|
+
},
|
|
5967
|
+
"debug": {
|
|
5968
|
+
"char": "d",
|
|
5969
|
+
"description": "Activate debug mode (more logs)",
|
|
5970
|
+
"name": "debug",
|
|
5971
|
+
"allowNo": false,
|
|
5972
|
+
"type": "boolean"
|
|
5973
|
+
},
|
|
5974
|
+
"websocket": {
|
|
5975
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
5976
|
+
"name": "websocket",
|
|
5977
|
+
"hasDynamicHelp": false,
|
|
5978
|
+
"multiple": false,
|
|
5979
|
+
"type": "option"
|
|
5980
|
+
},
|
|
5981
|
+
"skipauth": {
|
|
5982
|
+
"description": "Skip authentication check when a default username is required",
|
|
5983
|
+
"name": "skipauth",
|
|
5984
|
+
"allowNo": false,
|
|
5985
|
+
"type": "boolean"
|
|
5986
|
+
},
|
|
5987
|
+
"target-org": {
|
|
5988
|
+
"aliases": [
|
|
5989
|
+
"targetusername",
|
|
5990
|
+
"u"
|
|
5991
|
+
],
|
|
5992
|
+
"char": "o",
|
|
5993
|
+
"deprecateAliases": true,
|
|
5994
|
+
"name": "target-org",
|
|
5995
|
+
"noCacheDefault": true,
|
|
5996
|
+
"required": true,
|
|
5997
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
5998
|
+
"hasDynamicHelp": true,
|
|
5999
|
+
"multiple": false,
|
|
6000
|
+
"type": "option"
|
|
6001
|
+
}
|
|
6002
|
+
},
|
|
6003
|
+
"hasDynamicHelp": true,
|
|
6004
|
+
"hiddenAliases": [],
|
|
6005
|
+
"id": "hardis:org:diagnose:instanceupgrade",
|
|
6006
|
+
"pluginAlias": "sfdx-hardis",
|
|
6007
|
+
"pluginName": "sfdx-hardis",
|
|
6008
|
+
"pluginType": "core",
|
|
6009
|
+
"strict": true,
|
|
6010
|
+
"enableJsonFlag": true,
|
|
6011
|
+
"title": "Get Instance Upgrade date",
|
|
6012
|
+
"requiresProject": false,
|
|
6013
|
+
"isESM": true,
|
|
6014
|
+
"relativePath": [
|
|
6015
|
+
"lib",
|
|
6016
|
+
"commands",
|
|
6017
|
+
"hardis",
|
|
6018
|
+
"org",
|
|
6019
|
+
"diagnose",
|
|
6020
|
+
"instanceupgrade.js"
|
|
6021
|
+
],
|
|
6022
|
+
"aliasPermutations": [],
|
|
6023
|
+
"permutations": [
|
|
6024
|
+
"hardis:org:diagnose:instanceupgrade",
|
|
6025
|
+
"org:hardis:diagnose:instanceupgrade",
|
|
6026
|
+
"org:diagnose:hardis:instanceupgrade",
|
|
6027
|
+
"org:diagnose:instanceupgrade:hardis",
|
|
6028
|
+
"hardis:diagnose:org:instanceupgrade",
|
|
6029
|
+
"diagnose:hardis:org:instanceupgrade",
|
|
6030
|
+
"diagnose:org:hardis:instanceupgrade",
|
|
6031
|
+
"diagnose:org:instanceupgrade:hardis",
|
|
6032
|
+
"hardis:diagnose:instanceupgrade:org",
|
|
6033
|
+
"diagnose:hardis:instanceupgrade:org",
|
|
6034
|
+
"diagnose:instanceupgrade:hardis:org",
|
|
6035
|
+
"diagnose:instanceupgrade:org:hardis",
|
|
5767
6036
|
"hardis:org:instanceupgrade:diagnose",
|
|
5768
6037
|
"org:hardis:instanceupgrade:diagnose",
|
|
5769
6038
|
"org:instanceupgrade:hardis:diagnose",
|
|
@@ -6802,12 +7071,13 @@
|
|
|
6802
7071
|
"unusedusers:diagnose:org:hardis"
|
|
6803
7072
|
]
|
|
6804
7073
|
},
|
|
6805
|
-
"hardis:org:
|
|
7074
|
+
"hardis:org:fix:listviewmine": {
|
|
6806
7075
|
"aliases": [],
|
|
6807
7076
|
"args": {},
|
|
6808
|
-
"description": "
|
|
7077
|
+
"description": "Fix listviews whose scope Mine has been replaced by Everything\n\n[](https://nicolas.vuillamy.fr/invalid-scope-mine-not-allowed-deploy-your-listviews-anyway-443aceca8ac7)\n\nList of ListViews can be:\n\n- read from .sfdx-hardis.yml file in property **listViewsToSetToMine**\n- sent in argument listviews\n\nNote: property **listViewsToSetToMine** can be auto-generated by command hardis:work:save if .sfdx-hardis.yml contains the following configuration\n\n```yaml\nautoCleanTypes:\n - listViewsMine\n```\n\n- Example of sfdx-hardis.yml property `listViewsToSetToMine`:\n\n```yaml\nlistViewsToSetToMine:\n - \"force-app/main/default/objects/Operation__c/listViews/MyCurrentOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Operation__c/listViews/MyFinalizedOperations.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/Default_Opportunity_Pipeline.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MyCurrentSubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Opportunity/listViews/MySubscriptions.listView-meta.xml\"\n - \"force-app/main/default/objects/Account/listViews/MyActivePartners.listView-meta.xml\"\n```\n\n- If manually written, this could also be:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to run this command from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n",
|
|
6809
7078
|
"examples": [
|
|
6810
|
-
"$ sf hardis:org:
|
|
7079
|
+
"$ sf hardis:org:fix:listviewmine",
|
|
7080
|
+
"$ sf hardis:org:fix:listviewmine --listviews Opportunity:MySubscriptions,Account:MyActivePartners"
|
|
6811
7081
|
],
|
|
6812
7082
|
"flags": {
|
|
6813
7083
|
"json": {
|
|
@@ -6825,48 +7095,14 @@
|
|
|
6825
7095
|
"multiple": false,
|
|
6826
7096
|
"type": "option"
|
|
6827
7097
|
},
|
|
6828
|
-
"
|
|
6829
|
-
"char": "
|
|
6830
|
-
"description": "
|
|
6831
|
-
"name": "
|
|
6832
|
-
"hasDynamicHelp": false,
|
|
6833
|
-
"multiple": false,
|
|
6834
|
-
"type": "option"
|
|
6835
|
-
},
|
|
6836
|
-
"chunksize": {
|
|
6837
|
-
"char": "c",
|
|
6838
|
-
"description": "Number of records to add in a chunk before it is processed",
|
|
6839
|
-
"name": "chunksize",
|
|
6840
|
-
"default": 1000,
|
|
6841
|
-
"hasDynamicHelp": false,
|
|
6842
|
-
"multiple": false,
|
|
6843
|
-
"type": "option"
|
|
6844
|
-
},
|
|
6845
|
-
"polltimeout": {
|
|
6846
|
-
"char": "t",
|
|
6847
|
-
"description": "Timeout in MS for Bulk API calls",
|
|
6848
|
-
"name": "polltimeout",
|
|
6849
|
-
"default": 300000,
|
|
6850
|
-
"hasDynamicHelp": false,
|
|
6851
|
-
"multiple": false,
|
|
6852
|
-
"type": "option"
|
|
6853
|
-
},
|
|
6854
|
-
"startchunknumber": {
|
|
6855
|
-
"char": "s",
|
|
6856
|
-
"description": "Chunk number to start from",
|
|
6857
|
-
"name": "startchunknumber",
|
|
6858
|
-
"default": 0,
|
|
7098
|
+
"listviews": {
|
|
7099
|
+
"char": "l",
|
|
7100
|
+
"description": "Comma-separated list of listviews following format Object:ListViewName\nExample: Contact:MyContacts,Contact:MyActiveContacts,Opportunity:MYClosedOpportunities",
|
|
7101
|
+
"name": "listviews",
|
|
6859
7102
|
"hasDynamicHelp": false,
|
|
6860
7103
|
"multiple": false,
|
|
6861
7104
|
"type": "option"
|
|
6862
7105
|
},
|
|
6863
|
-
"resume": {
|
|
6864
|
-
"char": "r",
|
|
6865
|
-
"description": "Resume previous export by checking existing files (default in CI)",
|
|
6866
|
-
"name": "resume",
|
|
6867
|
-
"allowNo": false,
|
|
6868
|
-
"type": "boolean"
|
|
6869
|
-
},
|
|
6870
7106
|
"debug": {
|
|
6871
7107
|
"char": "d",
|
|
6872
7108
|
"description": "Activate debug mode (more logs)",
|
|
@@ -6905,57 +7141,59 @@
|
|
|
6905
7141
|
},
|
|
6906
7142
|
"hasDynamicHelp": true,
|
|
6907
7143
|
"hiddenAliases": [],
|
|
6908
|
-
"id": "hardis:org:
|
|
7144
|
+
"id": "hardis:org:fix:listviewmine",
|
|
6909
7145
|
"pluginAlias": "sfdx-hardis",
|
|
6910
7146
|
"pluginName": "sfdx-hardis",
|
|
6911
7147
|
"pluginType": "core",
|
|
6912
7148
|
"strict": true,
|
|
6913
7149
|
"enableJsonFlag": true,
|
|
6914
|
-
"title": "
|
|
6915
|
-
"requiresProject":
|
|
7150
|
+
"title": "Fix listviews with ",
|
|
7151
|
+
"requiresProject": true,
|
|
6916
7152
|
"isESM": true,
|
|
6917
7153
|
"relativePath": [
|
|
6918
7154
|
"lib",
|
|
6919
7155
|
"commands",
|
|
6920
7156
|
"hardis",
|
|
6921
7157
|
"org",
|
|
6922
|
-
"
|
|
6923
|
-
"
|
|
7158
|
+
"fix",
|
|
7159
|
+
"listviewmine.js"
|
|
6924
7160
|
],
|
|
6925
7161
|
"aliasPermutations": [],
|
|
6926
7162
|
"permutations": [
|
|
6927
|
-
"hardis:org:
|
|
6928
|
-
"org:hardis:
|
|
6929
|
-
"org:
|
|
6930
|
-
"org:
|
|
6931
|
-
"hardis:
|
|
6932
|
-
"
|
|
6933
|
-
"
|
|
6934
|
-
"
|
|
6935
|
-
"hardis:
|
|
6936
|
-
"
|
|
6937
|
-
"
|
|
6938
|
-
"
|
|
6939
|
-
"hardis:org:
|
|
6940
|
-
"org:hardis:
|
|
6941
|
-
"org:
|
|
6942
|
-
"org:
|
|
6943
|
-
"hardis:
|
|
6944
|
-
"
|
|
6945
|
-
"
|
|
6946
|
-
"
|
|
6947
|
-
"hardis:
|
|
6948
|
-
"
|
|
6949
|
-
"
|
|
6950
|
-
"
|
|
7163
|
+
"hardis:org:fix:listviewmine",
|
|
7164
|
+
"org:hardis:fix:listviewmine",
|
|
7165
|
+
"org:fix:hardis:listviewmine",
|
|
7166
|
+
"org:fix:listviewmine:hardis",
|
|
7167
|
+
"hardis:fix:org:listviewmine",
|
|
7168
|
+
"fix:hardis:org:listviewmine",
|
|
7169
|
+
"fix:org:hardis:listviewmine",
|
|
7170
|
+
"fix:org:listviewmine:hardis",
|
|
7171
|
+
"hardis:fix:listviewmine:org",
|
|
7172
|
+
"fix:hardis:listviewmine:org",
|
|
7173
|
+
"fix:listviewmine:hardis:org",
|
|
7174
|
+
"fix:listviewmine:org:hardis",
|
|
7175
|
+
"hardis:org:listviewmine:fix",
|
|
7176
|
+
"org:hardis:listviewmine:fix",
|
|
7177
|
+
"org:listviewmine:hardis:fix",
|
|
7178
|
+
"org:listviewmine:fix:hardis",
|
|
7179
|
+
"hardis:listviewmine:org:fix",
|
|
7180
|
+
"listviewmine:hardis:org:fix",
|
|
7181
|
+
"listviewmine:org:hardis:fix",
|
|
7182
|
+
"listviewmine:org:fix:hardis",
|
|
7183
|
+
"hardis:listviewmine:fix:org",
|
|
7184
|
+
"listviewmine:hardis:fix:org",
|
|
7185
|
+
"listviewmine:fix:hardis:org",
|
|
7186
|
+
"listviewmine:fix:org:hardis"
|
|
6951
7187
|
]
|
|
6952
7188
|
},
|
|
6953
|
-
"hardis:org:
|
|
7189
|
+
"hardis:org:generate:packagexmlfull": {
|
|
6954
7190
|
"aliases": [],
|
|
6955
7191
|
"args": {},
|
|
6956
|
-
"description": "\
|
|
7192
|
+
"description": "\n## Command Behavior\n\n**Generates a comprehensive `package.xml` file for a Salesforce org, including all metadata components, even managed ones.**\n\nThis command is essential for various Salesforce development and administration tasks, especially when you need a complete snapshot of an org's metadata. It goes beyond typical source tracking by including managed package components, which is crucial for understanding the full metadata footprint of an org.\n\nKey functionalities:\n\n- **Full Org Metadata Retrieval:** Connects to a specified Salesforce org (or prompts for one if not provided) and retrieves a complete list of all metadata types and their members.\n- **Managed Package Inclusion:** Unlike standard source retrieval, this command explicitly includes metadata from managed packages, providing a truly comprehensive `package.xml`.\n- **Customizable Output:** Allows you to specify the output file path for the generated `package.xml`.\n- **Interactive Org Selection:** If no target org is specified, it interactively prompts the user to choose an org. (or use --no-prompt to skip this step)\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **Salesforce Metadata API Interaction:** It leverages the Salesforce Metadata API to list all available metadata types and then retrieve all components for each type.\n- **`buildOrgManifest` Utility:** The core logic for querying the org's metadata and constructing the `package.xml` is encapsulated within the `buildOrgManifest` utility function.\n- **XML Generation:** It dynamically builds the XML structure of the `package.xml` file, including the `types` and `members` elements for all retrieved metadata.\n- **File System Operations:** It writes the generated `package.xml` file to the specified output path.\n- **Interactive Prompts:** Uses `promptOrgUsernameDefault` to guide the user in selecting the target Salesforce org.\n</details>\n",
|
|
6957
7193
|
"examples": [
|
|
6958
|
-
"$ sf hardis:org:
|
|
7194
|
+
"$ sf hardis:org:generate:packagexmlfull",
|
|
7195
|
+
"$ sf hardis:org:generate:packagexmlfull --outputfile /tmp/packagexmlfull.xml",
|
|
7196
|
+
"$ sf hardis:org:generate:packagexmlfull --target-org nico@example.com"
|
|
6959
7197
|
],
|
|
6960
7198
|
"flags": {
|
|
6961
7199
|
"json": {
|
|
@@ -6973,21 +7211,13 @@
|
|
|
6973
7211
|
"multiple": false,
|
|
6974
7212
|
"type": "option"
|
|
6975
7213
|
},
|
|
6976
|
-
"
|
|
6977
|
-
"
|
|
6978
|
-
"
|
|
6979
|
-
"name": "path",
|
|
7214
|
+
"outputfile": {
|
|
7215
|
+
"description": "Output package.xml file",
|
|
7216
|
+
"name": "outputfile",
|
|
6980
7217
|
"hasDynamicHelp": false,
|
|
6981
7218
|
"multiple": false,
|
|
6982
7219
|
"type": "option"
|
|
6983
7220
|
},
|
|
6984
|
-
"overwrite": {
|
|
6985
|
-
"char": "f",
|
|
6986
|
-
"description": "Override existing files (doubles the number of API calls)",
|
|
6987
|
-
"name": "overwrite",
|
|
6988
|
-
"allowNo": false,
|
|
6989
|
-
"type": "boolean"
|
|
6990
|
-
},
|
|
6991
7221
|
"debug": {
|
|
6992
7222
|
"char": "d",
|
|
6993
7223
|
"description": "Activate debug mode (more logs)",
|
|
@@ -6995,6 +7225,13 @@
|
|
|
6995
7225
|
"allowNo": false,
|
|
6996
7226
|
"type": "boolean"
|
|
6997
7227
|
},
|
|
7228
|
+
"no-prompt": {
|
|
7229
|
+
"char": "n",
|
|
7230
|
+
"description": "Do not prompt for org username, use the default one",
|
|
7231
|
+
"name": "no-prompt",
|
|
7232
|
+
"allowNo": false,
|
|
7233
|
+
"type": "boolean"
|
|
7234
|
+
},
|
|
6998
7235
|
"websocket": {
|
|
6999
7236
|
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
7000
7237
|
"name": "websocket",
|
|
@@ -7026,13 +7263,13 @@
|
|
|
7026
7263
|
},
|
|
7027
7264
|
"hasDynamicHelp": true,
|
|
7028
7265
|
"hiddenAliases": [],
|
|
7029
|
-
"id": "hardis:org:
|
|
7266
|
+
"id": "hardis:org:generate:packagexmlfull",
|
|
7030
7267
|
"pluginAlias": "sfdx-hardis",
|
|
7031
7268
|
"pluginName": "sfdx-hardis",
|
|
7032
7269
|
"pluginType": "core",
|
|
7033
7270
|
"strict": true,
|
|
7034
7271
|
"enableJsonFlag": true,
|
|
7035
|
-
"title": "
|
|
7272
|
+
"title": "Generate Full Org package.xml",
|
|
7036
7273
|
"requiresProject": false,
|
|
7037
7274
|
"isESM": true,
|
|
7038
7275
|
"relativePath": [
|
|
@@ -7040,44 +7277,43 @@
|
|
|
7040
7277
|
"commands",
|
|
7041
7278
|
"hardis",
|
|
7042
7279
|
"org",
|
|
7043
|
-
"
|
|
7044
|
-
"
|
|
7280
|
+
"generate",
|
|
7281
|
+
"packagexmlfull.js"
|
|
7045
7282
|
],
|
|
7046
7283
|
"aliasPermutations": [],
|
|
7047
7284
|
"permutations": [
|
|
7048
|
-
"hardis:org:
|
|
7049
|
-
"org:hardis:
|
|
7050
|
-
"org:
|
|
7051
|
-
"org:
|
|
7052
|
-
"hardis:
|
|
7053
|
-
"
|
|
7054
|
-
"
|
|
7055
|
-
"
|
|
7056
|
-
"hardis:
|
|
7057
|
-
"
|
|
7058
|
-
"
|
|
7059
|
-
"
|
|
7060
|
-
"hardis:org:
|
|
7061
|
-
"org:hardis:
|
|
7062
|
-
"org:
|
|
7063
|
-
"org:
|
|
7064
|
-
"hardis:
|
|
7065
|
-
"
|
|
7066
|
-
"
|
|
7067
|
-
"
|
|
7068
|
-
"hardis:
|
|
7069
|
-
"
|
|
7070
|
-
"
|
|
7071
|
-
"
|
|
7285
|
+
"hardis:org:generate:packagexmlfull",
|
|
7286
|
+
"org:hardis:generate:packagexmlfull",
|
|
7287
|
+
"org:generate:hardis:packagexmlfull",
|
|
7288
|
+
"org:generate:packagexmlfull:hardis",
|
|
7289
|
+
"hardis:generate:org:packagexmlfull",
|
|
7290
|
+
"generate:hardis:org:packagexmlfull",
|
|
7291
|
+
"generate:org:hardis:packagexmlfull",
|
|
7292
|
+
"generate:org:packagexmlfull:hardis",
|
|
7293
|
+
"hardis:generate:packagexmlfull:org",
|
|
7294
|
+
"generate:hardis:packagexmlfull:org",
|
|
7295
|
+
"generate:packagexmlfull:hardis:org",
|
|
7296
|
+
"generate:packagexmlfull:org:hardis",
|
|
7297
|
+
"hardis:org:packagexmlfull:generate",
|
|
7298
|
+
"org:hardis:packagexmlfull:generate",
|
|
7299
|
+
"org:packagexmlfull:hardis:generate",
|
|
7300
|
+
"org:packagexmlfull:generate:hardis",
|
|
7301
|
+
"hardis:packagexmlfull:org:generate",
|
|
7302
|
+
"packagexmlfull:hardis:org:generate",
|
|
7303
|
+
"packagexmlfull:org:hardis:generate",
|
|
7304
|
+
"packagexmlfull:org:generate:hardis",
|
|
7305
|
+
"hardis:packagexmlfull:generate:org",
|
|
7306
|
+
"packagexmlfull:hardis:generate:org",
|
|
7307
|
+
"packagexmlfull:generate:hardis:org",
|
|
7308
|
+
"packagexmlfull:generate:org:hardis"
|
|
7072
7309
|
]
|
|
7073
7310
|
},
|
|
7074
|
-
"hardis:org:
|
|
7311
|
+
"hardis:org:monitor:all": {
|
|
7075
7312
|
"aliases": [],
|
|
7076
7313
|
"args": {},
|
|
7077
|
-
"description": "
|
|
7314
|
+
"description": "Monitor org, generate reports and sends notifications\n\nYou can disable some commands defining either a **monitoringDisable** property in `.sfdx-hardis.yml`, or a comma separated list in env variable **MONITORING_DISABLE**\n\nExample in .sfdx-hardis.yml:\n \n```yaml\nmonitoringDisable:\n - METADATA_STATUS\n - MISSING_ATTRIBUTES\n - UNUSED_METADATAS\n```\n \nExample in env var:\n\n```sh\nMONITORING_DISABLE=METADATA_STATUS,MISSING_ATTRIBUTES,UNUSED_METADATAS\n```\n\nA [default list of monitoring commands](https://sfdx-hardis.cloudity.com/salesforce-monitoring-home/#monitoring-commands) is used, if you want to override it you can define property **monitoringCommands** in your .sfdx-hardis.yml file\n\nExample:\n\n```yaml\nmonitoringCommands:\n - title: My Custom command\n command: sf my:custom:command\n - title: My Custom command 2\n command: sf my:other:custom:command\n```\n\nYou can force the daily run of all commands by defining env var `MONITORING_IGNORE_FREQUENCY=true`\n\nThe default list of commands is the following:\n\n| Key | Description | Command | Frequency |\n| :---: | :---- | :---- | :-----: |\n| [AUDIT_TRAIL](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | Detect suspect setup actions in major org | [sf hardis:org:diagnose:audittrail](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | daily |\n| [LEGACY_API](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | Detect calls to deprecated API versions | [sf hardis:org:diagnose:legacyapi](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | daily |\n| [ORG_LIMITS](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | Detect if org limits are close to be reached | [sf hardis:org:monitor:limits](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | daily |\n| [UNSECURED_CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unsecure-connected-apps) | Detect unsecured Connected Apps in an org | [sf hardis:org:diagnose:unsecure-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unsecure-connected-apps) | daily |\n| [LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | Extract licenses information | [sf hardis:org:diagnose:licenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | weekly |\n| [LINT_ACCESS](https://sfdx-hardis.cloudity.com/hardis/lint/access) | Detect custom elements with no access rights defined in permission sets | [sf hardis:lint:access](https://sfdx-hardis.cloudity.com/hardis/lint/access) | weekly |\n| [UNUSED_LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | Detect permission set licenses that are assigned to users that do not need them | [sf hardis:org:diagnose:unusedlicenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | weekly |\n| [UNUSED_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users without recent logins | [sf hardis:org:diagnose:unusedusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ACTIVE_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users with recent logins | [sf hardis:org:diagnose:unusedusers --returnactiveusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ORG_INFO](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | Get org info + SF instance info + next major upgrade date | [sf hardis:org:diagnose:instanceupgrade](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | weekly |\n| [RELEASE_UPDATES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | Gather warnings about incoming and overdue Release Updates | [sf hardis:org:diagnose:releaseupdates](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | weekly |\n| [UNUSED_METADATAS](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | Detect custom labels and custom permissions that are not in use | [sf hardis:lint:unusedmetadatas](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | weekly |\n| [UNUSED_APEX_CLASSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | Detect unused Apex classes in an org | [sf hardis:org:diagnose:unused-apex-classes](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | weekly |\n| [CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | Detect unused Connected Apps in an org | [sf hardis:org:diagnose:unused-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | weekly |\n| [METADATA_STATUS](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | Detect inactive metadata | [sf hardis:lint:metadatastatus](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | weekly |\n| [MISSING_ATTRIBUTES](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | Detect missing description on custom field | [sf hardis:lint:missingattributes](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | weekly |\n\n",
|
|
7078
7315
|
"examples": [
|
|
7079
|
-
"$ sf hardis:org:
|
|
7080
|
-
"$ sf hardis:org:fix:listviewmine --listviews Opportunity:MySubscriptions,Account:MyActivePartners"
|
|
7316
|
+
"$ sf hardis:org:monitor:all"
|
|
7081
7317
|
],
|
|
7082
7318
|
"flags": {
|
|
7083
7319
|
"json": {
|
|
@@ -7095,14 +7331,6 @@
|
|
|
7095
7331
|
"multiple": false,
|
|
7096
7332
|
"type": "option"
|
|
7097
7333
|
},
|
|
7098
|
-
"listviews": {
|
|
7099
|
-
"char": "l",
|
|
7100
|
-
"description": "Comma-separated list of listviews following format Object:ListViewName\nExample: Contact:MyContacts,Contact:MyActiveContacts,Opportunity:MYClosedOpportunities",
|
|
7101
|
-
"name": "listviews",
|
|
7102
|
-
"hasDynamicHelp": false,
|
|
7103
|
-
"multiple": false,
|
|
7104
|
-
"type": "option"
|
|
7105
|
-
},
|
|
7106
7334
|
"debug": {
|
|
7107
7335
|
"char": "d",
|
|
7108
7336
|
"description": "Activate debug mode (more logs)",
|
|
@@ -7141,235 +7369,7 @@
|
|
|
7141
7369
|
},
|
|
7142
7370
|
"hasDynamicHelp": true,
|
|
7143
7371
|
"hiddenAliases": [],
|
|
7144
|
-
"id": "hardis:org:
|
|
7145
|
-
"pluginAlias": "sfdx-hardis",
|
|
7146
|
-
"pluginName": "sfdx-hardis",
|
|
7147
|
-
"pluginType": "core",
|
|
7148
|
-
"strict": true,
|
|
7149
|
-
"enableJsonFlag": true,
|
|
7150
|
-
"title": "Fix listviews with ",
|
|
7151
|
-
"requiresProject": true,
|
|
7152
|
-
"isESM": true,
|
|
7153
|
-
"relativePath": [
|
|
7154
|
-
"lib",
|
|
7155
|
-
"commands",
|
|
7156
|
-
"hardis",
|
|
7157
|
-
"org",
|
|
7158
|
-
"fix",
|
|
7159
|
-
"listviewmine.js"
|
|
7160
|
-
],
|
|
7161
|
-
"aliasPermutations": [],
|
|
7162
|
-
"permutations": [
|
|
7163
|
-
"hardis:org:fix:listviewmine",
|
|
7164
|
-
"org:hardis:fix:listviewmine",
|
|
7165
|
-
"org:fix:hardis:listviewmine",
|
|
7166
|
-
"org:fix:listviewmine:hardis",
|
|
7167
|
-
"hardis:fix:org:listviewmine",
|
|
7168
|
-
"fix:hardis:org:listviewmine",
|
|
7169
|
-
"fix:org:hardis:listviewmine",
|
|
7170
|
-
"fix:org:listviewmine:hardis",
|
|
7171
|
-
"hardis:fix:listviewmine:org",
|
|
7172
|
-
"fix:hardis:listviewmine:org",
|
|
7173
|
-
"fix:listviewmine:hardis:org",
|
|
7174
|
-
"fix:listviewmine:org:hardis",
|
|
7175
|
-
"hardis:org:listviewmine:fix",
|
|
7176
|
-
"org:hardis:listviewmine:fix",
|
|
7177
|
-
"org:listviewmine:hardis:fix",
|
|
7178
|
-
"org:listviewmine:fix:hardis",
|
|
7179
|
-
"hardis:listviewmine:org:fix",
|
|
7180
|
-
"listviewmine:hardis:org:fix",
|
|
7181
|
-
"listviewmine:org:hardis:fix",
|
|
7182
|
-
"listviewmine:org:fix:hardis",
|
|
7183
|
-
"hardis:listviewmine:fix:org",
|
|
7184
|
-
"listviewmine:hardis:fix:org",
|
|
7185
|
-
"listviewmine:fix:hardis:org",
|
|
7186
|
-
"listviewmine:fix:org:hardis"
|
|
7187
|
-
]
|
|
7188
|
-
},
|
|
7189
|
-
"hardis:org:generate:packagexmlfull": {
|
|
7190
|
-
"aliases": [],
|
|
7191
|
-
"args": {},
|
|
7192
|
-
"description": "\n## Command Behavior\n\n**Generates a comprehensive `package.xml` file for a Salesforce org, including all metadata components, even managed ones.**\n\nThis command is essential for various Salesforce development and administration tasks, especially when you need a complete snapshot of an org's metadata. It goes beyond typical source tracking by including managed package components, which is crucial for understanding the full metadata footprint of an org.\n\nKey functionalities:\n\n- **Full Org Metadata Retrieval:** Connects to a specified Salesforce org (or prompts for one if not provided) and retrieves a complete list of all metadata types and their members.\n- **Managed Package Inclusion:** Unlike standard source retrieval, this command explicitly includes metadata from managed packages, providing a truly comprehensive `package.xml`.\n- **Customizable Output:** Allows you to specify the output file path for the generated `package.xml`.\n- **Interactive Org Selection:** If no target org is specified, it interactively prompts the user to choose an org. (or use --no-prompt to skip this step)\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **Salesforce Metadata API Interaction:** It leverages the Salesforce Metadata API to list all available metadata types and then retrieve all components for each type.\n- **`buildOrgManifest` Utility:** The core logic for querying the org's metadata and constructing the `package.xml` is encapsulated within the `buildOrgManifest` utility function.\n- **XML Generation:** It dynamically builds the XML structure of the `package.xml` file, including the `types` and `members` elements for all retrieved metadata.\n- **File System Operations:** It writes the generated `package.xml` file to the specified output path.\n- **Interactive Prompts:** Uses `promptOrgUsernameDefault` to guide the user in selecting the target Salesforce org.\n</details>\n",
|
|
7193
|
-
"examples": [
|
|
7194
|
-
"$ sf hardis:org:generate:packagexmlfull",
|
|
7195
|
-
"$ sf hardis:org:generate:packagexmlfull --outputfile /tmp/packagexmlfull.xml",
|
|
7196
|
-
"$ sf hardis:org:generate:packagexmlfull --target-org nico@example.com"
|
|
7197
|
-
],
|
|
7198
|
-
"flags": {
|
|
7199
|
-
"json": {
|
|
7200
|
-
"description": "Format output as json.",
|
|
7201
|
-
"helpGroup": "GLOBAL",
|
|
7202
|
-
"name": "json",
|
|
7203
|
-
"allowNo": false,
|
|
7204
|
-
"type": "boolean"
|
|
7205
|
-
},
|
|
7206
|
-
"flags-dir": {
|
|
7207
|
-
"helpGroup": "GLOBAL",
|
|
7208
|
-
"name": "flags-dir",
|
|
7209
|
-
"summary": "Import flag values from a directory.",
|
|
7210
|
-
"hasDynamicHelp": false,
|
|
7211
|
-
"multiple": false,
|
|
7212
|
-
"type": "option"
|
|
7213
|
-
},
|
|
7214
|
-
"outputfile": {
|
|
7215
|
-
"description": "Output package.xml file",
|
|
7216
|
-
"name": "outputfile",
|
|
7217
|
-
"hasDynamicHelp": false,
|
|
7218
|
-
"multiple": false,
|
|
7219
|
-
"type": "option"
|
|
7220
|
-
},
|
|
7221
|
-
"debug": {
|
|
7222
|
-
"char": "d",
|
|
7223
|
-
"description": "Activate debug mode (more logs)",
|
|
7224
|
-
"name": "debug",
|
|
7225
|
-
"allowNo": false,
|
|
7226
|
-
"type": "boolean"
|
|
7227
|
-
},
|
|
7228
|
-
"no-prompt": {
|
|
7229
|
-
"char": "n",
|
|
7230
|
-
"description": "Do not prompt for org username, use the default one",
|
|
7231
|
-
"name": "no-prompt",
|
|
7232
|
-
"allowNo": false,
|
|
7233
|
-
"type": "boolean"
|
|
7234
|
-
},
|
|
7235
|
-
"websocket": {
|
|
7236
|
-
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
7237
|
-
"name": "websocket",
|
|
7238
|
-
"hasDynamicHelp": false,
|
|
7239
|
-
"multiple": false,
|
|
7240
|
-
"type": "option"
|
|
7241
|
-
},
|
|
7242
|
-
"skipauth": {
|
|
7243
|
-
"description": "Skip authentication check when a default username is required",
|
|
7244
|
-
"name": "skipauth",
|
|
7245
|
-
"allowNo": false,
|
|
7246
|
-
"type": "boolean"
|
|
7247
|
-
},
|
|
7248
|
-
"target-org": {
|
|
7249
|
-
"aliases": [
|
|
7250
|
-
"targetusername",
|
|
7251
|
-
"u"
|
|
7252
|
-
],
|
|
7253
|
-
"char": "o",
|
|
7254
|
-
"deprecateAliases": true,
|
|
7255
|
-
"name": "target-org",
|
|
7256
|
-
"noCacheDefault": true,
|
|
7257
|
-
"required": true,
|
|
7258
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
7259
|
-
"hasDynamicHelp": true,
|
|
7260
|
-
"multiple": false,
|
|
7261
|
-
"type": "option"
|
|
7262
|
-
}
|
|
7263
|
-
},
|
|
7264
|
-
"hasDynamicHelp": true,
|
|
7265
|
-
"hiddenAliases": [],
|
|
7266
|
-
"id": "hardis:org:generate:packagexmlfull",
|
|
7267
|
-
"pluginAlias": "sfdx-hardis",
|
|
7268
|
-
"pluginName": "sfdx-hardis",
|
|
7269
|
-
"pluginType": "core",
|
|
7270
|
-
"strict": true,
|
|
7271
|
-
"enableJsonFlag": true,
|
|
7272
|
-
"title": "Generate Full Org package.xml",
|
|
7273
|
-
"requiresProject": false,
|
|
7274
|
-
"isESM": true,
|
|
7275
|
-
"relativePath": [
|
|
7276
|
-
"lib",
|
|
7277
|
-
"commands",
|
|
7278
|
-
"hardis",
|
|
7279
|
-
"org",
|
|
7280
|
-
"generate",
|
|
7281
|
-
"packagexmlfull.js"
|
|
7282
|
-
],
|
|
7283
|
-
"aliasPermutations": [],
|
|
7284
|
-
"permutations": [
|
|
7285
|
-
"hardis:org:generate:packagexmlfull",
|
|
7286
|
-
"org:hardis:generate:packagexmlfull",
|
|
7287
|
-
"org:generate:hardis:packagexmlfull",
|
|
7288
|
-
"org:generate:packagexmlfull:hardis",
|
|
7289
|
-
"hardis:generate:org:packagexmlfull",
|
|
7290
|
-
"generate:hardis:org:packagexmlfull",
|
|
7291
|
-
"generate:org:hardis:packagexmlfull",
|
|
7292
|
-
"generate:org:packagexmlfull:hardis",
|
|
7293
|
-
"hardis:generate:packagexmlfull:org",
|
|
7294
|
-
"generate:hardis:packagexmlfull:org",
|
|
7295
|
-
"generate:packagexmlfull:hardis:org",
|
|
7296
|
-
"generate:packagexmlfull:org:hardis",
|
|
7297
|
-
"hardis:org:packagexmlfull:generate",
|
|
7298
|
-
"org:hardis:packagexmlfull:generate",
|
|
7299
|
-
"org:packagexmlfull:hardis:generate",
|
|
7300
|
-
"org:packagexmlfull:generate:hardis",
|
|
7301
|
-
"hardis:packagexmlfull:org:generate",
|
|
7302
|
-
"packagexmlfull:hardis:org:generate",
|
|
7303
|
-
"packagexmlfull:org:hardis:generate",
|
|
7304
|
-
"packagexmlfull:org:generate:hardis",
|
|
7305
|
-
"hardis:packagexmlfull:generate:org",
|
|
7306
|
-
"packagexmlfull:hardis:generate:org",
|
|
7307
|
-
"packagexmlfull:generate:hardis:org",
|
|
7308
|
-
"packagexmlfull:generate:org:hardis"
|
|
7309
|
-
]
|
|
7310
|
-
},
|
|
7311
|
-
"hardis:org:monitor:all": {
|
|
7312
|
-
"aliases": [],
|
|
7313
|
-
"args": {},
|
|
7314
|
-
"description": "Monitor org, generate reports and sends notifications\n\nYou can disable some commands defining either a **monitoringDisable** property in `.sfdx-hardis.yml`, or a comma separated list in env variable **MONITORING_DISABLE**\n\nExample in .sfdx-hardis.yml:\n \n```yaml\nmonitoringDisable:\n - METADATA_STATUS\n - MISSING_ATTRIBUTES\n - UNUSED_METADATAS\n```\n \nExample in env var:\n\n```sh\nMONITORING_DISABLE=METADATA_STATUS,MISSING_ATTRIBUTES,UNUSED_METADATAS\n```\n\nA [default list of monitoring commands](https://sfdx-hardis.cloudity.com/salesforce-monitoring-home/#monitoring-commands) is used, if you want to override it you can define property **monitoringCommands** in your .sfdx-hardis.yml file\n\nExample:\n\n```yaml\nmonitoringCommands:\n - title: My Custom command\n command: sf my:custom:command\n - title: My Custom command 2\n command: sf my:other:custom:command\n```\n\nYou can force the daily run of all commands by defining env var `MONITORING_IGNORE_FREQUENCY=true`\n\nThe default list of commands is the following:\n\n| Key | Description | Command | Frequency |\n| :---: | :---- | :---- | :-----: |\n| [AUDIT_TRAIL](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | Detect suspect setup actions in major org | [sf hardis:org:diagnose:audittrail](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/audittrail) | daily |\n| [LEGACY_API](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | Detect calls to deprecated API versions | [sf hardis:org:diagnose:legacyapi](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/legacyapi) | daily |\n| [ORG_LIMITS](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | Detect if org limits are close to be reached | [sf hardis:org:monitor:limits](https://sfdx-hardis.cloudity.com/hardis/org/monitor/limits) | daily |\n| [UNSECURED_CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unsecure-connected-apps) | Detect unsecured Connected Apps in an org | [sf hardis:org:diagnose:unsecure-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unsecure-connected-apps) | daily |\n| [LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | Extract licenses information | [sf hardis:org:diagnose:licenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/licenses) | weekly |\n| [LINT_ACCESS](https://sfdx-hardis.cloudity.com/hardis/lint/access) | Detect custom elements with no access rights defined in permission sets | [sf hardis:lint:access](https://sfdx-hardis.cloudity.com/hardis/lint/access) | weekly |\n| [UNUSED_LICENSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | Detect permission set licenses that are assigned to users that do not need them | [sf hardis:org:diagnose:unusedlicenses](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedlicenses) | weekly |\n| [UNUSED_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users without recent logins | [sf hardis:org:diagnose:unusedusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ACTIVE_USERS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | Detect active users with recent logins | [sf hardis:org:diagnose:unusedusers --returnactiveusers](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unusedusers) | weekly |\n| [ORG_INFO](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | Get org info + SF instance info + next major upgrade date | [sf hardis:org:diagnose:instanceupgrade](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/instanceupgrade) | weekly |\n| [RELEASE_UPDATES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | Gather warnings about incoming and overdue Release Updates | [sf hardis:org:diagnose:releaseupdates](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/releaseupdates) | weekly |\n| [UNUSED_METADATAS](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | Detect custom labels and custom permissions that are not in use | [sf hardis:lint:unusedmetadatas](https://sfdx-hardis.cloudity.com/hardis/lint/unusedmetadatas) | weekly |\n| [UNUSED_APEX_CLASSES](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | Detect unused Apex classes in an org | [sf hardis:org:diagnose:unused-apex-classes](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-apex-classes) | weekly |\n| [CONNECTED_APPS](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | Detect unused Connected Apps in an org | [sf hardis:org:diagnose:unused-connected-apps](https://sfdx-hardis.cloudity.com/hardis/org/diagnose/unused-connected-apps) | weekly |\n| [METADATA_STATUS](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | Detect inactive metadata | [sf hardis:lint:metadatastatus](https://sfdx-hardis.cloudity.com/hardis/lint/metadatastatus) | weekly |\n| [MISSING_ATTRIBUTES](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | Detect missing description on custom field | [sf hardis:lint:missingattributes](https://sfdx-hardis.cloudity.com/hardis/lint/missingattributes) | weekly |\n\n",
|
|
7315
|
-
"examples": [
|
|
7316
|
-
"$ sf hardis:org:monitor:all"
|
|
7317
|
-
],
|
|
7318
|
-
"flags": {
|
|
7319
|
-
"json": {
|
|
7320
|
-
"description": "Format output as json.",
|
|
7321
|
-
"helpGroup": "GLOBAL",
|
|
7322
|
-
"name": "json",
|
|
7323
|
-
"allowNo": false,
|
|
7324
|
-
"type": "boolean"
|
|
7325
|
-
},
|
|
7326
|
-
"flags-dir": {
|
|
7327
|
-
"helpGroup": "GLOBAL",
|
|
7328
|
-
"name": "flags-dir",
|
|
7329
|
-
"summary": "Import flag values from a directory.",
|
|
7330
|
-
"hasDynamicHelp": false,
|
|
7331
|
-
"multiple": false,
|
|
7332
|
-
"type": "option"
|
|
7333
|
-
},
|
|
7334
|
-
"debug": {
|
|
7335
|
-
"char": "d",
|
|
7336
|
-
"description": "Activate debug mode (more logs)",
|
|
7337
|
-
"name": "debug",
|
|
7338
|
-
"allowNo": false,
|
|
7339
|
-
"type": "boolean"
|
|
7340
|
-
},
|
|
7341
|
-
"websocket": {
|
|
7342
|
-
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
7343
|
-
"name": "websocket",
|
|
7344
|
-
"hasDynamicHelp": false,
|
|
7345
|
-
"multiple": false,
|
|
7346
|
-
"type": "option"
|
|
7347
|
-
},
|
|
7348
|
-
"skipauth": {
|
|
7349
|
-
"description": "Skip authentication check when a default username is required",
|
|
7350
|
-
"name": "skipauth",
|
|
7351
|
-
"allowNo": false,
|
|
7352
|
-
"type": "boolean"
|
|
7353
|
-
},
|
|
7354
|
-
"target-org": {
|
|
7355
|
-
"aliases": [
|
|
7356
|
-
"targetusername",
|
|
7357
|
-
"u"
|
|
7358
|
-
],
|
|
7359
|
-
"char": "o",
|
|
7360
|
-
"deprecateAliases": true,
|
|
7361
|
-
"name": "target-org",
|
|
7362
|
-
"noCacheDefault": true,
|
|
7363
|
-
"required": true,
|
|
7364
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
7365
|
-
"hasDynamicHelp": true,
|
|
7366
|
-
"multiple": false,
|
|
7367
|
-
"type": "option"
|
|
7368
|
-
}
|
|
7369
|
-
},
|
|
7370
|
-
"hasDynamicHelp": true,
|
|
7371
|
-
"hiddenAliases": [],
|
|
7372
|
-
"id": "hardis:org:monitor:all",
|
|
7372
|
+
"id": "hardis:org:monitor:all",
|
|
7373
7373
|
"pluginAlias": "sfdx-hardis",
|
|
7374
7374
|
"pluginName": "sfdx-hardis",
|
|
7375
7375
|
"pluginType": "core",
|
|
@@ -8057,13 +8057,16 @@
|
|
|
8057
8057
|
"flow:purge:org:hardis"
|
|
8058
8058
|
]
|
|
8059
8059
|
},
|
|
8060
|
-
"hardis:org:
|
|
8060
|
+
"hardis:org:refresh:after-refresh": {
|
|
8061
8061
|
"aliases": [],
|
|
8062
8062
|
"args": {},
|
|
8063
|
-
"description": "\n**
|
|
8063
|
+
"description": "\n## Command Behavior\n\n**Restores all previously backed-up Connected Apps (including Consumer Secrets), certificates, custom settings, records and other metadata to a Salesforce org after a sandbox refresh.**\n\nThis command is the second step in the sandbox refresh process. It scans the backup folder created before the refresh, allows interactive or flag-driven selection of items to restore, and automates cleanup and redeployment to the refreshed org while preserving credentials and configuration.\n\nKey functionalities:\n\n- **Choose a backup to restore:** Lets you pick the saved sandbox project that contains the artifacts to restore.\n- **Select which items to restore:** Finds Connected App XMLs, certificates, custom settings and other artifacts and lets you pick what to restore (or restore all).\n- **Safety checks and validation:** Confirms files exist and prompts before making changes to the target org.\n- **Prepare org for restore:** Optionally cleans up existing Connected Apps so saved apps can be re-deployed without conflict.\n- **Redeploy saved artifacts:** Restores Connected Apps (with saved secrets), certificates, SAML SSO configs, custom settings and other metadata.\n- **Handle SAML configs:** Cleans and updates SAML XML files and helps you choose certificates to wire into restored configs.\n- **Restore records:** Optionally runs data import from selected SFDMU workspaces to restore record data.\n- **Reporting & persistence:** Sends restore reports and can update project config to record what was restored.\n\nThis command is part of [sfdx-hardis Sandbox Refresh](https://sfdx-hardis.cloudity.com/salesforce-sandbox-refresh/) and is intended to be run after a sandbox refresh to re-apply saved metadata, credentials and data.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\n- **Backup Folder Handling:** Reads the immediate subfolders of `scripts/sandbox-refresh/` and validates the chosen project contains the expected `manifest/` and `force-app` layout.\n- **Metadata & Deployment APIs:** Uses `sf project deploy start --manifest` for package-based deploys, `sf project deploy start --metadata-dir` for MDAPI artifacts (certificates), and utility functions for Connected App deployment that preserve consumer secrets.\n- **SAML Handling:** Queries active certificates via tooling API, updates SAML XML files, and deploys using `sf project deploy start -m SamlSsoConfig`.\n- **Records Handling:** Uses interactive selection of SFDMU workspaces and runs data import utilities to restore records.\n- **Error Handling & Summary:** Aggregates results, logs success/warnings/errors, and returns a structured result indicating which items were restored and any failures.\n\n</details>\n",
|
|
8064
8064
|
"examples": [
|
|
8065
|
-
"$ sf hardis:org:
|
|
8066
|
-
"sf hardis:org:
|
|
8065
|
+
"$ sf hardis:org:refresh:after-refresh",
|
|
8066
|
+
"$ sf hardis:org:refresh:after-refresh --name \"MyConnectedApp\" // Process specific app, no selection prompt",
|
|
8067
|
+
"$ sf hardis:org:refresh:after-refresh --name \"App1,App2,App3\" // Process multiple apps, no selection prompt",
|
|
8068
|
+
"$ sf hardis:org:refresh:after-refresh --all // Process all apps, no selection prompt",
|
|
8069
|
+
"$ sf hardis:org:refresh:after-refresh --target-org myDevOrg"
|
|
8067
8070
|
],
|
|
8068
8071
|
"flags": {
|
|
8069
8072
|
"json": {
|
|
@@ -8081,16 +8084,37 @@
|
|
|
8081
8084
|
"multiple": false,
|
|
8082
8085
|
"type": "option"
|
|
8083
8086
|
},
|
|
8084
|
-
"
|
|
8085
|
-
"char": "
|
|
8086
|
-
"
|
|
8087
|
-
"
|
|
8087
|
+
"target-org": {
|
|
8088
|
+
"char": "o",
|
|
8089
|
+
"name": "target-org",
|
|
8090
|
+
"noCacheDefault": true,
|
|
8091
|
+
"required": true,
|
|
8092
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
8093
|
+
"hasDynamicHelp": true,
|
|
8094
|
+
"multiple": false,
|
|
8095
|
+
"type": "option"
|
|
8096
|
+
},
|
|
8097
|
+
"name": {
|
|
8098
|
+
"char": "n",
|
|
8099
|
+
"description": "Connected App name(s) to process (bypasses selection prompt). For multiple apps, separate with commas (e.g., \"App1,App2\")",
|
|
8100
|
+
"name": "name",
|
|
8101
|
+
"summary": "Filter according to Name criteria",
|
|
8102
|
+
"hasDynamicHelp": false,
|
|
8103
|
+
"multiple": false,
|
|
8104
|
+
"type": "option"
|
|
8105
|
+
},
|
|
8106
|
+
"all": {
|
|
8107
|
+
"char": "a",
|
|
8108
|
+
"description": "If set, all Connected Apps from the local repository will be processed. Takes precedence over --name if both are specified.",
|
|
8109
|
+
"name": "all",
|
|
8110
|
+
"summary": "Process all Connected Apps without selection prompt",
|
|
8088
8111
|
"allowNo": false,
|
|
8089
8112
|
"type": "boolean"
|
|
8090
8113
|
},
|
|
8091
8114
|
"websocket": {
|
|
8092
|
-
"description": "
|
|
8115
|
+
"description": "WebSocket host:port for VS Code SFDX Hardis UI integration",
|
|
8093
8116
|
"name": "websocket",
|
|
8117
|
+
"summary": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
8094
8118
|
"hasDynamicHelp": false,
|
|
8095
8119
|
"multiple": false,
|
|
8096
8120
|
"type": "option"
|
|
@@ -8098,160 +8122,29 @@
|
|
|
8098
8122
|
"skipauth": {
|
|
8099
8123
|
"description": "Skip authentication check when a default username is required",
|
|
8100
8124
|
"name": "skipauth",
|
|
8125
|
+
"summary": "Skip authentication check when a default username is required",
|
|
8101
8126
|
"allowNo": false,
|
|
8102
8127
|
"type": "boolean"
|
|
8103
|
-
},
|
|
8104
|
-
"target-org": {
|
|
8105
|
-
"aliases": [
|
|
8106
|
-
"targetusername",
|
|
8107
|
-
"u"
|
|
8108
|
-
],
|
|
8109
|
-
"char": "o",
|
|
8110
|
-
"deprecateAliases": true,
|
|
8111
|
-
"name": "target-org",
|
|
8112
|
-
"noCacheDefault": true,
|
|
8113
|
-
"required": true,
|
|
8114
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
8115
|
-
"hasDynamicHelp": true,
|
|
8116
|
-
"multiple": false,
|
|
8117
|
-
"type": "option"
|
|
8118
8128
|
}
|
|
8119
8129
|
},
|
|
8120
8130
|
"hasDynamicHelp": true,
|
|
8121
8131
|
"hiddenAliases": [],
|
|
8122
|
-
"id": "hardis:org:
|
|
8132
|
+
"id": "hardis:org:refresh:after-refresh",
|
|
8123
8133
|
"pluginAlias": "sfdx-hardis",
|
|
8124
8134
|
"pluginName": "sfdx-hardis",
|
|
8125
8135
|
"pluginType": "core",
|
|
8126
8136
|
"strict": true,
|
|
8127
8137
|
"enableJsonFlag": true,
|
|
8128
|
-
"title": "
|
|
8129
|
-
"requiresProject":
|
|
8138
|
+
"title": "Restore Connected Apps after org refresh",
|
|
8139
|
+
"requiresProject": true,
|
|
8130
8140
|
"isESM": true,
|
|
8131
8141
|
"relativePath": [
|
|
8132
8142
|
"lib",
|
|
8133
8143
|
"commands",
|
|
8134
8144
|
"hardis",
|
|
8135
8145
|
"org",
|
|
8136
|
-
"
|
|
8137
|
-
"
|
|
8138
|
-
],
|
|
8139
|
-
"aliasPermutations": [],
|
|
8140
|
-
"permutations": [
|
|
8141
|
-
"hardis:org:retrieve:packageconfig",
|
|
8142
|
-
"org:hardis:retrieve:packageconfig",
|
|
8143
|
-
"org:retrieve:hardis:packageconfig",
|
|
8144
|
-
"org:retrieve:packageconfig:hardis",
|
|
8145
|
-
"hardis:retrieve:org:packageconfig",
|
|
8146
|
-
"retrieve:hardis:org:packageconfig",
|
|
8147
|
-
"retrieve:org:hardis:packageconfig",
|
|
8148
|
-
"retrieve:org:packageconfig:hardis",
|
|
8149
|
-
"hardis:retrieve:packageconfig:org",
|
|
8150
|
-
"retrieve:hardis:packageconfig:org",
|
|
8151
|
-
"retrieve:packageconfig:hardis:org",
|
|
8152
|
-
"retrieve:packageconfig:org:hardis",
|
|
8153
|
-
"hardis:org:packageconfig:retrieve",
|
|
8154
|
-
"org:hardis:packageconfig:retrieve",
|
|
8155
|
-
"org:packageconfig:hardis:retrieve",
|
|
8156
|
-
"org:packageconfig:retrieve:hardis",
|
|
8157
|
-
"hardis:packageconfig:org:retrieve",
|
|
8158
|
-
"packageconfig:hardis:org:retrieve",
|
|
8159
|
-
"packageconfig:org:hardis:retrieve",
|
|
8160
|
-
"packageconfig:org:retrieve:hardis",
|
|
8161
|
-
"hardis:packageconfig:retrieve:org",
|
|
8162
|
-
"packageconfig:hardis:retrieve:org",
|
|
8163
|
-
"packageconfig:retrieve:hardis:org",
|
|
8164
|
-
"packageconfig:retrieve:org:hardis"
|
|
8165
|
-
]
|
|
8166
|
-
},
|
|
8167
|
-
"hardis:org:refresh:after-refresh": {
|
|
8168
|
-
"aliases": [],
|
|
8169
|
-
"args": {},
|
|
8170
|
-
"description": "\n## Command Behavior\n\n**Restores all previously backed-up Connected Apps (including Consumer Secrets), certificates, custom settings, records and other metadata to a Salesforce org after a sandbox refresh.**\n\nThis command is the second step in the sandbox refresh process. It scans the backup folder created before the refresh, allows interactive or flag-driven selection of items to restore, and automates cleanup and redeployment to the refreshed org while preserving credentials and configuration.\n\nKey functionalities:\n\n- **Choose a backup to restore:** Lets you pick the saved sandbox project that contains the artifacts to restore.\n- **Select which items to restore:** Finds Connected App XMLs, certificates, custom settings and other artifacts and lets you pick what to restore (or restore all).\n- **Safety checks and validation:** Confirms files exist and prompts before making changes to the target org.\n- **Prepare org for restore:** Optionally cleans up existing Connected Apps so saved apps can be re-deployed without conflict.\n- **Redeploy saved artifacts:** Restores Connected Apps (with saved secrets), certificates, SAML SSO configs, custom settings and other metadata.\n- **Handle SAML configs:** Cleans and updates SAML XML files and helps you choose certificates to wire into restored configs.\n- **Restore records:** Optionally runs data import from selected SFDMU workspaces to restore record data.\n- **Reporting & persistence:** Sends restore reports and can update project config to record what was restored.\n\nThis command is part of [sfdx-hardis Sandbox Refresh](https://sfdx-hardis.cloudity.com/salesforce-sandbox-refresh/) and is intended to be run after a sandbox refresh to re-apply saved metadata, credentials and data.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\n- **Backup Folder Handling:** Reads the immediate subfolders of `scripts/sandbox-refresh/` and validates the chosen project contains the expected `manifest/` and `force-app` layout.\n- **Metadata & Deployment APIs:** Uses `sf project deploy start --manifest` for package-based deploys, `sf project deploy start --metadata-dir` for MDAPI artifacts (certificates), and utility functions for Connected App deployment that preserve consumer secrets.\n- **SAML Handling:** Queries active certificates via tooling API, updates SAML XML files, and deploys using `sf project deploy start -m SamlSsoConfig`.\n- **Records Handling:** Uses interactive selection of SFDMU workspaces and runs data import utilities to restore records.\n- **Error Handling & Summary:** Aggregates results, logs success/warnings/errors, and returns a structured result indicating which items were restored and any failures.\n\n</details>\n",
|
|
8171
|
-
"examples": [
|
|
8172
|
-
"$ sf hardis:org:refresh:after-refresh",
|
|
8173
|
-
"$ sf hardis:org:refresh:after-refresh --name \"MyConnectedApp\" // Process specific app, no selection prompt",
|
|
8174
|
-
"$ sf hardis:org:refresh:after-refresh --name \"App1,App2,App3\" // Process multiple apps, no selection prompt",
|
|
8175
|
-
"$ sf hardis:org:refresh:after-refresh --all // Process all apps, no selection prompt",
|
|
8176
|
-
"$ sf hardis:org:refresh:after-refresh --target-org myDevOrg"
|
|
8177
|
-
],
|
|
8178
|
-
"flags": {
|
|
8179
|
-
"json": {
|
|
8180
|
-
"description": "Format output as json.",
|
|
8181
|
-
"helpGroup": "GLOBAL",
|
|
8182
|
-
"name": "json",
|
|
8183
|
-
"allowNo": false,
|
|
8184
|
-
"type": "boolean"
|
|
8185
|
-
},
|
|
8186
|
-
"flags-dir": {
|
|
8187
|
-
"helpGroup": "GLOBAL",
|
|
8188
|
-
"name": "flags-dir",
|
|
8189
|
-
"summary": "Import flag values from a directory.",
|
|
8190
|
-
"hasDynamicHelp": false,
|
|
8191
|
-
"multiple": false,
|
|
8192
|
-
"type": "option"
|
|
8193
|
-
},
|
|
8194
|
-
"target-org": {
|
|
8195
|
-
"char": "o",
|
|
8196
|
-
"name": "target-org",
|
|
8197
|
-
"noCacheDefault": true,
|
|
8198
|
-
"required": true,
|
|
8199
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
8200
|
-
"hasDynamicHelp": true,
|
|
8201
|
-
"multiple": false,
|
|
8202
|
-
"type": "option"
|
|
8203
|
-
},
|
|
8204
|
-
"name": {
|
|
8205
|
-
"char": "n",
|
|
8206
|
-
"description": "Connected App name(s) to process (bypasses selection prompt). For multiple apps, separate with commas (e.g., \"App1,App2\")",
|
|
8207
|
-
"name": "name",
|
|
8208
|
-
"summary": "Filter according to Name criteria",
|
|
8209
|
-
"hasDynamicHelp": false,
|
|
8210
|
-
"multiple": false,
|
|
8211
|
-
"type": "option"
|
|
8212
|
-
},
|
|
8213
|
-
"all": {
|
|
8214
|
-
"char": "a",
|
|
8215
|
-
"description": "If set, all Connected Apps from the local repository will be processed. Takes precedence over --name if both are specified.",
|
|
8216
|
-
"name": "all",
|
|
8217
|
-
"summary": "Process all Connected Apps without selection prompt",
|
|
8218
|
-
"allowNo": false,
|
|
8219
|
-
"type": "boolean"
|
|
8220
|
-
},
|
|
8221
|
-
"websocket": {
|
|
8222
|
-
"description": "WebSocket host:port for VS Code SFDX Hardis UI integration",
|
|
8223
|
-
"name": "websocket",
|
|
8224
|
-
"summary": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
8225
|
-
"hasDynamicHelp": false,
|
|
8226
|
-
"multiple": false,
|
|
8227
|
-
"type": "option"
|
|
8228
|
-
},
|
|
8229
|
-
"skipauth": {
|
|
8230
|
-
"description": "Skip authentication check when a default username is required",
|
|
8231
|
-
"name": "skipauth",
|
|
8232
|
-
"summary": "Skip authentication check when a default username is required",
|
|
8233
|
-
"allowNo": false,
|
|
8234
|
-
"type": "boolean"
|
|
8235
|
-
}
|
|
8236
|
-
},
|
|
8237
|
-
"hasDynamicHelp": true,
|
|
8238
|
-
"hiddenAliases": [],
|
|
8239
|
-
"id": "hardis:org:refresh:after-refresh",
|
|
8240
|
-
"pluginAlias": "sfdx-hardis",
|
|
8241
|
-
"pluginName": "sfdx-hardis",
|
|
8242
|
-
"pluginType": "core",
|
|
8243
|
-
"strict": true,
|
|
8244
|
-
"enableJsonFlag": true,
|
|
8245
|
-
"title": "Restore Connected Apps after org refresh",
|
|
8246
|
-
"requiresProject": true,
|
|
8247
|
-
"isESM": true,
|
|
8248
|
-
"relativePath": [
|
|
8249
|
-
"lib",
|
|
8250
|
-
"commands",
|
|
8251
|
-
"hardis",
|
|
8252
|
-
"org",
|
|
8253
|
-
"refresh",
|
|
8254
|
-
"after-refresh.js"
|
|
8146
|
+
"refresh",
|
|
8147
|
+
"after-refresh.js"
|
|
8255
8148
|
],
|
|
8256
8149
|
"aliasPermutations": [],
|
|
8257
8150
|
"permutations": [
|
|
@@ -8403,6 +8296,113 @@
|
|
|
8403
8296
|
"before-refresh:refresh:org:hardis"
|
|
8404
8297
|
]
|
|
8405
8298
|
},
|
|
8299
|
+
"hardis:org:retrieve:packageconfig": {
|
|
8300
|
+
"aliases": [],
|
|
8301
|
+
"args": {},
|
|
8302
|
+
"description": "\n**Retrieves the installed package configuration from a Salesforce org and optionally updates the local project configuration.**\n\nThis command is useful for maintaining an accurate record of installed packages within your Salesforce project, which is crucial for managing dependencies and ensuring consistent deployments across environments.\n\nKey functionalities:\n\n- **Package Listing:** Connects to a specified Salesforce org (or prompts for one if not provided) and retrieves a list of all installed packages.\n- **Configuration Update:** Offers the option to update your local project's configuration with the retrieved list of installed packages. This can be beneficial for automating package installations during environment setup or CI/CD processes.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **Org Connection:** It establishes a connection to the target Salesforce org using the provided or prompted username.\n- **Metadata Retrieval:** It utilizes `MetadataUtils.listInstalledPackages` to query the Salesforce org and obtain details about the installed packages.\n- **Interactive Prompt:** It uses the `prompts` library to ask the user whether they want to update their local project configuration with the retrieved package list.\n- **Configuration Management:** If the user confirms, it calls `managePackageConfig` to update the project's configuration file (likely `.sfdx-hardis.yml`) with the new package information.\n- **User Feedback:** Provides clear messages to the user about the success of the package retrieval and configuration update.\n</details>\n",
|
|
8303
|
+
"examples": [
|
|
8304
|
+
"$ sf hardis:org:retrieve:packageconfig",
|
|
8305
|
+
"sf hardis:org:retrieve:packageconfig -u myOrg"
|
|
8306
|
+
],
|
|
8307
|
+
"flags": {
|
|
8308
|
+
"json": {
|
|
8309
|
+
"description": "Format output as json.",
|
|
8310
|
+
"helpGroup": "GLOBAL",
|
|
8311
|
+
"name": "json",
|
|
8312
|
+
"allowNo": false,
|
|
8313
|
+
"type": "boolean"
|
|
8314
|
+
},
|
|
8315
|
+
"flags-dir": {
|
|
8316
|
+
"helpGroup": "GLOBAL",
|
|
8317
|
+
"name": "flags-dir",
|
|
8318
|
+
"summary": "Import flag values from a directory.",
|
|
8319
|
+
"hasDynamicHelp": false,
|
|
8320
|
+
"multiple": false,
|
|
8321
|
+
"type": "option"
|
|
8322
|
+
},
|
|
8323
|
+
"debug": {
|
|
8324
|
+
"char": "d",
|
|
8325
|
+
"description": "Activate debug mode (more logs)",
|
|
8326
|
+
"name": "debug",
|
|
8327
|
+
"allowNo": false,
|
|
8328
|
+
"type": "boolean"
|
|
8329
|
+
},
|
|
8330
|
+
"websocket": {
|
|
8331
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
8332
|
+
"name": "websocket",
|
|
8333
|
+
"hasDynamicHelp": false,
|
|
8334
|
+
"multiple": false,
|
|
8335
|
+
"type": "option"
|
|
8336
|
+
},
|
|
8337
|
+
"skipauth": {
|
|
8338
|
+
"description": "Skip authentication check when a default username is required",
|
|
8339
|
+
"name": "skipauth",
|
|
8340
|
+
"allowNo": false,
|
|
8341
|
+
"type": "boolean"
|
|
8342
|
+
},
|
|
8343
|
+
"target-org": {
|
|
8344
|
+
"aliases": [
|
|
8345
|
+
"targetusername",
|
|
8346
|
+
"u"
|
|
8347
|
+
],
|
|
8348
|
+
"char": "o",
|
|
8349
|
+
"deprecateAliases": true,
|
|
8350
|
+
"name": "target-org",
|
|
8351
|
+
"noCacheDefault": true,
|
|
8352
|
+
"required": true,
|
|
8353
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
8354
|
+
"hasDynamicHelp": true,
|
|
8355
|
+
"multiple": false,
|
|
8356
|
+
"type": "option"
|
|
8357
|
+
}
|
|
8358
|
+
},
|
|
8359
|
+
"hasDynamicHelp": true,
|
|
8360
|
+
"hiddenAliases": [],
|
|
8361
|
+
"id": "hardis:org:retrieve:packageconfig",
|
|
8362
|
+
"pluginAlias": "sfdx-hardis",
|
|
8363
|
+
"pluginName": "sfdx-hardis",
|
|
8364
|
+
"pluginType": "core",
|
|
8365
|
+
"strict": true,
|
|
8366
|
+
"enableJsonFlag": true,
|
|
8367
|
+
"title": "Retrieve package configuration from an org",
|
|
8368
|
+
"requiresProject": false,
|
|
8369
|
+
"isESM": true,
|
|
8370
|
+
"relativePath": [
|
|
8371
|
+
"lib",
|
|
8372
|
+
"commands",
|
|
8373
|
+
"hardis",
|
|
8374
|
+
"org",
|
|
8375
|
+
"retrieve",
|
|
8376
|
+
"packageconfig.js"
|
|
8377
|
+
],
|
|
8378
|
+
"aliasPermutations": [],
|
|
8379
|
+
"permutations": [
|
|
8380
|
+
"hardis:org:retrieve:packageconfig",
|
|
8381
|
+
"org:hardis:retrieve:packageconfig",
|
|
8382
|
+
"org:retrieve:hardis:packageconfig",
|
|
8383
|
+
"org:retrieve:packageconfig:hardis",
|
|
8384
|
+
"hardis:retrieve:org:packageconfig",
|
|
8385
|
+
"retrieve:hardis:org:packageconfig",
|
|
8386
|
+
"retrieve:org:hardis:packageconfig",
|
|
8387
|
+
"retrieve:org:packageconfig:hardis",
|
|
8388
|
+
"hardis:retrieve:packageconfig:org",
|
|
8389
|
+
"retrieve:hardis:packageconfig:org",
|
|
8390
|
+
"retrieve:packageconfig:hardis:org",
|
|
8391
|
+
"retrieve:packageconfig:org:hardis",
|
|
8392
|
+
"hardis:org:packageconfig:retrieve",
|
|
8393
|
+
"org:hardis:packageconfig:retrieve",
|
|
8394
|
+
"org:packageconfig:hardis:retrieve",
|
|
8395
|
+
"org:packageconfig:retrieve:hardis",
|
|
8396
|
+
"hardis:packageconfig:org:retrieve",
|
|
8397
|
+
"packageconfig:hardis:org:retrieve",
|
|
8398
|
+
"packageconfig:org:hardis:retrieve",
|
|
8399
|
+
"packageconfig:org:retrieve:hardis",
|
|
8400
|
+
"hardis:packageconfig:retrieve:org",
|
|
8401
|
+
"packageconfig:hardis:retrieve:org",
|
|
8402
|
+
"packageconfig:retrieve:hardis:org",
|
|
8403
|
+
"packageconfig:retrieve:org:hardis"
|
|
8404
|
+
]
|
|
8405
|
+
},
|
|
8406
8406
|
"hardis:org:test:apex": {
|
|
8407
8407
|
"aliases": [],
|
|
8408
8408
|
"args": {},
|
|
@@ -11407,14 +11407,19 @@
|
|
|
11407
11407
|
"xml:clean:project:hardis"
|
|
11408
11408
|
]
|
|
11409
11409
|
},
|
|
11410
|
-
"hardis:project:
|
|
11410
|
+
"hardis:project:generate:bypass": {
|
|
11411
11411
|
"aliases": [],
|
|
11412
11412
|
"args": {},
|
|
11413
|
-
"description": "
|
|
11413
|
+
"description": "\n## Command Behavior\n\n**Generates custom permissions and permission sets to bypass specified Salesforce automations (Flows, Triggers, and Validation Rules) for specific sObjects.**\n\nThis command provides a controlled mechanism to temporarily or permanently disable automations for certain sObjects, which is invaluable for:\n\n- **Data Loading:** Bypassing validation rules or triggers during large data imports.\n- **Troubleshooting:** Isolating automation issues by temporarily disabling them.\n- **Development:** Allowing developers to work on specific sObjects without triggering complex automations.\n\nKey functionalities:\n\n- **sObject Selection:** You can specify a comma-separated list of sObjects to bypass (e.g., `Account,Contact`). If omitted, an interactive prompt will allow you to select from available sObjects.\n- **Automation Type Selection:** Choose which types of automations to bypass: `Flow`, `Trigger`, or `VR` (Validation Rules). If omitted, an interactive prompt will guide your selection.\n- **Automatic Bypass Application:** Optionally, the command can automatically inject bypass logic into Validation Rules and Triggers. This involves modifying the Apex code for Triggers and the XML for Validation Rules.\n- **Metadata Source:** You can choose to retrieve the metadata elements (Validation Rules, Triggers) from the org (`--metadata-source org`) or use local files (`--metadata-source local`). Retrieving from the org is recommended for accuracy.\n- **Custom Permission and Permission Set Generation:** For each selected sObject and automation type, it generates:\n - A **Custom Permission** (e.g., `BypassAccountFlows`) that acts as the bypass switch.\n - A **Permission Set** (e.g., `BypassAccountFlows`) that grants the generated Custom Permission.\n- **Credits Inclusion:** By default, generated XML files include a comment indicating they were generated by sfdx-hardis. This can be skipped using `--skip-credits`.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Queries (Tooling API):** It queries `EntityDefinition` to list customizable sObjects and `ValidationRule` and `ApexTrigger` to find existing automations.\n- **Interactive Prompts:** Uses the `prompts` library to guide the user through selecting sObjects, automation types, and bypass application options.\n- **XML Generation:** Dynamically generates XML content for Custom Permissions and Permission Sets, including descriptions and labels that clearly indicate their purpose.\n- **File System Operations:** Uses `fs-extra` to create directories and write the generated Custom Permission and Permission Set XML files.\n- **Metadata Retrieval (for Bypass Application):** If `apply-to-vrs` or `apply-to-triggers` is used and `metadata-source` is `org`, it retrieves the relevant Validation Rule or Apex Trigger metadata from the org using `sf project retrieve start`.\n- **XML/Apex Code Modification:**\n - For Validation Rules, it modifies the `errorConditionFormula` in the XML to include a check for the bypass Custom Permission.\n - For Apex Triggers, it injects an `if` statement at the beginning of the trigger body to check for the bypass Custom Permission.\n- **`parseXmlFile` and `writeXmlFile`:** Used for reading and writing XML metadata files.\n- **`execCommand`:** Used for executing Salesforce CLI commands, particularly for metadata retrieval.\n- **Error Handling:** Includes checks for invalid sObject or automation selections and provides informative error messages.\n</details>\n",
|
|
11414
11414
|
"examples": [
|
|
11415
|
-
"$ sf hardis:project:
|
|
11416
|
-
"$ sf hardis:project:
|
|
11417
|
-
"$ sf hardis:project:
|
|
11415
|
+
"$ sf hardis:project:generate:bypass",
|
|
11416
|
+
"$ sf hardis:project:generate:bypass --sObjects Account,Contact,Opportunity",
|
|
11417
|
+
"$ sf hardis:project:generate:bypass --automations Flow,Trigger,VR",
|
|
11418
|
+
"$ sf hardis:project:generate:bypass --sObjects Account,Opportunity --automations Flow,Trigger",
|
|
11419
|
+
"$ sf hardis:project:generate:bypass --skipCredits",
|
|
11420
|
+
"$ sf hardis:project:generate:bypass --apply-to-vrs",
|
|
11421
|
+
"$ sf hardis:project:generate:bypass --apply-to-triggers",
|
|
11422
|
+
"$ sf hardis:project:generate:bypass --metadata-source org"
|
|
11418
11423
|
],
|
|
11419
11424
|
"flags": {
|
|
11420
11425
|
"json": {
|
|
@@ -11432,43 +11437,42 @@
|
|
|
11432
11437
|
"multiple": false,
|
|
11433
11438
|
"type": "option"
|
|
11434
11439
|
},
|
|
11435
|
-
"
|
|
11436
|
-
"
|
|
11437
|
-
|
|
11438
|
-
|
|
11439
|
-
|
|
11440
|
-
"
|
|
11440
|
+
"target-org": {
|
|
11441
|
+
"aliases": [
|
|
11442
|
+
"targetusername",
|
|
11443
|
+
"u"
|
|
11444
|
+
],
|
|
11445
|
+
"char": "o",
|
|
11446
|
+
"deprecateAliases": true,
|
|
11447
|
+
"name": "target-org",
|
|
11448
|
+
"noCacheDefault": true,
|
|
11449
|
+
"required": true,
|
|
11450
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
11451
|
+
"hasDynamicHelp": true,
|
|
11452
|
+
"multiple": false,
|
|
11453
|
+
"type": "option"
|
|
11441
11454
|
},
|
|
11442
|
-
"
|
|
11455
|
+
"objects": {
|
|
11456
|
+
"aliases": [
|
|
11457
|
+
"sObjects"
|
|
11458
|
+
],
|
|
11443
11459
|
"char": "s",
|
|
11444
|
-
"description": "
|
|
11445
|
-
"name": "
|
|
11446
|
-
"
|
|
11447
|
-
"hasDynamicHelp": false,
|
|
11460
|
+
"description": "Comma-separated list of sObjects to bypass (e.g., Account,Contact,Opportunity). If omitted, you will be prompted to select.",
|
|
11461
|
+
"name": "objects",
|
|
11462
|
+
"required": false,
|
|
11463
|
+
"hasDynamicHelp": false,
|
|
11448
11464
|
"multiple": false,
|
|
11449
|
-
"options": [
|
|
11450
|
-
"valid",
|
|
11451
|
-
"invalid",
|
|
11452
|
-
"unknown"
|
|
11453
|
-
],
|
|
11454
11465
|
"type": "option"
|
|
11455
11466
|
},
|
|
11456
|
-
"
|
|
11457
|
-
"char": "
|
|
11458
|
-
"description": "
|
|
11459
|
-
"name": "
|
|
11460
|
-
"
|
|
11467
|
+
"automations": {
|
|
11468
|
+
"char": "a",
|
|
11469
|
+
"description": "Comma-separated automations to bypass: Flow, Trigger, VR",
|
|
11470
|
+
"name": "automations",
|
|
11471
|
+
"required": false,
|
|
11461
11472
|
"hasDynamicHelp": false,
|
|
11462
11473
|
"multiple": false,
|
|
11463
11474
|
"type": "option"
|
|
11464
11475
|
},
|
|
11465
|
-
"debug": {
|
|
11466
|
-
"char": "d",
|
|
11467
|
-
"description": "Activate debug mode (more logs)",
|
|
11468
|
-
"name": "debug",
|
|
11469
|
-
"allowNo": false,
|
|
11470
|
-
"type": "boolean"
|
|
11471
|
-
},
|
|
11472
11476
|
"websocket": {
|
|
11473
11477
|
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
11474
11478
|
"name": "websocket",
|
|
@@ -11482,75 +11486,103 @@
|
|
|
11482
11486
|
"allowNo": false,
|
|
11483
11487
|
"type": "boolean"
|
|
11484
11488
|
},
|
|
11485
|
-
"
|
|
11489
|
+
"skip-credits": {
|
|
11486
11490
|
"aliases": [
|
|
11487
|
-
"
|
|
11488
|
-
"u"
|
|
11491
|
+
"skipCredits"
|
|
11489
11492
|
],
|
|
11490
|
-
"char": "
|
|
11491
|
-
"
|
|
11492
|
-
"name": "
|
|
11493
|
-
"
|
|
11494
|
-
"
|
|
11495
|
-
"
|
|
11496
|
-
|
|
11493
|
+
"char": "k",
|
|
11494
|
+
"description": "Omit the \"Generated by\" line in the XML files",
|
|
11495
|
+
"name": "skip-credits",
|
|
11496
|
+
"required": false,
|
|
11497
|
+
"allowNo": false,
|
|
11498
|
+
"type": "boolean"
|
|
11499
|
+
},
|
|
11500
|
+
"apply-to-vrs": {
|
|
11501
|
+
"aliases": [
|
|
11502
|
+
"applyToVrs"
|
|
11503
|
+
],
|
|
11504
|
+
"description": "Apply bypass to Validation Rules",
|
|
11505
|
+
"name": "apply-to-vrs",
|
|
11506
|
+
"required": false,
|
|
11507
|
+
"allowNo": false,
|
|
11508
|
+
"type": "boolean"
|
|
11509
|
+
},
|
|
11510
|
+
"apply-to-triggers": {
|
|
11511
|
+
"aliases": [
|
|
11512
|
+
"applyToTriggers"
|
|
11513
|
+
],
|
|
11514
|
+
"description": "Apply bypass to Triggers",
|
|
11515
|
+
"name": "apply-to-triggers",
|
|
11516
|
+
"required": false,
|
|
11517
|
+
"allowNo": false,
|
|
11518
|
+
"type": "boolean"
|
|
11519
|
+
},
|
|
11520
|
+
"metadata-source": {
|
|
11521
|
+
"aliases": [
|
|
11522
|
+
"metadataSource"
|
|
11523
|
+
],
|
|
11524
|
+
"char": "r",
|
|
11525
|
+
"description": "Source of metadata elements to apply bypass to. Options: 'org' or 'local'.",
|
|
11526
|
+
"name": "metadata-source",
|
|
11527
|
+
"required": false,
|
|
11528
|
+
"hasDynamicHelp": false,
|
|
11497
11529
|
"multiple": false,
|
|
11498
11530
|
"type": "option"
|
|
11499
11531
|
}
|
|
11500
11532
|
},
|
|
11501
11533
|
"hasDynamicHelp": true,
|
|
11502
11534
|
"hiddenAliases": [],
|
|
11503
|
-
"id": "hardis:project:
|
|
11535
|
+
"id": "hardis:project:generate:bypass",
|
|
11504
11536
|
"pluginAlias": "sfdx-hardis",
|
|
11505
11537
|
"pluginName": "sfdx-hardis",
|
|
11506
11538
|
"pluginType": "core",
|
|
11507
11539
|
"strict": true,
|
|
11508
11540
|
"enableJsonFlag": true,
|
|
11509
|
-
"title": "Deployment Notifications",
|
|
11510
|
-
"requiresProject": true,
|
|
11511
11541
|
"isESM": true,
|
|
11512
11542
|
"relativePath": [
|
|
11513
11543
|
"lib",
|
|
11514
11544
|
"commands",
|
|
11515
11545
|
"hardis",
|
|
11516
11546
|
"project",
|
|
11517
|
-
"
|
|
11518
|
-
"
|
|
11547
|
+
"generate",
|
|
11548
|
+
"bypass.js"
|
|
11519
11549
|
],
|
|
11520
11550
|
"aliasPermutations": [],
|
|
11521
11551
|
"permutations": [
|
|
11522
|
-
"hardis:project:
|
|
11523
|
-
"project:hardis:
|
|
11524
|
-
"project:
|
|
11525
|
-
"project:
|
|
11526
|
-
"hardis:
|
|
11527
|
-
"
|
|
11528
|
-
"
|
|
11529
|
-
"
|
|
11530
|
-
"hardis:
|
|
11531
|
-
"
|
|
11532
|
-
"
|
|
11533
|
-
"
|
|
11534
|
-
"hardis:project:
|
|
11535
|
-
"project:hardis:
|
|
11536
|
-
"project:
|
|
11537
|
-
"project:
|
|
11538
|
-
"hardis:
|
|
11539
|
-
"
|
|
11540
|
-
"
|
|
11541
|
-
"
|
|
11542
|
-
"hardis:
|
|
11543
|
-
"
|
|
11544
|
-
"
|
|
11545
|
-
"
|
|
11552
|
+
"hardis:project:generate:bypass",
|
|
11553
|
+
"project:hardis:generate:bypass",
|
|
11554
|
+
"project:generate:hardis:bypass",
|
|
11555
|
+
"project:generate:bypass:hardis",
|
|
11556
|
+
"hardis:generate:project:bypass",
|
|
11557
|
+
"generate:hardis:project:bypass",
|
|
11558
|
+
"generate:project:hardis:bypass",
|
|
11559
|
+
"generate:project:bypass:hardis",
|
|
11560
|
+
"hardis:generate:bypass:project",
|
|
11561
|
+
"generate:hardis:bypass:project",
|
|
11562
|
+
"generate:bypass:hardis:project",
|
|
11563
|
+
"generate:bypass:project:hardis",
|
|
11564
|
+
"hardis:project:bypass:generate",
|
|
11565
|
+
"project:hardis:bypass:generate",
|
|
11566
|
+
"project:bypass:hardis:generate",
|
|
11567
|
+
"project:bypass:generate:hardis",
|
|
11568
|
+
"hardis:bypass:project:generate",
|
|
11569
|
+
"bypass:hardis:project:generate",
|
|
11570
|
+
"bypass:project:hardis:generate",
|
|
11571
|
+
"bypass:project:generate:hardis",
|
|
11572
|
+
"hardis:bypass:generate:project",
|
|
11573
|
+
"bypass:hardis:generate:project",
|
|
11574
|
+
"bypass:generate:hardis:project",
|
|
11575
|
+
"bypass:generate:project:hardis"
|
|
11546
11576
|
]
|
|
11547
11577
|
},
|
|
11548
|
-
"hardis:project:
|
|
11549
|
-
"aliases": [
|
|
11550
|
-
"hardis:deploy:quick"
|
|
11551
|
-
],
|
|
11578
|
+
"hardis:project:generate:flow-git-diff": {
|
|
11579
|
+
"aliases": [],
|
|
11552
11580
|
"args": {},
|
|
11553
|
-
"description": "
|
|
11581
|
+
"description": "Generate Flow Visual Git Diff markdown between 2 commits\n\nNote: This command might requires @mermaid-js/mermaid-cli to be installed.\n\nRun `npm install @mermaid-js/mermaid-cli --global`\n ",
|
|
11582
|
+
"examples": [
|
|
11583
|
+
"$ sf hardis:project:generate:flow-git-diff",
|
|
11584
|
+
"$ sf hardis:project:generate:flow-git-diff --flow \"force-app/main/default/flows/Opportunity_AfterUpdate_Cloudity.flow-meta.xml\" --commit-before 8bd290e914c9dbdde859dad7e3c399776160d704 --commit-after e0835251bef6e400fb91e42f3a31022f37840f65"
|
|
11585
|
+
],
|
|
11554
11586
|
"flags": {
|
|
11555
11587
|
"json": {
|
|
11556
11588
|
"description": "Format output as json.",
|
|
@@ -11567,82 +11599,59 @@
|
|
|
11567
11599
|
"multiple": false,
|
|
11568
11600
|
"type": "option"
|
|
11569
11601
|
},
|
|
11570
|
-
"
|
|
11571
|
-
"
|
|
11572
|
-
"
|
|
11573
|
-
"name": "api-version",
|
|
11602
|
+
"flow": {
|
|
11603
|
+
"description": "Path to flow file (will be prompted if not set)",
|
|
11604
|
+
"name": "flow",
|
|
11574
11605
|
"hasDynamicHelp": false,
|
|
11575
11606
|
"multiple": false,
|
|
11576
11607
|
"type": "option"
|
|
11577
11608
|
},
|
|
11578
|
-
"
|
|
11579
|
-
"description": "
|
|
11580
|
-
"
|
|
11581
|
-
|
|
11582
|
-
],
|
|
11583
|
-
"name": "async",
|
|
11584
|
-
"allowNo": false,
|
|
11585
|
-
"type": "boolean"
|
|
11586
|
-
},
|
|
11587
|
-
"target-org": {
|
|
11588
|
-
"char": "o",
|
|
11589
|
-
"name": "target-org",
|
|
11590
|
-
"noCacheDefault": true,
|
|
11591
|
-
"required": true,
|
|
11592
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
11593
|
-
"hasDynamicHelp": true,
|
|
11594
|
-
"multiple": false,
|
|
11595
|
-
"type": "option"
|
|
11596
|
-
},
|
|
11597
|
-
"tests": {
|
|
11598
|
-
"description": "tests",
|
|
11599
|
-
"name": "tests",
|
|
11609
|
+
"commit-before": {
|
|
11610
|
+
"description": "Hash of the commit of the previous flow state, or \"allStates\" (will be prompted if not set)",
|
|
11611
|
+
"name": "commit-before",
|
|
11612
|
+
"default": "",
|
|
11600
11613
|
"hasDynamicHelp": false,
|
|
11601
11614
|
"multiple": false,
|
|
11602
11615
|
"type": "option"
|
|
11603
11616
|
},
|
|
11604
|
-
"
|
|
11605
|
-
"
|
|
11606
|
-
"
|
|
11607
|
-
"
|
|
11617
|
+
"commit-after": {
|
|
11618
|
+
"description": "Hash of the commit of the new flow state (will be prompted if not set)",
|
|
11619
|
+
"name": "commit-after",
|
|
11620
|
+
"default": "",
|
|
11608
11621
|
"hasDynamicHelp": false,
|
|
11609
11622
|
"multiple": false,
|
|
11610
11623
|
"type": "option"
|
|
11611
11624
|
},
|
|
11612
|
-
"
|
|
11613
|
-
"char": "
|
|
11614
|
-
"description": "
|
|
11615
|
-
"name": "
|
|
11625
|
+
"debug": {
|
|
11626
|
+
"char": "d",
|
|
11627
|
+
"description": "Activate debug mode (more logs)",
|
|
11628
|
+
"name": "debug",
|
|
11616
11629
|
"allowNo": false,
|
|
11617
11630
|
"type": "boolean"
|
|
11618
11631
|
},
|
|
11619
|
-
"
|
|
11620
|
-
"
|
|
11621
|
-
"
|
|
11622
|
-
"exclusive": [
|
|
11623
|
-
"async"
|
|
11624
|
-
],
|
|
11625
|
-
"name": "wait",
|
|
11626
|
-
"default": 33,
|
|
11632
|
+
"websocket": {
|
|
11633
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
11634
|
+
"name": "websocket",
|
|
11627
11635
|
"hasDynamicHelp": false,
|
|
11628
11636
|
"multiple": false,
|
|
11629
11637
|
"type": "option"
|
|
11630
11638
|
},
|
|
11631
|
-
"
|
|
11632
|
-
"description": "
|
|
11633
|
-
"name": "
|
|
11639
|
+
"skipauth": {
|
|
11640
|
+
"description": "Skip authentication check when a default username is required",
|
|
11641
|
+
"name": "skipauth",
|
|
11634
11642
|
"allowNo": false,
|
|
11635
11643
|
"type": "boolean"
|
|
11636
11644
|
}
|
|
11637
11645
|
},
|
|
11638
|
-
"hasDynamicHelp":
|
|
11646
|
+
"hasDynamicHelp": false,
|
|
11639
11647
|
"hiddenAliases": [],
|
|
11640
|
-
"id": "hardis:project:
|
|
11648
|
+
"id": "hardis:project:generate:flow-git-diff",
|
|
11641
11649
|
"pluginAlias": "sfdx-hardis",
|
|
11642
11650
|
"pluginName": "sfdx-hardis",
|
|
11643
11651
|
"pluginType": "core",
|
|
11644
11652
|
"strict": true,
|
|
11645
11653
|
"enableJsonFlag": true,
|
|
11654
|
+
"title": "Generate Flow Visual Gif Diff",
|
|
11646
11655
|
"requiresProject": true,
|
|
11647
11656
|
"isESM": true,
|
|
11648
11657
|
"relativePath": [
|
|
@@ -11650,50 +11659,43 @@
|
|
|
11650
11659
|
"commands",
|
|
11651
11660
|
"hardis",
|
|
11652
11661
|
"project",
|
|
11653
|
-
"
|
|
11654
|
-
"
|
|
11655
|
-
],
|
|
11656
|
-
"aliasPermutations": [
|
|
11657
|
-
"hardis:deploy:quick",
|
|
11658
|
-
"deploy:hardis:quick",
|
|
11659
|
-
"deploy:quick:hardis",
|
|
11660
|
-
"hardis:quick:deploy",
|
|
11661
|
-
"quick:hardis:deploy",
|
|
11662
|
-
"quick:deploy:hardis"
|
|
11662
|
+
"generate",
|
|
11663
|
+
"flow-git-diff.js"
|
|
11663
11664
|
],
|
|
11665
|
+
"aliasPermutations": [],
|
|
11664
11666
|
"permutations": [
|
|
11665
|
-
"hardis:project:
|
|
11666
|
-
"project:hardis:
|
|
11667
|
-
"project:
|
|
11668
|
-
"project:
|
|
11669
|
-
"hardis:
|
|
11670
|
-
"
|
|
11671
|
-
"
|
|
11672
|
-
"
|
|
11673
|
-
"hardis:
|
|
11674
|
-
"
|
|
11675
|
-
"
|
|
11676
|
-
"
|
|
11677
|
-
"hardis:project:
|
|
11678
|
-
"project:hardis:
|
|
11679
|
-
"project:
|
|
11680
|
-
"project:
|
|
11681
|
-
"hardis:
|
|
11682
|
-
"
|
|
11683
|
-
"
|
|
11684
|
-
"
|
|
11685
|
-
"hardis:
|
|
11686
|
-
"
|
|
11687
|
-
"
|
|
11688
|
-
"
|
|
11689
|
-
]
|
|
11690
|
-
},
|
|
11691
|
-
"hardis:project:
|
|
11692
|
-
"aliases": [],
|
|
11693
|
-
"args": {},
|
|
11694
|
-
"description": "\n## Command Behavior\n\n**
|
|
11667
|
+
"hardis:project:generate:flow-git-diff",
|
|
11668
|
+
"project:hardis:generate:flow-git-diff",
|
|
11669
|
+
"project:generate:hardis:flow-git-diff",
|
|
11670
|
+
"project:generate:flow-git-diff:hardis",
|
|
11671
|
+
"hardis:generate:project:flow-git-diff",
|
|
11672
|
+
"generate:hardis:project:flow-git-diff",
|
|
11673
|
+
"generate:project:hardis:flow-git-diff",
|
|
11674
|
+
"generate:project:flow-git-diff:hardis",
|
|
11675
|
+
"hardis:generate:flow-git-diff:project",
|
|
11676
|
+
"generate:hardis:flow-git-diff:project",
|
|
11677
|
+
"generate:flow-git-diff:hardis:project",
|
|
11678
|
+
"generate:flow-git-diff:project:hardis",
|
|
11679
|
+
"hardis:project:flow-git-diff:generate",
|
|
11680
|
+
"project:hardis:flow-git-diff:generate",
|
|
11681
|
+
"project:flow-git-diff:hardis:generate",
|
|
11682
|
+
"project:flow-git-diff:generate:hardis",
|
|
11683
|
+
"hardis:flow-git-diff:project:generate",
|
|
11684
|
+
"flow-git-diff:hardis:project:generate",
|
|
11685
|
+
"flow-git-diff:project:hardis:generate",
|
|
11686
|
+
"flow-git-diff:project:generate:hardis",
|
|
11687
|
+
"hardis:flow-git-diff:generate:project",
|
|
11688
|
+
"flow-git-diff:hardis:generate:project",
|
|
11689
|
+
"flow-git-diff:generate:hardis:project",
|
|
11690
|
+
"flow-git-diff:generate:project:hardis"
|
|
11691
|
+
]
|
|
11692
|
+
},
|
|
11693
|
+
"hardis:project:generate:gitdelta": {
|
|
11694
|
+
"aliases": [],
|
|
11695
|
+
"args": {},
|
|
11696
|
+
"description": "\n## Command Behavior\n\n**Generates a `package.xml` and `destructiveChanges.xml` representing the metadata differences between two Git commits.**\n\nThis command is a powerful tool for managing Salesforce metadata deployments by focusing only on the changes between specific points in your version control history. It leverages `sfdx-git-delta` to accurately identify added, modified, and deleted metadata components.\n\nKey functionalities:\n\n- **Commit-Based Comparison:** Allows you to specify a starting commit (`--fromcommit`) and an ending commit (`--tocommit`) to define the scope of the delta. If not provided, interactive prompts will guide you through selecting commits from your Git history.\n- **Branch Selection:** You can specify a Git branch (`--branch`) to work with. If not provided, it will prompt you to select one.\n- **`package.xml` Generation:** Creates a `package.xml` file that lists all metadata components that have been added or modified between the specified commits.\n- **`destructiveChanges.xml` Generation:** Creates a `destructiveChanges.xml` file that lists all metadata components that have been deleted between the specified commits.\n- **Temporary File Output:** The generated `package.xml` and `destructiveChanges.xml` files are placed in a temporary directory.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **Git Integration:** Uses `simple-git` (`git()`) to interact with the Git repository, including fetching branches (`git().fetch()`), checking out branches (`git().checkoutBranch()`), and listing commit history (`git().log()`).\n- **Interactive Prompts:** Leverages the `prompts` library to guide the user through selecting a Git branch and specific commits for delta generation if they are not provided as command-line arguments.\n- **`sfdx-git-delta` Integration:** The core of the delta generation is handled by the `callSfdxGitDelta` utility function, which wraps the `sfdx-git-delta` tool. This tool performs the actual Git comparison and generates the `package.xml` and `destructiveChanges.xml` files.\n- **Temporary Directory Management:** Uses `createTempDir` to create a temporary directory for storing the generated XML files, ensuring a clean working environment.\n- **File System Operations:** Uses `fs-extra` to manage temporary files and directories.\n- **User Feedback:** Provides clear messages to the user about the generated files and their locations.\n</details>\n",
|
|
11695
11697
|
"examples": [
|
|
11696
|
-
"$ sf hardis:project:
|
|
11698
|
+
"$ sf hardis:project:generate:gitdelta"
|
|
11697
11699
|
],
|
|
11698
11700
|
"flags": {
|
|
11699
11701
|
"json": {
|
|
@@ -11711,13 +11713,25 @@
|
|
|
11711
11713
|
"multiple": false,
|
|
11712
11714
|
"type": "option"
|
|
11713
11715
|
},
|
|
11714
|
-
"
|
|
11715
|
-
"
|
|
11716
|
-
"
|
|
11717
|
-
"name": "source-dir",
|
|
11718
|
-
"required": true,
|
|
11716
|
+
"branch": {
|
|
11717
|
+
"description": "Git branch to use to generate delta",
|
|
11718
|
+
"name": "branch",
|
|
11719
11719
|
"hasDynamicHelp": false,
|
|
11720
|
-
"multiple":
|
|
11720
|
+
"multiple": false,
|
|
11721
|
+
"type": "option"
|
|
11722
|
+
},
|
|
11723
|
+
"fromcommit": {
|
|
11724
|
+
"description": "Hash of commit to start from",
|
|
11725
|
+
"name": "fromcommit",
|
|
11726
|
+
"hasDynamicHelp": false,
|
|
11727
|
+
"multiple": false,
|
|
11728
|
+
"type": "option"
|
|
11729
|
+
},
|
|
11730
|
+
"tocommit": {
|
|
11731
|
+
"description": "Hash of commit to stop at",
|
|
11732
|
+
"name": "tocommit",
|
|
11733
|
+
"hasDynamicHelp": false,
|
|
11734
|
+
"multiple": false,
|
|
11721
11735
|
"type": "option"
|
|
11722
11736
|
},
|
|
11723
11737
|
"debug": {
|
|
@@ -11739,87 +11753,63 @@
|
|
|
11739
11753
|
"name": "skipauth",
|
|
11740
11754
|
"allowNo": false,
|
|
11741
11755
|
"type": "boolean"
|
|
11742
|
-
},
|
|
11743
|
-
"target-org": {
|
|
11744
|
-
"aliases": [
|
|
11745
|
-
"targetusername",
|
|
11746
|
-
"u"
|
|
11747
|
-
],
|
|
11748
|
-
"char": "o",
|
|
11749
|
-
"deprecateAliases": true,
|
|
11750
|
-
"name": "target-org",
|
|
11751
|
-
"noCacheDefault": true,
|
|
11752
|
-
"required": true,
|
|
11753
|
-
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
11754
|
-
"hasDynamicHelp": true,
|
|
11755
|
-
"multiple": false,
|
|
11756
|
-
"type": "option"
|
|
11757
11756
|
}
|
|
11758
11757
|
},
|
|
11759
|
-
"hasDynamicHelp":
|
|
11758
|
+
"hasDynamicHelp": false,
|
|
11760
11759
|
"hiddenAliases": [],
|
|
11761
|
-
"id": "hardis:project:
|
|
11760
|
+
"id": "hardis:project:generate:gitdelta",
|
|
11762
11761
|
"pluginAlias": "sfdx-hardis",
|
|
11763
11762
|
"pluginName": "sfdx-hardis",
|
|
11764
11763
|
"pluginType": "core",
|
|
11765
11764
|
"strict": true,
|
|
11766
11765
|
"enableJsonFlag": true,
|
|
11767
|
-
"title": "
|
|
11768
|
-
"requiresProject":
|
|
11766
|
+
"title": "Generate Git Delta",
|
|
11767
|
+
"requiresProject": false,
|
|
11769
11768
|
"isESM": true,
|
|
11770
11769
|
"relativePath": [
|
|
11771
11770
|
"lib",
|
|
11772
11771
|
"commands",
|
|
11773
11772
|
"hardis",
|
|
11774
11773
|
"project",
|
|
11775
|
-
"
|
|
11776
|
-
"
|
|
11774
|
+
"generate",
|
|
11775
|
+
"gitdelta.js"
|
|
11777
11776
|
],
|
|
11778
11777
|
"aliasPermutations": [],
|
|
11779
11778
|
"permutations": [
|
|
11780
|
-
"hardis:project:
|
|
11781
|
-
"project:hardis:
|
|
11782
|
-
"project:
|
|
11783
|
-
"project:
|
|
11784
|
-
"hardis:
|
|
11785
|
-
"
|
|
11786
|
-
"
|
|
11787
|
-
"
|
|
11788
|
-
"hardis:
|
|
11789
|
-
"
|
|
11790
|
-
"
|
|
11791
|
-
"
|
|
11792
|
-
"hardis:project:
|
|
11793
|
-
"project:hardis:
|
|
11794
|
-
"project:
|
|
11795
|
-
"project:
|
|
11796
|
-
"hardis:
|
|
11797
|
-
"
|
|
11798
|
-
"
|
|
11799
|
-
"
|
|
11800
|
-
"hardis:
|
|
11801
|
-
"
|
|
11802
|
-
"
|
|
11803
|
-
"
|
|
11779
|
+
"hardis:project:generate:gitdelta",
|
|
11780
|
+
"project:hardis:generate:gitdelta",
|
|
11781
|
+
"project:generate:hardis:gitdelta",
|
|
11782
|
+
"project:generate:gitdelta:hardis",
|
|
11783
|
+
"hardis:generate:project:gitdelta",
|
|
11784
|
+
"generate:hardis:project:gitdelta",
|
|
11785
|
+
"generate:project:hardis:gitdelta",
|
|
11786
|
+
"generate:project:gitdelta:hardis",
|
|
11787
|
+
"hardis:generate:gitdelta:project",
|
|
11788
|
+
"generate:hardis:gitdelta:project",
|
|
11789
|
+
"generate:gitdelta:hardis:project",
|
|
11790
|
+
"generate:gitdelta:project:hardis",
|
|
11791
|
+
"hardis:project:gitdelta:generate",
|
|
11792
|
+
"project:hardis:gitdelta:generate",
|
|
11793
|
+
"project:gitdelta:hardis:generate",
|
|
11794
|
+
"project:gitdelta:generate:hardis",
|
|
11795
|
+
"hardis:gitdelta:project:generate",
|
|
11796
|
+
"gitdelta:hardis:project:generate",
|
|
11797
|
+
"gitdelta:project:hardis:generate",
|
|
11798
|
+
"gitdelta:project:generate:hardis",
|
|
11799
|
+
"hardis:gitdelta:generate:project",
|
|
11800
|
+
"gitdelta:hardis:generate:project",
|
|
11801
|
+
"gitdelta:generate:hardis:project",
|
|
11802
|
+
"gitdelta:generate:project:hardis"
|
|
11804
11803
|
]
|
|
11805
11804
|
},
|
|
11806
|
-
"hardis:project:deploy:
|
|
11807
|
-
"aliases": [
|
|
11808
|
-
"hardis:project:deploy:sources:dx"
|
|
11809
|
-
],
|
|
11805
|
+
"hardis:project:deploy:notify": {
|
|
11806
|
+
"aliases": [],
|
|
11810
11807
|
"args": {},
|
|
11811
|
-
"description": "Smart deploy of SFDX sources to target org, with many useful options.\n\nIn case of errors, [tips to fix them](https://sfdx-hardis.cloudity.com/deployTips/) will be included within the error messages.\n\n### Quick Deploy\n\nIn case Pull Request comments are configured on the project, Quick Deploy will try to be used (equivalent to button Quick Deploy)\n\nIf you do not want to use QuickDeploy, define variable `SFDX_HARDIS_QUICK_DEPLOY=false`\n\n- [GitHub Pull Requests comments config](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integration-github/)\n- [Gitlab Merge requests notes config](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integration-gitlab/)\n- [Azure Pull Requests comments config](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integration-azure/)\n\n### Delta deployments\n\nTo activate delta deployments, define property `useDeltaDeployment: true` in `config/.sfdx-hardis.yml`.\n\nThis will activate delta deployments only between minor and major branches (major to major remains full deployment mode)\n\nIf you want to force the delta deployment into major orgs (ex: preprod to prod), this is not recommended but you can use env variable ALWAYS_ENABLE_DELTA_DEPLOYMENT=true\n\n### Smart Deployments Tests\n\nNot all metadata updates can break test classes, use Smart Deployment Tests to skip running test classes if ALL the following conditions are met:\n\n- Delta deployment is activated and applicable to the source and target branches\n- Delta deployed metadatas are all matching the list of **NOT_IMPACTING_METADATA_TYPES** (see below)\n- Target org is not a production org\n\nActivate Smart Deployment tests with:\n\n- env variable `USE_SMART_DEPLOYMENT_TESTS=true`\n- .sfdx-hardis.yml config property `useSmartDeploymentTests: true`\n\nDefaut list for **NOT_IMPACTING_METADATA_TYPES** (can be overridden with comma-separated list on env var NOT_IMPACTING_METADATA_TYPES)\n\n- Audience\n- AuraDefinitionBundle\n- Bot\n- BotVersion\n- ContentAsset\n- CustomObjectTranslation\n- CustomSite\n- CustomTab\n- Dashboard\n- ExperienceBundle\n- Flexipage\n- GlobalValueSetTranslation\n- Layout\n- LightningComponentBundle\n- NavigationMenu\n- ReportType\n- Report\n- SiteDotCom\n- StandardValueSetTranslation\n- StaticResource\n- Translations\n\nNote: if you want to disable Smart test classes for a PR, add **nosmart** in the text of the latest commit.\n\n### Dynamic deployment items / Overwrite management\n\nIf necessary,you can define the following files (that supports wildcards <members>*</members>):\n\n- `manifest/package-no-overwrite.xml`: Every element defined in this file will be deployed only if it is not existing yet in the target org (can be useful with ListView for example, if the client wants to update them directly in production org).\n - Can be overridden for a branch using .sfdx-hardis.yml property **packageNoOverwritePath** or environment variable PACKAGE_NO_OVERWRITE_PATH (for example, define: `packageNoOverwritePath: manifest/package-no-overwrite-main.xml` in config file `config/.sfdx-hardis.main.yml`)\n- `manifest/packageXmlOnChange.xml`: Every element defined in this file will not be deployed if it already has a similar definition in target org (can be useful for SharingRules for example)\n\nSee [Overwrite management documentation](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-config-overwrite/)\n\n### Packages installation\n\nYou can define a list of package to install during deployments using property `installedPackages`\n\n- If `INSTALL_PACKAGES_DURING_CHECK_DEPLOY` is defined as `true` (or `installPackagesDuringCheckDeploy: true` in `.sfdx-hardis.yml`), packages will be installed even if the command is called with `--check` mode\n- You can automatically update this property by listing all packages installed on an org using command `sf hardis:org:retrieve:packageconfig`\n\nExample:\n\n```yaml\ninstalledPackages:\n - Id: 0A35r0000009EtECAU\n SubscriberPackageId: 033i0000000LVMYAA4\n SubscriberPackageName: Marketing Cloud\n SubscriberPackageNamespace: et4ae5\n SubscriberPackageVersionId: 04t6S000000l11iQAA\n SubscriberPackageVersionName: Marketing Cloud\n SubscriberPackageVersionNumber: 236.0.0.2\n installOnScratchOrgs: true // true or false depending you want to install this package when creating a new scratch org\n installDuringDeployments: true // set as true to install package during a deployment using sf hardis:project:deploy:smart\n installationkey: xxxxxxxxxxxxxxxxxxxx // if the package has a password, write it in this property\n - Id: 0A35r0000009F9CCAU\n SubscriberPackageId: 033b0000000Pf2AAAS\n SubscriberPackageName: Declarative Lookup Rollup Summaries Tool\n SubscriberPackageNamespace: dlrs\n SubscriberPackageVersionId: 04t5p000001BmLvAAK\n SubscriberPackageVersionName: Release\n SubscriberPackageVersionNumber: 2.15.0.9\n installOnScratchOrgs: true\n installDuringDeployments: true\n```\n\n### Deployment pre or post commands\n\nYou can define command lines to run before or after a deployment, with parameters:\n\n- **id**: Unique Id for the command\n- **label**: Human readable label for the command\n- **skipIfError**: If defined to \"true\", the post-command won't be run if there is a deployment failure\n- **context**: Defines the context where the command will be run. Can be **all** (default), **check-deployment-only** or **process-deployment-only**\n- **runOnlyOnceByOrg**: If set to true, the command will be run only one time per org. A record of SfdxHardisTrace__c is stored to make that possible (it needs to be existing in target org)\n\nIf the commands are not the same depending on the target org, you can define them into **config/branches/.sfdx-hardis-BRANCHNAME.yml** instead of root **config/.sfdx-hardis.yml**\n\nExample:\n\n```yaml\ncommandsPreDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to the deployment user\n command: sf data update record --sobject User --where \"Username='deploy.github@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n\ncommandsPostDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to desired username\n command: sf data update record --sobject User --where \"Username='admin-yser@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n - id: someActionToRunJustOneTime\n label: And to run only if deployment is success\n command: sf sfdmu:run ...\n skipIfError: true\n context: process-deployment-only\n runOnlyOnceByOrg: true\n```\n\n### Pull Requests Custom Behaviors\n\nIf some words are found **in the Pull Request description**, special behaviors will be applied\n\n| Word | Behavior |\n| :--- | :--- |\n| NO_DELTA | Even if delta deployments are activated, a deployment in mode **full** will be performed for this Pull Request |\n| PURGE_FLOW_VERSIONS | After deployment, inactive and obsolete Flow Versions will be deleted (equivalent to command sf hardis:org:purge:flow)<br/>**Caution: This will also purge active Flow Interviews !** |\n| DESTRUCTIVE_CHANGES_AFTER_DEPLOYMENT | If a file manifest/destructiveChanges.xml is found, it will be executed in a separate step, after the deployment of the main package |\n\n> For example, define `PURGE_FLOW_VERSIONS` and `DESTRUCTIVE_CHANGES_AFTER_DEPLOYMENT` in your Pull Request comments if you want to delete fields that are used in an active flow.\n\nNote: it is also possible to define these behaviors as ENV variables:\n\n- For all deployments (example: `PURGE_FLOW_VERSIONS=true`)\n- For a specific branch, by appending the target branch name (example: `PURGE_FLOW_VERSIONS_UAT=true`)\n\n### Deployment plan (deprecated)\n\nIf you need to deploy in multiple steps, you can define a property `deploymentPlan` in `.sfdx-hardis.yml`.\n\n- If a file `manifest/package.xml` is found, it will be placed with order 0 in the deployment plan\n\n- If a file `manifest/destructiveChanges.xml` is found, it will be executed as --postdestructivechanges\n\n- If env var `SFDX_HARDIS_DEPLOY_IGNORE_SPLIT_PACKAGES` is defined as `false` , split of package.xml will be applied\n\nExample:\n\n```yaml\ndeploymentPlan:\n packages:\n - label: Deploy Flow-Workflow\n packageXmlFile: manifest/splits/packageXmlFlowWorkflow.xml\n order: 6\n - label: Deploy SharingRules - Case\n packageXmlFile: manifest/splits/packageXmlSharingRulesCase.xml\n order: 30\n waitAfter: 30\n```\n\n### Automated fixes post deployments\n\n#### List view with scope Mine\n\nIf you defined a property **listViewsToSetToMine** in your .sfdx-hardis.yml, related ListViews will be set to Mine ( see command <https://sfdx-hardis.cloudity.com/hardis/org/fix/listviewmine/> )\n\nExample:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to fix ListViews with mine from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n\nIf you need to increase the deployment waiting time (sf project deploy start --wait arg), you can define env variable SFDX_DEPLOY_WAIT_MINUTES (default: 120)\n\nIf you need notifications to be sent using the current Pull Request and not the one just merged ([see use case](https://github.com/hardisgroupcom/sfdx-hardis/issues/637#issuecomment-2230798904)), define env variable SFDX_HARDIS_DEPLOY_BEFORE_MERGE=true\n\nIf you want to disable the calculation and display of Flow Visual Git Diff in Pull Request comments, define variable **SFDX_DISABLE_FLOW_DIFF=true**\n",
|
|
11808
|
+
"description": "Post notifications related to:\n\n- **Deployment simulation** _(use with --check-only)_\n\n- **Deployment process** _(to call only if your deployment is successful)_\n\n### Integrations\n\nAccording to the [integrations you configured](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integrations-home/), notifications can contain deployment information and [Flow Visual Git Diff](https://sfdx-hardis.cloudity.com/salesforce-deployment-assistant-home/#flow-visual-git-diff)\n\n - GitHub, Gitlab, Azure DevOps, Bitbucket comments on Pull Requests (including Flows Visual Git Diff)\n\n - Slack, Microsoft Teams, Email deployment summary after a successful deployment\n\n - JIRA tags and comments on tickets that just has been deployed\n\n\n\n\n\n### Flows Visual Git Diff\n\n- Visually show you the differences on a diagram\n\n- Display the update details without having to open any XML !\n\n🟩 = added\n\n🟥 = removed\n\n🟧 = updated\n\n\n\n\n\n### In custom CI/CD workflow\n\nExample of usage in a custom CI/CD pipeline:\n\n```bash\n# Disable exit-on-error temporarily\nset +e\n\n# Run the deploy command\nsf project deploy start [....]\nRET_CODE=$?\n\n# Re-enable exit-on-error\nset -e\n\n# Determine MYSTATUS based on return code\nif [ $RET_CODE -eq 0 ]; then\n MYSTATUS=\"valid\"\nelse\n MYSTATUS=\"invalid\"\nfi\n\n# Run the notify command with MYSTATUS\nsf hardis:project:deploy:notify --check-only --deploy-status \"$MYSTATUS\"\n```\n\n### Other usages\n\nThis command is for custom SF Cli pipelines, if you are a sfdx-hardis user, it is already embedded in sf hardis:deploy:smart.\n\nYou can also use [sfdx-hardis wrapper commands of SF deployment commands](https://sfdx-hardis.cloudity.com/salesforce-deployment-assistant-setup/#using-custom-cicd-pipeline)\n",
|
|
11812
11809
|
"examples": [
|
|
11813
|
-
"$ sf hardis:project:deploy:
|
|
11814
|
-
"$ sf hardis:project:deploy:
|
|
11815
|
-
"$ sf hardis:project:deploy:
|
|
11816
|
-
"$ sf hardis:project:deploy:smart --check --testlevel RunRepositoryTests --runtests '^(?!FLI|MyPrefix).*'",
|
|
11817
|
-
"$ sf hardis:project:deploy:smart --check --testlevel RunRepositoryTestsExceptSeeAllData",
|
|
11818
|
-
"$ sf hardis:project:deploy:smart",
|
|
11819
|
-
"$ FORCE_TARGET_BRANCH=preprod NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org nicolas.vuillamy@myclient.com.preprod",
|
|
11820
|
-
"$ SYSTEM_ACCESSTOKEN=xxxxxx SYSTEM_COLLECTIONURI=https://dev.azure.com/xxxxxxx/ SYSTEM_TEAMPROJECT=\"xxxxxxx\" BUILD_REPOSITORY_ID=xxxxx SYSTEM_PULLREQUEST_PULLREQUESTID=1418 FORCE_TARGET_BRANCH=uat NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org my.salesforce@org.com",
|
|
11821
|
-
"$ CI_SFDX_HARDIS_BITBUCKET_TOKEN=xxxxxx BITBUCKET_WORKSPACE=sfdxhardis-demo BITBUCKET_REPO_SLUG=test BITBUCKET_BUILD_NUMBER=1 BITBUCKET_BRANCH=uat BITBUCKET_PR_ID=2 FORCE_TARGET_BRANCH=uat NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org my-salesforce-org@client.com",
|
|
11822
|
-
"$ GITHUB_TOKEN=xxxx GITHUB_REPOSITORY=my-user/my-repo FORCE_TARGET_BRANCH=uat NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org my-salesforce-org@client.com"
|
|
11810
|
+
"$ sf hardis:project:deploy:notify --check-only --deploy-status valid --message \"This deployment check is valid\\n\\nYahooo !!\"",
|
|
11811
|
+
"$ sf hardis:project:deploy:notify --check-only --deploy-status invalid --message \"This deployment check has failed !\\n\\Oh no !!\"",
|
|
11812
|
+
"$ sf hardis:project:deploy:notify --deploy-status valid --message \"This deployment has been processed !\\n\\nYahooo !!\""
|
|
11823
11813
|
],
|
|
11824
11814
|
"flags": {
|
|
11825
11815
|
"json": {
|
|
@@ -11837,51 +11827,36 @@
|
|
|
11837
11827
|
"multiple": false,
|
|
11838
11828
|
"type": "option"
|
|
11839
11829
|
},
|
|
11840
|
-
"check": {
|
|
11830
|
+
"check-only": {
|
|
11841
11831
|
"char": "c",
|
|
11842
|
-
"description": "
|
|
11843
|
-
"name": "check",
|
|
11832
|
+
"description": "Use this option to send notifications from a Deployment simulation job",
|
|
11833
|
+
"name": "check-only",
|
|
11844
11834
|
"allowNo": false,
|
|
11845
11835
|
"type": "boolean"
|
|
11846
11836
|
},
|
|
11847
|
-
"
|
|
11848
|
-
"char": "
|
|
11849
|
-
"description": "
|
|
11850
|
-
"name": "
|
|
11837
|
+
"deploy-status": {
|
|
11838
|
+
"char": "s",
|
|
11839
|
+
"description": "Send success, failure or unknown (default) to indicate if the deployment or deployment simulation is in success or not",
|
|
11840
|
+
"name": "deploy-status",
|
|
11841
|
+
"default": "unknown",
|
|
11851
11842
|
"hasDynamicHelp": false,
|
|
11852
11843
|
"multiple": false,
|
|
11853
11844
|
"options": [
|
|
11854
|
-
"
|
|
11855
|
-
"
|
|
11856
|
-
"
|
|
11857
|
-
"RunRepositoryTestsExceptSeeAllData",
|
|
11858
|
-
"RunLocalTests",
|
|
11859
|
-
"RunAllTestsInOrg"
|
|
11845
|
+
"valid",
|
|
11846
|
+
"invalid",
|
|
11847
|
+
"unknown"
|
|
11860
11848
|
],
|
|
11861
11849
|
"type": "option"
|
|
11862
11850
|
},
|
|
11863
|
-
"
|
|
11864
|
-
"char": "
|
|
11865
|
-
"description": "
|
|
11866
|
-
"name": "
|
|
11867
|
-
"
|
|
11868
|
-
"multiple": false,
|
|
11869
|
-
"type": "option"
|
|
11870
|
-
},
|
|
11871
|
-
"packagexml": {
|
|
11872
|
-
"char": "p",
|
|
11873
|
-
"description": "Path to package.xml containing what you want to deploy in target org",
|
|
11874
|
-
"name": "packagexml",
|
|
11851
|
+
"message": {
|
|
11852
|
+
"char": "m",
|
|
11853
|
+
"description": "Custom message that you want to be added in notifications (string or markdown format)",
|
|
11854
|
+
"name": "message",
|
|
11855
|
+
"default": "",
|
|
11875
11856
|
"hasDynamicHelp": false,
|
|
11876
11857
|
"multiple": false,
|
|
11877
11858
|
"type": "option"
|
|
11878
11859
|
},
|
|
11879
|
-
"delta": {
|
|
11880
|
-
"description": "Applies sfdx-git-delta to package.xml before other deployment processes",
|
|
11881
|
-
"name": "delta",
|
|
11882
|
-
"allowNo": false,
|
|
11883
|
-
"type": "boolean"
|
|
11884
|
-
},
|
|
11885
11860
|
"debug": {
|
|
11886
11861
|
"char": "d",
|
|
11887
11862
|
"description": "Activate debug mode (more logs)",
|
|
@@ -11920,13 +11895,13 @@
|
|
|
11920
11895
|
},
|
|
11921
11896
|
"hasDynamicHelp": true,
|
|
11922
11897
|
"hiddenAliases": [],
|
|
11923
|
-
"id": "hardis:project:deploy:
|
|
11898
|
+
"id": "hardis:project:deploy:notify",
|
|
11924
11899
|
"pluginAlias": "sfdx-hardis",
|
|
11925
11900
|
"pluginName": "sfdx-hardis",
|
|
11926
11901
|
"pluginType": "core",
|
|
11927
11902
|
"strict": true,
|
|
11928
11903
|
"enableJsonFlag": true,
|
|
11929
|
-
"title": "
|
|
11904
|
+
"title": "Deployment Notifications",
|
|
11930
11905
|
"requiresProject": true,
|
|
11931
11906
|
"isESM": true,
|
|
11932
11907
|
"relativePath": [
|
|
@@ -11935,163 +11910,42 @@
|
|
|
11935
11910
|
"hardis",
|
|
11936
11911
|
"project",
|
|
11937
11912
|
"deploy",
|
|
11938
|
-
"
|
|
11939
|
-
],
|
|
11940
|
-
"aliasPermutations": [
|
|
11941
|
-
"hardis:project:deploy:sources:dx",
|
|
11942
|
-
"project:hardis:deploy:sources:dx",
|
|
11943
|
-
"project:deploy:hardis:sources:dx",
|
|
11944
|
-
"project:deploy:sources:hardis:dx",
|
|
11945
|
-
"project:deploy:sources:dx:hardis",
|
|
11946
|
-
"hardis:deploy:project:sources:dx",
|
|
11947
|
-
"deploy:hardis:project:sources:dx",
|
|
11948
|
-
"deploy:project:hardis:sources:dx",
|
|
11949
|
-
"deploy:project:sources:hardis:dx",
|
|
11950
|
-
"deploy:project:sources:dx:hardis",
|
|
11951
|
-
"hardis:deploy:sources:project:dx",
|
|
11952
|
-
"deploy:hardis:sources:project:dx",
|
|
11953
|
-
"deploy:sources:hardis:project:dx",
|
|
11954
|
-
"deploy:sources:project:hardis:dx",
|
|
11955
|
-
"deploy:sources:project:dx:hardis",
|
|
11956
|
-
"hardis:deploy:sources:dx:project",
|
|
11957
|
-
"deploy:hardis:sources:dx:project",
|
|
11958
|
-
"deploy:sources:hardis:dx:project",
|
|
11959
|
-
"deploy:sources:dx:hardis:project",
|
|
11960
|
-
"deploy:sources:dx:project:hardis",
|
|
11961
|
-
"hardis:project:sources:deploy:dx",
|
|
11962
|
-
"project:hardis:sources:deploy:dx",
|
|
11963
|
-
"project:sources:hardis:deploy:dx",
|
|
11964
|
-
"project:sources:deploy:hardis:dx",
|
|
11965
|
-
"project:sources:deploy:dx:hardis",
|
|
11966
|
-
"hardis:sources:project:deploy:dx",
|
|
11967
|
-
"sources:hardis:project:deploy:dx",
|
|
11968
|
-
"sources:project:hardis:deploy:dx",
|
|
11969
|
-
"sources:project:deploy:hardis:dx",
|
|
11970
|
-
"sources:project:deploy:dx:hardis",
|
|
11971
|
-
"hardis:sources:deploy:project:dx",
|
|
11972
|
-
"sources:hardis:deploy:project:dx",
|
|
11973
|
-
"sources:deploy:hardis:project:dx",
|
|
11974
|
-
"sources:deploy:project:hardis:dx",
|
|
11975
|
-
"sources:deploy:project:dx:hardis",
|
|
11976
|
-
"hardis:sources:deploy:dx:project",
|
|
11977
|
-
"sources:hardis:deploy:dx:project",
|
|
11978
|
-
"sources:deploy:hardis:dx:project",
|
|
11979
|
-
"sources:deploy:dx:hardis:project",
|
|
11980
|
-
"sources:deploy:dx:project:hardis",
|
|
11981
|
-
"hardis:project:sources:dx:deploy",
|
|
11982
|
-
"project:hardis:sources:dx:deploy",
|
|
11983
|
-
"project:sources:hardis:dx:deploy",
|
|
11984
|
-
"project:sources:dx:hardis:deploy",
|
|
11985
|
-
"project:sources:dx:deploy:hardis",
|
|
11986
|
-
"hardis:sources:project:dx:deploy",
|
|
11987
|
-
"sources:hardis:project:dx:deploy",
|
|
11988
|
-
"sources:project:hardis:dx:deploy",
|
|
11989
|
-
"sources:project:dx:hardis:deploy",
|
|
11990
|
-
"sources:project:dx:deploy:hardis",
|
|
11991
|
-
"hardis:sources:dx:project:deploy",
|
|
11992
|
-
"sources:hardis:dx:project:deploy",
|
|
11993
|
-
"sources:dx:hardis:project:deploy",
|
|
11994
|
-
"sources:dx:project:hardis:deploy",
|
|
11995
|
-
"sources:dx:project:deploy:hardis",
|
|
11996
|
-
"hardis:sources:dx:deploy:project",
|
|
11997
|
-
"sources:hardis:dx:deploy:project",
|
|
11998
|
-
"sources:dx:hardis:deploy:project",
|
|
11999
|
-
"sources:dx:deploy:hardis:project",
|
|
12000
|
-
"sources:dx:deploy:project:hardis",
|
|
12001
|
-
"hardis:project:deploy:dx:sources",
|
|
12002
|
-
"project:hardis:deploy:dx:sources",
|
|
12003
|
-
"project:deploy:hardis:dx:sources",
|
|
12004
|
-
"project:deploy:dx:hardis:sources",
|
|
12005
|
-
"project:deploy:dx:sources:hardis",
|
|
12006
|
-
"hardis:deploy:project:dx:sources",
|
|
12007
|
-
"deploy:hardis:project:dx:sources",
|
|
12008
|
-
"deploy:project:hardis:dx:sources",
|
|
12009
|
-
"deploy:project:dx:hardis:sources",
|
|
12010
|
-
"deploy:project:dx:sources:hardis",
|
|
12011
|
-
"hardis:deploy:dx:project:sources",
|
|
12012
|
-
"deploy:hardis:dx:project:sources",
|
|
12013
|
-
"deploy:dx:hardis:project:sources",
|
|
12014
|
-
"deploy:dx:project:hardis:sources",
|
|
12015
|
-
"deploy:dx:project:sources:hardis",
|
|
12016
|
-
"hardis:deploy:dx:sources:project",
|
|
12017
|
-
"deploy:hardis:dx:sources:project",
|
|
12018
|
-
"deploy:dx:hardis:sources:project",
|
|
12019
|
-
"deploy:dx:sources:hardis:project",
|
|
12020
|
-
"deploy:dx:sources:project:hardis",
|
|
12021
|
-
"hardis:project:dx:deploy:sources",
|
|
12022
|
-
"project:hardis:dx:deploy:sources",
|
|
12023
|
-
"project:dx:hardis:deploy:sources",
|
|
12024
|
-
"project:dx:deploy:hardis:sources",
|
|
12025
|
-
"project:dx:deploy:sources:hardis",
|
|
12026
|
-
"hardis:dx:project:deploy:sources",
|
|
12027
|
-
"dx:hardis:project:deploy:sources",
|
|
12028
|
-
"dx:project:hardis:deploy:sources",
|
|
12029
|
-
"dx:project:deploy:hardis:sources",
|
|
12030
|
-
"dx:project:deploy:sources:hardis",
|
|
12031
|
-
"hardis:dx:deploy:project:sources",
|
|
12032
|
-
"dx:hardis:deploy:project:sources",
|
|
12033
|
-
"dx:deploy:hardis:project:sources",
|
|
12034
|
-
"dx:deploy:project:hardis:sources",
|
|
12035
|
-
"dx:deploy:project:sources:hardis",
|
|
12036
|
-
"hardis:dx:deploy:sources:project",
|
|
12037
|
-
"dx:hardis:deploy:sources:project",
|
|
12038
|
-
"dx:deploy:hardis:sources:project",
|
|
12039
|
-
"dx:deploy:sources:hardis:project",
|
|
12040
|
-
"dx:deploy:sources:project:hardis",
|
|
12041
|
-
"hardis:project:dx:sources:deploy",
|
|
12042
|
-
"project:hardis:dx:sources:deploy",
|
|
12043
|
-
"project:dx:hardis:sources:deploy",
|
|
12044
|
-
"project:dx:sources:hardis:deploy",
|
|
12045
|
-
"project:dx:sources:deploy:hardis",
|
|
12046
|
-
"hardis:dx:project:sources:deploy",
|
|
12047
|
-
"dx:hardis:project:sources:deploy",
|
|
12048
|
-
"dx:project:hardis:sources:deploy",
|
|
12049
|
-
"dx:project:sources:hardis:deploy",
|
|
12050
|
-
"dx:project:sources:deploy:hardis",
|
|
12051
|
-
"hardis:dx:sources:project:deploy",
|
|
12052
|
-
"dx:hardis:sources:project:deploy",
|
|
12053
|
-
"dx:sources:hardis:project:deploy",
|
|
12054
|
-
"dx:sources:project:hardis:deploy",
|
|
12055
|
-
"dx:sources:project:deploy:hardis",
|
|
12056
|
-
"hardis:dx:sources:deploy:project",
|
|
12057
|
-
"dx:hardis:sources:deploy:project",
|
|
12058
|
-
"dx:sources:hardis:deploy:project",
|
|
12059
|
-
"dx:sources:deploy:hardis:project",
|
|
12060
|
-
"dx:sources:deploy:project:hardis"
|
|
11913
|
+
"notify.js"
|
|
12061
11914
|
],
|
|
11915
|
+
"aliasPermutations": [],
|
|
12062
11916
|
"permutations": [
|
|
12063
|
-
"hardis:project:deploy:
|
|
12064
|
-
"project:hardis:deploy:
|
|
12065
|
-
"project:deploy:hardis:
|
|
12066
|
-
"project:deploy:
|
|
12067
|
-
"hardis:deploy:project:
|
|
12068
|
-
"deploy:hardis:project:
|
|
12069
|
-
"deploy:project:hardis:
|
|
12070
|
-
"deploy:project:
|
|
12071
|
-
"hardis:deploy:
|
|
12072
|
-
"deploy:hardis:
|
|
12073
|
-
"deploy:
|
|
12074
|
-
"deploy:
|
|
12075
|
-
"hardis:project:
|
|
12076
|
-
"project:hardis:
|
|
12077
|
-
"project:
|
|
12078
|
-
"project:
|
|
12079
|
-
"hardis:
|
|
12080
|
-
"
|
|
12081
|
-
"
|
|
12082
|
-
"
|
|
12083
|
-
"hardis:
|
|
12084
|
-
"
|
|
12085
|
-
"
|
|
12086
|
-
"
|
|
11917
|
+
"hardis:project:deploy:notify",
|
|
11918
|
+
"project:hardis:deploy:notify",
|
|
11919
|
+
"project:deploy:hardis:notify",
|
|
11920
|
+
"project:deploy:notify:hardis",
|
|
11921
|
+
"hardis:deploy:project:notify",
|
|
11922
|
+
"deploy:hardis:project:notify",
|
|
11923
|
+
"deploy:project:hardis:notify",
|
|
11924
|
+
"deploy:project:notify:hardis",
|
|
11925
|
+
"hardis:deploy:notify:project",
|
|
11926
|
+
"deploy:hardis:notify:project",
|
|
11927
|
+
"deploy:notify:hardis:project",
|
|
11928
|
+
"deploy:notify:project:hardis",
|
|
11929
|
+
"hardis:project:notify:deploy",
|
|
11930
|
+
"project:hardis:notify:deploy",
|
|
11931
|
+
"project:notify:hardis:deploy",
|
|
11932
|
+
"project:notify:deploy:hardis",
|
|
11933
|
+
"hardis:notify:project:deploy",
|
|
11934
|
+
"notify:hardis:project:deploy",
|
|
11935
|
+
"notify:project:hardis:deploy",
|
|
11936
|
+
"notify:project:deploy:hardis",
|
|
11937
|
+
"hardis:notify:deploy:project",
|
|
11938
|
+
"notify:hardis:deploy:project",
|
|
11939
|
+
"notify:deploy:hardis:project",
|
|
11940
|
+
"notify:deploy:project:hardis"
|
|
12087
11941
|
]
|
|
12088
11942
|
},
|
|
12089
|
-
"hardis:project:deploy:
|
|
11943
|
+
"hardis:project:deploy:quick": {
|
|
12090
11944
|
"aliases": [
|
|
12091
|
-
"hardis:deploy:
|
|
11945
|
+
"hardis:deploy:quick"
|
|
12092
11946
|
],
|
|
12093
11947
|
"args": {},
|
|
12094
|
-
"description": "sfdx-hardis wrapper for **sf project deploy
|
|
11948
|
+
"description": "sfdx-hardis wrapper for **sf project deploy quick** that displays tips to solve deployment errors.\n\nNote: Use **--json** argument to have better results\n\n[](https://nicolas.vuillamy.fr/assisted-solving-of-salesforce-deployments-errors-47f3666a9ed0)\n\n[See documentation of Salesforce command](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_project_commands_unified.htm#cli_reference_project_deploy_quick_unified)\n\n### Deployment pre or post commands\n\nYou can define command lines to run before or after a deployment, with parameters:\n\n- **id**: Unique Id for the command\n- **label**: Human readable label for the command\n- **skipIfError**: If defined to \"true\", the post-command won't be run if there is a deployment failure\n- **context**: Defines the context where the command will be run. Can be **all** (default), **check-deployment-only** or **process-deployment-only**\n- **runOnlyOnceByOrg**: If set to true, the command will be run only one time per org. A record of SfdxHardisTrace__c is stored to make that possible (it needs to be existing in target org)\n\nIf the commands are not the same depending on the target org, you can define them into **config/branches/.sfdx-hardis-BRANCHNAME.yml** instead of root **config/.sfdx-hardis.yml**\n\nExample:\n\n```yaml\ncommandsPreDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to the deployment user\n command: sf data update record --sobject User --where \"Username='deploy.github@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n\ncommandsPostDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to desired username\n command: sf data update record --sobject User --where \"Username='admin-yser@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n - id: someActionToRunJustOneTime\n label: And to run only if deployment is success\n command: sf sfdmu:run ...\n skipIfError: true\n context: process-deployment-only\n runOnlyOnceByOrg: true\n```\n",
|
|
12095
11949
|
"flags": {
|
|
12096
11950
|
"json": {
|
|
12097
11951
|
"description": "Format output as json.",
|
|
@@ -12125,73 +11979,6 @@
|
|
|
12125
11979
|
"allowNo": false,
|
|
12126
11980
|
"type": "boolean"
|
|
12127
11981
|
},
|
|
12128
|
-
"dry-run": {
|
|
12129
|
-
"description": "dry-run",
|
|
12130
|
-
"name": "dry-run",
|
|
12131
|
-
"allowNo": false,
|
|
12132
|
-
"type": "boolean"
|
|
12133
|
-
},
|
|
12134
|
-
"ignore-conflicts": {
|
|
12135
|
-
"char": "c",
|
|
12136
|
-
"description": "ignore-conflicts",
|
|
12137
|
-
"name": "ignore-conflicts",
|
|
12138
|
-
"allowNo": false,
|
|
12139
|
-
"type": "boolean"
|
|
12140
|
-
},
|
|
12141
|
-
"ignore-errors": {
|
|
12142
|
-
"char": "r",
|
|
12143
|
-
"description": "ignore-errors",
|
|
12144
|
-
"name": "ignore-errors",
|
|
12145
|
-
"allowNo": false,
|
|
12146
|
-
"type": "boolean"
|
|
12147
|
-
},
|
|
12148
|
-
"ignore-warnings": {
|
|
12149
|
-
"char": "g",
|
|
12150
|
-
"description": "ignore-warnings",
|
|
12151
|
-
"name": "ignore-warnings",
|
|
12152
|
-
"allowNo": false,
|
|
12153
|
-
"type": "boolean"
|
|
12154
|
-
},
|
|
12155
|
-
"manifest": {
|
|
12156
|
-
"char": "x",
|
|
12157
|
-
"description": "manifest",
|
|
12158
|
-
"name": "manifest",
|
|
12159
|
-
"hasDynamicHelp": false,
|
|
12160
|
-
"multiple": false,
|
|
12161
|
-
"type": "option"
|
|
12162
|
-
},
|
|
12163
|
-
"metadata": {
|
|
12164
|
-
"char": "m",
|
|
12165
|
-
"description": "metadata",
|
|
12166
|
-
"name": "metadata",
|
|
12167
|
-
"hasDynamicHelp": false,
|
|
12168
|
-
"multiple": true,
|
|
12169
|
-
"type": "option"
|
|
12170
|
-
},
|
|
12171
|
-
"metadata-dir": {
|
|
12172
|
-
"description": "metadata-dir",
|
|
12173
|
-
"name": "metadata-dir",
|
|
12174
|
-
"hasDynamicHelp": false,
|
|
12175
|
-
"multiple": false,
|
|
12176
|
-
"type": "option"
|
|
12177
|
-
},
|
|
12178
|
-
"single-package": {
|
|
12179
|
-
"dependsOn": [
|
|
12180
|
-
"metadata-dir"
|
|
12181
|
-
],
|
|
12182
|
-
"description": "single-package",
|
|
12183
|
-
"name": "single-package",
|
|
12184
|
-
"allowNo": false,
|
|
12185
|
-
"type": "boolean"
|
|
12186
|
-
},
|
|
12187
|
-
"source-dir": {
|
|
12188
|
-
"char": "d",
|
|
12189
|
-
"description": "source-dir",
|
|
12190
|
-
"name": "source-dir",
|
|
12191
|
-
"hasDynamicHelp": false,
|
|
12192
|
-
"multiple": true,
|
|
12193
|
-
"type": "option"
|
|
12194
|
-
},
|
|
12195
11982
|
"target-org": {
|
|
12196
11983
|
"char": "o",
|
|
12197
11984
|
"name": "target-org",
|
|
@@ -12209,13 +11996,21 @@
|
|
|
12209
11996
|
"multiple": false,
|
|
12210
11997
|
"type": "option"
|
|
12211
11998
|
},
|
|
12212
|
-
"
|
|
12213
|
-
"
|
|
12214
|
-
"
|
|
11999
|
+
"--job-id": {
|
|
12000
|
+
"char": "i",
|
|
12001
|
+
"description": "job-id",
|
|
12002
|
+
"name": "--job-id",
|
|
12215
12003
|
"hasDynamicHelp": false,
|
|
12216
12004
|
"multiple": false,
|
|
12217
12005
|
"type": "option"
|
|
12218
12006
|
},
|
|
12007
|
+
"--use-most-recent": {
|
|
12008
|
+
"char": "r",
|
|
12009
|
+
"description": "use-most-recent",
|
|
12010
|
+
"name": "--use-most-recent",
|
|
12011
|
+
"allowNo": false,
|
|
12012
|
+
"type": "boolean"
|
|
12013
|
+
},
|
|
12219
12014
|
"wait": {
|
|
12220
12015
|
"char": "w",
|
|
12221
12016
|
"description": "wait",
|
|
@@ -12228,52 +12023,6 @@
|
|
|
12228
12023
|
"multiple": false,
|
|
12229
12024
|
"type": "option"
|
|
12230
12025
|
},
|
|
12231
|
-
"purge-on-delete": {
|
|
12232
|
-
"description": "purge-on-delete",
|
|
12233
|
-
"name": "purge-on-delete",
|
|
12234
|
-
"allowNo": false,
|
|
12235
|
-
"type": "boolean"
|
|
12236
|
-
},
|
|
12237
|
-
"pre-destructive-changes": {
|
|
12238
|
-
"dependsOn": [
|
|
12239
|
-
"manifest"
|
|
12240
|
-
],
|
|
12241
|
-
"description": "pre-destructive-changes",
|
|
12242
|
-
"name": "pre-destructive-changes",
|
|
12243
|
-
"hasDynamicHelp": false,
|
|
12244
|
-
"multiple": false,
|
|
12245
|
-
"type": "option"
|
|
12246
|
-
},
|
|
12247
|
-
"post-destructive-changes": {
|
|
12248
|
-
"dependsOn": [
|
|
12249
|
-
"manifest"
|
|
12250
|
-
],
|
|
12251
|
-
"description": "post-destructive-changes",
|
|
12252
|
-
"name": "post-destructive-changes",
|
|
12253
|
-
"hasDynamicHelp": false,
|
|
12254
|
-
"multiple": false,
|
|
12255
|
-
"type": "option"
|
|
12256
|
-
},
|
|
12257
|
-
"coverage-formatters": {
|
|
12258
|
-
"description": "coverage-formatters",
|
|
12259
|
-
"name": "coverage-formatters",
|
|
12260
|
-
"hasDynamicHelp": false,
|
|
12261
|
-
"multiple": false,
|
|
12262
|
-
"type": "option"
|
|
12263
|
-
},
|
|
12264
|
-
"junit": {
|
|
12265
|
-
"description": "junit",
|
|
12266
|
-
"name": "junit",
|
|
12267
|
-
"allowNo": false,
|
|
12268
|
-
"type": "boolean"
|
|
12269
|
-
},
|
|
12270
|
-
"results-dir": {
|
|
12271
|
-
"description": "results-dir",
|
|
12272
|
-
"name": "results-dir",
|
|
12273
|
-
"hasDynamicHelp": false,
|
|
12274
|
-
"multiple": false,
|
|
12275
|
-
"type": "option"
|
|
12276
|
-
},
|
|
12277
12026
|
"debug": {
|
|
12278
12027
|
"description": "debug",
|
|
12279
12028
|
"name": "debug",
|
|
@@ -12283,7 +12032,7 @@
|
|
|
12283
12032
|
},
|
|
12284
12033
|
"hasDynamicHelp": true,
|
|
12285
12034
|
"hiddenAliases": [],
|
|
12286
|
-
"id": "hardis:project:deploy:
|
|
12035
|
+
"id": "hardis:project:deploy:quick",
|
|
12287
12036
|
"pluginAlias": "sfdx-hardis",
|
|
12288
12037
|
"pluginName": "sfdx-hardis",
|
|
12289
12038
|
"pluginType": "core",
|
|
@@ -12297,49 +12046,50 @@
|
|
|
12297
12046
|
"hardis",
|
|
12298
12047
|
"project",
|
|
12299
12048
|
"deploy",
|
|
12300
|
-
"
|
|
12049
|
+
"quick.js"
|
|
12301
12050
|
],
|
|
12302
12051
|
"aliasPermutations": [
|
|
12303
|
-
"hardis:deploy:
|
|
12304
|
-
"deploy:hardis:
|
|
12305
|
-
"deploy:
|
|
12306
|
-
"hardis:
|
|
12307
|
-
"
|
|
12308
|
-
"
|
|
12052
|
+
"hardis:deploy:quick",
|
|
12053
|
+
"deploy:hardis:quick",
|
|
12054
|
+
"deploy:quick:hardis",
|
|
12055
|
+
"hardis:quick:deploy",
|
|
12056
|
+
"quick:hardis:deploy",
|
|
12057
|
+
"quick:deploy:hardis"
|
|
12309
12058
|
],
|
|
12310
12059
|
"permutations": [
|
|
12311
|
-
"hardis:project:deploy:
|
|
12312
|
-
"project:hardis:deploy:
|
|
12313
|
-
"project:deploy:hardis:
|
|
12314
|
-
"project:deploy:
|
|
12315
|
-
"hardis:deploy:project:
|
|
12316
|
-
"deploy:hardis:project:
|
|
12317
|
-
"deploy:project:hardis:
|
|
12318
|
-
"deploy:project:
|
|
12319
|
-
"hardis:deploy:
|
|
12320
|
-
"deploy:hardis:
|
|
12321
|
-
"deploy:
|
|
12322
|
-
"deploy:
|
|
12323
|
-
"hardis:project:
|
|
12324
|
-
"project:hardis:
|
|
12325
|
-
"project:
|
|
12326
|
-
"project:
|
|
12327
|
-
"hardis:
|
|
12328
|
-
"
|
|
12329
|
-
"
|
|
12330
|
-
"
|
|
12331
|
-
"hardis:
|
|
12332
|
-
"
|
|
12333
|
-
"
|
|
12334
|
-
"
|
|
12060
|
+
"hardis:project:deploy:quick",
|
|
12061
|
+
"project:hardis:deploy:quick",
|
|
12062
|
+
"project:deploy:hardis:quick",
|
|
12063
|
+
"project:deploy:quick:hardis",
|
|
12064
|
+
"hardis:deploy:project:quick",
|
|
12065
|
+
"deploy:hardis:project:quick",
|
|
12066
|
+
"deploy:project:hardis:quick",
|
|
12067
|
+
"deploy:project:quick:hardis",
|
|
12068
|
+
"hardis:deploy:quick:project",
|
|
12069
|
+
"deploy:hardis:quick:project",
|
|
12070
|
+
"deploy:quick:hardis:project",
|
|
12071
|
+
"deploy:quick:project:hardis",
|
|
12072
|
+
"hardis:project:quick:deploy",
|
|
12073
|
+
"project:hardis:quick:deploy",
|
|
12074
|
+
"project:quick:hardis:deploy",
|
|
12075
|
+
"project:quick:deploy:hardis",
|
|
12076
|
+
"hardis:quick:project:deploy",
|
|
12077
|
+
"quick:hardis:project:deploy",
|
|
12078
|
+
"quick:project:hardis:deploy",
|
|
12079
|
+
"quick:project:deploy:hardis",
|
|
12080
|
+
"hardis:quick:deploy:project",
|
|
12081
|
+
"quick:hardis:deploy:project",
|
|
12082
|
+
"quick:deploy:hardis:project",
|
|
12083
|
+
"quick:deploy:project:hardis"
|
|
12335
12084
|
]
|
|
12336
12085
|
},
|
|
12337
|
-
"hardis:project:deploy:
|
|
12338
|
-
"aliases": [
|
|
12339
|
-
"hardis:deploy:validate"
|
|
12340
|
-
],
|
|
12086
|
+
"hardis:project:deploy:simulate": {
|
|
12087
|
+
"aliases": [],
|
|
12341
12088
|
"args": {},
|
|
12342
|
-
"description": "
|
|
12089
|
+
"description": "\n## Command Behavior\n\n**Simulates the deployment of Salesforce metadata to a target org, primarily used by the VS Code Extension for quick validation.**\n\nThis command allows developers to perform a dry run of a metadata deployment without actually committing changes to the Salesforce org. This is incredibly useful for:\n\n- **Pre-Deployment Validation:** Identifying potential errors, warnings, or conflicts before a full deployment.\n- **Troubleshooting:** Quickly testing metadata changes and debugging issues in a safe environment.\n- **Local Development:** Validating changes to individual metadata components (e.g., a Permission Set) without needing to run a full CI/CD pipeline.\n\nKey functionalities:\n\n- **Source Specification:** Takes a source file or directory (`--source-dir`) containing the metadata to be simulated.\n- **Target Org Selection:** Prompts the user to select a Salesforce org for the simulation. This allows for flexible testing across different environments.\n- **Dry Run Execution:** Executes the Salesforce CLI's `sf project deploy start --dry-run` command, which performs all validation steps but does not save any changes to the org.\n\nThis command is primarily used by the VS Code Extension to provide immediate feedback to developers.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **Interactive Org Prompt:** Uses `promptOrgUsernameDefault` to allow the user to select the target Salesforce org for the deployment simulation.\n- **Salesforce CLI Integration:** It constructs and executes the `sf project deploy start` command with the `--dry-run` and `--ignore-conflicts` flags. The `--source-dir` and `--target-org` flags are dynamically populated based on user input.\n- **`wrapSfdxCoreCommand`:** This utility is used to execute the Salesforce CLI command and capture its output.\n- **Connection Variables:** Ensures Salesforce connection variables are set using `setConnectionVariables`.\n</details>\n",
|
|
12090
|
+
"examples": [
|
|
12091
|
+
"$ sf hardis:project:deploy:simulate --source-dir force-app/defaut/main/permissionset/PS_Admin.permissionset-meta.xml"
|
|
12092
|
+
],
|
|
12343
12093
|
"flags": {
|
|
12344
12094
|
"json": {
|
|
12345
12095
|
"description": "Format output as json.",
|
|
@@ -12356,92 +12106,42 @@
|
|
|
12356
12106
|
"multiple": false,
|
|
12357
12107
|
"type": "option"
|
|
12358
12108
|
},
|
|
12359
|
-
"
|
|
12360
|
-
"char": "
|
|
12361
|
-
"description": "
|
|
12362
|
-
"name": "
|
|
12109
|
+
"source-dir": {
|
|
12110
|
+
"char": "f",
|
|
12111
|
+
"description": "Source file or directory to simulate the deployment",
|
|
12112
|
+
"name": "source-dir",
|
|
12113
|
+
"required": true,
|
|
12363
12114
|
"hasDynamicHelp": false,
|
|
12364
|
-
"multiple":
|
|
12115
|
+
"multiple": true,
|
|
12365
12116
|
"type": "option"
|
|
12366
12117
|
},
|
|
12367
|
-
"
|
|
12368
|
-
"
|
|
12369
|
-
"
|
|
12370
|
-
|
|
12371
|
-
],
|
|
12372
|
-
"name": "async",
|
|
12373
|
-
"allowNo": false,
|
|
12374
|
-
"type": "boolean"
|
|
12375
|
-
},
|
|
12376
|
-
"dry-run": {
|
|
12377
|
-
"description": "dry-run",
|
|
12378
|
-
"name": "dry-run",
|
|
12379
|
-
"allowNo": false,
|
|
12380
|
-
"type": "boolean"
|
|
12381
|
-
},
|
|
12382
|
-
"ignore-conflicts": {
|
|
12383
|
-
"char": "c",
|
|
12384
|
-
"description": "ignore-conflicts",
|
|
12385
|
-
"name": "ignore-conflicts",
|
|
12386
|
-
"allowNo": false,
|
|
12387
|
-
"type": "boolean"
|
|
12388
|
-
},
|
|
12389
|
-
"ignore-errors": {
|
|
12390
|
-
"char": "r",
|
|
12391
|
-
"description": "ignore-errors",
|
|
12392
|
-
"name": "ignore-errors",
|
|
12393
|
-
"allowNo": false,
|
|
12394
|
-
"type": "boolean"
|
|
12395
|
-
},
|
|
12396
|
-
"ignore-warnings": {
|
|
12397
|
-
"char": "g",
|
|
12398
|
-
"description": "ignore-warnings",
|
|
12399
|
-
"name": "ignore-warnings",
|
|
12118
|
+
"debug": {
|
|
12119
|
+
"char": "d",
|
|
12120
|
+
"description": "Activate debug mode (more logs)",
|
|
12121
|
+
"name": "debug",
|
|
12400
12122
|
"allowNo": false,
|
|
12401
12123
|
"type": "boolean"
|
|
12402
12124
|
},
|
|
12403
|
-
"
|
|
12404
|
-
"
|
|
12405
|
-
"
|
|
12406
|
-
"name": "manifest",
|
|
12407
|
-
"hasDynamicHelp": false,
|
|
12408
|
-
"multiple": false,
|
|
12409
|
-
"type": "option"
|
|
12410
|
-
},
|
|
12411
|
-
"metadata": {
|
|
12412
|
-
"char": "m",
|
|
12413
|
-
"description": "metadata",
|
|
12414
|
-
"name": "metadata",
|
|
12415
|
-
"hasDynamicHelp": false,
|
|
12416
|
-
"multiple": true,
|
|
12417
|
-
"type": "option"
|
|
12418
|
-
},
|
|
12419
|
-
"metadata-dir": {
|
|
12420
|
-
"description": "metadata-dir",
|
|
12421
|
-
"name": "metadata-dir",
|
|
12125
|
+
"websocket": {
|
|
12126
|
+
"description": "Websocket host:port for VsCode SFDX Hardis UI integration",
|
|
12127
|
+
"name": "websocket",
|
|
12422
12128
|
"hasDynamicHelp": false,
|
|
12423
12129
|
"multiple": false,
|
|
12424
12130
|
"type": "option"
|
|
12425
12131
|
},
|
|
12426
|
-
"
|
|
12427
|
-
"
|
|
12428
|
-
|
|
12429
|
-
],
|
|
12430
|
-
"description": "single-package",
|
|
12431
|
-
"name": "single-package",
|
|
12132
|
+
"skipauth": {
|
|
12133
|
+
"description": "Skip authentication check when a default username is required",
|
|
12134
|
+
"name": "skipauth",
|
|
12432
12135
|
"allowNo": false,
|
|
12433
12136
|
"type": "boolean"
|
|
12434
12137
|
},
|
|
12435
|
-
"source-dir": {
|
|
12436
|
-
"char": "d",
|
|
12437
|
-
"description": "source-dir",
|
|
12438
|
-
"name": "source-dir",
|
|
12439
|
-
"hasDynamicHelp": false,
|
|
12440
|
-
"multiple": true,
|
|
12441
|
-
"type": "option"
|
|
12442
|
-
},
|
|
12443
12138
|
"target-org": {
|
|
12139
|
+
"aliases": [
|
|
12140
|
+
"targetusername",
|
|
12141
|
+
"u"
|
|
12142
|
+
],
|
|
12444
12143
|
"char": "o",
|
|
12144
|
+
"deprecateAliases": true,
|
|
12445
12145
|
"name": "target-org",
|
|
12446
12146
|
"noCacheDefault": true,
|
|
12447
12147
|
"required": true,
|
|
@@ -12449,94 +12149,17 @@
|
|
|
12449
12149
|
"hasDynamicHelp": true,
|
|
12450
12150
|
"multiple": false,
|
|
12451
12151
|
"type": "option"
|
|
12452
|
-
},
|
|
12453
|
-
"tests": {
|
|
12454
|
-
"description": "tests",
|
|
12455
|
-
"name": "tests",
|
|
12456
|
-
"hasDynamicHelp": false,
|
|
12457
|
-
"multiple": false,
|
|
12458
|
-
"type": "option"
|
|
12459
|
-
},
|
|
12460
|
-
"test-level": {
|
|
12461
|
-
"description": "test-level",
|
|
12462
|
-
"name": "test-level",
|
|
12463
|
-
"hasDynamicHelp": false,
|
|
12464
|
-
"multiple": false,
|
|
12465
|
-
"type": "option"
|
|
12466
|
-
},
|
|
12467
|
-
"wait": {
|
|
12468
|
-
"char": "w",
|
|
12469
|
-
"description": "wait",
|
|
12470
|
-
"exclusive": [
|
|
12471
|
-
"async"
|
|
12472
|
-
],
|
|
12473
|
-
"name": "wait",
|
|
12474
|
-
"default": 33,
|
|
12475
|
-
"hasDynamicHelp": false,
|
|
12476
|
-
"multiple": false,
|
|
12477
|
-
"type": "option"
|
|
12478
|
-
},
|
|
12479
|
-
"purge-on-delete": {
|
|
12480
|
-
"description": "purge-on-delete",
|
|
12481
|
-
"name": "purge-on-delete",
|
|
12482
|
-
"allowNo": false,
|
|
12483
|
-
"type": "boolean"
|
|
12484
|
-
},
|
|
12485
|
-
"pre-destructive-changes": {
|
|
12486
|
-
"dependsOn": [
|
|
12487
|
-
"manifest"
|
|
12488
|
-
],
|
|
12489
|
-
"description": "pre-destructive-changes",
|
|
12490
|
-
"name": "pre-destructive-changes",
|
|
12491
|
-
"hasDynamicHelp": false,
|
|
12492
|
-
"multiple": false,
|
|
12493
|
-
"type": "option"
|
|
12494
|
-
},
|
|
12495
|
-
"post-destructive-changes": {
|
|
12496
|
-
"dependsOn": [
|
|
12497
|
-
"manifest"
|
|
12498
|
-
],
|
|
12499
|
-
"description": "post-destructive-changes",
|
|
12500
|
-
"name": "post-destructive-changes",
|
|
12501
|
-
"hasDynamicHelp": false,
|
|
12502
|
-
"multiple": false,
|
|
12503
|
-
"type": "option"
|
|
12504
|
-
},
|
|
12505
|
-
"coverage-formatters": {
|
|
12506
|
-
"description": "coverage-formatters",
|
|
12507
|
-
"name": "coverage-formatters",
|
|
12508
|
-
"hasDynamicHelp": false,
|
|
12509
|
-
"multiple": false,
|
|
12510
|
-
"type": "option"
|
|
12511
|
-
},
|
|
12512
|
-
"junit": {
|
|
12513
|
-
"description": "junit",
|
|
12514
|
-
"name": "junit",
|
|
12515
|
-
"allowNo": false,
|
|
12516
|
-
"type": "boolean"
|
|
12517
|
-
},
|
|
12518
|
-
"results-dir": {
|
|
12519
|
-
"description": "results-dir",
|
|
12520
|
-
"name": "results-dir",
|
|
12521
|
-
"hasDynamicHelp": false,
|
|
12522
|
-
"multiple": false,
|
|
12523
|
-
"type": "option"
|
|
12524
|
-
},
|
|
12525
|
-
"debug": {
|
|
12526
|
-
"description": "debug",
|
|
12527
|
-
"name": "debug",
|
|
12528
|
-
"allowNo": false,
|
|
12529
|
-
"type": "boolean"
|
|
12530
12152
|
}
|
|
12531
12153
|
},
|
|
12532
12154
|
"hasDynamicHelp": true,
|
|
12533
12155
|
"hiddenAliases": [],
|
|
12534
|
-
"id": "hardis:project:deploy:
|
|
12156
|
+
"id": "hardis:project:deploy:simulate",
|
|
12535
12157
|
"pluginAlias": "sfdx-hardis",
|
|
12536
12158
|
"pluginName": "sfdx-hardis",
|
|
12537
12159
|
"pluginType": "core",
|
|
12538
12160
|
"strict": true,
|
|
12539
12161
|
"enableJsonFlag": true,
|
|
12162
|
+
"title": "Simulate the deployment of metadata in an org prompted to the user.\nUsed by VS Code extension.",
|
|
12540
12163
|
"requiresProject": true,
|
|
12541
12164
|
"isESM": true,
|
|
12542
12165
|
"relativePath": [
|
|
@@ -12545,49 +12168,53 @@
|
|
|
12545
12168
|
"hardis",
|
|
12546
12169
|
"project",
|
|
12547
12170
|
"deploy",
|
|
12548
|
-
"
|
|
12549
|
-
],
|
|
12550
|
-
"aliasPermutations": [
|
|
12551
|
-
"hardis:deploy:validate",
|
|
12552
|
-
"deploy:hardis:validate",
|
|
12553
|
-
"deploy:validate:hardis",
|
|
12554
|
-
"hardis:validate:deploy",
|
|
12555
|
-
"validate:hardis:deploy",
|
|
12556
|
-
"validate:deploy:hardis"
|
|
12171
|
+
"simulate.js"
|
|
12557
12172
|
],
|
|
12173
|
+
"aliasPermutations": [],
|
|
12558
12174
|
"permutations": [
|
|
12559
|
-
"hardis:project:deploy:
|
|
12560
|
-
"project:hardis:deploy:
|
|
12561
|
-
"project:deploy:hardis:
|
|
12562
|
-
"project:deploy:
|
|
12563
|
-
"hardis:deploy:project:
|
|
12564
|
-
"deploy:hardis:project:
|
|
12565
|
-
"deploy:project:hardis:
|
|
12566
|
-
"deploy:project:
|
|
12567
|
-
"hardis:deploy:
|
|
12568
|
-
"deploy:hardis:
|
|
12569
|
-
"deploy:
|
|
12570
|
-
"deploy:
|
|
12571
|
-
"hardis:project:
|
|
12572
|
-
"project:hardis:
|
|
12573
|
-
"project:
|
|
12574
|
-
"project:
|
|
12575
|
-
"hardis:
|
|
12576
|
-
"
|
|
12577
|
-
"
|
|
12578
|
-
"
|
|
12579
|
-
"hardis:
|
|
12580
|
-
"
|
|
12581
|
-
"
|
|
12582
|
-
"
|
|
12175
|
+
"hardis:project:deploy:simulate",
|
|
12176
|
+
"project:hardis:deploy:simulate",
|
|
12177
|
+
"project:deploy:hardis:simulate",
|
|
12178
|
+
"project:deploy:simulate:hardis",
|
|
12179
|
+
"hardis:deploy:project:simulate",
|
|
12180
|
+
"deploy:hardis:project:simulate",
|
|
12181
|
+
"deploy:project:hardis:simulate",
|
|
12182
|
+
"deploy:project:simulate:hardis",
|
|
12183
|
+
"hardis:deploy:simulate:project",
|
|
12184
|
+
"deploy:hardis:simulate:project",
|
|
12185
|
+
"deploy:simulate:hardis:project",
|
|
12186
|
+
"deploy:simulate:project:hardis",
|
|
12187
|
+
"hardis:project:simulate:deploy",
|
|
12188
|
+
"project:hardis:simulate:deploy",
|
|
12189
|
+
"project:simulate:hardis:deploy",
|
|
12190
|
+
"project:simulate:deploy:hardis",
|
|
12191
|
+
"hardis:simulate:project:deploy",
|
|
12192
|
+
"simulate:hardis:project:deploy",
|
|
12193
|
+
"simulate:project:hardis:deploy",
|
|
12194
|
+
"simulate:project:deploy:hardis",
|
|
12195
|
+
"hardis:simulate:deploy:project",
|
|
12196
|
+
"simulate:hardis:deploy:project",
|
|
12197
|
+
"simulate:deploy:hardis:project",
|
|
12198
|
+
"simulate:deploy:project:hardis"
|
|
12583
12199
|
]
|
|
12584
12200
|
},
|
|
12585
|
-
"hardis:project:
|
|
12586
|
-
"aliases": [
|
|
12201
|
+
"hardis:project:deploy:smart": {
|
|
12202
|
+
"aliases": [
|
|
12203
|
+
"hardis:project:deploy:sources:dx"
|
|
12204
|
+
],
|
|
12587
12205
|
"args": {},
|
|
12588
|
-
"description": "\n## Command Behavior\n\n**Interactively updates tab visibility settings in Salesforce profiles, addressing a common issue where tab visibilities are not correctly retrieved by `sf project retrieve start`.**\n\nThis command provides a user-friendly interface to manage tab settings within your profile XML files, ensuring that your local project accurately reflects the intended tab configurations in your Salesforce org.\n\nKey functionalities:\n\n- **Interactive Tab Selection:** Displays a multi-select menu of all available tabs in your org, allowing you to choose which tabs to update.\n- **Visibility Control:** Lets you set the visibility for the selected tabs to either `DefaultOn` (Visible) or `Hidden`.\n- **Profile Selection:** Presents a multi-select menu of all .profile-meta.xml files in your project, allowing you to apply the tab visibility changes to specific profiles.\n- **XML Updates:** Modifies the <tabVisibilities> section of the selected profile XML files to reflect the chosen tab settings. If a tab visibility setting already exists for a selected tab, it will be updated; otherwise, a new one will be added.\n- **Sorted Output:** The <tabVisibilities> in the updated profile XML files are sorted alphabetically for consistency and readability.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Queries (Tooling API):** It queries the `TabDefinition` object using `soqlQueryTooling` to retrieve a list of all available tabs in the target org.\n- **File Discovery:** Uses `glob` to find all .profile-meta.xml files within the specified project path.\n- **Interactive Prompts:** Leverages the `prompts` library to create interactive menus for selecting tabs, visibility settings, and profiles.\n- **XML Parsing and Manipulation:** Uses `parseXmlFile` to read the content of profile XML files and `writeXmlFile` to write the modified content back. It manipulates the `tabVisibilities` array within the parsed XML to add or update tab settings.\n- **Array Sorting:** Employs the `sort-array` library to sort the `tabVisibilities` alphabetically by tab name.\n- **Logging:** Provides feedback to the user about which profiles have been updated and a summary of the changes.\n</details>\n",
|
|
12206
|
+
"description": "Smart deploy of SFDX sources to target org, with many useful options.\n\nIn case of errors, [tips to fix them](https://sfdx-hardis.cloudity.com/deployTips/) will be included within the error messages.\n\n### Quick Deploy\n\nIn case Pull Request comments are configured on the project, Quick Deploy will try to be used (equivalent to button Quick Deploy)\n\nIf you do not want to use QuickDeploy, define variable `SFDX_HARDIS_QUICK_DEPLOY=false`\n\n- [GitHub Pull Requests comments config](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integration-github/)\n- [Gitlab Merge requests notes config](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integration-gitlab/)\n- [Azure Pull Requests comments config](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-setup-integration-azure/)\n\n### Delta deployments\n\nTo activate delta deployments, define property `useDeltaDeployment: true` in `config/.sfdx-hardis.yml`.\n\nThis will activate delta deployments only between minor and major branches (major to major remains full deployment mode)\n\nIf you want to force the delta deployment into major orgs (ex: preprod to prod), this is not recommended but you can use env variable ALWAYS_ENABLE_DELTA_DEPLOYMENT=true\n\n### Smart Deployments Tests\n\nNot all metadata updates can break test classes, use Smart Deployment Tests to skip running test classes if ALL the following conditions are met:\n\n- Delta deployment is activated and applicable to the source and target branches\n- Delta deployed metadatas are all matching the list of **NOT_IMPACTING_METADATA_TYPES** (see below)\n- Target org is not a production org\n\nActivate Smart Deployment tests with:\n\n- env variable `USE_SMART_DEPLOYMENT_TESTS=true`\n- .sfdx-hardis.yml config property `useSmartDeploymentTests: true`\n\nDefaut list for **NOT_IMPACTING_METADATA_TYPES** (can be overridden with comma-separated list on env var NOT_IMPACTING_METADATA_TYPES)\n\n- Audience\n- AuraDefinitionBundle\n- Bot\n- BotVersion\n- ContentAsset\n- CustomObjectTranslation\n- CustomSite\n- CustomTab\n- Dashboard\n- ExperienceBundle\n- Flexipage\n- GlobalValueSetTranslation\n- Layout\n- LightningComponentBundle\n- NavigationMenu\n- ReportType\n- Report\n- SiteDotCom\n- StandardValueSetTranslation\n- StaticResource\n- Translations\n\nNote: if you want to disable Smart test classes for a PR, add **nosmart** in the text of the latest commit.\n\n### Dynamic deployment items / Overwrite management\n\nIf necessary,you can define the following files (that supports wildcards <members>*</members>):\n\n- `manifest/package-no-overwrite.xml`: Every element defined in this file will be deployed only if it is not existing yet in the target org (can be useful with ListView for example, if the client wants to update them directly in production org).\n - Can be overridden for a branch using .sfdx-hardis.yml property **packageNoOverwritePath** or environment variable PACKAGE_NO_OVERWRITE_PATH (for example, define: `packageNoOverwritePath: manifest/package-no-overwrite-main.xml` in config file `config/.sfdx-hardis.main.yml`)\n- `manifest/packageXmlOnChange.xml`: Every element defined in this file will not be deployed if it already has a similar definition in target org (can be useful for SharingRules for example)\n\nSee [Overwrite management documentation](https://sfdx-hardis.cloudity.com/salesforce-ci-cd-config-overwrite/)\n\n### Packages installation\n\nYou can define a list of package to install during deployments using property `installedPackages`\n\n- If `INSTALL_PACKAGES_DURING_CHECK_DEPLOY` is defined as `true` (or `installPackagesDuringCheckDeploy: true` in `.sfdx-hardis.yml`), packages will be installed even if the command is called with `--check` mode\n- You can automatically update this property by listing all packages installed on an org using command `sf hardis:org:retrieve:packageconfig`\n\nExample:\n\n```yaml\ninstalledPackages:\n - Id: 0A35r0000009EtECAU\n SubscriberPackageId: 033i0000000LVMYAA4\n SubscriberPackageName: Marketing Cloud\n SubscriberPackageNamespace: et4ae5\n SubscriberPackageVersionId: 04t6S000000l11iQAA\n SubscriberPackageVersionName: Marketing Cloud\n SubscriberPackageVersionNumber: 236.0.0.2\n installOnScratchOrgs: true // true or false depending you want to install this package when creating a new scratch org\n installDuringDeployments: true // set as true to install package during a deployment using sf hardis:project:deploy:smart\n installationkey: xxxxxxxxxxxxxxxxxxxx // if the package has a password, write it in this property\n - Id: 0A35r0000009F9CCAU\n SubscriberPackageId: 033b0000000Pf2AAAS\n SubscriberPackageName: Declarative Lookup Rollup Summaries Tool\n SubscriberPackageNamespace: dlrs\n SubscriberPackageVersionId: 04t5p000001BmLvAAK\n SubscriberPackageVersionName: Release\n SubscriberPackageVersionNumber: 2.15.0.9\n installOnScratchOrgs: true\n installDuringDeployments: true\n```\n\n### Deployment pre or post commands\n\nYou can define command lines to run before or after a deployment, with parameters:\n\n- **id**: Unique Id for the command\n- **label**: Human readable label for the command\n- **skipIfError**: If defined to \"true\", the post-command won't be run if there is a deployment failure\n- **context**: Defines the context where the command will be run. Can be **all** (default), **check-deployment-only** or **process-deployment-only**\n- **runOnlyOnceByOrg**: If set to true, the command will be run only one time per org. A record of SfdxHardisTrace__c is stored to make that possible (it needs to be existing in target org)\n\nIf the commands are not the same depending on the target org, you can define them into **config/branches/.sfdx-hardis-BRANCHNAME.yml** instead of root **config/.sfdx-hardis.yml**\n\nExample:\n\n```yaml\ncommandsPreDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to the deployment user\n command: sf data update record --sobject User --where \"Username='deploy.github@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n\ncommandsPostDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to desired username\n command: sf data update record --sobject User --where \"Username='admin-yser@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n - id: someActionToRunJustOneTime\n label: And to run only if deployment is success\n command: sf sfdmu:run ...\n skipIfError: true\n context: process-deployment-only\n runOnlyOnceByOrg: true\n```\n\n### Pull Requests Custom Behaviors\n\nIf some words are found **in the Pull Request description**, special behaviors will be applied\n\n| Word | Behavior |\n| :--- | :--- |\n| NO_DELTA | Even if delta deployments are activated, a deployment in mode **full** will be performed for this Pull Request |\n| PURGE_FLOW_VERSIONS | After deployment, inactive and obsolete Flow Versions will be deleted (equivalent to command sf hardis:org:purge:flow)<br/>**Caution: This will also purge active Flow Interviews !** |\n| DESTRUCTIVE_CHANGES_AFTER_DEPLOYMENT | If a file manifest/destructiveChanges.xml is found, it will be executed in a separate step, after the deployment of the main package |\n\n> For example, define `PURGE_FLOW_VERSIONS` and `DESTRUCTIVE_CHANGES_AFTER_DEPLOYMENT` in your Pull Request comments if you want to delete fields that are used in an active flow.\n\nNote: it is also possible to define these behaviors as ENV variables:\n\n- For all deployments (example: `PURGE_FLOW_VERSIONS=true`)\n- For a specific branch, by appending the target branch name (example: `PURGE_FLOW_VERSIONS_UAT=true`)\n\n### Deployment plan (deprecated)\n\nIf you need to deploy in multiple steps, you can define a property `deploymentPlan` in `.sfdx-hardis.yml`.\n\n- If a file `manifest/package.xml` is found, it will be placed with order 0 in the deployment plan\n\n- If a file `manifest/destructiveChanges.xml` is found, it will be executed as --postdestructivechanges\n\n- If env var `SFDX_HARDIS_DEPLOY_IGNORE_SPLIT_PACKAGES` is defined as `false` , split of package.xml will be applied\n\nExample:\n\n```yaml\ndeploymentPlan:\n packages:\n - label: Deploy Flow-Workflow\n packageXmlFile: manifest/splits/packageXmlFlowWorkflow.xml\n order: 6\n - label: Deploy SharingRules - Case\n packageXmlFile: manifest/splits/packageXmlSharingRulesCase.xml\n order: 30\n waitAfter: 30\n```\n\n### Automated fixes post deployments\n\n#### List view with scope Mine\n\nIf you defined a property **listViewsToSetToMine** in your .sfdx-hardis.yml, related ListViews will be set to Mine ( see command <https://sfdx-hardis.cloudity.com/hardis/org/fix/listviewmine/> )\n\nExample:\n\n```yaml\nlistViewsToSetToMine:\n - \"Operation__c:MyCurrentOperations\"\n - \"Operation__c:MyFinalizedOperations\"\n - \"Opportunity:Default_Opportunity_Pipeline\"\n - \"Opportunity:MyCurrentSubscriptions\"\n - \"Opportunity:MySubscriptions\"\n - \"Account:MyActivePartners\"\n```\n\nTroubleshooting: if you need to fix ListViews with mine from an alpine-linux based docker image, use this workaround in your dockerfile:\n\n```dockerfile\n# Do not use puppeteer embedded chromium\nRUN apk add --update --no-cache chromium\nENV PUPPETEER_SKIP_CHROMIUM_DOWNLOAD=\"true\"\nENV CHROMIUM_PATH=\"/usr/bin/chromium-browser\"\nENV PUPPETEER_EXECUTABLE_PATH=\"$\\{CHROMIUM_PATH}\" // remove \\ before {\n```\n\nIf you need to increase the deployment waiting time (sf project deploy start --wait arg), you can define env variable SFDX_DEPLOY_WAIT_MINUTES (default: 120)\n\nIf you need notifications to be sent using the current Pull Request and not the one just merged ([see use case](https://github.com/hardisgroupcom/sfdx-hardis/issues/637#issuecomment-2230798904)), define env variable SFDX_HARDIS_DEPLOY_BEFORE_MERGE=true\n\nIf you want to disable the calculation and display of Flow Visual Git Diff in Pull Request comments, define variable **SFDX_DISABLE_FLOW_DIFF=true**\n",
|
|
12589
12207
|
"examples": [
|
|
12590
|
-
"$ sf hardis:project:
|
|
12208
|
+
"$ sf hardis:project:deploy:smart",
|
|
12209
|
+
"$ sf hardis:project:deploy:smart --check",
|
|
12210
|
+
"$ sf hardis:project:deploy:smart --check --testlevel RunRepositoryTests",
|
|
12211
|
+
"$ sf hardis:project:deploy:smart --check --testlevel RunRepositoryTests --runtests '^(?!FLI|MyPrefix).*'",
|
|
12212
|
+
"$ sf hardis:project:deploy:smart --check --testlevel RunRepositoryTestsExceptSeeAllData",
|
|
12213
|
+
"$ sf hardis:project:deploy:smart",
|
|
12214
|
+
"$ FORCE_TARGET_BRANCH=preprod NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org nicolas.vuillamy@myclient.com.preprod",
|
|
12215
|
+
"$ SYSTEM_ACCESSTOKEN=xxxxxx SYSTEM_COLLECTIONURI=https://dev.azure.com/xxxxxxx/ SYSTEM_TEAMPROJECT=\"xxxxxxx\" BUILD_REPOSITORY_ID=xxxxx SYSTEM_PULLREQUEST_PULLREQUESTID=1418 FORCE_TARGET_BRANCH=uat NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org my.salesforce@org.com",
|
|
12216
|
+
"$ CI_SFDX_HARDIS_BITBUCKET_TOKEN=xxxxxx BITBUCKET_WORKSPACE=sfdxhardis-demo BITBUCKET_REPO_SLUG=test BITBUCKET_BUILD_NUMBER=1 BITBUCKET_BRANCH=uat BITBUCKET_PR_ID=2 FORCE_TARGET_BRANCH=uat NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org my-salesforce-org@client.com",
|
|
12217
|
+
"$ GITHUB_TOKEN=xxxx GITHUB_REPOSITORY=my-user/my-repo FORCE_TARGET_BRANCH=uat NODE_OPTIONS=--inspect-brk sf hardis:project:deploy:smart --check --websocket localhost:2702 --skipauth --target-org my-salesforce-org@client.com"
|
|
12591
12218
|
],
|
|
12592
12219
|
"flags": {
|
|
12593
12220
|
"json": {
|
|
@@ -12605,15 +12232,51 @@
|
|
|
12605
12232
|
"multiple": false,
|
|
12606
12233
|
"type": "option"
|
|
12607
12234
|
},
|
|
12608
|
-
"
|
|
12235
|
+
"check": {
|
|
12236
|
+
"char": "c",
|
|
12237
|
+
"description": "Only checks the deployment, there is no impact on target org",
|
|
12238
|
+
"name": "check",
|
|
12239
|
+
"allowNo": false,
|
|
12240
|
+
"type": "boolean"
|
|
12241
|
+
},
|
|
12242
|
+
"testlevel": {
|
|
12243
|
+
"char": "l",
|
|
12244
|
+
"description": "Level of tests to validate deployment. RunRepositoryTests auto-detect and run all repository test classes",
|
|
12245
|
+
"name": "testlevel",
|
|
12246
|
+
"hasDynamicHelp": false,
|
|
12247
|
+
"multiple": false,
|
|
12248
|
+
"options": [
|
|
12249
|
+
"NoTestRun",
|
|
12250
|
+
"RunSpecifiedTests",
|
|
12251
|
+
"RunRepositoryTests",
|
|
12252
|
+
"RunRepositoryTestsExceptSeeAllData",
|
|
12253
|
+
"RunLocalTests",
|
|
12254
|
+
"RunAllTestsInOrg"
|
|
12255
|
+
],
|
|
12256
|
+
"type": "option"
|
|
12257
|
+
},
|
|
12258
|
+
"runtests": {
|
|
12259
|
+
"char": "r",
|
|
12260
|
+
"description": "If testlevel=RunSpecifiedTests, please provide a list of classes.\nIf testlevel=RunRepositoryTests, can contain a regular expression to keep only class names matching it. If not set, will run all test classes found in the repo.",
|
|
12261
|
+
"name": "runtests",
|
|
12262
|
+
"hasDynamicHelp": false,
|
|
12263
|
+
"multiple": false,
|
|
12264
|
+
"type": "option"
|
|
12265
|
+
},
|
|
12266
|
+
"packagexml": {
|
|
12609
12267
|
"char": "p",
|
|
12610
|
-
"description": "
|
|
12611
|
-
"name": "
|
|
12612
|
-
"default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
|
|
12268
|
+
"description": "Path to package.xml containing what you want to deploy in target org",
|
|
12269
|
+
"name": "packagexml",
|
|
12613
12270
|
"hasDynamicHelp": false,
|
|
12614
12271
|
"multiple": false,
|
|
12615
12272
|
"type": "option"
|
|
12616
12273
|
},
|
|
12274
|
+
"delta": {
|
|
12275
|
+
"description": "Applies sfdx-git-delta to package.xml before other deployment processes",
|
|
12276
|
+
"name": "delta",
|
|
12277
|
+
"allowNo": false,
|
|
12278
|
+
"type": "boolean"
|
|
12279
|
+
},
|
|
12617
12280
|
"debug": {
|
|
12618
12281
|
"char": "d",
|
|
12619
12282
|
"description": "Activate debug mode (more logs)",
|
|
@@ -12652,13 +12315,13 @@
|
|
|
12652
12315
|
},
|
|
12653
12316
|
"hasDynamicHelp": true,
|
|
12654
12317
|
"hiddenAliases": [],
|
|
12655
|
-
"id": "hardis:project:
|
|
12318
|
+
"id": "hardis:project:deploy:smart",
|
|
12656
12319
|
"pluginAlias": "sfdx-hardis",
|
|
12657
12320
|
"pluginName": "sfdx-hardis",
|
|
12658
12321
|
"pluginType": "core",
|
|
12659
12322
|
"strict": true,
|
|
12660
12323
|
"enableJsonFlag": true,
|
|
12661
|
-
"title": "
|
|
12324
|
+
"title": "Smart Deploy sfdx sources to org",
|
|
12662
12325
|
"requiresProject": true,
|
|
12663
12326
|
"isESM": true,
|
|
12664
12327
|
"relativePath": [
|
|
@@ -12666,44 +12329,164 @@
|
|
|
12666
12329
|
"commands",
|
|
12667
12330
|
"hardis",
|
|
12668
12331
|
"project",
|
|
12669
|
-
"
|
|
12670
|
-
"
|
|
12332
|
+
"deploy",
|
|
12333
|
+
"smart.js"
|
|
12334
|
+
],
|
|
12335
|
+
"aliasPermutations": [
|
|
12336
|
+
"hardis:project:deploy:sources:dx",
|
|
12337
|
+
"project:hardis:deploy:sources:dx",
|
|
12338
|
+
"project:deploy:hardis:sources:dx",
|
|
12339
|
+
"project:deploy:sources:hardis:dx",
|
|
12340
|
+
"project:deploy:sources:dx:hardis",
|
|
12341
|
+
"hardis:deploy:project:sources:dx",
|
|
12342
|
+
"deploy:hardis:project:sources:dx",
|
|
12343
|
+
"deploy:project:hardis:sources:dx",
|
|
12344
|
+
"deploy:project:sources:hardis:dx",
|
|
12345
|
+
"deploy:project:sources:dx:hardis",
|
|
12346
|
+
"hardis:deploy:sources:project:dx",
|
|
12347
|
+
"deploy:hardis:sources:project:dx",
|
|
12348
|
+
"deploy:sources:hardis:project:dx",
|
|
12349
|
+
"deploy:sources:project:hardis:dx",
|
|
12350
|
+
"deploy:sources:project:dx:hardis",
|
|
12351
|
+
"hardis:deploy:sources:dx:project",
|
|
12352
|
+
"deploy:hardis:sources:dx:project",
|
|
12353
|
+
"deploy:sources:hardis:dx:project",
|
|
12354
|
+
"deploy:sources:dx:hardis:project",
|
|
12355
|
+
"deploy:sources:dx:project:hardis",
|
|
12356
|
+
"hardis:project:sources:deploy:dx",
|
|
12357
|
+
"project:hardis:sources:deploy:dx",
|
|
12358
|
+
"project:sources:hardis:deploy:dx",
|
|
12359
|
+
"project:sources:deploy:hardis:dx",
|
|
12360
|
+
"project:sources:deploy:dx:hardis",
|
|
12361
|
+
"hardis:sources:project:deploy:dx",
|
|
12362
|
+
"sources:hardis:project:deploy:dx",
|
|
12363
|
+
"sources:project:hardis:deploy:dx",
|
|
12364
|
+
"sources:project:deploy:hardis:dx",
|
|
12365
|
+
"sources:project:deploy:dx:hardis",
|
|
12366
|
+
"hardis:sources:deploy:project:dx",
|
|
12367
|
+
"sources:hardis:deploy:project:dx",
|
|
12368
|
+
"sources:deploy:hardis:project:dx",
|
|
12369
|
+
"sources:deploy:project:hardis:dx",
|
|
12370
|
+
"sources:deploy:project:dx:hardis",
|
|
12371
|
+
"hardis:sources:deploy:dx:project",
|
|
12372
|
+
"sources:hardis:deploy:dx:project",
|
|
12373
|
+
"sources:deploy:hardis:dx:project",
|
|
12374
|
+
"sources:deploy:dx:hardis:project",
|
|
12375
|
+
"sources:deploy:dx:project:hardis",
|
|
12376
|
+
"hardis:project:sources:dx:deploy",
|
|
12377
|
+
"project:hardis:sources:dx:deploy",
|
|
12378
|
+
"project:sources:hardis:dx:deploy",
|
|
12379
|
+
"project:sources:dx:hardis:deploy",
|
|
12380
|
+
"project:sources:dx:deploy:hardis",
|
|
12381
|
+
"hardis:sources:project:dx:deploy",
|
|
12382
|
+
"sources:hardis:project:dx:deploy",
|
|
12383
|
+
"sources:project:hardis:dx:deploy",
|
|
12384
|
+
"sources:project:dx:hardis:deploy",
|
|
12385
|
+
"sources:project:dx:deploy:hardis",
|
|
12386
|
+
"hardis:sources:dx:project:deploy",
|
|
12387
|
+
"sources:hardis:dx:project:deploy",
|
|
12388
|
+
"sources:dx:hardis:project:deploy",
|
|
12389
|
+
"sources:dx:project:hardis:deploy",
|
|
12390
|
+
"sources:dx:project:deploy:hardis",
|
|
12391
|
+
"hardis:sources:dx:deploy:project",
|
|
12392
|
+
"sources:hardis:dx:deploy:project",
|
|
12393
|
+
"sources:dx:hardis:deploy:project",
|
|
12394
|
+
"sources:dx:deploy:hardis:project",
|
|
12395
|
+
"sources:dx:deploy:project:hardis",
|
|
12396
|
+
"hardis:project:deploy:dx:sources",
|
|
12397
|
+
"project:hardis:deploy:dx:sources",
|
|
12398
|
+
"project:deploy:hardis:dx:sources",
|
|
12399
|
+
"project:deploy:dx:hardis:sources",
|
|
12400
|
+
"project:deploy:dx:sources:hardis",
|
|
12401
|
+
"hardis:deploy:project:dx:sources",
|
|
12402
|
+
"deploy:hardis:project:dx:sources",
|
|
12403
|
+
"deploy:project:hardis:dx:sources",
|
|
12404
|
+
"deploy:project:dx:hardis:sources",
|
|
12405
|
+
"deploy:project:dx:sources:hardis",
|
|
12406
|
+
"hardis:deploy:dx:project:sources",
|
|
12407
|
+
"deploy:hardis:dx:project:sources",
|
|
12408
|
+
"deploy:dx:hardis:project:sources",
|
|
12409
|
+
"deploy:dx:project:hardis:sources",
|
|
12410
|
+
"deploy:dx:project:sources:hardis",
|
|
12411
|
+
"hardis:deploy:dx:sources:project",
|
|
12412
|
+
"deploy:hardis:dx:sources:project",
|
|
12413
|
+
"deploy:dx:hardis:sources:project",
|
|
12414
|
+
"deploy:dx:sources:hardis:project",
|
|
12415
|
+
"deploy:dx:sources:project:hardis",
|
|
12416
|
+
"hardis:project:dx:deploy:sources",
|
|
12417
|
+
"project:hardis:dx:deploy:sources",
|
|
12418
|
+
"project:dx:hardis:deploy:sources",
|
|
12419
|
+
"project:dx:deploy:hardis:sources",
|
|
12420
|
+
"project:dx:deploy:sources:hardis",
|
|
12421
|
+
"hardis:dx:project:deploy:sources",
|
|
12422
|
+
"dx:hardis:project:deploy:sources",
|
|
12423
|
+
"dx:project:hardis:deploy:sources",
|
|
12424
|
+
"dx:project:deploy:hardis:sources",
|
|
12425
|
+
"dx:project:deploy:sources:hardis",
|
|
12426
|
+
"hardis:dx:deploy:project:sources",
|
|
12427
|
+
"dx:hardis:deploy:project:sources",
|
|
12428
|
+
"dx:deploy:hardis:project:sources",
|
|
12429
|
+
"dx:deploy:project:hardis:sources",
|
|
12430
|
+
"dx:deploy:project:sources:hardis",
|
|
12431
|
+
"hardis:dx:deploy:sources:project",
|
|
12432
|
+
"dx:hardis:deploy:sources:project",
|
|
12433
|
+
"dx:deploy:hardis:sources:project",
|
|
12434
|
+
"dx:deploy:sources:hardis:project",
|
|
12435
|
+
"dx:deploy:sources:project:hardis",
|
|
12436
|
+
"hardis:project:dx:sources:deploy",
|
|
12437
|
+
"project:hardis:dx:sources:deploy",
|
|
12438
|
+
"project:dx:hardis:sources:deploy",
|
|
12439
|
+
"project:dx:sources:hardis:deploy",
|
|
12440
|
+
"project:dx:sources:deploy:hardis",
|
|
12441
|
+
"hardis:dx:project:sources:deploy",
|
|
12442
|
+
"dx:hardis:project:sources:deploy",
|
|
12443
|
+
"dx:project:hardis:sources:deploy",
|
|
12444
|
+
"dx:project:sources:hardis:deploy",
|
|
12445
|
+
"dx:project:sources:deploy:hardis",
|
|
12446
|
+
"hardis:dx:sources:project:deploy",
|
|
12447
|
+
"dx:hardis:sources:project:deploy",
|
|
12448
|
+
"dx:sources:hardis:project:deploy",
|
|
12449
|
+
"dx:sources:project:hardis:deploy",
|
|
12450
|
+
"dx:sources:project:deploy:hardis",
|
|
12451
|
+
"hardis:dx:sources:deploy:project",
|
|
12452
|
+
"dx:hardis:sources:deploy:project",
|
|
12453
|
+
"dx:sources:hardis:deploy:project",
|
|
12454
|
+
"dx:sources:deploy:hardis:project",
|
|
12455
|
+
"dx:sources:deploy:project:hardis"
|
|
12671
12456
|
],
|
|
12672
|
-
"aliasPermutations": [],
|
|
12673
12457
|
"permutations": [
|
|
12674
|
-
"hardis:project:
|
|
12675
|
-
"project:hardis:
|
|
12676
|
-
"project:
|
|
12677
|
-
"project:
|
|
12678
|
-
"hardis:
|
|
12679
|
-
"
|
|
12680
|
-
"
|
|
12681
|
-
"
|
|
12682
|
-
"hardis:
|
|
12683
|
-
"
|
|
12684
|
-
"
|
|
12685
|
-
"
|
|
12686
|
-
"hardis:project:
|
|
12687
|
-
"project:hardis:
|
|
12688
|
-
"project:
|
|
12689
|
-
"project:
|
|
12690
|
-
"hardis:
|
|
12691
|
-
"
|
|
12692
|
-
"
|
|
12693
|
-
"
|
|
12694
|
-
"hardis:
|
|
12695
|
-
"
|
|
12696
|
-
"
|
|
12697
|
-
"
|
|
12458
|
+
"hardis:project:deploy:smart",
|
|
12459
|
+
"project:hardis:deploy:smart",
|
|
12460
|
+
"project:deploy:hardis:smart",
|
|
12461
|
+
"project:deploy:smart:hardis",
|
|
12462
|
+
"hardis:deploy:project:smart",
|
|
12463
|
+
"deploy:hardis:project:smart",
|
|
12464
|
+
"deploy:project:hardis:smart",
|
|
12465
|
+
"deploy:project:smart:hardis",
|
|
12466
|
+
"hardis:deploy:smart:project",
|
|
12467
|
+
"deploy:hardis:smart:project",
|
|
12468
|
+
"deploy:smart:hardis:project",
|
|
12469
|
+
"deploy:smart:project:hardis",
|
|
12470
|
+
"hardis:project:smart:deploy",
|
|
12471
|
+
"project:hardis:smart:deploy",
|
|
12472
|
+
"project:smart:hardis:deploy",
|
|
12473
|
+
"project:smart:deploy:hardis",
|
|
12474
|
+
"hardis:smart:project:deploy",
|
|
12475
|
+
"smart:hardis:project:deploy",
|
|
12476
|
+
"smart:project:hardis:deploy",
|
|
12477
|
+
"smart:project:deploy:hardis",
|
|
12478
|
+
"hardis:smart:deploy:project",
|
|
12479
|
+
"smart:hardis:deploy:project",
|
|
12480
|
+
"smart:deploy:hardis:project",
|
|
12481
|
+
"smart:deploy:project:hardis"
|
|
12698
12482
|
]
|
|
12699
12483
|
},
|
|
12700
|
-
"hardis:project:
|
|
12701
|
-
"aliases": [
|
|
12702
|
-
|
|
12703
|
-
"description": "\n## Command Behavior\n\n**Fixes Salesforce FlexiPages for compatibility with API Version 53.0 (Winter '22 release) by adding missing identifiers to component instances.**\n\nSalesforce introduced a change in API Version 53.0 that requires `identifier` tags within `componentInstance` and `fieldInstance` elements in FlexiPage metadata. If these identifiers are missing, deployments to orgs with API version 53.0 or higher will fail. This command automates the process of adding these missing identifiers, ensuring your FlexiPages remain deployable.\n\nKey functionalities:\n\n- **Targeted FlexiPage Processing:** Scans all .flexipage-meta.xml files within the specified root folder (defaults to current working directory).\n- **Identifier Injection:** Inserts a unique `identifier` tag (e.g., `SFDX_HARDIS_REPLACEMENT_ID`) into `componentInstance` and `fieldInstance` elements that lack one.\n\n**Important Note:** After running this command, ensure you update your `apiVersion` to `53.0` (or higher) in your `package.xml` and `sfdx-project.json` files.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **File Discovery:** Uses `glob` to find all .flexipage-meta.xml files.\n- **Content Reading:** Reads the XML content of each FlexiPage file.\n- **Regular Expression Replacement:** Employs a set of regular expressions to identify specific XML patterns (componentName.../componentName.../componentInstance, componentName.../componentName.../visibilityRule, fieldItem.../fieldItem.../fieldInstance) that are missing the `identifier` tag.\n- **Dynamic ID Generation:** For each match, it generates a unique identifier (e.g., `sfdxHardisIdX`) and injects it into the XML structure.\n- **File Writing:** If changes are made, the modified XML content is written back to the FlexiPage file using `fs.writeFile`.\n- **Logging:** Provides messages about which FlexiPages are being processed and a summary of the total number of identifiers added.\n</details>\n",
|
|
12704
|
-
"examples": [
|
|
12705
|
-
"$ sf hardis:project:fix:v53flexipages"
|
|
12484
|
+
"hardis:project:deploy:start": {
|
|
12485
|
+
"aliases": [
|
|
12486
|
+
"hardis:deploy:start"
|
|
12706
12487
|
],
|
|
12488
|
+
"args": {},
|
|
12489
|
+
"description": "sfdx-hardis wrapper for **sf project deploy start** that displays tips to solve deployment errors.\n\nNote: Use **--json** argument to have better results\n\n[](https://nicolas.vuillamy.fr/assisted-solving-of-salesforce-deployments-errors-47f3666a9ed0)\n\n[See documentation of Salesforce command](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_project_commands_unified.htm#cli_reference_project_deploy_start_unified)\n\n### Deployment pre or post commands\n\nYou can define command lines to run before or after a deployment, with parameters:\n\n- **id**: Unique Id for the command\n- **label**: Human readable label for the command\n- **skipIfError**: If defined to \"true\", the post-command won't be run if there is a deployment failure\n- **context**: Defines the context where the command will be run. Can be **all** (default), **check-deployment-only** or **process-deployment-only**\n- **runOnlyOnceByOrg**: If set to true, the command will be run only one time per org. A record of SfdxHardisTrace__c is stored to make that possible (it needs to be existing in target org)\n\nIf the commands are not the same depending on the target org, you can define them into **config/branches/.sfdx-hardis-BRANCHNAME.yml** instead of root **config/.sfdx-hardis.yml**\n\nExample:\n\n```yaml\ncommandsPreDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to the deployment user\n command: sf data update record --sobject User --where \"Username='deploy.github@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n\ncommandsPostDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to desired username\n command: sf data update record --sobject User --where \"Username='admin-yser@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n - id: someActionToRunJustOneTime\n label: And to run only if deployment is success\n command: sf sfdmu:run ...\n skipIfError: true\n context: process-deployment-only\n runOnlyOnceByOrg: true\n```\n",
|
|
12707
12490
|
"flags": {
|
|
12708
12491
|
"json": {
|
|
12709
12492
|
"description": "Format output as json.",
|
|
@@ -12720,45 +12503,187 @@
|
|
|
12720
12503
|
"multiple": false,
|
|
12721
12504
|
"type": "option"
|
|
12722
12505
|
},
|
|
12723
|
-
"
|
|
12724
|
-
"char": "
|
|
12725
|
-
"description": "
|
|
12726
|
-
"name": "
|
|
12727
|
-
"default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
|
|
12506
|
+
"api-version": {
|
|
12507
|
+
"char": "a",
|
|
12508
|
+
"description": "api-version",
|
|
12509
|
+
"name": "api-version",
|
|
12728
12510
|
"hasDynamicHelp": false,
|
|
12729
12511
|
"multiple": false,
|
|
12730
12512
|
"type": "option"
|
|
12731
12513
|
},
|
|
12732
|
-
"
|
|
12514
|
+
"async": {
|
|
12515
|
+
"description": "async",
|
|
12516
|
+
"exclusive": [
|
|
12517
|
+
"wait"
|
|
12518
|
+
],
|
|
12519
|
+
"name": "async",
|
|
12520
|
+
"allowNo": false,
|
|
12521
|
+
"type": "boolean"
|
|
12522
|
+
},
|
|
12523
|
+
"dry-run": {
|
|
12524
|
+
"description": "dry-run",
|
|
12525
|
+
"name": "dry-run",
|
|
12526
|
+
"allowNo": false,
|
|
12527
|
+
"type": "boolean"
|
|
12528
|
+
},
|
|
12529
|
+
"ignore-conflicts": {
|
|
12530
|
+
"char": "c",
|
|
12531
|
+
"description": "ignore-conflicts",
|
|
12532
|
+
"name": "ignore-conflicts",
|
|
12533
|
+
"allowNo": false,
|
|
12534
|
+
"type": "boolean"
|
|
12535
|
+
},
|
|
12536
|
+
"ignore-errors": {
|
|
12537
|
+
"char": "r",
|
|
12538
|
+
"description": "ignore-errors",
|
|
12539
|
+
"name": "ignore-errors",
|
|
12540
|
+
"allowNo": false,
|
|
12541
|
+
"type": "boolean"
|
|
12542
|
+
},
|
|
12543
|
+
"ignore-warnings": {
|
|
12544
|
+
"char": "g",
|
|
12545
|
+
"description": "ignore-warnings",
|
|
12546
|
+
"name": "ignore-warnings",
|
|
12547
|
+
"allowNo": false,
|
|
12548
|
+
"type": "boolean"
|
|
12549
|
+
},
|
|
12550
|
+
"manifest": {
|
|
12551
|
+
"char": "x",
|
|
12552
|
+
"description": "manifest",
|
|
12553
|
+
"name": "manifest",
|
|
12554
|
+
"hasDynamicHelp": false,
|
|
12555
|
+
"multiple": false,
|
|
12556
|
+
"type": "option"
|
|
12557
|
+
},
|
|
12558
|
+
"metadata": {
|
|
12559
|
+
"char": "m",
|
|
12560
|
+
"description": "metadata",
|
|
12561
|
+
"name": "metadata",
|
|
12562
|
+
"hasDynamicHelp": false,
|
|
12563
|
+
"multiple": true,
|
|
12564
|
+
"type": "option"
|
|
12565
|
+
},
|
|
12566
|
+
"metadata-dir": {
|
|
12567
|
+
"description": "metadata-dir",
|
|
12568
|
+
"name": "metadata-dir",
|
|
12569
|
+
"hasDynamicHelp": false,
|
|
12570
|
+
"multiple": false,
|
|
12571
|
+
"type": "option"
|
|
12572
|
+
},
|
|
12573
|
+
"single-package": {
|
|
12574
|
+
"dependsOn": [
|
|
12575
|
+
"metadata-dir"
|
|
12576
|
+
],
|
|
12577
|
+
"description": "single-package",
|
|
12578
|
+
"name": "single-package",
|
|
12579
|
+
"allowNo": false,
|
|
12580
|
+
"type": "boolean"
|
|
12581
|
+
},
|
|
12582
|
+
"source-dir": {
|
|
12733
12583
|
"char": "d",
|
|
12734
|
-
"description": "
|
|
12735
|
-
"name": "
|
|
12584
|
+
"description": "source-dir",
|
|
12585
|
+
"name": "source-dir",
|
|
12586
|
+
"hasDynamicHelp": false,
|
|
12587
|
+
"multiple": true,
|
|
12588
|
+
"type": "option"
|
|
12589
|
+
},
|
|
12590
|
+
"target-org": {
|
|
12591
|
+
"char": "o",
|
|
12592
|
+
"name": "target-org",
|
|
12593
|
+
"noCacheDefault": true,
|
|
12594
|
+
"required": true,
|
|
12595
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
12596
|
+
"hasDynamicHelp": true,
|
|
12597
|
+
"multiple": false,
|
|
12598
|
+
"type": "option"
|
|
12599
|
+
},
|
|
12600
|
+
"tests": {
|
|
12601
|
+
"description": "tests",
|
|
12602
|
+
"name": "tests",
|
|
12603
|
+
"hasDynamicHelp": false,
|
|
12604
|
+
"multiple": false,
|
|
12605
|
+
"type": "option"
|
|
12606
|
+
},
|
|
12607
|
+
"test-level": {
|
|
12608
|
+
"description": "test-level",
|
|
12609
|
+
"name": "test-level",
|
|
12610
|
+
"hasDynamicHelp": false,
|
|
12611
|
+
"multiple": false,
|
|
12612
|
+
"type": "option"
|
|
12613
|
+
},
|
|
12614
|
+
"wait": {
|
|
12615
|
+
"char": "w",
|
|
12616
|
+
"description": "wait",
|
|
12617
|
+
"exclusive": [
|
|
12618
|
+
"async"
|
|
12619
|
+
],
|
|
12620
|
+
"name": "wait",
|
|
12621
|
+
"default": 33,
|
|
12622
|
+
"hasDynamicHelp": false,
|
|
12623
|
+
"multiple": false,
|
|
12624
|
+
"type": "option"
|
|
12625
|
+
},
|
|
12626
|
+
"purge-on-delete": {
|
|
12627
|
+
"description": "purge-on-delete",
|
|
12628
|
+
"name": "purge-on-delete",
|
|
12736
12629
|
"allowNo": false,
|
|
12737
12630
|
"type": "boolean"
|
|
12738
12631
|
},
|
|
12739
|
-
"
|
|
12740
|
-
"
|
|
12741
|
-
|
|
12632
|
+
"pre-destructive-changes": {
|
|
12633
|
+
"dependsOn": [
|
|
12634
|
+
"manifest"
|
|
12635
|
+
],
|
|
12636
|
+
"description": "pre-destructive-changes",
|
|
12637
|
+
"name": "pre-destructive-changes",
|
|
12742
12638
|
"hasDynamicHelp": false,
|
|
12743
12639
|
"multiple": false,
|
|
12744
12640
|
"type": "option"
|
|
12745
12641
|
},
|
|
12746
|
-
"
|
|
12747
|
-
"
|
|
12748
|
-
|
|
12642
|
+
"post-destructive-changes": {
|
|
12643
|
+
"dependsOn": [
|
|
12644
|
+
"manifest"
|
|
12645
|
+
],
|
|
12646
|
+
"description": "post-destructive-changes",
|
|
12647
|
+
"name": "post-destructive-changes",
|
|
12648
|
+
"hasDynamicHelp": false,
|
|
12649
|
+
"multiple": false,
|
|
12650
|
+
"type": "option"
|
|
12651
|
+
},
|
|
12652
|
+
"coverage-formatters": {
|
|
12653
|
+
"description": "coverage-formatters",
|
|
12654
|
+
"name": "coverage-formatters",
|
|
12655
|
+
"hasDynamicHelp": false,
|
|
12656
|
+
"multiple": false,
|
|
12657
|
+
"type": "option"
|
|
12658
|
+
},
|
|
12659
|
+
"junit": {
|
|
12660
|
+
"description": "junit",
|
|
12661
|
+
"name": "junit",
|
|
12662
|
+
"allowNo": false,
|
|
12663
|
+
"type": "boolean"
|
|
12664
|
+
},
|
|
12665
|
+
"results-dir": {
|
|
12666
|
+
"description": "results-dir",
|
|
12667
|
+
"name": "results-dir",
|
|
12668
|
+
"hasDynamicHelp": false,
|
|
12669
|
+
"multiple": false,
|
|
12670
|
+
"type": "option"
|
|
12671
|
+
},
|
|
12672
|
+
"debug": {
|
|
12673
|
+
"description": "debug",
|
|
12674
|
+
"name": "debug",
|
|
12749
12675
|
"allowNo": false,
|
|
12750
12676
|
"type": "boolean"
|
|
12751
12677
|
}
|
|
12752
12678
|
},
|
|
12753
|
-
"hasDynamicHelp":
|
|
12679
|
+
"hasDynamicHelp": true,
|
|
12754
12680
|
"hiddenAliases": [],
|
|
12755
|
-
"id": "hardis:project:
|
|
12681
|
+
"id": "hardis:project:deploy:start",
|
|
12756
12682
|
"pluginAlias": "sfdx-hardis",
|
|
12757
12683
|
"pluginName": "sfdx-hardis",
|
|
12758
12684
|
"pluginType": "core",
|
|
12759
12685
|
"strict": true,
|
|
12760
12686
|
"enableJsonFlag": true,
|
|
12761
|
-
"title": "Fix flexipages for v53",
|
|
12762
12687
|
"requiresProject": true,
|
|
12763
12688
|
"isESM": true,
|
|
12764
12689
|
"relativePath": [
|
|
@@ -12766,51 +12691,50 @@
|
|
|
12766
12691
|
"commands",
|
|
12767
12692
|
"hardis",
|
|
12768
12693
|
"project",
|
|
12769
|
-
"
|
|
12770
|
-
"
|
|
12694
|
+
"deploy",
|
|
12695
|
+
"start.js"
|
|
12696
|
+
],
|
|
12697
|
+
"aliasPermutations": [
|
|
12698
|
+
"hardis:deploy:start",
|
|
12699
|
+
"deploy:hardis:start",
|
|
12700
|
+
"deploy:start:hardis",
|
|
12701
|
+
"hardis:start:deploy",
|
|
12702
|
+
"start:hardis:deploy",
|
|
12703
|
+
"start:deploy:hardis"
|
|
12771
12704
|
],
|
|
12772
|
-
"aliasPermutations": [],
|
|
12773
12705
|
"permutations": [
|
|
12774
|
-
"hardis:project:
|
|
12775
|
-
"project:hardis:
|
|
12776
|
-
"project:
|
|
12777
|
-
"project:
|
|
12778
|
-
"hardis:
|
|
12779
|
-
"
|
|
12780
|
-
"
|
|
12781
|
-
"
|
|
12782
|
-
"hardis:
|
|
12783
|
-
"
|
|
12784
|
-
"
|
|
12785
|
-
"
|
|
12786
|
-
"hardis:project:
|
|
12787
|
-
"project:hardis:
|
|
12788
|
-
"project:
|
|
12789
|
-
"project:
|
|
12790
|
-
"hardis:
|
|
12791
|
-
"
|
|
12792
|
-
"
|
|
12793
|
-
"
|
|
12794
|
-
"hardis:
|
|
12795
|
-
"
|
|
12796
|
-
"
|
|
12797
|
-
"
|
|
12706
|
+
"hardis:project:deploy:start",
|
|
12707
|
+
"project:hardis:deploy:start",
|
|
12708
|
+
"project:deploy:hardis:start",
|
|
12709
|
+
"project:deploy:start:hardis",
|
|
12710
|
+
"hardis:deploy:project:start",
|
|
12711
|
+
"deploy:hardis:project:start",
|
|
12712
|
+
"deploy:project:hardis:start",
|
|
12713
|
+
"deploy:project:start:hardis",
|
|
12714
|
+
"hardis:deploy:start:project",
|
|
12715
|
+
"deploy:hardis:start:project",
|
|
12716
|
+
"deploy:start:hardis:project",
|
|
12717
|
+
"deploy:start:project:hardis",
|
|
12718
|
+
"hardis:project:start:deploy",
|
|
12719
|
+
"project:hardis:start:deploy",
|
|
12720
|
+
"project:start:hardis:deploy",
|
|
12721
|
+
"project:start:deploy:hardis",
|
|
12722
|
+
"hardis:start:project:deploy",
|
|
12723
|
+
"start:hardis:project:deploy",
|
|
12724
|
+
"start:project:hardis:deploy",
|
|
12725
|
+
"start:project:deploy:hardis",
|
|
12726
|
+
"hardis:start:deploy:project",
|
|
12727
|
+
"start:hardis:deploy:project",
|
|
12728
|
+
"start:deploy:hardis:project",
|
|
12729
|
+
"start:deploy:project:hardis"
|
|
12798
12730
|
]
|
|
12799
12731
|
},
|
|
12800
|
-
"hardis:project:
|
|
12801
|
-
"aliases": [
|
|
12802
|
-
|
|
12803
|
-
"description": "\n## Command Behavior\n\n**Generates custom permissions and permission sets to bypass specified Salesforce automations (Flows, Triggers, and Validation Rules) for specific sObjects.**\n\nThis command provides a controlled mechanism to temporarily or permanently disable automations for certain sObjects, which is invaluable for:\n\n- **Data Loading:** Bypassing validation rules or triggers during large data imports.\n- **Troubleshooting:** Isolating automation issues by temporarily disabling them.\n- **Development:** Allowing developers to work on specific sObjects without triggering complex automations.\n\nKey functionalities:\n\n- **sObject Selection:** You can specify a comma-separated list of sObjects to bypass (e.g., `Account,Contact`). If omitted, an interactive prompt will allow you to select from available sObjects.\n- **Automation Type Selection:** Choose which types of automations to bypass: `Flow`, `Trigger`, or `VR` (Validation Rules). If omitted, an interactive prompt will guide your selection.\n- **Automatic Bypass Application:** Optionally, the command can automatically inject bypass logic into Validation Rules and Triggers. This involves modifying the Apex code for Triggers and the XML for Validation Rules.\n- **Metadata Source:** You can choose to retrieve the metadata elements (Validation Rules, Triggers) from the org (`--metadata-source org`) or use local files (`--metadata-source local`). Retrieving from the org is recommended for accuracy.\n- **Custom Permission and Permission Set Generation:** For each selected sObject and automation type, it generates:\n - A **Custom Permission** (e.g., `BypassAccountFlows`) that acts as the bypass switch.\n - A **Permission Set** (e.g., `BypassAccountFlows`) that grants the generated Custom Permission.\n- **Credits Inclusion:** By default, generated XML files include a comment indicating they were generated by sfdx-hardis. This can be skipped using `--skip-credits`.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Queries (Tooling API):** It queries `EntityDefinition` to list customizable sObjects and `ValidationRule` and `ApexTrigger` to find existing automations.\n- **Interactive Prompts:** Uses the `prompts` library to guide the user through selecting sObjects, automation types, and bypass application options.\n- **XML Generation:** Dynamically generates XML content for Custom Permissions and Permission Sets, including descriptions and labels that clearly indicate their purpose.\n- **File System Operations:** Uses `fs-extra` to create directories and write the generated Custom Permission and Permission Set XML files.\n- **Metadata Retrieval (for Bypass Application):** If `apply-to-vrs` or `apply-to-triggers` is used and `metadata-source` is `org`, it retrieves the relevant Validation Rule or Apex Trigger metadata from the org using `sf project retrieve start`.\n- **XML/Apex Code Modification:**\n - For Validation Rules, it modifies the `errorConditionFormula` in the XML to include a check for the bypass Custom Permission.\n - For Apex Triggers, it injects an `if` statement at the beginning of the trigger body to check for the bypass Custom Permission.\n- **`parseXmlFile` and `writeXmlFile`:** Used for reading and writing XML metadata files.\n- **`execCommand`:** Used for executing Salesforce CLI commands, particularly for metadata retrieval.\n- **Error Handling:** Includes checks for invalid sObject or automation selections and provides informative error messages.\n</details>\n",
|
|
12804
|
-
"examples": [
|
|
12805
|
-
"$ sf hardis:project:generate:bypass",
|
|
12806
|
-
"$ sf hardis:project:generate:bypass --sObjects Account,Contact,Opportunity",
|
|
12807
|
-
"$ sf hardis:project:generate:bypass --automations Flow,Trigger,VR",
|
|
12808
|
-
"$ sf hardis:project:generate:bypass --sObjects Account,Opportunity --automations Flow,Trigger",
|
|
12809
|
-
"$ sf hardis:project:generate:bypass --skipCredits",
|
|
12810
|
-
"$ sf hardis:project:generate:bypass --apply-to-vrs",
|
|
12811
|
-
"$ sf hardis:project:generate:bypass --apply-to-triggers",
|
|
12812
|
-
"$ sf hardis:project:generate:bypass --metadata-source org"
|
|
12732
|
+
"hardis:project:deploy:validate": {
|
|
12733
|
+
"aliases": [
|
|
12734
|
+
"hardis:deploy:validate"
|
|
12813
12735
|
],
|
|
12736
|
+
"args": {},
|
|
12737
|
+
"description": "sfdx-hardis wrapper for **sf project deploy validate** that displays tips to solve deployment errors.\n\nNote: Use **--json** argument to have better results\n\n[](https://nicolas.vuillamy.fr/assisted-solving-of-salesforce-deployments-errors-47f3666a9ed0)\n\n[See documentation of Salesforce command](https://developer.salesforce.com/docs/atlas.en-us.sfdx_cli_reference.meta/sfdx_cli_reference/cli_reference_project_commands_unified.htm#cli_reference_project_deploy_validate_unified)\n\n### Deployment pre or post commands\n\nYou can define command lines to run before or after a deployment, with parameters:\n\n- **id**: Unique Id for the command\n- **label**: Human readable label for the command\n- **skipIfError**: If defined to \"true\", the post-command won't be run if there is a deployment failure\n- **context**: Defines the context where the command will be run. Can be **all** (default), **check-deployment-only** or **process-deployment-only**\n- **runOnlyOnceByOrg**: If set to true, the command will be run only one time per org. A record of SfdxHardisTrace__c is stored to make that possible (it needs to be existing in target org)\n\nIf the commands are not the same depending on the target org, you can define them into **config/branches/.sfdx-hardis-BRANCHNAME.yml** instead of root **config/.sfdx-hardis.yml**\n\nExample:\n\n```yaml\ncommandsPreDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to the deployment user\n command: sf data update record --sobject User --where \"Username='deploy.github@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n\ncommandsPostDeploy:\n - id: knowledgeUnassign\n label: Remove KnowledgeUser right to the user who has it\n command: sf data update record --sobject User --where \"UserPermissionsKnowledgeUser='true'\" --values \"UserPermissionsKnowledgeUser='false'\" --json\n - id: knowledgeAssign\n label: Assign Knowledge user to desired username\n command: sf data update record --sobject User --where \"Username='admin-yser@myclient.com'\" --values \"UserPermissionsKnowledgeUser='true'\" --json\n - id: someActionToRunJustOneTime\n label: And to run only if deployment is success\n command: sf sfdmu:run ...\n skipIfError: true\n context: process-deployment-only\n runOnlyOnceByOrg: true\n```\n",
|
|
12814
12738
|
"flags": {
|
|
12815
12739
|
"json": {
|
|
12816
12740
|
"description": "Format output as json.",
|
|
@@ -12827,13 +12751,92 @@
|
|
|
12827
12751
|
"multiple": false,
|
|
12828
12752
|
"type": "option"
|
|
12829
12753
|
},
|
|
12830
|
-
"
|
|
12831
|
-
"
|
|
12832
|
-
|
|
12833
|
-
|
|
12754
|
+
"api-version": {
|
|
12755
|
+
"char": "a",
|
|
12756
|
+
"description": "api-version",
|
|
12757
|
+
"name": "api-version",
|
|
12758
|
+
"hasDynamicHelp": false,
|
|
12759
|
+
"multiple": false,
|
|
12760
|
+
"type": "option"
|
|
12761
|
+
},
|
|
12762
|
+
"async": {
|
|
12763
|
+
"description": "async",
|
|
12764
|
+
"exclusive": [
|
|
12765
|
+
"wait"
|
|
12834
12766
|
],
|
|
12767
|
+
"name": "async",
|
|
12768
|
+
"allowNo": false,
|
|
12769
|
+
"type": "boolean"
|
|
12770
|
+
},
|
|
12771
|
+
"dry-run": {
|
|
12772
|
+
"description": "dry-run",
|
|
12773
|
+
"name": "dry-run",
|
|
12774
|
+
"allowNo": false,
|
|
12775
|
+
"type": "boolean"
|
|
12776
|
+
},
|
|
12777
|
+
"ignore-conflicts": {
|
|
12778
|
+
"char": "c",
|
|
12779
|
+
"description": "ignore-conflicts",
|
|
12780
|
+
"name": "ignore-conflicts",
|
|
12781
|
+
"allowNo": false,
|
|
12782
|
+
"type": "boolean"
|
|
12783
|
+
},
|
|
12784
|
+
"ignore-errors": {
|
|
12785
|
+
"char": "r",
|
|
12786
|
+
"description": "ignore-errors",
|
|
12787
|
+
"name": "ignore-errors",
|
|
12788
|
+
"allowNo": false,
|
|
12789
|
+
"type": "boolean"
|
|
12790
|
+
},
|
|
12791
|
+
"ignore-warnings": {
|
|
12792
|
+
"char": "g",
|
|
12793
|
+
"description": "ignore-warnings",
|
|
12794
|
+
"name": "ignore-warnings",
|
|
12795
|
+
"allowNo": false,
|
|
12796
|
+
"type": "boolean"
|
|
12797
|
+
},
|
|
12798
|
+
"manifest": {
|
|
12799
|
+
"char": "x",
|
|
12800
|
+
"description": "manifest",
|
|
12801
|
+
"name": "manifest",
|
|
12802
|
+
"hasDynamicHelp": false,
|
|
12803
|
+
"multiple": false,
|
|
12804
|
+
"type": "option"
|
|
12805
|
+
},
|
|
12806
|
+
"metadata": {
|
|
12807
|
+
"char": "m",
|
|
12808
|
+
"description": "metadata",
|
|
12809
|
+
"name": "metadata",
|
|
12810
|
+
"hasDynamicHelp": false,
|
|
12811
|
+
"multiple": true,
|
|
12812
|
+
"type": "option"
|
|
12813
|
+
},
|
|
12814
|
+
"metadata-dir": {
|
|
12815
|
+
"description": "metadata-dir",
|
|
12816
|
+
"name": "metadata-dir",
|
|
12817
|
+
"hasDynamicHelp": false,
|
|
12818
|
+
"multiple": false,
|
|
12819
|
+
"type": "option"
|
|
12820
|
+
},
|
|
12821
|
+
"single-package": {
|
|
12822
|
+
"dependsOn": [
|
|
12823
|
+
"metadata-dir"
|
|
12824
|
+
],
|
|
12825
|
+
"description": "single-package",
|
|
12826
|
+
"name": "single-package",
|
|
12827
|
+
"allowNo": false,
|
|
12828
|
+
"type": "boolean"
|
|
12829
|
+
},
|
|
12830
|
+
"source-dir": {
|
|
12831
|
+
"char": "d",
|
|
12832
|
+
"description": "source-dir",
|
|
12833
|
+
"name": "source-dir",
|
|
12834
|
+
"hasDynamicHelp": false,
|
|
12835
|
+
"multiple": true,
|
|
12836
|
+
"type": "option"
|
|
12837
|
+
},
|
|
12838
|
+
"target-org": {
|
|
12835
12839
|
"char": "o",
|
|
12836
|
-
"deprecateAliases": true,
|
|
12837
12840
|
"name": "target-org",
|
|
12838
12841
|
"noCacheDefault": true,
|
|
12839
12842
|
"required": true,
|
|
@@ -12842,136 +12845,144 @@
|
|
|
12842
12845
|
"multiple": false,
|
|
12843
12846
|
"type": "option"
|
|
12844
12847
|
},
|
|
12845
|
-
"
|
|
12846
|
-
"
|
|
12847
|
-
|
|
12848
|
-
],
|
|
12849
|
-
"char": "s",
|
|
12850
|
-
"description": "Comma-separated list of sObjects to bypass (e.g., Account,Contact,Opportunity). If omitted, you will be prompted to select.",
|
|
12851
|
-
"name": "objects",
|
|
12852
|
-
"required": false,
|
|
12848
|
+
"tests": {
|
|
12849
|
+
"description": "tests",
|
|
12850
|
+
"name": "tests",
|
|
12853
12851
|
"hasDynamicHelp": false,
|
|
12854
12852
|
"multiple": false,
|
|
12855
12853
|
"type": "option"
|
|
12856
12854
|
},
|
|
12857
|
-
"
|
|
12858
|
-
"
|
|
12859
|
-
"
|
|
12860
|
-
"name": "automations",
|
|
12861
|
-
"required": false,
|
|
12855
|
+
"test-level": {
|
|
12856
|
+
"description": "test-level",
|
|
12857
|
+
"name": "test-level",
|
|
12862
12858
|
"hasDynamicHelp": false,
|
|
12863
12859
|
"multiple": false,
|
|
12864
12860
|
"type": "option"
|
|
12865
12861
|
},
|
|
12866
|
-
"
|
|
12867
|
-
"
|
|
12868
|
-
"
|
|
12862
|
+
"wait": {
|
|
12863
|
+
"char": "w",
|
|
12864
|
+
"description": "wait",
|
|
12865
|
+
"exclusive": [
|
|
12866
|
+
"async"
|
|
12867
|
+
],
|
|
12868
|
+
"name": "wait",
|
|
12869
|
+
"default": 33,
|
|
12869
12870
|
"hasDynamicHelp": false,
|
|
12870
12871
|
"multiple": false,
|
|
12871
12872
|
"type": "option"
|
|
12872
12873
|
},
|
|
12873
|
-
"
|
|
12874
|
-
"description": "
|
|
12875
|
-
"name": "
|
|
12874
|
+
"purge-on-delete": {
|
|
12875
|
+
"description": "purge-on-delete",
|
|
12876
|
+
"name": "purge-on-delete",
|
|
12876
12877
|
"allowNo": false,
|
|
12877
12878
|
"type": "boolean"
|
|
12878
12879
|
},
|
|
12879
|
-
"
|
|
12880
|
-
"
|
|
12881
|
-
"
|
|
12880
|
+
"pre-destructive-changes": {
|
|
12881
|
+
"dependsOn": [
|
|
12882
|
+
"manifest"
|
|
12882
12883
|
],
|
|
12883
|
-
"
|
|
12884
|
-
"
|
|
12885
|
-
"
|
|
12886
|
-
"
|
|
12887
|
-
"
|
|
12888
|
-
"type": "boolean"
|
|
12884
|
+
"description": "pre-destructive-changes",
|
|
12885
|
+
"name": "pre-destructive-changes",
|
|
12886
|
+
"hasDynamicHelp": false,
|
|
12887
|
+
"multiple": false,
|
|
12888
|
+
"type": "option"
|
|
12889
12889
|
},
|
|
12890
|
-
"
|
|
12891
|
-
"
|
|
12892
|
-
"
|
|
12890
|
+
"post-destructive-changes": {
|
|
12891
|
+
"dependsOn": [
|
|
12892
|
+
"manifest"
|
|
12893
12893
|
],
|
|
12894
|
-
"description": "
|
|
12895
|
-
"name": "
|
|
12896
|
-
"
|
|
12897
|
-
"
|
|
12898
|
-
"type": "
|
|
12894
|
+
"description": "post-destructive-changes",
|
|
12895
|
+
"name": "post-destructive-changes",
|
|
12896
|
+
"hasDynamicHelp": false,
|
|
12897
|
+
"multiple": false,
|
|
12898
|
+
"type": "option"
|
|
12899
12899
|
},
|
|
12900
|
-
"
|
|
12901
|
-
"
|
|
12902
|
-
|
|
12903
|
-
|
|
12904
|
-
"
|
|
12905
|
-
"
|
|
12906
|
-
|
|
12900
|
+
"coverage-formatters": {
|
|
12901
|
+
"description": "coverage-formatters",
|
|
12902
|
+
"name": "coverage-formatters",
|
|
12903
|
+
"hasDynamicHelp": false,
|
|
12904
|
+
"multiple": false,
|
|
12905
|
+
"type": "option"
|
|
12906
|
+
},
|
|
12907
|
+
"junit": {
|
|
12908
|
+
"description": "junit",
|
|
12909
|
+
"name": "junit",
|
|
12907
12910
|
"allowNo": false,
|
|
12908
12911
|
"type": "boolean"
|
|
12909
12912
|
},
|
|
12910
|
-
"
|
|
12911
|
-
"
|
|
12912
|
-
|
|
12913
|
-
],
|
|
12914
|
-
"char": "r",
|
|
12915
|
-
"description": "Source of metadata elements to apply bypass to. Options: 'org' or 'local'.",
|
|
12916
|
-
"name": "metadata-source",
|
|
12917
|
-
"required": false,
|
|
12913
|
+
"results-dir": {
|
|
12914
|
+
"description": "results-dir",
|
|
12915
|
+
"name": "results-dir",
|
|
12918
12916
|
"hasDynamicHelp": false,
|
|
12919
12917
|
"multiple": false,
|
|
12920
12918
|
"type": "option"
|
|
12919
|
+
},
|
|
12920
|
+
"debug": {
|
|
12921
|
+
"description": "debug",
|
|
12922
|
+
"name": "debug",
|
|
12923
|
+
"allowNo": false,
|
|
12924
|
+
"type": "boolean"
|
|
12921
12925
|
}
|
|
12922
12926
|
},
|
|
12923
12927
|
"hasDynamicHelp": true,
|
|
12924
12928
|
"hiddenAliases": [],
|
|
12925
|
-
"id": "hardis:project:
|
|
12929
|
+
"id": "hardis:project:deploy:validate",
|
|
12926
12930
|
"pluginAlias": "sfdx-hardis",
|
|
12927
12931
|
"pluginName": "sfdx-hardis",
|
|
12928
12932
|
"pluginType": "core",
|
|
12929
12933
|
"strict": true,
|
|
12930
12934
|
"enableJsonFlag": true,
|
|
12935
|
+
"requiresProject": true,
|
|
12931
12936
|
"isESM": true,
|
|
12932
12937
|
"relativePath": [
|
|
12933
12938
|
"lib",
|
|
12934
12939
|
"commands",
|
|
12935
12940
|
"hardis",
|
|
12936
12941
|
"project",
|
|
12937
|
-
"
|
|
12938
|
-
"
|
|
12942
|
+
"deploy",
|
|
12943
|
+
"validate.js"
|
|
12944
|
+
],
|
|
12945
|
+
"aliasPermutations": [
|
|
12946
|
+
"hardis:deploy:validate",
|
|
12947
|
+
"deploy:hardis:validate",
|
|
12948
|
+
"deploy:validate:hardis",
|
|
12949
|
+
"hardis:validate:deploy",
|
|
12950
|
+
"validate:hardis:deploy",
|
|
12951
|
+
"validate:deploy:hardis"
|
|
12939
12952
|
],
|
|
12940
|
-
"aliasPermutations": [],
|
|
12941
12953
|
"permutations": [
|
|
12942
|
-
"hardis:project:
|
|
12943
|
-
"project:hardis:
|
|
12944
|
-
"project:
|
|
12945
|
-
"project:
|
|
12946
|
-
"hardis:
|
|
12947
|
-
"
|
|
12948
|
-
"
|
|
12949
|
-
"
|
|
12950
|
-
"hardis:
|
|
12951
|
-
"
|
|
12952
|
-
"
|
|
12953
|
-
"
|
|
12954
|
-
"hardis:project:
|
|
12955
|
-
"project:hardis:
|
|
12956
|
-
"project:
|
|
12957
|
-
"project:
|
|
12958
|
-
"hardis:
|
|
12959
|
-
"
|
|
12960
|
-
"
|
|
12961
|
-
"
|
|
12962
|
-
"hardis:
|
|
12963
|
-
"
|
|
12964
|
-
"
|
|
12965
|
-
"
|
|
12954
|
+
"hardis:project:deploy:validate",
|
|
12955
|
+
"project:hardis:deploy:validate",
|
|
12956
|
+
"project:deploy:hardis:validate",
|
|
12957
|
+
"project:deploy:validate:hardis",
|
|
12958
|
+
"hardis:deploy:project:validate",
|
|
12959
|
+
"deploy:hardis:project:validate",
|
|
12960
|
+
"deploy:project:hardis:validate",
|
|
12961
|
+
"deploy:project:validate:hardis",
|
|
12962
|
+
"hardis:deploy:validate:project",
|
|
12963
|
+
"deploy:hardis:validate:project",
|
|
12964
|
+
"deploy:validate:hardis:project",
|
|
12965
|
+
"deploy:validate:project:hardis",
|
|
12966
|
+
"hardis:project:validate:deploy",
|
|
12967
|
+
"project:hardis:validate:deploy",
|
|
12968
|
+
"project:validate:hardis:deploy",
|
|
12969
|
+
"project:validate:deploy:hardis",
|
|
12970
|
+
"hardis:validate:project:deploy",
|
|
12971
|
+
"validate:hardis:project:deploy",
|
|
12972
|
+
"validate:project:hardis:deploy",
|
|
12973
|
+
"validate:project:deploy:hardis",
|
|
12974
|
+
"hardis:validate:deploy:project",
|
|
12975
|
+
"validate:hardis:deploy:project",
|
|
12976
|
+
"validate:deploy:hardis:project",
|
|
12977
|
+
"validate:deploy:project:hardis"
|
|
12966
12978
|
]
|
|
12967
12979
|
},
|
|
12968
|
-
"hardis:project:
|
|
12980
|
+
"hardis:project:fix:profiletabs": {
|
|
12969
12981
|
"aliases": [],
|
|
12970
12982
|
"args": {},
|
|
12971
|
-
"description": "
|
|
12983
|
+
"description": "\n## Command Behavior\n\n**Interactively updates tab visibility settings in Salesforce profiles, addressing a common issue where tab visibilities are not correctly retrieved by `sf project retrieve start`.**\n\nThis command provides a user-friendly interface to manage tab settings within your profile XML files, ensuring that your local project accurately reflects the intended tab configurations in your Salesforce org.\n\nKey functionalities:\n\n- **Interactive Tab Selection:** Displays a multi-select menu of all available tabs in your org, allowing you to choose which tabs to update.\n- **Visibility Control:** Lets you set the visibility for the selected tabs to either `DefaultOn` (Visible) or `Hidden`.\n- **Profile Selection:** Presents a multi-select menu of all .profile-meta.xml files in your project, allowing you to apply the tab visibility changes to specific profiles.\n- **XML Updates:** Modifies the <tabVisibilities> section of the selected profile XML files to reflect the chosen tab settings. If a tab visibility setting already exists for a selected tab, it will be updated; otherwise, a new one will be added.\n- **Sorted Output:** The <tabVisibilities> in the updated profile XML files are sorted alphabetically for consistency and readability.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **SOQL Queries (Tooling API):** It queries the `TabDefinition` object using `soqlQueryTooling` to retrieve a list of all available tabs in the target org.\n- **File Discovery:** Uses `glob` to find all .profile-meta.xml files within the specified project path.\n- **Interactive Prompts:** Leverages the `prompts` library to create interactive menus for selecting tabs, visibility settings, and profiles.\n- **XML Parsing and Manipulation:** Uses `parseXmlFile` to read the content of profile XML files and `writeXmlFile` to write the modified content back. It manipulates the `tabVisibilities` array within the parsed XML to add or update tab settings.\n- **Array Sorting:** Employs the `sort-array` library to sort the `tabVisibilities` alphabetically by tab name.\n- **Logging:** Provides feedback to the user about which profiles have been updated and a summary of the changes.\n</details>\n",
|
|
12972
12984
|
"examples": [
|
|
12973
|
-
"$ sf hardis:project:
|
|
12974
|
-
"$ sf hardis:project:generate:flow-git-diff --flow \"force-app/main/default/flows/Opportunity_AfterUpdate_Cloudity.flow-meta.xml\" --commit-before 8bd290e914c9dbdde859dad7e3c399776160d704 --commit-after e0835251bef6e400fb91e42f3a31022f37840f65"
|
|
12985
|
+
"$ sf hardis:project:fix:profiletabs"
|
|
12975
12986
|
],
|
|
12976
12987
|
"flags": {
|
|
12977
12988
|
"json": {
|
|
@@ -12989,25 +13000,11 @@
|
|
|
12989
13000
|
"multiple": false,
|
|
12990
13001
|
"type": "option"
|
|
12991
13002
|
},
|
|
12992
|
-
"
|
|
12993
|
-
"
|
|
12994
|
-
"
|
|
12995
|
-
"
|
|
12996
|
-
"
|
|
12997
|
-
"type": "option"
|
|
12998
|
-
},
|
|
12999
|
-
"commit-before": {
|
|
13000
|
-
"description": "Hash of the commit of the previous flow state, or \"allStates\" (will be prompted if not set)",
|
|
13001
|
-
"name": "commit-before",
|
|
13002
|
-
"default": "",
|
|
13003
|
-
"hasDynamicHelp": false,
|
|
13004
|
-
"multiple": false,
|
|
13005
|
-
"type": "option"
|
|
13006
|
-
},
|
|
13007
|
-
"commit-after": {
|
|
13008
|
-
"description": "Hash of the commit of the new flow state (will be prompted if not set)",
|
|
13009
|
-
"name": "commit-after",
|
|
13010
|
-
"default": "",
|
|
13003
|
+
"path": {
|
|
13004
|
+
"char": "p",
|
|
13005
|
+
"description": "Root folder",
|
|
13006
|
+
"name": "path",
|
|
13007
|
+
"default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
|
|
13011
13008
|
"hasDynamicHelp": false,
|
|
13012
13009
|
"multiple": false,
|
|
13013
13010
|
"type": "option"
|
|
@@ -13031,17 +13028,32 @@
|
|
|
13031
13028
|
"name": "skipauth",
|
|
13032
13029
|
"allowNo": false,
|
|
13033
13030
|
"type": "boolean"
|
|
13031
|
+
},
|
|
13032
|
+
"target-org": {
|
|
13033
|
+
"aliases": [
|
|
13034
|
+
"targetusername",
|
|
13035
|
+
"u"
|
|
13036
|
+
],
|
|
13037
|
+
"char": "o",
|
|
13038
|
+
"deprecateAliases": true,
|
|
13039
|
+
"name": "target-org",
|
|
13040
|
+
"noCacheDefault": true,
|
|
13041
|
+
"required": true,
|
|
13042
|
+
"summary": "Username or alias of the target org. Not required if the `target-org` configuration variable is already set.",
|
|
13043
|
+
"hasDynamicHelp": true,
|
|
13044
|
+
"multiple": false,
|
|
13045
|
+
"type": "option"
|
|
13034
13046
|
}
|
|
13035
13047
|
},
|
|
13036
|
-
"hasDynamicHelp":
|
|
13048
|
+
"hasDynamicHelp": true,
|
|
13037
13049
|
"hiddenAliases": [],
|
|
13038
|
-
"id": "hardis:project:
|
|
13050
|
+
"id": "hardis:project:fix:profiletabs",
|
|
13039
13051
|
"pluginAlias": "sfdx-hardis",
|
|
13040
13052
|
"pluginName": "sfdx-hardis",
|
|
13041
13053
|
"pluginType": "core",
|
|
13042
13054
|
"strict": true,
|
|
13043
13055
|
"enableJsonFlag": true,
|
|
13044
|
-
"title": "
|
|
13056
|
+
"title": "Fix profiles to add tabs that are not retrieved by SF CLI",
|
|
13045
13057
|
"requiresProject": true,
|
|
13046
13058
|
"isESM": true,
|
|
13047
13059
|
"relativePath": [
|
|
@@ -13049,43 +13061,43 @@
|
|
|
13049
13061
|
"commands",
|
|
13050
13062
|
"hardis",
|
|
13051
13063
|
"project",
|
|
13052
|
-
"
|
|
13053
|
-
"
|
|
13064
|
+
"fix",
|
|
13065
|
+
"profiletabs.js"
|
|
13054
13066
|
],
|
|
13055
13067
|
"aliasPermutations": [],
|
|
13056
13068
|
"permutations": [
|
|
13057
|
-
"hardis:project:
|
|
13058
|
-
"project:hardis:
|
|
13059
|
-
"project:
|
|
13060
|
-
"project:
|
|
13061
|
-
"hardis:
|
|
13062
|
-
"
|
|
13063
|
-
"
|
|
13064
|
-
"
|
|
13065
|
-
"hardis:
|
|
13066
|
-
"
|
|
13067
|
-
"
|
|
13068
|
-
"
|
|
13069
|
-
"hardis:project:
|
|
13070
|
-
"project:hardis:
|
|
13071
|
-
"project:
|
|
13072
|
-
"project:
|
|
13073
|
-
"hardis:
|
|
13074
|
-
"
|
|
13075
|
-
"
|
|
13076
|
-
"
|
|
13077
|
-
"hardis:
|
|
13078
|
-
"
|
|
13079
|
-
"
|
|
13080
|
-
"
|
|
13069
|
+
"hardis:project:fix:profiletabs",
|
|
13070
|
+
"project:hardis:fix:profiletabs",
|
|
13071
|
+
"project:fix:hardis:profiletabs",
|
|
13072
|
+
"project:fix:profiletabs:hardis",
|
|
13073
|
+
"hardis:fix:project:profiletabs",
|
|
13074
|
+
"fix:hardis:project:profiletabs",
|
|
13075
|
+
"fix:project:hardis:profiletabs",
|
|
13076
|
+
"fix:project:profiletabs:hardis",
|
|
13077
|
+
"hardis:fix:profiletabs:project",
|
|
13078
|
+
"fix:hardis:profiletabs:project",
|
|
13079
|
+
"fix:profiletabs:hardis:project",
|
|
13080
|
+
"fix:profiletabs:project:hardis",
|
|
13081
|
+
"hardis:project:profiletabs:fix",
|
|
13082
|
+
"project:hardis:profiletabs:fix",
|
|
13083
|
+
"project:profiletabs:hardis:fix",
|
|
13084
|
+
"project:profiletabs:fix:hardis",
|
|
13085
|
+
"hardis:profiletabs:project:fix",
|
|
13086
|
+
"profiletabs:hardis:project:fix",
|
|
13087
|
+
"profiletabs:project:hardis:fix",
|
|
13088
|
+
"profiletabs:project:fix:hardis",
|
|
13089
|
+
"hardis:profiletabs:fix:project",
|
|
13090
|
+
"profiletabs:hardis:fix:project",
|
|
13091
|
+
"profiletabs:fix:hardis:project",
|
|
13092
|
+
"profiletabs:fix:project:hardis"
|
|
13081
13093
|
]
|
|
13082
13094
|
},
|
|
13083
|
-
"hardis:project:
|
|
13095
|
+
"hardis:project:fix:v53flexipages": {
|
|
13084
13096
|
"aliases": [],
|
|
13085
13097
|
"args": {},
|
|
13086
|
-
"description": "\n## Command Behavior\n\n**
|
|
13098
|
+
"description": "\n## Command Behavior\n\n**Fixes Salesforce FlexiPages for compatibility with API Version 53.0 (Winter '22 release) by adding missing identifiers to component instances.**\n\nSalesforce introduced a change in API Version 53.0 that requires `identifier` tags within `componentInstance` and `fieldInstance` elements in FlexiPage metadata. If these identifiers are missing, deployments to orgs with API version 53.0 or higher will fail. This command automates the process of adding these missing identifiers, ensuring your FlexiPages remain deployable.\n\nKey functionalities:\n\n- **Targeted FlexiPage Processing:** Scans all .flexipage-meta.xml files within the specified root folder (defaults to current working directory).\n- **Identifier Injection:** Inserts a unique `identifier` tag (e.g., `SFDX_HARDIS_REPLACEMENT_ID`) into `componentInstance` and `fieldInstance` elements that lack one.\n\n**Important Note:** After running this command, ensure you update your `apiVersion` to `53.0` (or higher) in your `package.xml` and `sfdx-project.json` files.\n\n<details markdown=\"1\">\n<summary>Technical explanations</summary>\n\nThe command's technical implementation involves:\n\n- **File Discovery:** Uses `glob` to find all .flexipage-meta.xml files.\n- **Content Reading:** Reads the XML content of each FlexiPage file.\n- **Regular Expression Replacement:** Employs a set of regular expressions to identify specific XML patterns (componentName.../componentName.../componentInstance, componentName.../componentName.../visibilityRule, fieldItem.../fieldItem.../fieldInstance) that are missing the `identifier` tag.\n- **Dynamic ID Generation:** For each match, it generates a unique identifier (e.g., `sfdxHardisIdX`) and injects it into the XML structure.\n- **File Writing:** If changes are made, the modified XML content is written back to the FlexiPage file using `fs.writeFile`.\n- **Logging:** Provides messages about which FlexiPages are being processed and a summary of the total number of identifiers added.\n</details>\n",
|
|
13087
13099
|
"examples": [
|
|
13088
|
-
"$ sf hardis:project:
|
|
13100
|
+
"$ sf hardis:project:fix:v53flexipages"
|
|
13089
13101
|
],
|
|
13090
13102
|
"flags": {
|
|
13091
13103
|
"json": {
|
|
@@ -13103,23 +13115,11 @@
|
|
|
13103
13115
|
"multiple": false,
|
|
13104
13116
|
"type": "option"
|
|
13105
13117
|
},
|
|
13106
|
-
"
|
|
13107
|
-
"
|
|
13108
|
-
"
|
|
13109
|
-
"
|
|
13110
|
-
"
|
|
13111
|
-
"type": "option"
|
|
13112
|
-
},
|
|
13113
|
-
"fromcommit": {
|
|
13114
|
-
"description": "Hash of commit to start from",
|
|
13115
|
-
"name": "fromcommit",
|
|
13116
|
-
"hasDynamicHelp": false,
|
|
13117
|
-
"multiple": false,
|
|
13118
|
-
"type": "option"
|
|
13119
|
-
},
|
|
13120
|
-
"tocommit": {
|
|
13121
|
-
"description": "Hash of commit to stop at",
|
|
13122
|
-
"name": "tocommit",
|
|
13118
|
+
"path": {
|
|
13119
|
+
"char": "p",
|
|
13120
|
+
"description": "Root folder",
|
|
13121
|
+
"name": "path",
|
|
13122
|
+
"default": "/home/runner/work/sfdx-hardis/sfdx-hardis",
|
|
13123
13123
|
"hasDynamicHelp": false,
|
|
13124
13124
|
"multiple": false,
|
|
13125
13125
|
"type": "option"
|
|
@@ -13147,49 +13147,49 @@
|
|
|
13147
13147
|
},
|
|
13148
13148
|
"hasDynamicHelp": false,
|
|
13149
13149
|
"hiddenAliases": [],
|
|
13150
|
-
"id": "hardis:project:
|
|
13150
|
+
"id": "hardis:project:fix:v53flexipages",
|
|
13151
13151
|
"pluginAlias": "sfdx-hardis",
|
|
13152
13152
|
"pluginName": "sfdx-hardis",
|
|
13153
13153
|
"pluginType": "core",
|
|
13154
13154
|
"strict": true,
|
|
13155
13155
|
"enableJsonFlag": true,
|
|
13156
|
-
"title": "
|
|
13157
|
-
"requiresProject":
|
|
13156
|
+
"title": "Fix flexipages for v53",
|
|
13157
|
+
"requiresProject": true,
|
|
13158
13158
|
"isESM": true,
|
|
13159
13159
|
"relativePath": [
|
|
13160
13160
|
"lib",
|
|
13161
13161
|
"commands",
|
|
13162
13162
|
"hardis",
|
|
13163
13163
|
"project",
|
|
13164
|
-
"
|
|
13165
|
-
"
|
|
13164
|
+
"fix",
|
|
13165
|
+
"v53flexipages.js"
|
|
13166
13166
|
],
|
|
13167
13167
|
"aliasPermutations": [],
|
|
13168
13168
|
"permutations": [
|
|
13169
|
-
"hardis:project:
|
|
13170
|
-
"project:hardis:
|
|
13171
|
-
"project:
|
|
13172
|
-
"project:
|
|
13173
|
-
"hardis:
|
|
13174
|
-
"
|
|
13175
|
-
"
|
|
13176
|
-
"
|
|
13177
|
-
"hardis:
|
|
13178
|
-
"
|
|
13179
|
-
"
|
|
13180
|
-
"
|
|
13181
|
-
"hardis:project:
|
|
13182
|
-
"project:hardis:
|
|
13183
|
-
"project:
|
|
13184
|
-
"project:
|
|
13185
|
-
"hardis:
|
|
13186
|
-
"
|
|
13187
|
-
"
|
|
13188
|
-
"
|
|
13189
|
-
"hardis:
|
|
13190
|
-
"
|
|
13191
|
-
"
|
|
13192
|
-
"
|
|
13169
|
+
"hardis:project:fix:v53flexipages",
|
|
13170
|
+
"project:hardis:fix:v53flexipages",
|
|
13171
|
+
"project:fix:hardis:v53flexipages",
|
|
13172
|
+
"project:fix:v53flexipages:hardis",
|
|
13173
|
+
"hardis:fix:project:v53flexipages",
|
|
13174
|
+
"fix:hardis:project:v53flexipages",
|
|
13175
|
+
"fix:project:hardis:v53flexipages",
|
|
13176
|
+
"fix:project:v53flexipages:hardis",
|
|
13177
|
+
"hardis:fix:v53flexipages:project",
|
|
13178
|
+
"fix:hardis:v53flexipages:project",
|
|
13179
|
+
"fix:v53flexipages:hardis:project",
|
|
13180
|
+
"fix:v53flexipages:project:hardis",
|
|
13181
|
+
"hardis:project:v53flexipages:fix",
|
|
13182
|
+
"project:hardis:v53flexipages:fix",
|
|
13183
|
+
"project:v53flexipages:hardis:fix",
|
|
13184
|
+
"project:v53flexipages:fix:hardis",
|
|
13185
|
+
"hardis:v53flexipages:project:fix",
|
|
13186
|
+
"v53flexipages:hardis:project:fix",
|
|
13187
|
+
"v53flexipages:project:hardis:fix",
|
|
13188
|
+
"v53flexipages:project:fix:hardis",
|
|
13189
|
+
"hardis:v53flexipages:fix:project",
|
|
13190
|
+
"v53flexipages:hardis:fix:project",
|
|
13191
|
+
"v53flexipages:fix:hardis:project",
|
|
13192
|
+
"v53flexipages:fix:project:hardis"
|
|
13193
13193
|
]
|
|
13194
13194
|
},
|
|
13195
13195
|
"hardis:project:metadata:activate-decomposed": {
|
|
@@ -15370,5 +15370,5 @@
|
|
|
15370
15370
|
]
|
|
15371
15371
|
}
|
|
15372
15372
|
},
|
|
15373
|
-
"version": "6.9.1-
|
|
15373
|
+
"version": "6.9.1-alpha202510262348.0"
|
|
15374
15374
|
}
|