Skip to content

Commit 9782aeb

Browse files
committed
feat: handle unpackaged md for conversion
1 parent 563e9e7 commit 9782aeb

File tree

2 files changed

+76
-1
lines changed

2 files changed

+76
-1
lines changed

src/package/packageConvert.ts

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,10 @@ export async function createPackageVersionCreateRequest(
202202
const packageVersTmpRoot = path.join(os.tmpdir(), uniqueId);
203203
const packageVersMetadataFolder = path.join(packageVersTmpRoot, 'md-files');
204204
const seedMetadataFolder = path.join(packageVersTmpRoot, 'seed-md-files');
205+
const unpackagedMetadataFolder = path.join(packageVersTmpRoot, 'unpackaged-md-files');
205206
const packageVersBlobDirectory = path.join(packageVersTmpRoot, 'package-version-info');
206207
const seedMetadataZipFile = path.join(packageVersBlobDirectory, 'seed-metadata-package.zip');
208+
const unpackagedMetadataZipFile = path.join(packageVersBlobDirectory, 'unpackaged-metadata-package.zip');
207209
const settingsZipFile = path.join(packageVersBlobDirectory, 'settings.zip');
208210
const metadataZipFile = path.join(packageVersBlobDirectory, 'package.zip');
209211
const packageVersBlobZipFile = path.join(packageVersTmpRoot, 'package-version-info.zip');
@@ -241,13 +243,31 @@ export async function createPackageVersionCreateRequest(
241243
await fs.promises.mkdir(packageVersMetadataFolder, { recursive: true });
242244

243245
const seedMetadataPath = context.seedmetadata ?? packageDescriptorJson.seedMetadata?.path;
246+
244247
const hasSeedMetadata = await new MetadataResolver().resolveMetadata(
245248
seedMetadataPath,
246249
seedMetadataFolder,
247250
'seedMDDirectoryDoesNotExist',
248251
apiVersion
249252
);
250253

254+
if (context.codecoverage) {
255+
const unpackagedMetadataPath = packageDescriptorJson.unpackagedMetadata?.path;
256+
const hasUnpackaged = await new MetadataResolver().resolveMetadata(
257+
unpackagedMetadataPath,
258+
unpackagedMetadataFolder,
259+
'unpackagedMDDirectoryDoesNotExist',
260+
apiVersion
261+
);
262+
263+
if (hasUnpackaged) {
264+
Logger.childFromRoot('packageConvert').debug(
265+
`Including unpackaged metadata found in '${unpackagedMetadataPath ?? '<undefined unpackagedmetadata>'}'.`
266+
);
267+
await pkgUtils.zipDir(unpackagedMetadataFolder, unpackagedMetadataZipFile);
268+
}
269+
}
270+
251271
if (hasSeedMetadata) {
252272
// Zip the seedMetadataFolder folder and put the zip in {packageVersBlobDirectory}/{seedMetadataZipFile}
253273
Logger.childFromRoot('packageConvert:pollForStatusWithInterval').debug(
@@ -295,7 +315,7 @@ function buildPackageDescriptorJson(args: {
295315
...(base ?? {}),
296316
};
297317
if (packageObject && isPackagingDirectory(packageObject)) {
298-
const allowedKeys: Array<keyof PackageDescriptorJson> = ['apexTestAccess', 'seedMetadata'];
318+
const allowedKeys: Array<keyof PackageDescriptorJson> = ['apexTestAccess', 'seedMetadata', 'unpackagedMetadata'];
299319
for (const key of allowedKeys) {
300320
if (Object.prototype.hasOwnProperty.call(packageObject, key)) {
301321
const value = (packageObject as unknown as PackageDescriptorJson)[key];

test/package/packageConvert.test.ts

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,61 @@ describe('packageConvert', () => {
160160
}
161161
});
162162

163+
it('should pick up unpackagedMetadata from sfdx-project.json when codecoverage is enabled', async () => {
164+
$$.inProject(true);
165+
const project = SfProject.getInstance();
166+
167+
await fs.promises.mkdir(path.join(project.getPath(), 'force-app'), { recursive: true });
168+
169+
project.getSfProjectJson().set('packageDirectories', [
170+
{
171+
path: 'force-app',
172+
package: '0Ho3i000000Gmj6CAC',
173+
unpackagedMetadata: { path: 'unpackaged-md' },
174+
},
175+
]);
176+
await project.getSfProjectJson().write();
177+
178+
$$.SANDBOX.stub(fs, 'existsSync').returns(true);
179+
const resolveMetadataSpy = $$.SANDBOX.spy(MetadataResolver.prototype, 'resolveMetadata');
180+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
181+
$$.SANDBOX.stub(MetadataResolver.prototype, 'generateMDFolderForArtifact' as any).resolves();
182+
183+
await createPackageVersionCreateRequest({ codecoverage: true }, '0Ho3i000000Gmj6CAC', '60.0', project);
184+
185+
// check that resolveMetadata was called with the unpackaged metadata directory
186+
expect(resolveMetadataSpy.calledWith('unpackaged-md')).to.be.true;
187+
});
188+
189+
it('should NOT pick up unpackagedMetadata from sfdx-project.json when codecoverage is disabled', async () => {
190+
$$.inProject(true);
191+
const project = SfProject.getInstance();
192+
193+
await fs.promises.mkdir(path.join(project.getPath(), 'force-app'), { recursive: true });
194+
195+
project.getSfProjectJson().set('packageDirectories', [
196+
{
197+
path: 'force-app',
198+
package: '0Ho3i000000Gmj6CAC',
199+
unpackagedMetadata: { path: 'unpackaged-md' },
200+
},
201+
]);
202+
await project.getSfProjectJson().write();
203+
204+
const resolveMetadataSpy = $$.SANDBOX.spy(MetadataResolver.prototype, 'resolveMetadata');
205+
206+
await createPackageVersionCreateRequest(
207+
{ codecoverage: false }, // disabled
208+
'0Ho3i000000Gmj6CAC',
209+
'60.0',
210+
project
211+
);
212+
213+
// Verify it was NOT called for the unpackaged directory
214+
const unpackagedCall = resolveMetadataSpy.getCalls().find((call) => call.args[0] === 'unpackaged-md');
215+
expect(unpackagedCall).to.be.undefined;
216+
});
217+
163218
it('should set apexTestAccess permissions in package2descriptor.json when codecoverage is enabled', async () => {
164219
$$.inProject(true);
165220
const project = SfProject.getInstance();

0 commit comments

Comments
 (0)