cwait/packages/lib/scripts/publish.js
2025-04-02 17:07:30 +03:00

62 lines
1.8 KiB
JavaScript

import { execSync } from 'node:child_process';
import fs from 'node:fs';
import path from 'node:path';
const level = process.argv[2] || '--patch';
// Read the current version from package.json
const packageJsonPath = path.join(process.cwd(), 'package.json');
const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, 'utf8'));
const currentVersion = packageJson.version;
let [major, minor, patchWithSuffix] = currentVersion.split('.');
let [patch, ...suffixParts] = patchWithSuffix.match(/(\d+)([^\d].*)?/).slice(1);
const suffix = suffixParts.join('') || '';
switch (level) {
case '--patch':
patch = Number(patch) + 1;
break;
case '--minor':
minor = Number(minor) + 1;
patch = 0;
break;
case '--major':
major = Number(major) + 1;
minor = 0;
patch = 0;
break;
default:
throw new Error(`Invalid level: ${level}`);
}
try {
const newVersion = `${[major, minor, patch].join('.')}${suffix}`;
packageJson.version = newVersion;
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
// Login to npm
if (process.env.NPM_USERNAME && process.env.NPM_PASSWORD) {
execSync(
`{ echo ${process.env.NPM_USERNAME}; sleep 1; echo ${process.env.NPM_PASSWORD}; } | yarn npm login --scope=coinweb`,
{ stdio: 'inherit' }
);
} else {
throw new Error('NPM_USERNAME and NPM_PASSWORD are not set');
}
// Publish the package to npm with the hash-tagged version
execSync(`npm publish`, { stdio: 'inherit' });
// biome-ignore lint/suspicious/noConsoleLog: cli tool
console.log(`Package published with version: ${newVersion}`);
} catch (error) {
console.error('Failed to publish package:');
console.error(error.message);
// RESTORE the original version in package.json
packageJson.version = currentVersion;
fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2));
}