mirror of
https://github.com/less/less.js.git
synced 2026-01-09 15:48:08 -05:00
* Set up alpha branch and auto-publishing * Restore 4.5.0 version number * Set up post-merge hook to stablize version and fix tests * Restore .gitattributes * Fix to publish.yml * Revert PNPM version to version 8 for Node 16 compatibility * Another attempt to resolve PNPM version * Another attempt to resolve PNPM version
154 lines
4.9 KiB
JavaScript
Executable File
154 lines
4.9 KiB
JavaScript
Executable File
#!/usr/bin/env node
|
|
|
|
/**
|
|
* Post-merge hook to preserve alpha versions when merging master into alpha branch
|
|
*
|
|
* This script runs after a merge and checks if:
|
|
* 1. We're on the alpha branch
|
|
* 2. The version in package.json doesn't contain '-alpha.' (was overwritten)
|
|
* 3. If so, restores the previous alpha version from git history
|
|
*/
|
|
|
|
const fs = require('fs');
|
|
const path = require('path');
|
|
const { execSync } = require('child_process');
|
|
|
|
const ROOT_DIR = path.resolve(__dirname, '..');
|
|
const LESS_PKG_PATH = path.join(ROOT_DIR, 'packages', 'less', 'package.json');
|
|
|
|
// Get current branch
|
|
function getCurrentBranch() {
|
|
try {
|
|
return execSync('git rev-parse --abbrev-ref HEAD', {
|
|
cwd: ROOT_DIR,
|
|
encoding: 'utf8'
|
|
}).trim();
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Read package.json version
|
|
function getVersion(pkgPath) {
|
|
try {
|
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
return pkg.version;
|
|
} catch (e) {
|
|
return null;
|
|
}
|
|
}
|
|
|
|
// Update version in package.json
|
|
function updateVersion(pkgPath, newVersion) {
|
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
pkg.version = newVersion;
|
|
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, '\t') + '\n', 'utf8');
|
|
}
|
|
|
|
// Find last alpha version from git history
|
|
function findLastAlphaVersion() {
|
|
try {
|
|
// Get recent commits on alpha that modified package.json
|
|
const commits = execSync(
|
|
'git log alpha --oneline -20 -- packages/less/package.json',
|
|
{ cwd: ROOT_DIR, encoding: 'utf8' }
|
|
).trim().split('\n');
|
|
|
|
// Search through commits to find the last alpha version
|
|
for (const commitLine of commits) {
|
|
const commitHash = commitLine.split(' ')[0];
|
|
try {
|
|
const pkgContent = execSync(
|
|
`git show ${commitHash}:packages/less/package.json 2>/dev/null`,
|
|
{ cwd: ROOT_DIR, encoding: 'utf8' }
|
|
);
|
|
const pkg = JSON.parse(pkgContent);
|
|
if (pkg.version && pkg.version.includes('-alpha.')) {
|
|
return pkg.version;
|
|
}
|
|
} catch (e) {
|
|
// Continue to next commit
|
|
}
|
|
}
|
|
} catch (e) {
|
|
// Ignore errors
|
|
}
|
|
return null;
|
|
}
|
|
|
|
// Update all package.json files with new version
|
|
function updateAllVersions(newVersion) {
|
|
const packageFiles = [
|
|
path.join(ROOT_DIR, 'package.json'),
|
|
path.join(ROOT_DIR, 'packages', 'less', 'package.json'),
|
|
path.join(ROOT_DIR, 'packages', 'test-data', 'package.json')
|
|
];
|
|
|
|
for (const pkgPath of packageFiles) {
|
|
if (fs.existsSync(pkgPath)) {
|
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
|
if (pkg.version) {
|
|
pkg.version = newVersion;
|
|
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, '\t') + '\n', 'utf8');
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// Main function
|
|
function main() {
|
|
const branch = getCurrentBranch();
|
|
|
|
// Only run on alpha branch
|
|
if (branch !== 'alpha') {
|
|
return;
|
|
}
|
|
|
|
const currentVersion = getVersion(LESS_PKG_PATH);
|
|
|
|
if (!currentVersion) {
|
|
return;
|
|
}
|
|
|
|
// Check if version was overwritten (doesn't contain -alpha.)
|
|
if (!currentVersion.includes('-alpha.')) {
|
|
console.log(`\n⚠️ Post-merge: Alpha version was overwritten (${currentVersion})`);
|
|
console.log(` Attempting to restore alpha version...`);
|
|
|
|
const lastAlphaVersion = findLastAlphaVersion();
|
|
|
|
if (lastAlphaVersion) {
|
|
// Increment the alpha number
|
|
const alphaMatch = lastAlphaVersion.match(/^(\d+\.\d+\.\d+)-alpha\.(\d+)$/);
|
|
if (alphaMatch) {
|
|
const alphaNum = parseInt(alphaMatch[2], 10);
|
|
const newAlphaVersion = `${alphaMatch[1]}-alpha.${alphaNum + 1}`;
|
|
console.log(` Restoring and incrementing: ${lastAlphaVersion} → ${newAlphaVersion}`);
|
|
updateAllVersions(newAlphaVersion);
|
|
console.log(`✅ Restored alpha version: ${newAlphaVersion}`);
|
|
console.log(` Please commit this change: git add package.json packages/*/package.json && git commit -m "chore: restore alpha version after merge"`);
|
|
} else {
|
|
console.log(` Restoring to: ${lastAlphaVersion}`);
|
|
updateAllVersions(lastAlphaVersion);
|
|
console.log(`✅ Restored alpha version: ${lastAlphaVersion}`);
|
|
console.log(` Please commit this change: git add package.json packages/*/package.json && git commit -m "chore: restore alpha version after merge"`);
|
|
}
|
|
} else {
|
|
// No previous alpha version found, create one
|
|
const parts = currentVersion.split('.');
|
|
const nextMajor = parseInt(parts[0], 10) + 1;
|
|
const newAlphaVersion = `${nextMajor}.0.0-alpha.1`;
|
|
console.log(` No previous alpha version found. Creating: ${newAlphaVersion}`);
|
|
updateAllVersions(newAlphaVersion);
|
|
console.log(`✅ Created new alpha version: ${newAlphaVersion}`);
|
|
console.log(` Please commit this change: git add package.json packages/*/package.json && git commit -m "chore: restore alpha version after merge"`);
|
|
}
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
main();
|
|
}
|
|
|
|
module.exports = { main };
|