@flxbl-io/sfp
Version:
sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model
102 lines • 9.68 kB
JavaScript
;
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
var desc = Object.getOwnPropertyDescriptor(m, k);
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
desc = { enumerable: true, get: function() { return m[k]; } };
}
Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
if (k2 === undefined) k2 = k;
o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
if (mod && mod.__esModule) return mod;
var result = {};
if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
__setModuleDefault(result, mod);
return result;
};
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const path = require("path");
const fs = __importStar(require("fs-extra"));
const GeneratePackageChangelog_1 = __importDefault(require("../../changelog/GeneratePackageChangelog"));
const rimraf = __importStar(require("rimraf"));
const sfp_logger_1 = __importStar(require("@flxbl-io/sfp-logger"));
const AdmZip = require("adm-zip");
class ArtifactGenerator {
//Generates the universal artifact used by the CLI and AZP
static async generateArtifact(sfpPackage, project_directory, artifact_directory) {
try {
// Artifact folder consisting of artifact metadata, changelog & source
let artifactFolder = `${sfpPackage.packageName}_sfpowerscripts_artifact`;
// Absolute filepath of artifact
let artifactFilepath;
if (artifact_directory != null) {
artifactFilepath = path.resolve(artifact_directory, artifactFolder);
}
else {
artifactFilepath = path.resolve(artifactFolder);
}
fs.mkdirpSync(artifactFilepath);
let sourcePackage = path.join(artifactFilepath, `source`);
fs.mkdirpSync(sourcePackage);
//Clean up temp directory
if (fs.existsSync(path.join(sfpPackage.workingDirectory, '.sfp')))
rimraf.sync(path.join(sfpPackage.workingDirectory, '.sfp'));
if (fs.existsSync(path.join(sfpPackage.workingDirectory, '.sfdx')))
rimraf.sync(path.join(sfpPackage.workingDirectory, '.sfdx'));
fs.copySync(sfpPackage.workingDirectory, sourcePackage);
// rimraf.sync(sfpPackage.workingDirectory); // This gives an error in windows "Error: EPERM: operation not permitted, unlink" https://github.com/flxbl-io/sfp/issues/128
await fs.remove(sfpPackage.workingDirectory);
//Modify Source Directory to the new source directory inside the artifact
sfpPackage.sourceDir = `source`;
let artifactMetadataFilePath = path.join(artifactFilepath, `artifact_metadata.json`);
fs.writeFileSync(artifactMetadataFilePath, JSON.stringify(sfpPackage, null, 4));
// Generate package changelog
// Doesnt need a from version number, as it always generate from start
let generatePackageChangelog = new GeneratePackageChangelog_1.default(sfpPackage.packageName, undefined, sfpPackage.sourceVersion, project_directory);
let packageChangelog = await generatePackageChangelog.exec();
let changelogFilepath = path.join(artifactFilepath, `changelog.json`);
fs.writeFileSync(changelogFilepath, JSON.stringify(packageChangelog, null, 4));
sfp_logger_1.default.log('Artifact Copy Completed', sfp_logger_1.LoggerLevel.DEBUG);
let zip = new AdmZip();
zip.addLocalFolder(artifactFilepath, artifactFolder);
sfp_logger_1.default.log(`Zipping ${artifactFolder}`, sfp_logger_1.LoggerLevel.DEBUG);
let packageVersionNumber = ArtifactGenerator.substituteBuildNumberWithPreRelease(sfpPackage.versionNumber);
let zipArtifactFilepath = artifactFilepath + `_` + packageVersionNumber + `.zip`;
zip.writeZip(zipArtifactFilepath);
sfp_logger_1.default.log(`Artifact Generation Completed for ${sfpPackage.packageType} to ${zipArtifactFilepath}`, sfp_logger_1.LoggerLevel.INFO);
// Cleanup unzipped artifact
// https://github.com/flxbl-io/sfp/issues/128
// Undo fix for #128, use a different approach as its failing in docker
await fs.remove(artifactFilepath);
return zipArtifactFilepath;
}
catch (error) {
throw new Error('Unable to create artifact' + error);
}
}
static substituteBuildNumberWithPreRelease(packageVersionNumber) {
let segments = packageVersionNumber.split('.');
if (segments.length === 4) {
packageVersionNumber = segments.reduce((version, segment, segmentsIdx) => {
if (segmentsIdx === 3)
return version + '-' + segment;
else
return version + '.' + segment;
});
}
return packageVersionNumber;
}
}
exports.default = ArtifactGenerator;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQXJ0aWZhY3RHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvY29yZS9hcnRpZmFjdHMvZ2VuZXJhdG9ycy9BcnRpZmFjdEdlbmVyYXRvci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkJBQThCO0FBQzlCLDZDQUErQjtBQUMvQix3R0FBZ0Y7QUFFaEYsK0NBQWlDO0FBQ2pDLG1FQUE4RDtBQUM5RCxrQ0FBbUM7QUFHbkMsTUFBcUIsaUJBQWlCO0lBQ2xDLDBEQUEwRDtJQUNuRCxNQUFNLENBQUMsS0FBSyxDQUFDLGdCQUFnQixDQUNoQyxVQUFzQixFQUN0QixpQkFBeUIsRUFDekIsa0JBQTBCO1FBRTFCLElBQUksQ0FBQztZQUNELHNFQUFzRTtZQUN0RSxJQUFJLGNBQWMsR0FBVyxHQUFHLFVBQVUsQ0FBQyxXQUFXLDBCQUEwQixDQUFDO1lBRWpGLGdDQUFnQztZQUNoQyxJQUFJLGdCQUF3QixDQUFDO1lBRTdCLElBQUksa0JBQWtCLElBQUksSUFBSSxFQUFFLENBQUM7Z0JBQzdCLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsa0JBQWtCLEVBQUUsY0FBYyxDQUFDLENBQUM7WUFDeEUsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLGdCQUFnQixHQUFHLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLENBQUM7WUFDcEQsQ0FBQztZQUVELEVBQUUsQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztZQUVoQyxJQUFJLGFBQWEsR0FBVyxJQUFJLENBQUMsSUFBSSxDQUFDLGdCQUFnQixFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ2xFLEVBQUUsQ0FBQyxVQUFVLENBQUMsYUFBYSxDQUFDLENBQUM7WUFFN0IseUJBQXlCO1lBQ3pCLElBQUksRUFBRSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxn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