Skip to content
This repository has been archived by the owner on Mar 18, 2024. It is now read-only.

Commit

Permalink
feat(package): add support for package directories without name and (#…
Browse files Browse the repository at this point in the history
…1028)

version

fixes #842
  • Loading branch information
azlam-abdulsalam authored and azlam-abdulsalam committed Jun 10, 2022
1 parent 3961072 commit 5f64de4
Show file tree
Hide file tree
Showing 14 changed files with 78 additions and 19 deletions.
2 changes: 1 addition & 1 deletion packages/core/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion packages/core/package.json
Original file line number Diff line number Diff line change
@@ -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",
Expand Down
45 changes: 43 additions & 2 deletions packages/core/src/project/ProjectConfig.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down Expand Up @@ -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;
}
Expand Down
14 changes: 14 additions & 0 deletions packages/core/tests/project/ProjectConfig.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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);
});
Expand All @@ -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',
Expand Down
2 changes: 1 addition & 1 deletion packages/sfp-cli/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/sfp-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"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": {
"sfp": "./bin/run"
},
"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",
Expand Down
2 changes: 1 addition & 1 deletion packages/sfpowerscripts-cli/package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions packages/sfpowerscripts-cli/package.json
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{
"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": {
"readVars": "./scripts/readVars.sh"
},
"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",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@
"versionName": ["package", "versionNumber"],
"versionNumber": ["package"]
},
"required": ["path", "package", "versionNumber"],
"required": ["path"],
"additionalProperties": false,
"properties": {
"ancestorId": {
Expand Down
7 changes: 5 additions & 2 deletions packages/sfpowerscripts-cli/src/ProjectValidation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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'] +
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand Down
4 changes: 2 additions & 2 deletions packages/sfpowerscripts-cli/src/impl/prepare/PrepareOrgJob.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions packages/sfpowerscripts-cli/tests/ProjectValidation.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -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: [
{
Expand Down Expand Up @@ -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', () => {
Expand Down

0 comments on commit 5f64de4

Please sign in to comment.