mirror of
https://github.com/outline/outline.git
synced 2026-01-10 21:20:31 -06:00
104 lines
2.9 KiB
JavaScript
104 lines
2.9 KiB
JavaScript
/* oxlint-disable @typescript-eslint/no-var-requires */
|
|
|
|
const { execSync } = require("child_process");
|
|
const fs = require("fs");
|
|
const path = require("path");
|
|
const { exit } = require("process");
|
|
const readline = require("readline");
|
|
const semver = require("semver");
|
|
const { addYears } = require("date-fns/addYears");
|
|
|
|
const input = process.argv.slice(2);
|
|
|
|
if (input.length === 0) {
|
|
console.log("Usage: yarn release (major|minor|patch|1.2.3)");
|
|
exit(1);
|
|
}
|
|
|
|
const root = path.resolve(__dirname, "..", "..");
|
|
const opts = {
|
|
cwd: root,
|
|
stdio: "inherit",
|
|
};
|
|
|
|
// Read current package.json
|
|
const packagePath = path.resolve(root, "package.json");
|
|
const packageJson = require(packagePath);
|
|
const currentVersion = packageJson.version;
|
|
|
|
// Calculate new version based on input
|
|
let newVersion;
|
|
const versionType = input[0].toLowerCase();
|
|
|
|
if (
|
|
versionType === "major" ||
|
|
versionType === "minor" ||
|
|
versionType === "patch"
|
|
) {
|
|
newVersion = semver.inc(currentVersion, versionType);
|
|
} else if (semver.valid(versionType)) {
|
|
newVersion = versionType;
|
|
} else {
|
|
console.log(
|
|
"Error: Invalid version type. Use major, minor, patch, or a specific version like 1.2.3"
|
|
);
|
|
exit(1);
|
|
}
|
|
|
|
console.log(`\nCurrent version: ${currentVersion}`);
|
|
console.log(`New version: ${newVersion}\n`);
|
|
|
|
// Create readline interface for confirmation
|
|
const rl = readline.createInterface({
|
|
input: process.stdin,
|
|
output: process.stdout,
|
|
});
|
|
|
|
rl.question("Do you want to proceed with this release? (Y/n): ", (answer) => {
|
|
rl.close();
|
|
|
|
const response = answer.trim().toLowerCase();
|
|
if (response === "n" || response === "no") {
|
|
console.log("Release cancelled.");
|
|
exit(0);
|
|
}
|
|
|
|
try {
|
|
// Update package.json
|
|
packageJson.version = newVersion;
|
|
fs.writeFileSync(packagePath, JSON.stringify(packageJson, null, 2) + "\n");
|
|
console.log("Updated package.json");
|
|
|
|
// Update LICENSE
|
|
const license = fs.readFileSync(path.resolve(root, "LICENSE"), "utf8");
|
|
const newDate = addYears(new Date(), 4).toISOString().split("T")[0];
|
|
|
|
const newLicense = license
|
|
// Update version number
|
|
.replace(
|
|
/Licensed Work: {8}Outline (.*)/,
|
|
`Licensed Work: Outline ${newVersion}`
|
|
)
|
|
// Update change date
|
|
.replace(/Change Date: {9}(.*)/, `Change Date: ${newDate}`)
|
|
// Update current year
|
|
.replace(/\(c\) \d{4}/, `(c) ${new Date().getFullYear()}`);
|
|
|
|
fs.writeFileSync(path.resolve(root, "LICENSE"), newLicense);
|
|
console.log("Updated LICENSE");
|
|
|
|
// Git operations
|
|
execSync(`git add package.json`, opts);
|
|
execSync(`git add LICENSE`, opts);
|
|
execSync(`git commit -m "v${newVersion}" --no-verify`, opts);
|
|
execSync(`git tag v${newVersion} -m v${newVersion}`, opts);
|
|
execSync(`git push origin v${newVersion}`, opts);
|
|
execSync(`git push origin main`, opts);
|
|
|
|
console.log(`\nReleased v${newVersion} 🚀`);
|
|
} catch (err) {
|
|
console.log("Error during release:", err.message);
|
|
exit(1);
|
|
}
|
|
});
|