@riddance/env
Version:
38 lines • 5.74 kB
JavaScript
import { readFile, writeFile } from 'node:fs/promises';
import { join, resolve } from 'node:path';
import { getHash, getTag, getTags, isClean } from '../lib/git.js';
const p = resolve(process.cwd(), process.argv[2] ?? '.');
const packageJson = JSON.parse(await readFile(join(p, 'package.json'), 'utf-8'));
async function assertClean() {
if (packageJson.gitHead) {
const { gitHead, ...headless } = packageJson;
await writeFile(join(p, 'package.json'), JSON.stringify(headless, undefined, ' ') + '\n', 'utf-8');
}
if (!(await isClean(p))) {
throw new Error('Build does not have a git hash.');
}
}
async function assertUntagged() {
const [t, ts] = await Promise.all([getTag(p), getTags(p)]);
const { version } = packageJson;
if (t === `v${version}`) {
return; // Since we're clean
}
if (ts.includes(`v${version}`)) {
throw new Error('Version already built. Please update package.json.');
}
}
try {
await Promise.all([assertClean(), assertUntagged()]);
const gitHead = await getHash(p);
await writeFile(join(p, 'package.json'), JSON.stringify({
...packageJson,
gitHead,
}, undefined, ' '), 'utf-8');
}
catch (e) {
console.error(e.message);
process.exit(1);
}
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJlcHVibGlzaC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInByZXB1Ymxpc2gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUVBLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLE1BQU0sa0JBQWtCLENBQUE7QUFDdEQsT0FBTyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsTUFBTSxXQUFXLENBQUE7QUFDekMsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUVqRSxNQUFNLENBQUMsR0FBRyxPQUFPLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDLENBQUE7QUFDeEQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUFFLE9BQU8sQ0FBQyxDQUc5RSxDQUFBO0FBRUQsS0FBSyxVQUFVLFdBQVc7SUFDdEIsSUFBSSxXQUFXLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDdEIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLFFBQVEsRUFBRSxHQUFHLFdBQVcsQ0FBQTtRQUM1QyxNQUFNLFNBQVMsQ0FDWCxJQUFJLENBQUMsQ0FBQyxFQUFFLGNBQWMsQ0FBQyxFQUN2QixJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxFQUNoRCxPQUFPLENBQ1YsQ0FBQTtJQUNMLENBQUM7SUFDRCxJQUFJLENBQUMsQ0FBQyxNQUFNLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEIsTUFBTSxJQUFJLEtBQUssQ0FBQyxpQ0FBaUMsQ0FBQyxDQUFBO0lBQ3RELENBQUM7QUFDTCxDQUFDO0FBRUQsS0FBSyxVQUFVLGNBQWM7SUFDekIsTUFBTSxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUMxRCxNQUFNLEVBQUUsT0FBTyxFQUFFLEdBQUcsV0FBVyxDQUFBO0lBRS9CLElBQUksQ0FBQyxLQUFLLElBQUksT0FBTyxFQUFFLEVBQUUsQ0FBQztRQUN0QixPQUFNLENBQUMsb0JBQW9CO0lBQy9CLENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxPQUFPLEVBQUUsQ0FBQyxFQUFFLENBQUM7UUFDN0IsTUFBTSxJQUFJLEtBQUssQ0FBQyxvREFBb0QsQ0FBQyxDQUFBO0lBQ3pFLENBQUM7QUFDTCxDQUFDO0FBRUQsSUFBSSxDQUFDO0lBQ0QsTUFBTSxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsY0FBYyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3BELE1BQU0sT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2hDLE1BQU0sU0FBUyxDQUNYLElBQUksQ0FBQyxDQUFDLEVBQUUsY0FBYyxDQUFDLEVBQ3ZCLElBQUksQ0FBQyxTQUFTLENBQ1Y7UUFDSSxHQUFHLFdBQVc7UUFDZCxPQUFPO0tBQ1YsRUFDRCxTQUFTLEVBQ1QsSUFBSSxDQUNQLEVBQ0QsT0FBTyxDQUNWLENBQUE7QUFDTCxDQUFDO0FBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQztJQUNULE9BQU8sQ0FBQyxLQUFLLENBQUUsQ0FBeUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNqRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ25CLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIjIS91c3IvYmluL2VudiBub2RlXG5cbmltcG9ydCB7IHJlYWRGaWxlLCB3cml0ZUZpbGUgfSBmcm9tICdub2RlOmZzL3Byb21pc2VzJ1xuaW1wb3J0IHsgam9pbiwgcmVzb2x2ZSB9IGZyb20gJ25vZGU6cGF0aCdcbmltcG9ydCB7IGdldEhhc2gsIGdldFRhZywgZ2V0VGFncywgaXNDbGVhbiB9IGZyb20gJy4uL2xpYi9naXQuanMnXG5cbmNvbnN0IHAgPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIHByb2Nlc3MuYXJndlsyXSA/PyAnLicpXG5jb25zdCBwYWNrYWdlSnNvbiA9IEpTT04ucGFyc2UoYXdhaXQgcmVhZEZpbGUoam9pbihwLCAncGFja2FnZS5qc29uJyksICd1dGYtOCcpKSBhcyB7XG4gICAgdmVyc2lvbjogc3RyaW5nXG4gICAgZ2l0SGVhZD86IHN0cmluZ1xufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRDbGVhbigpIHtcbiAgICBpZiAocGFja2FnZUpzb24uZ2l0SGVhZCkge1xuICAgICAgICBjb25zdCB7IGdpdEhlYWQsIC4uLmhlYWRsZXNzIH0gPSBwYWNrYWdlSnNvblxuICAgICAgICBhd2FpdCB3cml0ZUZpbGUoXG4gICAgICAgICAgICBqb2luKHAsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KGhlYWRsZXNzLCB1bmRlZmluZWQsICcgICcpICsgJ1xcbicsXG4gICAgICAgICAgICAndXRmLTgnLFxuICAgICAgICApXG4gICAgfVxuICAgIGlmICghKGF3YWl0IGlzQ2xlYW4ocCkpKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignQnVpbGQgZG9lcyBub3QgaGF2ZSBhIGdpdCBoYXNoLicpXG4gICAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBhc3NlcnRVbnRhZ2dlZCgpIHtcbiAgICBjb25zdCBbdCwgdHNdID0gYXdhaXQgUHJvbWlzZS5hbGwoW2dldFRhZyhwKSwgZ2V0VGFncyhwKV0pXG4gICAgY29uc3QgeyB2ZXJzaW9uIH0gPSBwYWNrYWdlSnNvblxuXG4gICAgaWYgKHQgPT09IGB2JHt2ZXJzaW9ufWApIHtcbiAgICAgICAgcmV0dXJuIC8vIFNpbmNlIHdlJ3JlIGNsZWFuXG4gICAgfVxuICAgIGlmICh0cy5pbmNsdWRlcyhgdiR7dmVyc2lvbn1gKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ1ZlcnNpb24gYWxyZWFkeSBidWlsdC4gUGxlYXNlIHVwZGF0ZSBwYWNrYWdlLmpzb24uJylcbiAgICB9XG59XG5cbnRyeSB7XG4gICAgYXdhaXQgUHJvbWlzZS5hbGwoW2Fzc2VydENsZWFuKCksIGFzc2VydFVudGFnZ2VkKCldKVxuICAgIGNvbnN0IGdpdEhlYWQgPSBhd2FpdCBnZXRIYXNoKHApXG4gICAgYXdhaXQgd3JpdGVGaWxlKFxuICAgICAgICBqb2luKHAsICdwYWNrYWdlLmpzb24nKSxcbiAgICAgICAgSlNPTi5zdHJpbmdpZnkoXG4gICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgLi4ucGFja2FnZUpzb24sXG4gICAgICAgICAgICAgICAgZ2l0SGVhZCxcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB1bmRlZmluZWQsXG4gICAgICAgICAgICAnICAnLFxuICAgICAgICApLFxuICAgICAgICAndXRmLTgnLFxuICAgIClcbn0gY2F0Y2ggKGUpIHtcbiAgICBjb25zb2xlLmVycm9yKChlIGFzIHsgbWVzc2FnZTogc3RyaW5nIH0pLm1lc3NhZ2UpXG4gICAgcHJvY2Vzcy5leGl0KDEpXG59XG4iXX0=