From 0574be591647c9fa8da31d44a734f41a3396fbaa Mon Sep 17 00:00:00 2001 From: sameer-motwani Date: Wed, 11 Jun 2025 17:22:00 -0400 Subject: [PATCH 1/6] feat: adding code coverage option to the convert command --- messages/package_convert.md | 10 +++++++++- src/commands/package/convert.ts | 9 +++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/messages/package_convert.md b/messages/package_convert.md index e74213a0..86d888b6 100644 --- a/messages/package_convert.md +++ b/messages/package_convert.md @@ -66,7 +66,7 @@ Display verbose command output. # in-progress -Request in progress. Will wait a total of %s more seconds before timing out. Current Status='%s'. +Request in progress. Will wait a total of %s more seconds before timing out. Current Status='%s'. # flags.seed-metadata.summary @@ -83,3 +83,11 @@ Specific released patch version to be converted. # flags.patch-version.description Specify a released patch version as major.minor.patch to convert to a second-generation managed package version. + +# flags.code-coverage.summary + +Calculate and store the code coverage percentage by running the packaged Apex tests included in this package version. + +# flags.code-coverage.description + +Before you can promote and release a managed package version, the Apex code must meet a minimum 75% code coverage requirement. diff --git a/src/commands/package/convert.ts b/src/commands/package/convert.ts index 83863b6e..8c14a86f 100644 --- a/src/commands/package/convert.ts +++ b/src/commands/package/convert.ts @@ -90,6 +90,14 @@ export class PackageConvert extends SfCommand deprecateAliases: true, aliases: ['patchversion'], }), + 'code-coverage': Flags.boolean({ + deprecateAliases: true, + aliases: ['codecoverage'], + char: 'c', + summary: messages.getMessage('flags.code-coverage.summary'), + description: messages.getMessage('flags.code-coverage.description'), + default: false, + }), }; public async run(): Promise { @@ -131,6 +139,7 @@ export class PackageConvert extends SfCommand buildInstance: flags['build-instance'] as string, seedMetadata: flags['seed-metadata'] as string, patchversion: flags['patch-version'] as string, + codecoverage: flags['code-coverage'] as boolean, }, project ); From 07959d18345974793d6dd4e6287c80511d337fb3 Mon Sep 17 00:00:00 2001 From: sameer-motwani Date: Wed, 11 Jun 2025 18:13:38 -0400 Subject: [PATCH 2/6] feat: adding code coverage option to the convert command with snapshot --- command-snapshot.json | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/command-snapshot.json b/command-snapshot.json index d5918a66..a934c706 100644 --- a/command-snapshot.json +++ b/command-snapshot.json @@ -66,9 +66,10 @@ "installationkeybypass", "patchversion", "target-hub-org", - "targetdevhubusername" + "targetdevhubusername", + "codecoverage" ], - "flagChars": ["a", "f", "k", "m", "p", "s", "v", "w", "x"], + "flagChars": ["a", "f", "k", "m", "p", "s", "v", "w", "x", "c"], "flags": [ "api-version", "build-instance", @@ -83,7 +84,8 @@ "seed-metadata", "target-dev-hub", "verbose", - "wait" + "wait", + "code-coverage" ], "plugin": "@salesforce/plugin-packaging" }, From a6cb4d4370f64cfeb110c17f8b4fecc146b47298 Mon Sep 17 00:00:00 2001 From: sameer-motwani Date: Thu, 12 Jun 2025 14:19:01 -0400 Subject: [PATCH 3/6] feat: adding code coverage option to the convert command with snapshot and tests --- test/commands/package/packageConvert.test.ts | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) diff --git a/test/commands/package/packageConvert.test.ts b/test/commands/package/packageConvert.test.ts index cc2db204..254d6383 100644 --- a/test/commands/package/packageConvert.test.ts +++ b/test/commands/package/packageConvert.test.ts @@ -7,7 +7,12 @@ import { expect } from 'chai'; import { MockTestOrgData, TestContext } from '@salesforce/core/testSetup'; import { Config } from '@oclif/core'; -import { Package, PackageVersionCreateRequestResult, PackagingSObjects } from '@salesforce/packaging'; +import { + Package, + PackageVersionCreateRequestResult, + PackagingSObjects, + type ConvertPackageOptions, +} from '@salesforce/packaging'; import sinon from 'sinon'; import { PackageConvert } from '../../../src/commands/package/convert.js'; import Package2VersionStatus = PackagingSObjects.Package2VersionStatus; @@ -80,8 +85,10 @@ describe('package:convert', () => { ); stubSpinner(cmd); const result = await cmd.run(); - expect(spinnerStartStub.called).to.be.true; + // Check that codecoverage was passed as true + const callArgs = convertStub.getCall(0).args[2] as ConvertPackageOptions; + expect(callArgs.codecoverage).to.equal(false); expect(result).to.deep.equal(pvc); }); it('starts package version create request (success)', async () => { @@ -109,11 +116,14 @@ describe('package:convert', () => { convertStub.restore(); convertStub = $$.SANDBOX.stub(Package, 'convert').resolves(pvc); const cmd = new PackageConvert( - ['-p', CONVERTED_FROM_PACKAGE_ID, '--installation-key', INSTALL_KEY, '-v', 'test@user.com'], + ['-p', CONVERTED_FROM_PACKAGE_ID, '--installation-key', INSTALL_KEY, '-v', 'test@user.com', '-c'], config ); stubSpinner(cmd); const result = await cmd.run(); + // Check that codecoverage was passed as true + const callArgs = convertStub.getCall(0).args[2] as ConvertPackageOptions; + expect(callArgs.codecoverage).to.equal(true); expect(result).to.deep.equal(pvc); }); it('starts package version create request (error)', async () => { From 3a8d8249a1622c36265b50e7ec248439c87b009b Mon Sep 17 00:00:00 2001 From: Steve Hetzel Date: Thu, 12 Jun 2025 14:04:50 -0600 Subject: [PATCH 4/6] Update test/commands/package/packageConvert.test.ts --- test/commands/package/packageConvert.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/commands/package/packageConvert.test.ts b/test/commands/package/packageConvert.test.ts index 254d6383..3107dab2 100644 --- a/test/commands/package/packageConvert.test.ts +++ b/test/commands/package/packageConvert.test.ts @@ -86,7 +86,7 @@ describe('package:convert', () => { stubSpinner(cmd); const result = await cmd.run(); expect(spinnerStartStub.called).to.be.true; - // Check that codecoverage was passed as true + // Check that codecoverage was passed as false const callArgs = convertStub.getCall(0).args[2] as ConvertPackageOptions; expect(callArgs.codecoverage).to.equal(false); expect(result).to.deep.equal(pvc); From 542cc694738f62f89939d156654d5dcffe7b4937 Mon Sep 17 00:00:00 2001 From: sameer-motwani Date: Fri, 13 Jun 2025 10:38:20 -0400 Subject: [PATCH 5/6] feat: adding code coverage option linking with packaging --- package.json | 2 +- src/commands/package/convert.ts | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/package.json b/package.json index 87047b3c..de95a426 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,7 @@ "@oclif/core": "^4", "@salesforce/core": "^8.12.0", "@salesforce/kit": "^3.2.3", - "@salesforce/packaging": "^4.6.0", + "@salesforce/packaging": "^4.7.0", "@salesforce/sf-plugins-core": "^12.2.2", "chalk": "^5.4.1" }, diff --git a/src/commands/package/convert.ts b/src/commands/package/convert.ts index 8c14a86f..5ced38dc 100644 --- a/src/commands/package/convert.ts +++ b/src/commands/package/convert.ts @@ -91,8 +91,6 @@ export class PackageConvert extends SfCommand aliases: ['patchversion'], }), 'code-coverage': Flags.boolean({ - deprecateAliases: true, - aliases: ['codecoverage'], char: 'c', summary: messages.getMessage('flags.code-coverage.summary'), description: messages.getMessage('flags.code-coverage.description'), From ebd51da9d6607d0bbbe10edcf37fec5924f7b7f8 Mon Sep 17 00:00:00 2001 From: sameer-motwani Date: Fri, 13 Jun 2025 10:53:56 -0400 Subject: [PATCH 6/6] feat: adding code coverage option description to the convert command --- messages/package_convert.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/messages/package_convert.md b/messages/package_convert.md index 86d888b6..e136123c 100644 --- a/messages/package_convert.md +++ b/messages/package_convert.md @@ -12,6 +12,8 @@ To retrieve details about a package version create request, including status and To protect the contents of your package and to prevent unauthorized installation of your package, specify the --installation-key flag. +To promote a package version to released, you must use the --code-coverage parameter. The package must also meet the code coverage requirements. + To list package version creation requests in the org, run "<%= config.bin %> package version create list". # examples