@sogni-ai/sogni-creative-agent-skill
Version:
Sogni Creative Agent Skill: agent skill and CLI for Sogni AI image, video, and music generation.
74 lines (62 loc) • 2.7 kB
JavaScript
/**
* Verify that package.json's version has been stamped into every manifest
* that carries package identity. Keep this separate from sync-version so
* release gates can fail without mutating the tree.
*/
import { readFileSync } from 'node:fs';
import { dirname, join } from 'node:path';
import { fileURLToPath, pathToFileURL } from 'node:url';
const defaultRepoRoot = dirname(dirname(fileURLToPath(import.meta.url)));
function read(repoRoot, relativePath) {
return readFileSync(join(repoRoot, relativePath), 'utf8');
}
function readJson(repoRoot, relativePath, problems) {
try {
return JSON.parse(read(repoRoot, relativePath));
} catch (error) {
problems.push(`${relativePath}: invalid JSON (${error.message})`);
return null;
}
}
function expectVersion(problems, label, actual, expected) {
if (actual !== expected) {
problems.push(`${label}: expected ${expected}, found ${actual ?? '(missing)'}`);
}
}
export function checkVersionSync({ repoRoot = defaultRepoRoot } = {}) {
const problems = [];
const pkg = readJson(repoRoot, 'package.json', problems);
const version = pkg?.version;
if (!version) {
problems.push('package.json: missing version');
return { version, problems };
}
const versionModule = read(repoRoot, 'version.mjs').match(/^export const PACKAGE_VERSION = '([^']+)';\s*$/m);
expectVersion(problems, 'version.mjs PACKAGE_VERSION', versionModule?.[1], version);
const skill = read(repoRoot, 'SKILL.md').match(/^\s*version:\s*"([^"]+)"/m);
expectVersion(problems, 'SKILL.md metadata.version', skill?.[1], version);
const hermesSkill = read(repoRoot, '.agents/skills/sogni-creative-agent-skill/SKILL.md')
.match(/^\s+version:\s*"([^"]+)"/m);
expectVersion(problems, 'Hermes Hub SKILL.md version', hermesSkill?.[1], version);
for (const manifest of [
'.claude-plugin/plugin.json',
'.codex-plugin/plugin.json',
'openclaw.plugin.json',
'desktop-extension/manifest.json',
]) {
const parsed = readJson(repoRoot, manifest, problems);
if (parsed) expectVersion(problems, `${manifest} version`, parsed.version, version);
}
return { version, problems };
}
if (process.argv[1] && import.meta.url === pathToFileURL(process.argv[1]).href) {
const { version, problems } = checkVersionSync();
if (problems.length > 0) {
console.error(`Version metadata drifted from package.json${version ? ` (${version})` : ''}:`);
for (const problem of problems) console.error(`- ${problem}`);
console.error('Run `npm run sync:version` and include the changed stamp files in the release.');
process.exit(1);
}
console.log(`Version metadata OK (${version}).`);
}