Skip to content

Commit 29d9c08

Browse files
committed
feat: add warning message if TotalSizeOfMetadataFiles exceeds 420MB
1 parent b36168d commit 29d9c08

13 files changed

+91
-30
lines changed

messages/package_version_create.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -232,3 +232,7 @@ An unknown error occurred.
232232
# warnOnTotalFileCountExceedingThreshold
233233

234234
This package contains more than %s metadata files. The maximum number of metadata files in a package is %s. If you reach the file limit, you won’t be able to create new package versions. To confirm the exact file count for this package, run sf package version report and review the “# Metadata Files” column.
235+
236+
# warnOnTotalFileSizeExceedingThreshold
237+
238+
The maximum size of all the metadata files size in a single package is %s MB. The package version you’re creating exceeds 70% of the metadata file size limit. If you reach the file size limit, you won’t be able to create new package versions. To confirm the exact file size for this package, run sf package version report and review the “Metadata File Size” column.

schemas/package-convert.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
},
5757
"TotalNumberOfMetadataFiles": {
5858
"type": ["number", "null"]
59+
},
60+
"TotalSizeOfMetadataFiles": {
61+
"type": ["number", "null"]
5962
}
6063
},
6164
"required": [
@@ -75,7 +78,8 @@
7578
"VersionNumber",
7679
"CreatedBy",
7780
"ConvertedFromVersionId",
78-
"TotalNumberOfMetadataFiles"
81+
"TotalNumberOfMetadataFiles",
82+
"TotalSizeOfMetadataFiles"
7983
],
8084
"additionalProperties": false
8185
},

schemas/package-version-create-list.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@
6262
},
6363
"TotalNumberOfMetadataFiles": {
6464
"type": ["number", "null"]
65+
},
66+
"TotalSizeOfMetadataFiles": {
67+
"type": ["number", "null"]
6568
}
6669
},
6770
"required": [
@@ -81,6 +84,7 @@
8184
"SubscriberPackageVersionId",
8285
"Tag",
8386
"TotalNumberOfMetadataFiles",
87+
"TotalSizeOfMetadataFiles",
8488
"VersionNumber"
8589
]
8690
}

schemas/package-version-create-report.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,9 @@
6262
},
6363
"TotalNumberOfMetadataFiles": {
6464
"type": ["number", "null"]
65+
},
66+
"TotalSizeOfMetadataFiles": {
67+
"type": ["number", "null"]
6568
}
6669
},
6770
"required": [
@@ -81,7 +84,8 @@
8184
"VersionNumber",
8285
"CreatedBy",
8386
"ConvertedFromVersionId",
84-
"TotalNumberOfMetadataFiles"
87+
"TotalNumberOfMetadataFiles",
88+
"TotalSizeOfMetadataFiles"
8589
],
8690
"additionalProperties": false
8791
},

schemas/package-version-create.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,9 @@
5656
},
5757
"TotalNumberOfMetadataFiles": {
5858
"type": ["number", "null"]
59+
},
60+
"TotalSizeOfMetadataFiles": {
61+
"type": ["number", "null"]
5962
}
6063
},
6164
"additionalProperties": false

schemas/package-version-report.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -179,6 +179,9 @@
179179
"TotalNumberOfMetadataFiles": {
180180
"type": "number"
181181
},
182+
"TotalSizeOfMetadataFiles": {
183+
"type": "number"
184+
},
182185
"SubscriberPackageVersion": {
183186
"type": "object",
184187
"properties": {

src/commands/package/version/create.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,8 @@ Messages.importMessagesDirectoryFromMetaUrl(import.meta.url);
2424
const messages = Messages.loadMessages('@salesforce/plugin-packaging', 'package_version_create');
2525
const fileCountThreshold = 7000;
2626
const maxFileCountLimit = 10_000;
27+
const fileSizeThreshold = 420; // 420MB
28+
const maxFileSizeLimit = 600; // 600MB
2729
export type PackageVersionCommandResult = Partial<PackageVersionCreateRequestResult>;
2830

2931
export class PackageVersionCreateCommand extends SfCommand<PackageVersionCommandResult> {
@@ -290,6 +292,13 @@ export class PackageVersionCreateCommand extends SfCommand<PackageVersionCommand
290292
messages.getMessage('warnOnTotalFileCountExceedingThreshold', [fileCountThreshold, maxFileCountLimit])
291293
);
292294
}
295+
if (
296+
result.TotalSizeOfMetadataFiles !== null &&
297+
result.TotalSizeOfMetadataFiles !== undefined &&
298+
result.TotalSizeOfMetadataFiles / (1024 * 1024) > fileSizeThreshold
299+
) {
300+
messages.getMessage('warnOnTotalFileSizeExceedingThreshold', [maxFileSizeLimit]);
301+
}
293302
break;
294303
default:
295304
this.log(

src/commands/package/version/report.ts

Lines changed: 36 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import {
1515
PackagingSObjects,
1616
} from '@salesforce/packaging';
1717
import chalk from 'chalk';
18+
import { Connection } from '@salesforce/core';
1819
import { requiredHubFlag } from '../../../utils/hubFlag.js';
1920
import { maybeGetProject } from '../../../utils/getProject.js';
2021

@@ -57,18 +58,19 @@ export class PackageVersionReportCommand extends SfCommand<PackageVersionReportR
5758

5859
public async run(): Promise<PackageVersionReportResultModified> {
5960
const { flags } = await this.parse(PackageVersionReportCommand);
61+
const connection = flags['target-dev-hub'].getConnection(flags['api-version']);
6062
const packageVersion = new PackageVersion({
61-
connection: flags['target-dev-hub'].getConnection(flags['api-version']),
63+
connection,
6264
project: await maybeGetProject(),
6365
idOrAlias: flags.package,
6466
});
6567
const results = await packageVersion.report(flags.verbose);
6668
const massagedResults = this.massageResultsForDisplay(results);
67-
this.display(massagedResults, flags.verbose);
69+
this.display(massagedResults, flags.verbose, connection);
6870
return massagedResults;
6971
}
7072

71-
private display(record: PackageVersionReportResultModified, verbose: boolean): void {
73+
private display(record: PackageVersionReportResultModified, verbose: boolean, connection: Connection): void {
7274
if (this.jsonEnabled()) {
7375
return;
7476
}
@@ -166,6 +168,21 @@ export class PackageVersionReportCommand extends SfCommand<PackageVersionReportR
166168
value: record.CreatedById,
167169
},
168170
];
171+
172+
if (Number(connection.version) > 63) {
173+
displayRecords.push(
174+
{
175+
key: '# MetadataFiles',
176+
value: record.TotalNumberOfMetadataFiles?.toString() ?? '',
177+
},
178+
{
179+
key: 'Metadata File Size',
180+
value: record.TotalSizeOfMetadataFiles
181+
? Math.floor(record.TotalSizeOfMetadataFiles / (1024 * 1024)).toString()
182+
: '',
183+
}
184+
);
185+
}
169186
const maximumNumClasses = 15; // Number of least code covered classes displayed on the cli output for better UX.
170187
let codeCovStr = ''; // String to display when code coverage data is empty or null
171188
let displayCoverageRecords: Array<{ value: string; key: string }> = [];
@@ -197,6 +214,22 @@ export class PackageVersionReportCommand extends SfCommand<PackageVersionReportR
197214
key: messages.getMessage('codeCoveragePercentages'),
198215
value: this.haveCodeCoverageData ? '...' : codeCovStr,
199216
});
217+
218+
this.filterVerboseRecords(record, displayRecords, displayCoverageRecords, verbose);
219+
220+
this.table({ data: displayRecords, title: chalk.blue('Package Version') });
221+
if (displayCoverageRecords.length > 0) {
222+
this.table({ data: displayCoverageRecords });
223+
}
224+
}
225+
226+
// eslint-disable-next-line class-methods-use-this
227+
private filterVerboseRecords(
228+
record: PackageVersionReportResultModified,
229+
displayRecords: Array<Record<string, unknown>>,
230+
displayCoverageRecords: Array<{ value: string; key: string }>,
231+
verbose: boolean
232+
): void {
200233
if (!verbose) {
201234
displayRecords.splice(displayRecords.map((e) => e.key).indexOf('Id'), 1);
202235
if (!record.ConvertedFromVersionId?.trim()) {
@@ -212,10 +245,6 @@ export class PackageVersionReportCommand extends SfCommand<PackageVersionReportR
212245
);
213246
displayCoverageRecords.splice(0, displayCoverageRecords.length);
214247
}
215-
this.table({ data: displayRecords, title: chalk.blue('Package Version') });
216-
if (displayCoverageRecords.length > 0) {
217-
this.table({ data: displayCoverageRecords });
218-
}
219248
}
220249

221250
// eslint-disable-next-line class-methods-use-this

test/commands/package/packageConvert.test.ts

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,7 @@ describe('package:convert', () => {
7070
CodeCoverage: null,
7171
VersionNumber: null,
7272
TotalNumberOfMetadataFiles: null,
73+
TotalSizeOfMetadataFiles: null,
7374
} satisfies PackageVersionCreateRequestResult;
7475

7576
convertStub = $$.SANDBOX.stub(Package, 'convert').resolves(pvc);
@@ -102,6 +103,7 @@ describe('package:convert', () => {
102103
CodeCoverage: null,
103104
VersionNumber: null,
104105
TotalNumberOfMetadataFiles: null,
106+
TotalSizeOfMetadataFiles: null,
105107
};
106108

107109
convertStub.restore();
@@ -133,6 +135,7 @@ describe('package:convert', () => {
133135
CodeCoverage: null,
134136
VersionNumber: null,
135137
TotalNumberOfMetadataFiles: null,
138+
TotalSizeOfMetadataFiles: null,
136139
};
137140

138141
convertStub.restore();

test/commands/package/packageVersion.nut.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,7 @@ const expectedPVCRkeys = [
4343
'CodeCoverage',
4444
'VersionNumber',
4545
'TotalNumberOfMetadataFiles',
46+
'TotalSizeOfMetadataFiles',
4647
];
4748

4849
// Keys expected for Package version create list.

0 commit comments

Comments
 (0)