diff --git a/packages/core/package-lock.json b/packages/core/package-lock.json index 201ce685b..7af5c716f 100644 --- a/packages/core/package-lock.json +++ b/packages/core/package-lock.json @@ -1,6 +1,6 @@ { "name": "@dxatscale/sfpowerscripts.core", - "version": "23.0.6", + "version": "23.1.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/core/package.json b/packages/core/package.json index 3b6412f5d..b8cd05a81 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -1,6 +1,6 @@ { "name": "@dxatscale/sfpowerscripts.core", - "version": "23.0.6", + "version": "23.1.0", "description": "Core Module used by sfpowerscripts", "main": "lib/index", "types": "lib/index", diff --git a/packages/core/src/project/ProjectConfig.ts b/packages/core/src/project/ProjectConfig.ts index 0d6599d86..bf3fb3659 100644 --- a/packages/core/src/project/ProjectConfig.ts +++ b/packages/core/src/project/ProjectConfig.ts @@ -27,7 +27,48 @@ export default class ProjectConfig { let projectConfig = ProjectConfig.getSFDXProjectConfig(projectDirectory); let sfdxpackages = []; projectConfig['packageDirectories'].forEach((pkg) => { - sfdxpackages.push(pkg['package']); + //Only push packages that have package and versionNumber, ignore everything else + if(pkg.package && pkg.versionNumber) + sfdxpackages.push(pkg.package); + }); + return sfdxpackages; + } + + /** + * Returns package names from projectConfig, as an array of strings + * @param projectDirectory + */ + public static getAllPackagesFromProjectConfig(projectConfig: any): string[] { + + let sfdxpackages = []; + projectConfig.packageDirectories.forEach((pkg) => { + //Only push packages that have package and versionNumber, ignore everything else + if(pkg.package && pkg.versionNumber) + sfdxpackages.push(pkg.package); + }); + return sfdxpackages; + } + + public static getAllPackageDirectoriesFromDirectory(projectDirectory?:string):any[] + { + let projectConfig = ProjectConfig.getSFDXProjectConfig(projectDirectory); + let sfdxpackages = []; + projectConfig.packageDirectories?.forEach((pkg) => { + //Only push packages that have package and versionNumber, ignore everything else + if(pkg.package && pkg.versionNumber) + sfdxpackages.push(pkg); + }); + return sfdxpackages; + } + + + public static getAllPackageDirectoriesFromConfig(projectConfig:any):any[] + { + let sfdxpackages = []; + projectConfig.packageDirectories?.forEach((pkg) => { + //Only push packages that have package and versionNumber, ignore everything else + if(pkg.package && pkg.versionNumber) + sfdxpackages.push(pkg); }); return sfdxpackages; } @@ -98,7 +139,7 @@ export default class ProjectConfig { } if (sfdxPackageDescriptor == null) - throw new Error(`Package ${sfdxPackage} does not exist,Pleasae check inputs`); + throw new Error(`Package ${sfdxPackage} does not exist,Please check inputs`); return sfdxPackageDescriptor; } diff --git a/packages/core/tests/project/ProjectConfig.test.ts b/packages/core/tests/project/ProjectConfig.test.ts index 6aead56f6..11ebbbafe 100644 --- a/packages/core/tests/project/ProjectConfig.test.ts +++ b/packages/core/tests/project/ProjectConfig.test.ts @@ -84,6 +84,17 @@ describe('Given a project directory or sfdx-project.json with multiple packages' ]); }); + it('Fetches all the package from a project config', () => { + + expect(ProjectConfig.getAllPackagesFromProjectConfig(sfdx_project)).toStrictEqual([ + 'temp', + 'core', + 'mass-dataload', + 'access-mgmt', + 'bi', + ]); + }); + it('Get manifest, provided a directory', () => { expect(ProjectConfig.getSFDXProjectConfig(null)).toStrictEqual(sfdx_project); }); @@ -94,6 +105,9 @@ describe('Given a project directory or sfdx-project.json with multiple packages' expect(ProjectConfig.getPackageType(sfdx_project, 'mass-dataload')).toBe(PackageType.Data); }); + + + it('Gets the package descriptor of a provided package,provided directory', () => { let corePackage = { path: 'packages/domains/core', diff --git a/packages/sfp-cli/package-lock.json b/packages/sfp-cli/package-lock.json index 5b89c0653..9b667904e 100644 --- a/packages/sfp-cli/package-lock.json +++ b/packages/sfp-cli/package-lock.json @@ -1,6 +1,6 @@ { "name": "@dxatscale/sfp-cli", - "version": "2.5.1", + "version": "2.5.2", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/sfp-cli/package.json b/packages/sfp-cli/package.json index 0bfe5f621..ccf171f17 100644 --- a/packages/sfp-cli/package.json +++ b/packages/sfp-cli/package.json @@ -1,7 +1,7 @@ { "name": "@dxatscale/sfp-cli", "description": "Developer CLI for Salesforce programs following the DX@Scale model", - "version": "2.5.1", + "version": "2.5.2", "author": "dxatscale", "release": "June 22", "bin": { @@ -9,7 +9,7 @@ }, "bugs": "https://github.com/dxatscale/sfp-cli/issues", "dependencies": { - "@dxatscale/sfpowerscripts.core": "23.0.6", + "@dxatscale/sfpowerscripts.core": "23.1.0", "@oclif/command": "^1.8.0", "@oclif/config": "1.18.3", "@oclif/parser": "^3.8.5", diff --git a/packages/sfpowerscripts-cli/package-lock.json b/packages/sfpowerscripts-cli/package-lock.json index c0f996df4..7b0ec2ec9 100644 --- a/packages/sfpowerscripts-cli/package-lock.json +++ b/packages/sfpowerscripts-cli/package-lock.json @@ -1,6 +1,6 @@ { "name": "@dxatscale/sfpowerscripts", - "version": "13.8.6", + "version": "14.0.0", "lockfileVersion": 2, "requires": true, "packages": { diff --git a/packages/sfpowerscripts-cli/package.json b/packages/sfpowerscripts-cli/package.json index 5763b8af7..4626fcf6a 100644 --- a/packages/sfpowerscripts-cli/package.json +++ b/packages/sfpowerscripts-cli/package.json @@ -1,7 +1,7 @@ { "name": "@dxatscale/sfpowerscripts", "description": "A build system for package based development in Salesforce,delivered as a sfdx plugin that can be implemented in any CI/CD system of choice.Read more about the plugin and details here - https://dxatscale.gitbook.io/sfpowerscripts/", - "version": "13.8.6", + "version": "14.0.0", "author": "dxatscale", "release": "June 22", "bin": { @@ -9,7 +9,7 @@ }, "bugs": "https://github.com/Accenture/sfpowerscripts/issues", "dependencies": { - "@dxatscale/sfpowerscripts.core": "23.0.6", + "@dxatscale/sfpowerscripts.core": "23.1.0", "@oclif/command": "1.8.16", "@oclif/config": "1.18.3", "@oclif/errors": "^1.3.5", diff --git a/packages/sfpowerscripts-cli/resources/schemas/sfdx-project.schema.json b/packages/sfpowerscripts-cli/resources/schemas/sfdx-project.schema.json index cd6a83569..dacd4d2cb 100644 --- a/packages/sfpowerscripts-cli/resources/schemas/sfdx-project.schema.json +++ b/packages/sfpowerscripts-cli/resources/schemas/sfdx-project.schema.json @@ -28,7 +28,7 @@ "versionName": ["package", "versionNumber"], "versionNumber": ["package"] }, - "required": ["path", "package", "versionNumber"], + "required": ["path"], "additionalProperties": false, "properties": { "ancestorId": { diff --git a/packages/sfpowerscripts-cli/src/ProjectValidation.ts b/packages/sfpowerscripts-cli/src/ProjectValidation.ts index d7db6b35e..d6d6c914d 100644 --- a/packages/sfpowerscripts-cli/src/ProjectValidation.ts +++ b/packages/sfpowerscripts-cli/src/ProjectValidation.ts @@ -35,11 +35,14 @@ export default class ProjectValidation { } public validatePackageBuildNumbers() { - this.projectConfig.packageDirectories.forEach((pkg) => { + ProjectConfig.getAllPackageDirectoriesFromConfig(this.projectConfig).forEach((pkg) => { let packageType = ProjectConfig.getPackageType(this.projectConfig, pkg.package); let pattern: RegExp = /NEXT$|LATEST$/i; - if (pkg.versionNumber.match(pattern) && (packageType === PackageType.Source || packageType === PackageType.Data)) { + if ( + pkg.versionNumber.match(pattern) && + (packageType === PackageType.Source || packageType === PackageType.Data) + ) { throw new Error( 'sfdx-project.json validation failed for package "' + pkg['package'] + diff --git a/packages/sfpowerscripts-cli/src/impl/parallelBuilder/BuildImpl.ts b/packages/sfpowerscripts-cli/src/impl/parallelBuilder/BuildImpl.ts index 9893b4ffa..4cd9e6b05 100644 --- a/packages/sfpowerscripts-cli/src/impl/parallelBuilder/BuildImpl.ts +++ b/packages/sfpowerscripts-cli/src/impl/parallelBuilder/BuildImpl.ts @@ -273,7 +273,8 @@ export default class BuildImpl { }); for (const pkg of packageDescriptors) { - sfdxpackages.push(pkg['package']); + if(pkg.package && pkg.versionNumber) + sfdxpackages.push(pkg['package']); } return sfdxpackages; } diff --git a/packages/sfpowerscripts-cli/src/impl/prepare/PrepareImpl.ts b/packages/sfpowerscripts-cli/src/impl/prepare/PrepareImpl.ts index 670810935..70a9a632b 100644 --- a/packages/sfpowerscripts-cli/src/impl/prepare/PrepareImpl.ts +++ b/packages/sfpowerscripts-cli/src/impl/prepare/PrepareImpl.ts @@ -125,7 +125,7 @@ export default class PrepareImpl { private async getPackageArtifacts() { //Filter Packages to be ignore from prepare to be fetched - let packages = ProjectConfig.getSFDXProjectConfig(null)['packageDirectories'].filter((pkg) => { + let packages = ProjectConfig.getAllPackageDirectoriesFromDirectory(null).filter((pkg) => { if ( pkg.ignoreOnStage?.find((stage) => { stage = stage.toLowerCase(); diff --git a/packages/sfpowerscripts-cli/src/impl/prepare/PrepareOrgJob.ts b/packages/sfpowerscripts-cli/src/impl/prepare/PrepareOrgJob.ts index 2c4347202..6c53b408e 100644 --- a/packages/sfpowerscripts-cli/src/impl/prepare/PrepareOrgJob.ts +++ b/packages/sfpowerscripts-cli/src/impl/prepare/PrepareOrgJob.ts @@ -214,9 +214,9 @@ export default class PrepareOrgJob extends PoolJobExecutor { //Fetch all checkpoints private getcheckPointPackages(logger: FileLogger) { SFPLogger.log('Fetching checkpoints for prepare if any.....', LoggerLevel.INFO, logger); - let projectConfig = ProjectConfig.getSFDXProjectConfig(null); + let checkPointPackages = []; - projectConfig['packageDirectories'].forEach((pkg) => { + ProjectConfig.getAllPackageDirectoriesFromDirectory(null).forEach((pkg) => { if (pkg.checkpointForPrepare) checkPointPackages.push(pkg['package']); }); return checkPointPackages; diff --git a/packages/sfpowerscripts-cli/tests/ProjectValidation.test.ts b/packages/sfpowerscripts-cli/tests/ProjectValidation.test.ts index 142555819..3f848b74b 100644 --- a/packages/sfpowerscripts-cli/tests/ProjectValidation.test.ts +++ b/packages/sfpowerscripts-cli/tests/ProjectValidation.test.ts @@ -57,7 +57,7 @@ describe('Given a sfdx-project.json, it should be validated against the scehma', }).not.toThrow(); }); - it('should throw an error for a sfdx-project.json where a package directory is missing package name', () => { + it('should not throw an error for a sfdx-project.json where a package directory is missing package name', () => { let sfdx_project = { packageDirectories: [ { @@ -105,7 +105,7 @@ describe('Given a sfdx-project.json, it should be validated against the scehma', }); expect(() => { new ProjectValidation().validateSFDXProjectJSON(); - }).toThrow(); + }).not.toThrow(); }); it('should not throw an error for a sfdx-project.json where various sfpowerscripts orchestrator properties are used', () => {