@atomist/org-visualizer
Version:
Organization Visualizer using Atomist project scanning
134 lines (133 loc) • 5.47 kB
JavaScript
;
/*
* Copyright © 2019 Atomist, Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
Object.defineProperty(exports, "__esModule", { value: true });
const sdm_1 = require("@atomist/sdm");
const sdm_pack_fingerprints_1 = require("@atomist/sdm-pack-fingerprints");
const slack_messages_1 = require("@atomist/slack-messages");
const _ = require("lodash");
const semver = require("semver");
const SdmPackages = [
"@atomist/automation-client",
"@atomist/sdm",
"@atomist/sdm-core",
];
function createSdmDepFingerprint(packages) {
return {
type: SdmDepsName,
name: SdmDepsName,
abbreviation: "sdmdeps",
version: "0.0.1",
data: packages,
sha: sdm_pack_fingerprints_1.sha256(JSON.stringify(packages)),
};
}
exports.createSdmDepFingerprint = createSdmDepFingerprint;
exports.createSdmDepsFingerprints = (p) => __awaiter(this, void 0, void 0, function* () {
const file = yield p.getFile("package.json");
if (!!file) {
const pj = JSON.parse(yield file.getContent());
// Don't calculate that fingerprint one of the SDM packages itself as those
// iterate at different speeds
const name = pj.name;
if (SdmPackages.includes(name)) {
return undefined;
}
const sdmPackages = [];
const dependencies = pj.dependencies || {};
SdmPackages.filter(pk => !!dependencies[pk]).forEach(pk => sdmPackages.push({
name: pk,
version: dependencies[pk],
}));
const devDependencies = pj.devDependencies || {};
SdmPackages.filter(pk => !!devDependencies[pk]).forEach(pk => sdmPackages.push({
name: pk,
version: devDependencies[pk],
}));
// If we don't have all dependencies, don't calculate the fingerprint
if (SdmPackages.some(pk => !sdmPackages.some(fpk => fpk.name === pk))) {
return undefined;
}
return createSdmDepFingerprint(sdmPackages);
}
else {
return undefined;
}
});
exports.applySdmDepsFingerprint = (p, fp) => __awaiter(this, void 0, void 0, function* () {
const file = yield p.getFile("package.json");
if (!!file) {
const pj = JSON.parse(yield file.getContent());
const sdmPackages = fp.data;
sdmPackages.forEach(pk => {
// Set version throughout
if (!!_.get(pj.dependencies, pk.name)) {
pj.dependencies[pk.name] = pk.version;
}
if (!!_.get(pj.devDependencies, pk.name)) {
pj.devDependencies[pk.name] = pk.version;
}
// Fix up peerDependency entries
if (!!_.get(pj.peerDependencies, pk.name)) {
const version = pk.version.replace(/\^/g, "");
const peerVersion = `>=${semver.major(version)}.${semver.minor(version)}.0`;
pj.peerDependencies[pk.name] = peerVersion;
}
});
yield file.setContent(JSON.stringify(pj, undefined, 2));
const log = new sdm_1.LoggingProgressLog("npm install");
const result = yield sdm_1.spawnLog("npm", ["install"], {
cwd: p.baseDir,
log,
logCommand: true,
});
return result.code === 0;
}
else {
return false;
}
});
exports.diffNpmDepsFingerprints = (diff, target) => {
return {
title: "New SDM Version Target",
description: `Target versions for SDM packages are:
${target.data.map(p => slack_messages_1.codeLine(`${p.name}@${p.version}`)).join("\n")}
Project ${slack_messages_1.bold(`${diff.owner}/${diff.repo}/${diff.branch}`)} is currently configured to use versions:
${diff.to.data.map(p => slack_messages_1.codeLine(`${p.name}@${p.version}`)).join("\n")}`,
};
};
const SdmDepsName = "sdm-deps";
exports.SdmDeps = {
name: SdmDepsName,
displayName: "SDM packages",
extract: exports.createSdmDepsFingerprints,
apply: exports.applySdmDepsFingerprint,
summary: exports.diffNpmDepsFingerprints,
toDisplayableFingerprint: fp => fp.data.map(d => `${d.name.split("/")[1]}@${d.version}`).join(", "),
toDisplayableFingerprintName: () => "SDM packages",
workflows: [
sdm_pack_fingerprints_1.DefaultTargetDiffHandler,
],
};
//# sourceMappingURL=sdmNpmDeps.js.map