Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat: support an include or exclude list of metadata when building a manifest from an org #1247

Open
wants to merge 6 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
57 changes: 38 additions & 19 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ FLAG DESCRIPTIONS
If you specify this flag, don’t specify --metadata or --source-dir.
```

_See code: [src/commands/project/convert/mdapi.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/convert/mdapi.ts)_
_See code: [src/commands/project/convert/mdapi.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/convert/mdapi.ts)_

## `sf project convert source`

Expand Down Expand Up @@ -214,7 +214,7 @@ FLAG DESCRIPTIONS
Override the api version used for api requests made by this command
```

_See code: [src/commands/project/convert/source.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/convert/source.ts)_
_See code: [src/commands/project/convert/source.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/convert/source.ts)_

## `sf project convert source-behavior`

Expand Down Expand Up @@ -272,7 +272,7 @@ EXAMPLES
$ sf project convert source-behavior --behavior decomposePermissionSetBeta --dry-run --preserve-temp-dir
```

_See code: [src/commands/project/convert/source-behavior.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/convert/source-behavior.ts)_
_See code: [src/commands/project/convert/source-behavior.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/convert/source-behavior.ts)_

## `sf project delete source`

Expand Down Expand Up @@ -412,7 +412,7 @@ FLAG DESCRIPTIONS
- Separate the test names with spaces: --tests Test1 Test2 "Test With Space"
```

_See code: [src/commands/project/delete/source.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/delete/source.ts)_
_See code: [src/commands/project/delete/source.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/delete/source.ts)_

## `sf project delete tracking`

Expand Down Expand Up @@ -449,7 +449,7 @@ EXAMPLES
$ sf project delete tracking --target-org my-scratch
```

_See code: [src/commands/project/delete/tracking.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/delete/tracking.ts)_
_See code: [src/commands/project/delete/tracking.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/delete/tracking.ts)_

## `sf project deploy cancel`

Expand Down Expand Up @@ -521,7 +521,7 @@ FLAG DESCRIPTIONS
project deploy report".
```

_See code: [src/commands/project/deploy/cancel.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/cancel.ts)_
_See code: [src/commands/project/deploy/cancel.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/cancel.ts)_

## `sf project deploy preview`

Expand Down Expand Up @@ -604,7 +604,7 @@ FLAG DESCRIPTIONS
All child components are included. If you specify this flag, don’t specify --metadata or --source-dir.
```

_See code: [src/commands/project/deploy/preview.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/preview.ts)_
_See code: [src/commands/project/deploy/preview.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/preview.ts)_

## `sf project deploy quick`

Expand Down Expand Up @@ -688,7 +688,7 @@ FLAG DESCRIPTIONS
deploy report".
```

_See code: [src/commands/project/deploy/quick.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/quick.ts)_
_See code: [src/commands/project/deploy/quick.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/quick.ts)_

## `sf project deploy report`

Expand Down Expand Up @@ -780,7 +780,7 @@ FLAG DESCRIPTIONS
--coverage-formatters lcov --coverage-formatters clover
```

_See code: [src/commands/project/deploy/report.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/report.ts)_
_See code: [src/commands/project/deploy/report.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/report.ts)_

## `sf project deploy resume`

Expand Down Expand Up @@ -865,7 +865,7 @@ FLAG DESCRIPTIONS
--coverage-formatters lcov --coverage-formatters clover
```

_See code: [src/commands/project/deploy/resume.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/resume.ts)_
_See code: [src/commands/project/deploy/resume.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/resume.ts)_

## `sf project deploy start`

Expand Down Expand Up @@ -1101,7 +1101,7 @@ FLAG DESCRIPTIONS
--coverage-formatters lcov --coverage-formatters clover
```

_See code: [src/commands/project/deploy/start.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/start.ts)_
_See code: [src/commands/project/deploy/start.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/start.ts)_

## `sf project deploy validate`

Expand Down Expand Up @@ -1274,16 +1274,17 @@ FLAG DESCRIPTIONS
--coverage-formatters lcov --coverage-formatters clover
```

_See code: [src/commands/project/deploy/validate.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/deploy/validate.ts)_
_See code: [src/commands/project/deploy/validate.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/deploy/validate.ts)_

## `sf project generate manifest`

Create a project manifest that lists the metadata components you want to deploy or retrieve.

```
USAGE
$ sf project generate manifest [--json] [--flags-dir <value>] [--api-version <value>] [-m <value>...] [-p <value>...] [-n
<value> | -t pre|post|destroy|package] [-c managed|unlocked... --from-org <value>] [-d <value>]
$ sf project generate manifest [--json] [--flags-dir <value>] [--api-version <value>] [-m <value>... | -p <value>...] [-n
<value> | -t pre|post|destroy|package] [-c managed|unlocked... --from-org <value>] [--excluded-metadata <value>... ]
[-d <value>]

FLAGS
-c, --include-packages=<option>... Package types (managed, unlocked) whose metadata is included in the manifest; by
Expand All @@ -1297,6 +1298,8 @@ FLAGS
-t, --type=<option> Type of manifest to create; the type determines the name of the created file.
<options: pre|post|destroy|package>
--api-version=<value> Override the api version used for api requests made by this command
--excluded-metadata=<value>... Metadata types to exclude when building a manifest from an org. Specify the name
of the type, not the name of a specific component.
--from-org=<value> Username or alias of the org that contains the metadata components from which to
build a manifest.

Expand Down Expand Up @@ -1329,6 +1332,14 @@ DESCRIPTION
multiple names separated by spaces. Enclose names that contain spaces in one set of double quotes. The same syntax
applies to --include-packages and --source-dir.

To build a manifest from the metadata in an org, use the --from-org flag. You can combine --from-org with the
--metadata flag to include only certain metadata types, or with the --excluded-metadata flag to exclude certain
metadata types. When building a manifest from an org, the command makes many concurrent API calls to discover the
metadata that exists in the org. To limit the number of concurrent requests, use the SF_LIST_METADATA_BATCH_SIZE
environment variable and set it to a size that works best for your org and environment. If you experience timeouts or
inconsistent manifest contents, then setting this environment variable can improve accuracy. However, the command
takes longer to run because it sends fewer requests at a time.

ALIASES
$ sf force source manifest create

Expand All @@ -1349,9 +1360,17 @@ EXAMPLES
Create a manifest from the metadata components in the specified org and include metadata in any unlocked packages:

$ sf project generate manifest --from-org [email protected] --include-packages unlocked

Create a manifest from specific metadata types in an org:

$ sf project generate manifest --from-org [email protected] --metadata ApexClass,CustomObject,CustomLabels

Create a manifest from all metadata components in an org excluding specific metadata types:

$ sf project generate manifest --from-org [email protected] --excluded-metadata StandardValueSet
```

_See code: [src/commands/project/generate/manifest.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/generate/manifest.ts)_
_See code: [src/commands/project/generate/manifest.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/generate/manifest.ts)_

## `sf project list ignored`

Expand Down Expand Up @@ -1393,7 +1412,7 @@ EXAMPLES
$ sf project list ignored --source-dir package.xml
```

_See code: [src/commands/project/list/ignored.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/list/ignored.ts)_
_See code: [src/commands/project/list/ignored.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/list/ignored.ts)_

## `sf project reset tracking`

Expand Down Expand Up @@ -1442,7 +1461,7 @@ EXAMPLES
$ sf project reset tracking --revision 30
```

_See code: [src/commands/project/reset/tracking.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/reset/tracking.ts)_
_See code: [src/commands/project/reset/tracking.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/reset/tracking.ts)_

## `sf project retrieve preview`

Expand Down Expand Up @@ -1496,7 +1515,7 @@ FLAG DESCRIPTIONS
production orgs.
```

_See code: [src/commands/project/retrieve/preview.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/retrieve/preview.ts)_
_See code: [src/commands/project/retrieve/preview.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/retrieve/preview.ts)_

## `sf project retrieve start`

Expand Down Expand Up @@ -1665,6 +1684,6 @@ FLAG DESCRIPTIONS
If you specify this flag, don’t specify --metadata or --source-dir.
```

_See code: [src/commands/project/retrieve/start.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.1/src/commands/project/retrieve/start.ts)_
_See code: [src/commands/project/retrieve/start.ts](https://github.com/salesforcecli/plugin-deploy-retrieve/blob/3.16.2-dev-17431548.0/src/commands/project/retrieve/start.ts)_

<!-- commandsstop -->
1 change: 1 addition & 0 deletions command-snapshot.json
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,7 @@
"flagChars": ["c", "d", "m", "n", "p", "t"],
"flags": [
"api-version",
"excluded-metadata",
"flags-dir",
"from-org",
"include-packages",
Expand Down
14 changes: 14 additions & 0 deletions messages/manifest.generate.md
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,8 @@ Use --name to specify a custom name for the generated manifest if the pre-define

To include multiple metadata components, either set multiple --metadata <name> flags or a single --metadata flag with multiple names separated by spaces. Enclose names that contain spaces in one set of double quotes. The same syntax applies to --include-packages and --source-dir.

To build a manifest from the metadata in an org, use the --from-org flag. You can combine --from-org with the --metadata flag to include only certain metadata types, or with the --excluded-metadata flag to exclude certain metadata types. When building a manifest from an org, the command makes many concurrent API calls to discover the metadata that exists in the org. To limit the number of concurrent requests, use the SF_LIST_METADATA_BATCH_SIZE environment variable and set it to a size that works best for your org and environment. If you experience timeouts or inconsistent manifest contents, then setting this environment variable can improve accuracy. However, the command takes longer to run because it sends fewer requests at a time.

# examples

- Create a manifest for deploying or retrieving all Apex classes and custom objects:
Expand All @@ -37,10 +39,22 @@ To include multiple metadata components, either set multiple --metadata <name> f

$ <%= config.bin %> <%= command.id %> --from-org [email protected] --include-packages unlocked

- Create a manifest from specific metadata types in an org:

$ <%= config.bin %> <%= command.id %> --from-org [email protected] --metadata ApexClass,CustomObject,CustomLabels

- Create a manifest from all metadata components in an org excluding specific metadata types:

$ <%= config.bin %> <%= command.id %> --from-org [email protected] --excluded-metadata StandardValueSet

# flags.include-packages.summary

Package types (managed, unlocked) whose metadata is included in the manifest; by default, metadata in managed and unlocked packages is excluded. Metadata in unmanaged packages is always included.

# flags.excluded-metadata.summary

Metadata types to exclude when building a manifest from an org. Specify the name of the type, not the name of a specific component.

# flags.from-org.summary

Username or alias of the org that contains the metadata components from which to build a manifest.
Expand Down
4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@salesforce/plugin-deploy-retrieve",
"description": "deploy and retrieve commands for sf",
"version": "3.16.1",
"version": "3.16.2-dev-17431548.0",
"author": "Salesforce",
"bugs": "https://github.com/forcedotcom/cli/issues",
"dependencies": {
Expand All @@ -12,7 +12,7 @@
"@salesforce/kit": "^3.2.3",
"@salesforce/plugin-info": "^3.4.23",
"@salesforce/sf-plugins-core": "^12.1.1",
"@salesforce/source-deploy-retrieve": "^12.10.3",
"@salesforce/source-deploy-retrieve": "12.10.4-dev-17431548.0",
"@salesforce/source-tracking": "^7.1.17",
"@salesforce/ts-types": "^2.0.12",
"ansis": "^3.3.2",
Expand Down
4 changes: 1 addition & 3 deletions src/commands/project/delete/source.ts
Original file line number Diff line number Diff line change
Expand Up @@ -404,9 +404,7 @@ export class Source extends SfCommand<DeleteSourceJson> {
.filter(sourceComponentIsNotInMixedDeployDelete(this.mixedDeployDelete))
.flatMap((c) =>
// for custom labels, print each custom label to be deleted, not the whole file
isNonDecomposedCustomLabelsOrCustomLabel(c)
? [`${c.type.name}:${c.fullName}`]
: [c.xml, ...c.walkContent()] ?? []
isNonDecomposedCustomLabelsOrCustomLabel(c) ? [`${c.type.name}:${c.fullName}`] : [c.xml, ...c.walkContent()]
)
.concat(this.mixedDeployDelete.delete.map((fr) => `${fr.fullName} (${fr.filePath})`));

Expand Down
35 changes: 25 additions & 10 deletions src/commands/project/generate/manifest.ts
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ export type ManifestGenerateCommandResult = {
path: string;
};

const xorFlags = ['metadata', 'source-dir', 'from-org'];
const atLeastOneOfFlags = ['metadata', 'source-dir', 'from-org'];

export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {
public static readonly summary = messages.getMessage('summary');
Expand All @@ -53,14 +53,14 @@ export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {
metadata: arrayWithDeprecation({
char: 'm',
summary: messages.getMessage('flags.metadata.summary'),
exactlyOne: xorFlags,
exclusive: ['source-dir'],
}),
'source-dir': arrayWithDeprecation({
char: 'p',
aliases: ['sourcepath'],
deprecateAliases: true,
summary: messages.getMessage('flags.source-dir.summary'),
exactlyOne: xorFlags,
exclusive: ['metadata'],
}),
name: Flags.string({
char: 'n',
Expand All @@ -85,11 +85,18 @@ export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {
char: 'c',
dependsOn: ['from-org'],
}),
'excluded-metadata': Flags.string({
multiple: true,
delimiter: ',',
summary: messages.getMessage('flags.excluded-metadata.summary'),
dependsOn: ['from-org'],
exclusive: ['metadata'],
}),
'from-org': Flags.custom({
summary: messages.getMessage('flags.from-org.summary'),
exactlyOne: xorFlags,
aliases: ['fromorg'],
deprecateAliases: true,
exclusive: ['source-dir'],
parse: async (input: string | undefined) => (input ? Org.create({ aliasOrUsername: input }) : undefined),
})(),
'output-dir': Flags.string({
Expand All @@ -102,6 +109,12 @@ export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {

public async run(): Promise<ManifestGenerateCommandResult> {
const { flags } = await this.parse(ManifestGenerate);

// We need at least one of these flags (but could be more than 1): 'metadata', 'source-dir', 'from-org'
if (!Object.keys(flags).some((f) => atLeastOneOfFlags.includes(f))) {
throw Error(`provided flags must include at least one of: ${atLeastOneOfFlags.toString()}`);
}

// convert the manifesttype into one of the "official" manifest names
// if no manifesttype flag passed, use the manifestname?flag
// if no manifestname flag, default to 'package.xml'
Expand All @@ -114,12 +127,14 @@ export class ManifestGenerate extends SfCommand<ManifestGenerateCommandResult> {
const componentSet = await ComponentSetBuilder.build({
apiversion: flags['api-version'] ?? (await getSourceApiVersion()),
sourcepath: flags['source-dir'],
metadata: flags.metadata
? {
metadataEntries: flags.metadata,
directoryPaths: await getPackageDirs(),
}
: undefined,
metadata:
flags.metadata ?? flags['excluded-metadata']
? {
metadataEntries: flags.metadata ?? [],
directoryPaths: await getPackageDirs(),
excludedEntries: flags['excluded-metadata'],
}
: undefined,
org: flags['from-org']
? {
username: flags['from-org'].getUsername() as string,
Expand Down
Loading
Loading