UNPKG

@flxbl-io/sfp

Version:

sfp is a CLI tool to help you manage your Salesforce projects in an artifact centric model

180 lines 14.9 kB
"use strict"; 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 CommitUpdater_1 = __importDefault(require("./CommitUpdater")); const WorkItemUpdater_1 = __importDefault(require("./WorkItemUpdater")); const OrgsUpdater_1 = __importDefault(require("./OrgsUpdater")); const fs = __importStar(require("fs-extra")); let hash = require('object-hash'); class ReleaseChangelogUpdater { constructor(releaseChangelog, releaseName, artifactsToSfpPackage, packagesToChangelogFilePaths, workItemFilters, org) { this.releaseChangelog = releaseChangelog; this.releaseName = releaseName; this.artifactsToSfpPackage = artifactsToSfpPackage; this.packagesToChangelogFilePaths = packagesToChangelogFilePaths; this.workItemFilters = workItemFilters; this.org = org; } update() { let buildNumber; if (this.releaseChangelog.releases[this.releaseChangelog.releases.length - 1]?.buildNumber) { buildNumber = this.releaseChangelog.releases[this.releaseChangelog.releases.length - 1].buildNumber + 1; } else { buildNumber = 1; } let latestRelease = this.initLatestRelease(this.releaseName, buildNumber, this.artifactsToSfpPackage); let releaseWithMatchingHashId = this.findRelease(this.releaseChangelog.releases, latestRelease); if (!releaseWithMatchingHashId) { let artifactsToLatestCommitId; if (this.releaseChangelog.releases.length > 0) { artifactsToLatestCommitId = this.getArtifactsToLatestCommitId(this.releaseChangelog, latestRelease); } let readPackageChangelog = (changelogFilePath) => { return JSON.parse(fs.readFileSync(changelogFilePath, 'utf8')); }; new CommitUpdater_1.default(latestRelease, artifactsToLatestCommitId, this.packagesToChangelogFilePaths, readPackageChangelog).update(); new WorkItemUpdater_1.default(latestRelease, this.workItemFilters).update(); this.releaseChangelog.releases.push(latestRelease); } else { if (!this.containsLatestReleaseName(releaseWithMatchingHashId.names, latestRelease.names[0])) { // append latestReleaseName releaseWithMatchingHashId.names.push(latestRelease.names[0]); } } if (this.org) { new OrgsUpdater_1.default(this.releaseChangelog, latestRelease, this.org, releaseWithMatchingHashId).update(); } return this.releaseChangelog; } /** * Get map of artifacts to the latest commit Id in past releases * Also sets artifact "from" property * @param releaseChangelog * @param latestRelease * @returns */ getArtifactsToLatestCommitId(releaseChangelog, latestRelease) { let artifactsToLatestCommitId = {}; for (let latestReleaseArtifact of latestRelease.artifacts) { loopThroughReleases: for (let i = releaseChangelog.releases.length - 1; i >= 0; i--) { for (let artifact of releaseChangelog.releases[i].artifacts) { if (artifact.name === latestReleaseArtifact.name) { latestReleaseArtifact.from = artifact.to; artifactsToLatestCommitId[latestReleaseArtifact.name] = artifact.latestCommitId; break loopThroughReleases; } } } } return artifactsToLatestCommitId; } /** * Finds release with matching hash Id * Returns null if match cannot be found * @param releaseChangelog * @param latestRelease * @returns */ findRelease(releases, latestRelease) { let foundRelease = null; if (releases.length > 0) { // First level matching with hashId foundRelease = releases.find(release => release.hashId === latestRelease.hashId); // If not found by hashId, proceed to next level matching with names and artifacts if (foundRelease == null) { // Create a map for constant time lookup of all release's artifacts const allArtifacts = new Map(); for (let release of releases) { for (let artifact of release.artifacts) { if (allArtifacts.has(artifact.name)) { allArtifacts.get(artifact.name).push(artifact.version); } else { allArtifacts.set(artifact.name, [artifact.version]); } } } // Check if all artifacts in the latest release exist in previous releases let isAllArtifactsAlreadyAvailablePreviously = true; for (let artifact of latestRelease.artifacts) { if (!allArtifacts.has(artifact.name) || !allArtifacts.get(artifact.name).includes(artifact.version)) { isAllArtifactsAlreadyAvailablePreviously = false; break; } } // If all artifacts match, check for names if (isAllArtifactsAlreadyAvailablePreviously) { for (let release of releases) { if (release.names.includes(latestRelease.names[0])) { foundRelease = release; break; } } } } } return foundRelease; } /** * Initalise latest release * @param releaseName * @param artifactsToSfpPackage * @returns */ initLatestRelease(releaseName, buildNumber, artifactsToSfpPackage) { let latestRelease = { names: [releaseName], buildNumber: buildNumber, workItems: {}, artifacts: [], hashId: undefined, }; for (let sfpPackage of Object.values(artifactsToSfpPackage)) { let artifact = { name: sfpPackage.packageName, from: undefined, to: sfpPackage.sourceVersion?.slice(0, 8), version: sfpPackage.package_version_number, repoUrl: sfpPackage.repository_url, latestCommitId: undefined, commits: undefined, }; latestRelease['artifacts'].push(artifact); } latestRelease.hashId = hash(latestRelease.artifacts); latestRelease.date = new Date().toString(); return latestRelease; } containsLatestReleaseName(releaseNames, latestReleaseName) { return releaseNames.find((name) => name.toLowerCase() === latestReleaseName.toLowerCase()) ? true : false; } } exports.default = ReleaseChangelogUpdater; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiUmVsZWFzZUNoYW5nZWxvZ1VwZGF0ZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvaW1wbC9jaGFuZ2Vsb2cvUmVsZWFzZUNoYW5nZWxvZ1VwZGF0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUNBLG9FQUE0QztBQUM1Qyx3RUFBZ0Q7QUFDaEQsZ0VBQXdDO0FBRXhDLDZDQUErQjtBQUUvQixJQUFJLElBQUksR0FBRyxPQUFPLENBQUMsYUFBYSxDQUFDLENBQUM7QUFFbEMsTUFBcUIsdUJBQXVCO0lBQ3hDLFlBQ1ksZ0JBQWtDLEVBQ2xDLFdBQW1CLEVBQ25CLHFCQUFrRCxFQUNsRCw0QkFBcUQsRUFDckQsZUFBeUIsRUFDekIsR0FBVztRQUxYLHFCQUFnQixHQUFoQixnQkFBZ0IsQ0FBa0I7UUFDbEMsZ0JBQVcsR0FBWCxXQUFXLENBQVE7UUFDbkIsMEJBQXFCLEdBQXJCLHFCQUFxQixDQUE2QjtRQUNsRCxpQ0FBNEIsR0FBNUIsNEJBQTRCLENBQXlCO1FBQ3JELG9CQUFlLEdBQWYsZUFBZSxDQUFVO1FBQ3pCLFFBQUcsR0FBSCxHQUFHLENBQVE7SUFDbkIsQ0FBQztJQUVMLE1BQU07UUFDRixJQUFJLFdBQW1CLENBQUM7UUFDeEIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxFQUFFLFdBQVcsRUFBRSxDQUFDO1lBQ3pGLFdBQVcsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsQ0FBQyxRQUFRLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDLFdBQVcsR0FBRyxDQUFDLENBQUM7UUFDNUcsQ0FBQzthQUFNLENBQUM7WUFDSixXQUFXLEdBQUcsQ0FBQyxDQUFDO1FBQ3BCLENBQUM7UUFFRCxJ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