Update docs
This commit is contained in:
58
scripts/update-docs-branch.js
Normal file
58
scripts/update-docs-branch.js
Normal file
@ -0,0 +1,58 @@
|
||||
const proc = require('child_process');
|
||||
const read = cmd => proc.execSync(cmd, { encoding: 'utf8' }).trim();
|
||||
const run = cmd => {
|
||||
proc.execSync(cmd, { stdio: 'inherit' });
|
||||
};
|
||||
const tryRead = cmd => {
|
||||
try {
|
||||
return read(cmd);
|
||||
} catch (e) {
|
||||
return undefined;
|
||||
}
|
||||
};
|
||||
|
||||
const releaseBranchRegex = /^release-v(?<version>(?<major>\d+)\.(?<minor>\d+)(?:\.(?<patch>\d+))?)$/;
|
||||
|
||||
const currentBranch = read('git rev-parse --abbrev-ref HEAD');
|
||||
const match = currentBranch.match(releaseBranchRegex);
|
||||
|
||||
if (!match) {
|
||||
console.error('Not currently on a release branch');
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const current = match.groups;
|
||||
const docsBranch = `docs-v${current.major}.x`;
|
||||
|
||||
// Fetch remotes and find the docs branch if it exists
|
||||
run('git fetch --all --no-tags');
|
||||
const matchingDocsBranches = tryRead(`git rev-parse --glob='*/${docsBranch}'`);
|
||||
|
||||
if (!matchingDocsBranches) {
|
||||
// Create the branch
|
||||
run(`git checkout --orphan ${docsBranch}`);
|
||||
} else {
|
||||
const [publishedRef, ...others] = new Set(matchingDocsBranches.split('\n'));
|
||||
if (others.length > 0) {
|
||||
console.error(
|
||||
`Found conflicting ${docsBranch} branches.\n` +
|
||||
'Either local branch is outdated or there are multiple matching remote branches.',
|
||||
);
|
||||
process.exit(1);
|
||||
}
|
||||
const publishedVersion = JSON.parse(read(`git show ${publishedRef}:package.json`)).version;
|
||||
const publishedMinor = publishedVersion.match(/\d+\.(?<minor>\d+)\.\d+/).groups.minor;
|
||||
if (current.minor < publishedMinor) {
|
||||
console.error('Refusing to update docs: newer version is published');
|
||||
process.exit(0);
|
||||
}
|
||||
|
||||
run('git checkout --quiet --detach');
|
||||
run(`git reset --soft ${publishedRef}`);
|
||||
run(`git checkout ${docsBranch}`);
|
||||
}
|
||||
|
||||
run('npm run prepare-docs');
|
||||
run('git add -f docs'); // --force needed because generated docs files are gitignored
|
||||
run('git commit -m "Update docs"');
|
||||
run(`git checkout ${currentBranch}`);
|
||||
Reference in New Issue
Block a user