feat: publish av-tools 0.1.0
This commit is contained in:
46
scripts/generate-toolbox-manifest.mjs
Normal file
46
scripts/generate-toolbox-manifest.mjs
Normal file
@@ -0,0 +1,46 @@
|
||||
import { readFile, writeFile } from 'node:fs/promises';
|
||||
import { dirname, join, relative } from 'node:path';
|
||||
import { fileURLToPath } from 'node:url';
|
||||
|
||||
const repositoryRoot = join(dirname(fileURLToPath(import.meta.url)), '..');
|
||||
const sourcePath = join(
|
||||
repositoryRoot,
|
||||
'src',
|
||||
'toolbox',
|
||||
'manifest.source.json'
|
||||
);
|
||||
const outputPath = join(repositoryRoot, 'public', 'toolbox-app.json');
|
||||
const packagePath = join(repositoryRoot, 'package.json');
|
||||
const checkOnly = process.argv.includes('--check');
|
||||
|
||||
const source = JSON.parse(await readFile(sourcePath, 'utf8'));
|
||||
const packageJson = JSON.parse(await readFile(packagePath, 'utf8'));
|
||||
|
||||
if (source.version !== packageJson.version) {
|
||||
throw new Error(
|
||||
`Manifest version ${source.version} differs from package version ${packageJson.version}`
|
||||
);
|
||||
}
|
||||
|
||||
if (
|
||||
source.source?.repository !== 'https://git.add-ideas.de/zemion/av-tools' ||
|
||||
source.source?.license !== 'GPL-3.0-or-later'
|
||||
) {
|
||||
throw new Error(
|
||||
'Manifest source must identify the canonical av-tools repository and GPL-3.0-or-later licence'
|
||||
);
|
||||
}
|
||||
|
||||
const serialized = `${JSON.stringify(source, null, 2)}\n`;
|
||||
if (checkOnly) {
|
||||
const current = await readFile(outputPath, 'utf8').catch(() => '');
|
||||
if (current !== serialized) {
|
||||
throw new Error(
|
||||
`${relative(repositoryRoot, outputPath)} is stale; run npm run manifest:generate`
|
||||
);
|
||||
}
|
||||
console.log('Toolbox manifest is synchronized with its canonical source');
|
||||
} else {
|
||||
await writeFile(outputPath, serialized);
|
||||
console.log(`Generated ${relative(repositoryRoot, outputPath)}`);
|
||||
}
|
||||
Reference in New Issue
Block a user