fluence-js/ci.js

116 lines
2.9 KiB
JavaScript
Raw Normal View History

2022-09-01 11:12:47 +03:00
#! /usr/bin/env node
2022-08-31 16:16:17 +03:00
const fs = require("fs").promises;
const path = require("path");
2022-09-01 11:12:47 +03:00
function printUsage() {
console.log(`Usage: "ci check-consistency" or "ci bump-version %postfix%"`);
}
let postfix;
const mod = process.argv[2];
switch (mod) {
case "bump-version":
postfix = process.argv[3];
if (!postfix) {
printUsage();
process.exit();
}
break;
case "check-consistency":
break;
default:
printUsage();
process.exit(0);
}
2022-08-31 16:16:17 +03:00
const pathToPackages = "./packages/";
const allPackageJsons = [];
const packagesMap = new Map();
async function getFiles(thePath) {
const entries = await fs.readdir(thePath, { withFileTypes: true });
for (let file of entries) {
if (file.name === "node_modules") {
continue;
}
if (file.isDirectory()) {
await getFiles(`${thePath}${file.name}/`);
} else if (file.name === "package.json") {
const packageJsonPath = path.join(__dirname, thePath, file.name);
allPackageJsons.push(packageJsonPath);
}
}
}
async function getVersion(file) {
const content = await fs.readFile(file);
const json = JSON.parse(content);
return [json.name, json.version];
}
2022-09-01 11:12:47 +03:00
function isWorkspaceDep(obj, name, version) {
2022-08-31 16:33:04 +03:00
if (!obj[name]) {
return;
}
2022-09-01 11:12:47 +03:00
return /^workspace\:/.test(obj[name]);
2022-08-31 16:33:04 +03:00
if (/^workspace\:/.test(obj[name])) {
obj[name] = `workspace:${version}`;
}
}
2022-09-01 11:12:47 +03:00
async function processVersions(file) {
2022-08-31 16:33:04 +03:00
console.log("Updating: ", file);
2022-08-31 16:16:17 +03:00
let content = await fs.readFile(file);
const json = JSON.parse(content);
2022-08-31 16:33:04 +03:00
const newPackageVersion = packagesMap.get(json.name);
if (!newPackageVersion) {
console.log("Failed to get version for package: ", file);
process.exit(1);
}
2022-09-01 11:12:47 +03:00
const consistencyErrors = [];
for (const [name, version] of packagesMap) {
if (isWorkspaceDep(json.dependencies, name, version)) {
if()
}
if (isWorkspaceDep(json.devDependencies, name, version)) {
}
}
2022-08-31 16:33:04 +03:00
json.version = newPackageVersion;
for (const [name, version] of packagesMap) {
2022-09-01 11:12:47 +03:00
if (mod === "check-consistency") {
} else {
isWorkspaceDep(json.dependencies, name, version);
isWorkspaceDep(json.devDependencies, name, version);
}
2022-08-31 16:33:04 +03:00
}
2022-08-31 16:16:17 +03:00
content = JSON.stringify(json, undefined, 4);
await fs.writeFile(file, content);
}
async function run() {
await getFiles(pathToPackages);
for (let file of allPackageJsons) {
// console.log("Reading data from: ", file);
const [name, version] = await getVersion(file);
const newVersion = `${version}${postfix}`;
packagesMap.set(name, newVersion);
}
console.log("Bumping versions: ", packagesMap);
for (let file of allPackageJsons) {
2022-09-01 11:12:47 +03:00
processVersions(file);
2022-08-31 16:16:17 +03:00
}
}
run();