mirror of
https://github.com/scm-manager/scm-manager.git
synced 2025-11-05 04:55:50 +01:00
141 lines
3.6 KiB
JavaScript
141 lines
3.6 KiB
JavaScript
const fs = require("fs");
|
|
const path = require("path");
|
|
const {spawn} = require("child_process");
|
|
const parseString = require('xml2js').parseString;
|
|
|
|
function isSnapshot(version) {
|
|
return version.indexOf("SNAPSHOT") > 0;
|
|
}
|
|
|
|
function createSnapshotVersion(version) {
|
|
const date = new Date();
|
|
const year = date.getFullYear();
|
|
const month = date.getMonth().toString().padStart(2, "0");
|
|
const day = date.getDate().toString().padStart(2, "0");
|
|
|
|
const hours = date.getHours().toString().padStart(2, "0");
|
|
const minutes = date.getMinutes().toString().padStart(2, "0");
|
|
const seconds = date.getSeconds().toString().padStart(2, "0");
|
|
|
|
return version.replace("SNAPSHOT", `${year}${month}${day}-${hours}${minutes}${seconds}`);
|
|
}
|
|
|
|
function createVersionForPublishing(version) {
|
|
if (isSnapshot(version)) {
|
|
return createSnapshotVersion(version);
|
|
}
|
|
return version;
|
|
}
|
|
|
|
function publishPackages(version) {
|
|
console.log(`publish ${version} of all packages`);
|
|
return new Promise((resolve, reject) => {
|
|
const lerna = spawn("lerna", [
|
|
"exec", "--", "yarn", "publish", "--new-version", version, "--access", "public"
|
|
], {
|
|
stdio: [
|
|
process.stdin,
|
|
process.stdout,
|
|
process.stderr
|
|
]
|
|
});
|
|
|
|
lerna.on('close', (code) => {
|
|
if (code === 0) {
|
|
resolve();
|
|
} else {
|
|
reject(new Error("publishing of packages failed with status code: " + code));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function setVersion(package, packages, newVersion) {
|
|
return new Promise((resolve, reject) => {
|
|
const packageJsonPath = path.join(package, "package.json");
|
|
fs.readFile(packageJsonPath, "utf-8" , (err, content) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
const packageJson = JSON.parse(content);
|
|
packageJson.version = newVersion;
|
|
|
|
for (let dep in packageJson.dependencies) {
|
|
if (packages.indexOf(dep) >= 0) {
|
|
packageJson.dependencies[ dep ] = newVersion;
|
|
}
|
|
}
|
|
|
|
fs.writeFile( packageJsonPath, JSON.stringify(packageJson, null, 2), (err) => {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
console.log("modified", packageJsonPath);
|
|
resolve();
|
|
}
|
|
});
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function setVersions(newVersion) {
|
|
console.log("set versions of packages to", newVersion);
|
|
return new Promise((resolve, reject) => {
|
|
fs.readdir("packages", (err, packages) => {
|
|
if ( err ) {
|
|
reject(err);
|
|
} else {
|
|
const actions = [];
|
|
const packagesWithOrg = packages.map((name) => `@scm-manager/${name}`);
|
|
for (let pkg of packages) {
|
|
const action = setVersion(path.join("packages", pkg), packagesWithOrg, newVersion);
|
|
actions.push(action);
|
|
}
|
|
|
|
resolve(Promise.all(actions));
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function getVersion() {
|
|
return new Promise((resolve, reject) => {
|
|
fs.readFile("pom.xml", "utf8", (err, xml) => {
|
|
if (err) {
|
|
reject(err);
|
|
} else {
|
|
|
|
parseString(xml, function (err, json) {
|
|
if (err) {
|
|
reject(err)
|
|
} else {
|
|
const project = json.project;
|
|
|
|
let version = project.version;
|
|
if (!version) {
|
|
version = project.parent.version;
|
|
}
|
|
version = version[0];
|
|
|
|
resolve(version)
|
|
}
|
|
|
|
});
|
|
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
getVersion()
|
|
.then(version => {
|
|
const publishVersion = createVersionForPublishing(version);
|
|
return setVersions(publishVersion)
|
|
.then(() => publishPackages(publishVersion))
|
|
.then(() => setVersions(version));
|
|
})
|
|
.catch((err) => {
|
|
throw err;
|
|
});
|