Repository navigation
Expand file tree
/
Copy pathrelease.mjs
More file actions
40 lines (30 loc) · 1.63 KB
/
Copy pathrelease.mjs
File metadata and controls
40 lines (30 loc) · 1.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
#!/usr/bin/env node
// Бампает версию пакета, коммитит package.json и создаёт git-тег
// "<пакет>-v<версия>", который запускает publish.yml.
//
// Использование: pnpm release -- <пакет> <patch|minor|major|версия>
// Пример: pnpm release -- spa-router patch
import { execFileSync } from "node:child_process";
const [pkgName, bump] = process.argv.slice(2);
const allowedPackages = ["spa-router", "bind-form", "dom-template"];
if (!pkgName || !bump || !allowedPackages.includes(pkgName)) {
console.error(`Использование: pnpm release -- <${allowedPackages.join("|")}> <patch|minor|major|версия>`);
process.exit(1);
}
const cwd = `packages/${pkgName}`;
const run = (command, args, options = {}) =>
execFileSync(command, args, { stdio: "inherit", encoding: "utf-8", ...options });
const status = execFileSync("git", ["status", "--porcelain"], { encoding: "utf-8" });
if (status.trim()) {
console.error("Рабочая директория не чистая. Закоммить или отмени изменения перед релизом.");
process.exit(1);
}
run("npm", ["version", bump, "--no-git-tag-version"], { cwd });
const version = JSON.parse(execFileSync("npm", ["pkg", "get", "version"], { cwd, encoding: "utf-8" }));
const tag = `${pkgName}-v${version}`;
run("git", ["add", `${cwd}/package.json`]);
run("git", ["commit", "-m", `chore(${pkgName}): release ${tag}`]);
run("git", ["tag", tag]);
console.log(`\nГотово: ${tag}`);
console.log("Запушить релиз:");
console.log(` git push origin main ${tag}`);