prodlysfcli 1.6.3 → 1.7.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +56 -36
- package/lib/commands/prodly/checkin.js +8 -15
- package/lib/commands/prodly/checkin.js.map +1 -1
- package/lib/commands/prodly/checkout.d.ts +4 -0
- package/lib/commands/prodly/checkout.js +46 -5
- package/lib/commands/prodly/checkout.js.map +1 -1
- package/lib/commands/prodly/deploy.d.ts +2 -0
- package/lib/commands/prodly/deploy.js +28 -17
- package/lib/commands/prodly/deploy.js.map +1 -1
- package/lib/commands/prodly/manage.js +2 -2
- package/lib/commands/prodly/manage.js.map +1 -1
- package/lib/constants/index.d.ts +6 -0
- package/lib/constants/index.js +5 -0
- package/lib/constants/index.js.map +1 -1
- package/lib/helpers/index.d.ts +5 -1
- package/lib/helpers/index.js +43 -1
- package/lib/helpers/index.js.map +1 -1
- package/lib/services/connections.js +2 -2
- package/lib/services/connections.js.map +1 -1
- package/lib/services/connections.types.d.ts +1 -1
- package/lib/services/queries.d.ts +1 -1
- package/lib/types/prodly.d.ts +7 -0
- package/messages/prodly.json +3 -1
- package/npm-shrinkwrap.json +4077 -7610
- package/oclif.lock +1911 -3657
- package/oclif.manifest.json +73 -2
- package/package.json +21 -12
package/README.md
CHANGED
|
@@ -41,15 +41,16 @@ sf plugins
|
|
|
41
41
|
## Commands
|
|
42
42
|
|
|
43
43
|
<!-- commands -->
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
44
|
+
|
|
45
|
+
- [`sf prodly branch-folders`](#sf-prodly-branch-folders)
|
|
46
|
+
- [`sf prodly change-types`](#sf-prodly-change-types)
|
|
47
|
+
- [`sf prodly checkin`](#sf-prodly-checkin)
|
|
48
|
+
- [`sf prodly checkout`](#sf-prodly-checkout)
|
|
49
|
+
- [`sf prodly deploy`](#sf-prodly-deploy)
|
|
50
|
+
- [`sf prodly jobs`](#sf-prodly-jobs)
|
|
51
|
+
- [`sf prodly manage`](#sf-prodly-manage)
|
|
52
|
+
- [`sf prodly releases`](#sf-prodly-releases)
|
|
53
|
+
- [`sf prodly version`](#sf-prodly-version)
|
|
53
54
|
|
|
54
55
|
## `sf prodly branch-folders`
|
|
55
56
|
|
|
@@ -79,7 +80,7 @@ EXAMPLES
|
|
|
79
80
|
Lists all branch folders
|
|
80
81
|
```
|
|
81
82
|
|
|
82
|
-
_See code: [src/commands/prodly/branch-folders.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
83
|
+
_See code: [src/commands/prodly/branch-folders.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/branch-folders.ts)_
|
|
83
84
|
|
|
84
85
|
## `sf prodly change-types`
|
|
85
86
|
|
|
@@ -120,7 +121,7 @@ EXAMPLES
|
|
|
120
121
|
Creates a scratch org based on a change type
|
|
121
122
|
```
|
|
122
123
|
|
|
123
|
-
_See code: [src/commands/prodly/change-types.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
124
|
+
_See code: [src/commands/prodly/change-types.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/change-types.ts)_
|
|
124
125
|
|
|
125
126
|
## `sf prodly checkin`
|
|
126
127
|
|
|
@@ -170,7 +171,7 @@ EXAMPLES
|
|
|
170
171
|
The instance should be managed by the Prodly account associated with the default DevHub control org.
|
|
171
172
|
```
|
|
172
173
|
|
|
173
|
-
_See code: [src/commands/prodly/checkin.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
174
|
+
_See code: [src/commands/prodly/checkin.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/checkin.ts)_
|
|
174
175
|
|
|
175
176
|
## `sf prodly checkout`
|
|
176
177
|
|
|
@@ -178,23 +179,34 @@ prodly:checkout command
|
|
|
178
179
|
|
|
179
180
|
```
|
|
180
181
|
USAGE
|
|
181
|
-
$ sf prodly checkout -v <value> -o <value> [--json] [--flags-dir <value>] [-
|
|
182
|
-
|
|
182
|
+
$ sf prodly checkout -v <value> -o <value> [--json] [--flags-dir <value>] [-a <value> -r
|
|
183
|
+
NoTestRun|RunLocalTests|RunAllTestsInOrg|RunSpecifiedTests] [-f <value>] [-m <value>] [-b <value>] [-t <value>] [-e]
|
|
184
|
+
[-q <value>] [-i <value>] [-n <value>] [-z <value>] [-p <value>] [-l]
|
|
183
185
|
|
|
184
186
|
FLAGS
|
|
185
|
-
-
|
|
186
|
-
|
|
187
|
-
-
|
|
188
|
-
-
|
|
189
|
-
-
|
|
190
|
-
-
|
|
191
|
-
|
|
192
|
-
-
|
|
193
|
-
|
|
194
|
-
-
|
|
195
|
-
-
|
|
196
|
-
|
|
197
|
-
-
|
|
187
|
+
-a, --apex-test-classes=<value> comma separated list of Apex test class names to run when
|
|
188
|
+
RunSpecifiedTests was selected
|
|
189
|
+
-b, --branch=<value> branch name for deployment
|
|
190
|
+
-e, --deactivate deactivate all events for the deployment
|
|
191
|
+
-f, --data-folder=<value> data branch folder id to use
|
|
192
|
+
-i, --instance=<value> managed instance ID on which to perform the action
|
|
193
|
+
-l, --simulation perform a data and/or metadata simulation
|
|
194
|
+
-m, --metadata-quick-select-components=<value> JSON string of metadata quick select components array, e.g.,
|
|
195
|
+
'[{"type":"Profile","ids":["Profile1","Profile2"]}]'
|
|
196
|
+
-n, --name=<value> name for the deployment
|
|
197
|
+
-o, --target-org=<value> (required) Username or alias of the target org. Not required if the
|
|
198
|
+
`target-org` configuration variable is already set.
|
|
199
|
+
-p, --plan=<value> name or record ID of the deployment plan to deploy
|
|
200
|
+
-q, --filter=<value> query filter override for a data set deployment
|
|
201
|
+
-r, --test-option=<option> specifies the Salesforce Validate Change Set tests to run before
|
|
202
|
+
deploying metadata. Default runs no tests, except when deploying Apex
|
|
203
|
+
classes or triggers to production, Default runs local tests. Local
|
|
204
|
+
tests are tests that do not originate from a managed package.
|
|
205
|
+
<options: NoTestRun|RunLocalTests|RunAllTestsInOrg|RunSpecifiedTests>
|
|
206
|
+
-t, --dataset=<value> name or record ID of the data set to deploy
|
|
207
|
+
-v, --target-dev-hub=<value> (required) Username or alias of the Dev Hub org. Not required if the
|
|
208
|
+
`target-dev-hub` configuration variable is already set.
|
|
209
|
+
-z, --notes=<value> notes for the deployment
|
|
198
210
|
|
|
199
211
|
GLOBAL FLAGS
|
|
200
212
|
--flags-dir=<value> Import flag values from a directory.
|
|
@@ -219,7 +231,7 @@ EXAMPLES
|
|
|
219
231
|
The instance should be managed by the Prodly account associated with the default DevHub control org.
|
|
220
232
|
```
|
|
221
233
|
|
|
222
|
-
_See code: [src/commands/prodly/checkout.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
234
|
+
_See code: [src/commands/prodly/checkout.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/checkout.ts)_
|
|
223
235
|
|
|
224
236
|
## `sf prodly deploy`
|
|
225
237
|
|
|
@@ -227,14 +239,17 @@ prodly:deploy command
|
|
|
227
239
|
|
|
228
240
|
```
|
|
229
241
|
USAGE
|
|
230
|
-
$ sf prodly deploy -v <value> -o <value> -n <value> [--json] [--flags-dir <value>] [-
|
|
231
|
-
[-
|
|
242
|
+
$ sf prodly deploy -v <value> -o <value> -n <value> [--json] [--flags-dir <value>] [-a <value> -r
|
|
243
|
+
NoTestRun|RunLocalTests|RunAllTestsInOrg|RunSpecifiedTests] [-m <value>] [-e] [-d <value>] [-q <value> -t <value>]
|
|
244
|
+
[-b <value>] [-z <value>] [-p <value>] [-l] [-s <value>]
|
|
232
245
|
|
|
233
246
|
FLAGS
|
|
247
|
+
-a, --apex-test-classes=<value> comma separated list of Apex test class names to run when
|
|
248
|
+
RunSpecifiedTests was selected
|
|
234
249
|
-b, --label=<value> connection and managed instance name
|
|
235
250
|
-d, --destination=<value> destination managed instance ID
|
|
236
251
|
-e, --deactivate deactivate all events for the deployment
|
|
237
|
-
-l, --simulation perform a data simulation
|
|
252
|
+
-l, --simulation perform a data and/or metadata simulation
|
|
238
253
|
-m, --metadata-quick-select-components=<value> JSON string of metadata quick select components array, e.g.,
|
|
239
254
|
'[{"type":"Profile","ids":["Profile1","Profile2"]}]'
|
|
240
255
|
-n, --name=<value> (required) name for the deployment
|
|
@@ -242,6 +257,11 @@ FLAGS
|
|
|
242
257
|
`target-org` configuration variable is already set.
|
|
243
258
|
-p, --plan=<value> name or record ID of the deployment plan to deploy
|
|
244
259
|
-q, --filter=<value> query filter override for a data set deployment
|
|
260
|
+
-r, --test-option=<option> specifies the Salesforce Validate Change Set tests to run before
|
|
261
|
+
deploying metadata. Default runs no tests, except when deploying Apex
|
|
262
|
+
classes or triggers to production, Default runs local tests. Local
|
|
263
|
+
tests are tests that do not originate from a managed package.
|
|
264
|
+
<options: NoTestRun|RunLocalTests|RunAllTestsInOrg|RunSpecifiedTests>
|
|
245
265
|
-s, --source=<value> source managed instance ID
|
|
246
266
|
-t, --dataset=<value> name or record ID of the data set to deploy
|
|
247
267
|
-v, --target-dev-hub=<value> (required) Username or alias of the Dev Hub org. Not required if the
|
|
@@ -271,7 +291,7 @@ EXAMPLES
|
|
|
271
291
|
Command output... deploying to the scratch org from the UAT sandbox, using the named connection record in the dev hub, control org. Long param names.
|
|
272
292
|
```
|
|
273
293
|
|
|
274
|
-
_See code: [src/commands/prodly/deploy.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
294
|
+
_See code: [src/commands/prodly/deploy.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/deploy.ts)_
|
|
275
295
|
|
|
276
296
|
## `sf prodly jobs`
|
|
277
297
|
|
|
@@ -300,7 +320,7 @@ EXAMPLES
|
|
|
300
320
|
Print the job status for the provided job Id.
|
|
301
321
|
```
|
|
302
322
|
|
|
303
|
-
_See code: [src/commands/prodly/jobs.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
323
|
+
_See code: [src/commands/prodly/jobs.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/jobs.ts)_
|
|
304
324
|
|
|
305
325
|
## `sf prodly manage`
|
|
306
326
|
|
|
@@ -352,7 +372,7 @@ EXAMPLES
|
|
|
352
372
|
Refresh the managed instance org ID after a sandbox has been refreshed.
|
|
353
373
|
```
|
|
354
374
|
|
|
355
|
-
_See code: [src/commands/prodly/manage.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
375
|
+
_See code: [src/commands/prodly/manage.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/manage.ts)_
|
|
356
376
|
|
|
357
377
|
## `sf prodly releases`
|
|
358
378
|
|
|
@@ -392,7 +412,7 @@ EXAMPLES
|
|
|
392
412
|
The instance should be managed by the Prodly account associated with the default DevHub control org.
|
|
393
413
|
```
|
|
394
414
|
|
|
395
|
-
_See code: [src/commands/prodly/releases.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
415
|
+
_See code: [src/commands/prodly/releases.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/releases.ts)_
|
|
396
416
|
|
|
397
417
|
## `sf prodly version`
|
|
398
418
|
|
|
@@ -437,7 +457,7 @@ EXAMPLES
|
|
|
437
457
|
The instance should be managed by the Prodly account associated with the default DevHub control org.
|
|
438
458
|
```
|
|
439
459
|
|
|
440
|
-
_See code: [src/commands/prodly/version.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.
|
|
460
|
+
_See code: [src/commands/prodly/version.ts](https://github.com/prodly/prodly-sf-cli/blob/v1.7.2/src/commands/prodly/version.ts)_
|
|
441
461
|
|
|
442
462
|
<!-- commandsstop -->
|
|
443
463
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import { Messages, SfError } from '@salesforce/core';
|
|
2
2
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
3
|
-
import { constructQueryFilter } from '../../helpers/index.js';
|
|
3
|
+
import { constructQueryFilter, constructQuickDeploymentComponents } from '../../helpers/index.js';
|
|
4
4
|
import { updateConnection } from '../../services/connections.js';
|
|
5
5
|
import { getManagedInstance } from '../../services/manage-instances.js';
|
|
6
6
|
import { getDeploymentEntityId } from '../../services/queries.js';
|
|
@@ -43,7 +43,11 @@ export default class ProdlyCheckin extends SfCommand {
|
|
|
43
43
|
this.log('Deployment plan flag: ' + planFlag);
|
|
44
44
|
this.log('Query filter flag: ' + queryFilterFlag);
|
|
45
45
|
this.log('Metadata quick select components flag: ' + metadataQuickSelectComponentsFlag);
|
|
46
|
-
const
|
|
46
|
+
const metadataQuickSelectComponents = metadataQuickSelectComponentsFlag !== undefined && metadataQuickSelectComponentsFlag.trim().length > 0
|
|
47
|
+
? metadataQuickSelectComponentsFlag
|
|
48
|
+
: undefined;
|
|
49
|
+
const hasMetadataQuickSelectComponents = metadataQuickSelectComponents !== undefined;
|
|
50
|
+
// When no metadata quick select components are provided, require either dataset or plan (but not both)
|
|
47
51
|
if (!hasMetadataQuickSelectComponents && !datasetFlag && !planFlag) {
|
|
48
52
|
throw new SfError(prodlyMessages.getMessage('errorNoDatasetAndPlanFlags', []));
|
|
49
53
|
}
|
|
@@ -54,7 +58,7 @@ export default class ProdlyCheckin extends SfCommand {
|
|
|
54
58
|
const hubOrg = flags['target-dev-hub'];
|
|
55
59
|
const hubConn = hubOrg.getConnection();
|
|
56
60
|
const print = (message, ...args) => this.log(message, ...args);
|
|
57
|
-
let mangedInstanceId
|
|
61
|
+
let mangedInstanceId;
|
|
58
62
|
let dataSetId;
|
|
59
63
|
let deploymentPlanId;
|
|
60
64
|
// Retrieve the data set or deployment plan to deploy
|
|
@@ -77,17 +81,6 @@ export default class ProdlyCheckin extends SfCommand {
|
|
|
77
81
|
}
|
|
78
82
|
this.log(`Data set ID: ${dataSetId ?? ''}`);
|
|
79
83
|
this.log(`Deployment plan ID: ${deploymentPlanId ?? ''}`);
|
|
80
|
-
// Parse metadata quick select components if provided
|
|
81
|
-
let quickDeploymentComponents;
|
|
82
|
-
if (metadataQuickSelectComponentsFlag) {
|
|
83
|
-
try {
|
|
84
|
-
quickDeploymentComponents = JSON.parse(metadataQuickSelectComponentsFlag);
|
|
85
|
-
this.log(`Parsed metadata quick select components: ${JSON.stringify(quickDeploymentComponents)}`);
|
|
86
|
-
}
|
|
87
|
-
catch (error) {
|
|
88
|
-
throw new SfError(`Invalid JSON format for metadata-quick-select-components flag: ${error instanceof Error ? error.message : String(error)}`);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
84
|
// Check if instance is provided
|
|
92
85
|
if (instanceFlag) {
|
|
93
86
|
// Use provided managed instance
|
|
@@ -125,7 +118,7 @@ export default class ProdlyCheckin extends SfCommand {
|
|
|
125
118
|
filter: queryFilterFlag,
|
|
126
119
|
hubConn,
|
|
127
120
|
mangedInstanceId,
|
|
128
|
-
quickDeploymentComponents,
|
|
121
|
+
quickDeploymentComponents: constructQuickDeploymentComponents(metadataQuickSelectComponents),
|
|
129
122
|
});
|
|
130
123
|
this.log(`Checkin launched with Job ID: ${jobId}`);
|
|
131
124
|
return { jobId, message: 'Checkin launched' };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkin.js","sourceRoot":"","sources":["../../../src/commands/prodly/checkin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"checkin.js","sourceRoot":"","sources":["../../../src/commands/prodly/checkin.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,9 +5,12 @@ export default class ProdlyCheckout extends SfCommand<JSONObject> {
|
|
|
5
5
|
static readonly description: string;
|
|
6
6
|
static readonly examples: string[];
|
|
7
7
|
static readonly flags: {
|
|
8
|
+
'apex-test-classes': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
8
9
|
'data-folder': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
9
10
|
'target-dev-hub': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
10
11
|
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
|
+
'test-option': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
|
+
'metadata-quick-select-components': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
14
|
branch: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
15
|
dataset: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
16
|
deactivate: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
@@ -16,6 +19,7 @@ export default class ProdlyCheckout extends SfCommand<JSONObject> {
|
|
|
16
19
|
name: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
17
20
|
notes: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
18
21
|
plan: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
22
|
+
simulation: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
19
23
|
};
|
|
20
24
|
run(): Promise<JSONObject>;
|
|
21
25
|
private checkoutInstance;
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
import { Messages, SfError } from '@salesforce/core';
|
|
2
2
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
3
|
-
import { constructQueryFilter } from '../../helpers/index.js';
|
|
3
|
+
import { constructApexTestClasses, constructQueryFilter, constructQuickDeploymentComponents, } from '../../helpers/index.js';
|
|
4
4
|
import { updateConnection } from '../../services/connections.js';
|
|
5
5
|
import { getManagedInstance } from '../../services/manage-instances.js';
|
|
6
6
|
import { getDeploymentEntityId } from '../../services/queries.js';
|
|
7
|
+
import { TEST_OPTIONS } from '../../constants/index.js';
|
|
7
8
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
8
9
|
const commandMessages = Messages.loadMessages('prodlysfcli', 'prodly.checkout');
|
|
9
10
|
const prodlyMessages = Messages.loadMessages('prodlysfcli', 'prodly');
|
|
@@ -12,9 +13,24 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
12
13
|
static description = prodlyMessages.getMessage('descriptionCheckoutCommand');
|
|
13
14
|
static examples = commandMessages.getMessages('examples');
|
|
14
15
|
static flags = {
|
|
16
|
+
'apex-test-classes': Flags.string({
|
|
17
|
+
char: 'a',
|
|
18
|
+
summary: prodlyMessages.getMessage('apexTestClassesFlagDescription'),
|
|
19
|
+
dependsOn: ['test-option'],
|
|
20
|
+
}),
|
|
15
21
|
'data-folder': Flags.string({ char: 'f', summary: prodlyMessages.getMessage('dataBranchFolderFlagDescription') }),
|
|
16
22
|
'target-dev-hub': Flags.requiredHub(),
|
|
17
23
|
'target-org': Flags.requiredOrg(),
|
|
24
|
+
'test-option': Flags.string({
|
|
25
|
+
char: 'r',
|
|
26
|
+
summary: prodlyMessages.getMessage('testOptionFlagDescription'),
|
|
27
|
+
dependsOn: ['metadata-quick-select-components'],
|
|
28
|
+
options: TEST_OPTIONS,
|
|
29
|
+
}),
|
|
30
|
+
'metadata-quick-select-components': Flags.string({
|
|
31
|
+
char: 'm',
|
|
32
|
+
summary: prodlyMessages.getMessage('metadataQuickSelectComponentsFlagDescription'),
|
|
33
|
+
}),
|
|
18
34
|
branch: Flags.string({ char: 'b', summary: prodlyMessages.getMessage('branchFlagDescription') }),
|
|
19
35
|
dataset: Flags.string({ char: 't', summary: prodlyMessages.getMessage('dataSetFlagDescription') }),
|
|
20
36
|
deactivate: Flags.boolean({ char: 'e', summary: prodlyMessages.getMessage('deactivateFlagDescription') }),
|
|
@@ -23,10 +39,11 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
23
39
|
name: Flags.string({ char: 'n', summary: prodlyMessages.getMessage('deplomentNameFlagDescription') }),
|
|
24
40
|
notes: Flags.string({ char: 'z', summary: prodlyMessages.getMessage('notesFlagDescription') }),
|
|
25
41
|
plan: Flags.string({ char: 'p', summary: prodlyMessages.getMessage('deploymentPlanFlagDescription') }),
|
|
42
|
+
simulation: Flags.boolean({ char: 'l', summary: prodlyMessages.getMessage('simulationFlagDescription') }),
|
|
26
43
|
};
|
|
27
44
|
async run() {
|
|
28
45
|
const { flags } = await this.parse(ProdlyCheckout);
|
|
29
|
-
const { branch: branchFlag, dataset: datasetFlag, deactivate: deactivateFlag, filter: queryFilterFlag, instance: instanceFlag, name: deploymentNameFlag, notes: deploymentNotesFlag, plan: planFlag, } = flags;
|
|
46
|
+
const { 'apex-test-classes': apexTestClassesFlag, 'metadata-quick-select-components': metadataQuickSelectComponentsFlag, 'test-option': testOptionFlag, branch: branchFlag, dataset: datasetFlag, deactivate: deactivateFlag, filter: queryFilterFlag, instance: instanceFlag, name: deploymentNameFlag, notes: deploymentNotesFlag, plan: planFlag, simulation: simulationFlag, } = flags;
|
|
30
47
|
this.log('Deployment name flag: ' + deploymentNameFlag);
|
|
31
48
|
this.log('Instance flag: ' + instanceFlag);
|
|
32
49
|
this.log('Deactivate flag: ' + deactivateFlag);
|
|
@@ -35,10 +52,22 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
35
52
|
this.log('Data folder flag: ' + flags['data-folder']);
|
|
36
53
|
this.log('Data set flag: ' + datasetFlag);
|
|
37
54
|
this.log('Deployment plan flag: ' + planFlag);
|
|
55
|
+
this.log('Simulation flag: ' + simulationFlag);
|
|
38
56
|
this.log('Query filter flag: ' + queryFilterFlag);
|
|
39
|
-
|
|
57
|
+
this.log('Metadata quick select components flag: ' + metadataQuickSelectComponentsFlag);
|
|
58
|
+
this.log('Test option flag: ' + testOptionFlag);
|
|
59
|
+
this.log('Apex test classes flag: ' + apexTestClassesFlag);
|
|
60
|
+
const metadataQuickSelectComponents = metadataQuickSelectComponentsFlag !== undefined && metadataQuickSelectComponentsFlag.trim().length > 0
|
|
61
|
+
? metadataQuickSelectComponentsFlag
|
|
62
|
+
: undefined;
|
|
63
|
+
const hasMetadataQuickSelectComponents = metadataQuickSelectComponents !== undefined;
|
|
64
|
+
// When no metadata quick select components are provided, require either dataset or plan (but not both)
|
|
65
|
+
if (!hasMetadataQuickSelectComponents && !datasetFlag && !planFlag) {
|
|
40
66
|
throw new SfError(prodlyMessages.getMessage('errorNoDatasetAndPlanFlags', []));
|
|
41
67
|
}
|
|
68
|
+
if (datasetFlag && planFlag) {
|
|
69
|
+
throw new SfError(prodlyMessages.getMessage('errorDatasetAndPlanFlags', []));
|
|
70
|
+
}
|
|
42
71
|
if (!deploymentNameFlag) {
|
|
43
72
|
throw new SfError(prodlyMessages.getMessage('errorDeploymentNameFlag', []));
|
|
44
73
|
}
|
|
@@ -49,7 +78,7 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
49
78
|
const hubOrg = flags['target-dev-hub'];
|
|
50
79
|
const hubConn = hubOrg.getConnection();
|
|
51
80
|
const print = (message, ...args) => this.log(message, ...args);
|
|
52
|
-
let mangedInstanceId
|
|
81
|
+
let mangedInstanceId;
|
|
53
82
|
let dataSetId;
|
|
54
83
|
let deploymentPlanId;
|
|
55
84
|
// Retrieve the data set or deployment plan to deploy
|
|
@@ -100,6 +129,7 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
100
129
|
}
|
|
101
130
|
// Perform the checkout
|
|
102
131
|
const jobId = await this.checkoutInstance({
|
|
132
|
+
apexTestClasses: apexTestClassesFlag,
|
|
103
133
|
branchFlag,
|
|
104
134
|
dataFolder: flags['data-folder'],
|
|
105
135
|
dataSetId,
|
|
@@ -110,11 +140,14 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
110
140
|
filter: queryFilterFlag,
|
|
111
141
|
hubConn,
|
|
112
142
|
mangedInstanceId,
|
|
143
|
+
quickDeploymentComponents: constructQuickDeploymentComponents(metadataQuickSelectComponents),
|
|
144
|
+
simulation: simulationFlag,
|
|
145
|
+
testLevel: testOptionFlag,
|
|
113
146
|
});
|
|
114
147
|
this.log(`Checkout launched with Job ID: ${jobId}`);
|
|
115
148
|
return { jobId, message: 'Checkout launched' };
|
|
116
149
|
}
|
|
117
|
-
async checkoutInstance({ branchFlag, dataFolder, dataSetId, deactivateAllEvents, deploymentNameFlag, deploymentNotes, deploymentPlanId, filter, hubConn, mangedInstanceId, }) {
|
|
150
|
+
async checkoutInstance({ apexTestClasses, branchFlag, dataFolder, dataSetId, deactivateAllEvents, deploymentNameFlag, deploymentNotes, deploymentPlanId, filter, hubConn, mangedInstanceId, quickDeploymentComponents, simulation, testLevel, }) {
|
|
118
151
|
this.log(`Performing checkout for managed instance with id ${mangedInstanceId}.`);
|
|
119
152
|
const path = `/services/apexrest/PDRI/v1/instances/${mangedInstanceId}/checkout`;
|
|
120
153
|
const checkoutInstance = {
|
|
@@ -125,7 +158,15 @@ export default class ProdlyCheckout extends SfCommand {
|
|
|
125
158
|
deploymentName: deploymentNameFlag,
|
|
126
159
|
deploymentNotes,
|
|
127
160
|
deploymentPlanId,
|
|
161
|
+
metadata: quickDeploymentComponents
|
|
162
|
+
? {
|
|
163
|
+
apexTestClasses: constructApexTestClasses(apexTestClasses, testLevel),
|
|
164
|
+
quickDeploymentComponents,
|
|
165
|
+
testLevel,
|
|
166
|
+
}
|
|
167
|
+
: {},
|
|
128
168
|
queryFilter: constructQueryFilter(filter),
|
|
169
|
+
validation: simulation ?? false,
|
|
129
170
|
};
|
|
130
171
|
const request = {
|
|
131
172
|
body: JSON.stringify(checkoutInstance),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../../src/commands/prodly/checkout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,6BAA6B,CAAC;AAC/D,OAAO,
|
|
1
|
+
{"version":3,"file":"checkout.js","sourceRoot":"","sources":["../../../src/commands/prodly/checkout.ts"],"names":[],"mappings":"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"}
|
|
@@ -8,8 +8,10 @@ export default class ProdlyDeploy extends SfCommand<JSONObject> {
|
|
|
8
8
|
static readonly description: string;
|
|
9
9
|
static readonly examples: string[];
|
|
10
10
|
static readonly flags: {
|
|
11
|
+
'apex-test-classes': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
11
12
|
'target-dev-hub': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
12
13
|
'target-org': import("@oclif/core/interfaces").OptionFlag<import("@salesforce/core").Org, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
|
+
'test-option': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
13
15
|
'metadata-quick-select-components': import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
14
16
|
dataset: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
|
|
15
17
|
deactivate: import("@oclif/core/interfaces").BooleanFlag<boolean>;
|
|
@@ -1,10 +1,11 @@
|
|
|
1
1
|
/* eslint-disable complexity */
|
|
2
2
|
import { Messages, SfError } from '@salesforce/core';
|
|
3
3
|
import { Flags, SfCommand } from '@salesforce/sf-plugins-core';
|
|
4
|
-
import { constructQueryFilter } from '../../helpers/index.js';
|
|
4
|
+
import { constructApexTestClasses, constructQueryFilter, constructQuickDeploymentComponents, } from '../../helpers/index.js';
|
|
5
5
|
import { createConnection, getConnectionId, updateConnection } from '../../services/connections.js';
|
|
6
6
|
import { getManagedInstance, manageInstance } from '../../services/manage-instances.js';
|
|
7
7
|
import { getDeploymentEntityId } from '../../services/queries.js';
|
|
8
|
+
import { TEST_OPTIONS } from '../../constants/index.js';
|
|
8
9
|
Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
|
|
9
10
|
const commandMessages = Messages.loadMessages('prodlysfcli', 'prodly.deploy');
|
|
10
11
|
const prodlyMessages = Messages.loadMessages('prodlysfcli', 'prodly');
|
|
@@ -13,8 +14,19 @@ export default class ProdlyDeploy extends SfCommand {
|
|
|
13
14
|
static description = prodlyMessages.getMessage('descriptionDeployCommand');
|
|
14
15
|
static examples = commandMessages.getMessages('examples');
|
|
15
16
|
static flags = {
|
|
17
|
+
'apex-test-classes': Flags.string({
|
|
18
|
+
char: 'a',
|
|
19
|
+
summary: prodlyMessages.getMessage('apexTestClassesFlagDescription'),
|
|
20
|
+
dependsOn: ['test-option'],
|
|
21
|
+
}),
|
|
16
22
|
'target-dev-hub': Flags.requiredHub(),
|
|
17
23
|
'target-org': Flags.requiredOrg(),
|
|
24
|
+
'test-option': Flags.string({
|
|
25
|
+
char: 'r',
|
|
26
|
+
summary: prodlyMessages.getMessage('testOptionFlagDescription'),
|
|
27
|
+
dependsOn: ['metadata-quick-select-components'],
|
|
28
|
+
options: TEST_OPTIONS,
|
|
29
|
+
}),
|
|
18
30
|
'metadata-quick-select-components': Flags.string({
|
|
19
31
|
char: 'm',
|
|
20
32
|
summary: prodlyMessages.getMessage('metadataQuickSelectComponentsFlagDescription'),
|
|
@@ -46,7 +58,7 @@ export default class ProdlyDeploy extends SfCommand {
|
|
|
46
58
|
};
|
|
47
59
|
async run() {
|
|
48
60
|
const { flags } = await this.parse(ProdlyDeploy);
|
|
49
|
-
const { 'metadata-quick-select-components': metadataQuickSelectComponentsFlag, dataset: datasetFlag, deactivate: deactivateFlag, destination: destinationFlag, filter: queryFilterFlag, label: labelFlag, name: deploymentNameFlag, notes: deploymentNotesFlag, plan: planFlag, simulation: simulationFlag, source: sourceFlag, } = flags;
|
|
61
|
+
const { 'apex-test-classes': apexTestClassesFlag, 'metadata-quick-select-components': metadataQuickSelectComponentsFlag, 'test-option': testOptionFlag, dataset: datasetFlag, deactivate: deactivateFlag, destination: destinationFlag, filter: queryFilterFlag, label: labelFlag, name: deploymentNameFlag, notes: deploymentNotesFlag, plan: planFlag, simulation: simulationFlag, source: sourceFlag, } = flags;
|
|
50
62
|
const isOrgSpecified = sourceFlag !== undefined || destinationFlag !== undefined;
|
|
51
63
|
this.log('Deployment name flag: ' + deploymentNameFlag);
|
|
52
64
|
this.log('Deployment description flag: ' + deploymentNotesFlag);
|
|
@@ -59,6 +71,8 @@ export default class ProdlyDeploy extends SfCommand {
|
|
|
59
71
|
this.log('Simulation flag: ' + simulationFlag);
|
|
60
72
|
this.log('Query filter flag: ' + queryFilterFlag);
|
|
61
73
|
this.log('Metadata quick select components flag: ' + metadataQuickSelectComponentsFlag);
|
|
74
|
+
this.log('Test option flag: ' + testOptionFlag);
|
|
75
|
+
this.log('Apex test classes flag: ' + apexTestClassesFlag);
|
|
62
76
|
const hasMetadataQuickSelectComponents = metadataQuickSelectComponentsFlag !== undefined;
|
|
63
77
|
// When no metadata quick select components are provided, require either dataset or plan (but not both)
|
|
64
78
|
if (!hasMetadataQuickSelectComponents && !datasetFlag && !planFlag) {
|
|
@@ -228,19 +242,9 @@ export default class ProdlyDeploy extends SfCommand {
|
|
|
228
242
|
print,
|
|
229
243
|
});
|
|
230
244
|
}
|
|
231
|
-
// Parse metadata quick select components if provided
|
|
232
|
-
let quickDeploymentComponents;
|
|
233
|
-
if (metadataQuickSelectComponentsFlag) {
|
|
234
|
-
try {
|
|
235
|
-
quickDeploymentComponents = JSON.parse(metadataQuickSelectComponentsFlag);
|
|
236
|
-
this.log(`Parsed metadata quick select components: ${JSON.stringify(quickDeploymentComponents)}`);
|
|
237
|
-
}
|
|
238
|
-
catch (error) {
|
|
239
|
-
throw new SfError(`Invalid JSON format for metadata-quick-select-components flag: ${error instanceof Error ? error.message : String(error)}`);
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
245
|
this.log('Launching deployment.');
|
|
243
246
|
const jobId = await this.deploy({
|
|
247
|
+
apexTestClasses: apexTestClassesFlag,
|
|
244
248
|
dataSetId,
|
|
245
249
|
deactivateAllEvents: deactivateFlag,
|
|
246
250
|
deploymentName: deploymentNameFlag,
|
|
@@ -249,15 +253,16 @@ export default class ProdlyDeploy extends SfCommand {
|
|
|
249
253
|
destinationInstanceId,
|
|
250
254
|
hubConn,
|
|
251
255
|
queryFilter: queryFilterFlag,
|
|
252
|
-
quickDeploymentComponents,
|
|
256
|
+
quickDeploymentComponents: constructQuickDeploymentComponents(metadataQuickSelectComponentsFlag),
|
|
253
257
|
simulation: simulationFlag,
|
|
254
258
|
sourceInstanceId,
|
|
259
|
+
testLevel: testOptionFlag,
|
|
255
260
|
});
|
|
256
261
|
this.log(`Deployment launched with Job ID: ${jobId}`);
|
|
257
262
|
// Return an object to be displayed with --json
|
|
258
263
|
return { jobId, message: 'Deployment launched' };
|
|
259
264
|
}
|
|
260
|
-
async deploy({ dataSetId, deactivateAllEvents, deploymentName, deploymentNotes, deploymentPlanId, destinationInstanceId, hubConn, queryFilter, quickDeploymentComponents, simulation, sourceInstanceId, }) {
|
|
265
|
+
async deploy({ apexTestClasses, dataSetId, deactivateAllEvents, deploymentName, deploymentNotes, deploymentPlanId, destinationInstanceId, hubConn, queryFilter, quickDeploymentComponents, simulation, sourceInstanceId, testLevel, }) {
|
|
261
266
|
this.log('Invoking deployment.');
|
|
262
267
|
const path = `/services/apexrest/PDRI/v1/instances/${destinationInstanceId}/deploy`;
|
|
263
268
|
const eventControlOptions = {
|
|
@@ -276,9 +281,15 @@ export default class ProdlyDeploy extends SfCommand {
|
|
|
276
281
|
const deployInstance = {
|
|
277
282
|
deploymentName,
|
|
278
283
|
deploymentNotes,
|
|
279
|
-
engagementId: null,
|
|
280
284
|
data: [dataDeploymentOptions],
|
|
281
|
-
metadata: quickDeploymentComponents
|
|
285
|
+
metadata: quickDeploymentComponents
|
|
286
|
+
? {
|
|
287
|
+
apexTestClasses: constructApexTestClasses(apexTestClasses, testLevel),
|
|
288
|
+
quickDeploymentComponents,
|
|
289
|
+
testLevel,
|
|
290
|
+
validation: simulation ?? false,
|
|
291
|
+
}
|
|
292
|
+
: {},
|
|
282
293
|
source: sourceOptions,
|
|
283
294
|
};
|
|
284
295
|
const request = {
|