/
deka
/
buffer
Обзор
Документация
Войти
/
deka
/
buffer
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
dev
tools/bump-version.mjs
71 строка
3 KB
Maksim Ratnikov
build: auto-bump patch version on every commit via pre-commit hook
24 июл 2026, 10:41
24 июл 2026, 10:41
70daf7f
Код
Авторство
О чём код?
#!/usr/bin/env node // Bumps the patch version and refreshes the release date in // lab/wiki-clipboard-lab.template.html. major.minor stay hand-controlled — // only the patch is advanced (e.g. v1.1.3 -> v1.1.4). Run by the pre-commit // hook (tools/hooks/pre-commit) on every commit; --dry-run prints the change // without writing. // // The version lives in two identical blocks (desktop + mobile), each with: // aria-label="Версия 1.1.3 от 23 июля 2026 года" // <span class="version-number">v1.1.3</span> // <time class="version-date" datetime="2026-07-23">23.07.2026</time> import { readFileSync, writeFileSync } from "node:fs"; import { fileURLToPath } from "node:url"; import { dirname, join } from "node:path"; const ROOT = join(dirname(fileURLToPath(import.meta.url)), ".."); const TEMPLATE = join(ROOT, "lab", "wiki-clipboard-lab.template.html"); const RU_MONTHS_GENITIVE = [ "января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря" ]; const dryRun = process.argv.includes("--dry-run"); const html = readFileSync(TEMPLATE, "utf8"); const versionMatch = html.match(/<span class="version-number">v(\d+)\.(\d+)\.(\d+)<\/span>/); if (!versionMatch) { console.warn("bump-version: version-number marker not found — skipping bump"); process.exit(0); } const [, major, minor, patch] = versionMatch; const nextVersion = `${major}.${minor}.${Number.parseInt(patch, 10) + 1}`; const now = new Date(); const yyyy = now.getFullYear(); const mm = String(now.getMonth() + 1).padStart(2, "0"); const dd = String(now.getDate()).padStart(2, "0"); const iso = `${yyyy}-${mm}-${dd}`; const display = `${dd}.${mm}.${yyyy}`; const ruLong = `${now.getDate()} ${RU_MONTHS_GENITIVE[now.getMonth()]} ${yyyy} года`; const updated = html .replace( /aria-label="Версия \d+\.\d+\.\d+ от [^"]*"/g, `aria-label="Версия ${nextVersion} от ${ruLong}"` ) .replace( /<span class="version-number">v\d+\.\d+\.\d+<\/span>/g, `<span class="version-number">v${nextVersion}</span>` ) .replace( /<time class="version-date" datetime="\d{4}-\d{2}-\d{2}">[\d.]+<\/time>/g, `<time class="version-date" datetime="${iso}">${display}</time>` ); console.log(`bump-version: v${major}.${minor}.${patch} -> v${nextVersion} (${iso})`); if (dryRun) { process.exit(0); } if (updated === html) { console.warn("bump-version: nothing changed — check the version markup"); process.exit(0); } writeFileSync(TEMPLATE, updated);