UNPKG

@dcxp/root

Version:

DCX: Decentralized Credential Exchange. DWN protocol for verifiable credential exchange.

101 lines (82 loc) 3.75 kB
import { version as root } from '../package.json'; import { version as applicant } from '../packages/applicant/package.json'; import { version as common } from '../packages/common/package.json'; import { version as issuer } from '../packages/issuer/package.json'; import { execSync } from 'child_process'; import { promises as fs } from 'fs'; import * as path from 'path'; const semvers = { root, applicant, common, issuer }; async function readPackageJson(packagePath: string) { const data = await fs.readFile(packagePath, 'utf-8'); return JSON.parse(data); } async function writePackageJson(packagePath: string, content: any) { await fs.writeFile(packagePath, JSON.stringify(content, null, 2) + '\n', 'utf-8'); } function incrementVersion(version: string, releaseType: string): string { const [major, minor, patch] = version.split('.').map(Number); switch (releaseType) { case 'major': return `${major + 1}.0.0`; case 'minor': return `${major}.${minor + 1}.0`; case 'patch': return `${major}.${minor}.${patch + 1}`; default: throw new Error(`Unknown release type: ${releaseType}`); } } async function updateVersion(packagePath: string, releaseType: string) { const packageJson = await readPackageJson(packagePath); const newVersion = incrementVersion(packageJson.version, releaseType); packageJson.version = newVersion; await writePackageJson(packagePath, packageJson); if (packageJson.name.includes('root')) { semvers.root = newVersion; } else if (packageJson.name.includes('applicant')) { semvers.applicant = newVersion; } else if (packageJson.name.includes('common')) { semvers.common = newVersion; } else if (packageJson.name.includes('issuer')) { semvers.issuer = newVersion; } console.log(`Updated ${packageJson.name} to version ${newVersion}`); } async function version() { const args = process.argv.slice(2); const releaseTypes = ['patch', 'minor', 'major']; const packageNames = ['root', 'applicant', 'common', 'issuer']; const packageName = args.find(arg => packageNames.find(packageName=> packageName === arg)); const releaseType = args.find(arg => releaseTypes.find(releaseType => releaseType === arg)); const doGit = args.some(arg => ['--git', '-g'].includes(arg)); if (!releaseType) { throw new Error('Invalid argument. Use "patch", "minor", or "major".'); } const rootPackagePath = path.resolve(process.cwd(), 'package.json'); const applicantPackagePath = path.resolve(process.cwd(), 'packages/applicant/package.json'); const commonPackagePath = path.resolve(process.cwd(), 'packages/common/package.json'); const issuerPackagePath = path.resolve(process.cwd(), 'packages/issuer/package.json'); const packagePaths = [rootPackagePath, applicantPackagePath, commonPackagePath, issuerPackagePath]; if(packageName && packageName === 'root') { const packagePath = path.resolve(process.cwd(), 'package.json'); await updateVersion(packagePath, releaseType); } else if(packageName && packageNames.includes(packageName)) { const packagePath = path.resolve(process.cwd(), `packages/${packageName.toLowerCase()}/package.json`); await updateVersion(packagePath, releaseType); } else { for (const packagePath of packagePaths) { await updateVersion(packagePath, releaseType); } } console.log('Package versions updated:', semvers); if (doGit) { execSync('git add .', { stdio: 'inherit' }); execSync(`git commit -m "chore: bump versions to ${releaseType}"`, { stdio: 'inherit' }); execSync(`git tag -a "v${releaseType}" -m "Release ${releaseType}"`, { stdio: 'inherit' }); } } version() .catch(err => { console.error(err); process.exit(1); });