const textVersion = (pattern) => ({
readVersion(contents) {
const match = contents.match(pattern);
if (!match) {
throw new Error(`version pattern not found: ${pattern}`);
}
return match[2];
},
writeVersion(contents, version) {
return contents.replace(pattern, (_match, prefix, _current, suffix) => `${prefix}${version}${suffix}`);
},
});
const cargoToml = textVersion(/(^version = ")(\d+\.\d+\.\d+)(")/m);
const cargoLock = textVersion(/(name = "solverforge-cli"\nversion = ")(\d+\.\d+\.\d+)(")/);
const readmeVersion = textVersion(/(Current CLI package version: `)(\d+\.\d+\.\d+)(`\.)/);
const agentsVersion = textVersion(/(- current CLI package version is `)(\d+\.\d+\.\d+)(`)/);
const wireframeVersion = readmeVersion;
const skillVersion = textVersion(/(This skill describes CLI `)(\d+\.\d+\.\d+)(`)/);
module.exports = {
tagPrefix: 'v',
releaseCommitMessageFormat: 'chore(release): {{currentTag}}',
commitUrlFormat: 'https://github.com/SolverForge/solverforge-cli/commit/{{hash}}',
compareUrlFormat: 'https://github.com/SolverForge/solverforge-cli/compare/{{previousTag}}...{{currentTag}}',
packageFiles: [
{ filename: 'Cargo.toml', updater: cargoToml },
{ filename: 'package.json', type: 'json' },
],
bumpFiles: [
{ filename: 'Cargo.toml', updater: cargoToml },
{ filename: 'Cargo.lock', updater: cargoLock },
{ filename: 'package.json', type: 'json' },
{ filename: 'package-lock.json', type: 'json' },
{ filename: 'README.md', updater: readmeVersion },
{ filename: 'AGENTS.md', updater: agentsVersion },
{ filename: 'WIREFRAME.md', updater: wireframeVersion },
{ filename: 'skills/solverforge-modeling/SKILL.md', updater: skillVersion },
],
};