49 lines
1.6 KiB
JavaScript
49 lines
1.6 KiB
JavaScript
|
|
import { execSync } from 'child_process';
|
||
|
|
import fs from 'fs';
|
||
|
|
import path from 'path';
|
||
|
|
import { fileURLToPath } from 'url';
|
||
|
|
|
||
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||
|
|
|
||
|
|
try {
|
||
|
|
// 1. 获取最新 tag
|
||
|
|
let tag;
|
||
|
|
try {
|
||
|
|
tag = execSync('git describe --tags --abbrev=0', { encoding: 'utf8' }).trim();
|
||
|
|
} catch (err) {
|
||
|
|
throw new Error('Failed to find git tags. Please make sure the repository has tags (e.g., v1.0.0) before publishing.');
|
||
|
|
}
|
||
|
|
// 去掉 v 前缀
|
||
|
|
const version = tag.startsWith('v') ? tag.slice(1) : tag;
|
||
|
|
|
||
|
|
console.log(`Latest git tag: ${tag}, Version to publish: ${version}`);
|
||
|
|
|
||
|
|
// 2. 读取并更新 package.json
|
||
|
|
const pkgPath = path.join(__dirname, '../package.json');
|
||
|
|
const pkg = JSON.parse(fs.readFileSync(pkgPath, 'utf8'));
|
||
|
|
|
||
|
|
// 保持原有名称(如果已经带有 @apigo.cc/ 前缀)或替换前缀
|
||
|
|
if (!pkg.name.startsWith('@apigo.cc/')) {
|
||
|
|
const baseName = pkg.name.includes('/') ? pkg.name.split('/')[1] : pkg.name;
|
||
|
|
pkg.name = `@apigo.cc/${baseName}`;
|
||
|
|
}
|
||
|
|
pkg.version = version;
|
||
|
|
|
||
|
|
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + '\n');
|
||
|
|
console.log(`Updated package.json: name=${pkg.name}, version=${pkg.version}`);
|
||
|
|
|
||
|
|
// 3. 构建
|
||
|
|
console.log('Running build...');
|
||
|
|
execSync('npm run build', { stdio: 'inherit', cwd: path.join(__dirname, '..') });
|
||
|
|
|
||
|
|
// 4. 发布
|
||
|
|
console.log('Publishing to npm...');
|
||
|
|
const args = process.argv.slice(2).join(' ');
|
||
|
|
execSync(`npm publish --access public ${args}`, { stdio: 'inherit', cwd: path.join(__dirname, '..') });
|
||
|
|
|
||
|
|
console.log('Publish successful!');
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Publish failed:', error.message);
|
||
|
|
process.exit(1);
|
||
|
|
}
|