feat: Implement tag-based version synchronization and direct publishing for releases.
This commit is contained in:
53
scripts/sync-versions.ts
Normal file
53
scripts/sync-versions.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
import * as fs from "fs";
|
||||
import * as path from "path";
|
||||
import { execSync } from "child_process";
|
||||
|
||||
const tag = process.env.GITHUB_REF_NAME || process.env.TAG;
|
||||
|
||||
if (!tag || !tag.startsWith("v")) {
|
||||
console.error("❌ No valid tag found (must start with v, e.g., v1.0.0)");
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
const version = tag.replace(/^v/, "");
|
||||
console.log(`🚀 Syncing all packages to version: ${version}`);
|
||||
|
||||
const rootPkg = JSON.parse(fs.readFileSync("package.json", "utf-8"));
|
||||
const packagesDir = "packages";
|
||||
const appsDir = "apps";
|
||||
|
||||
function updatePkg(pkgPath: string) {
|
||||
if (!fs.existsSync(pkgPath)) return;
|
||||
const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf-8"));
|
||||
pkg.version = version;
|
||||
|
||||
// Also update workspace dependencies if they match our packages
|
||||
if (pkg.dependencies) {
|
||||
for (const dep in pkg.dependencies) {
|
||||
if (pkg.dependencies[dep].startsWith("workspace:")) {
|
||||
pkg.dependencies[dep] = "workspace:*"; // Keep workspace protocol
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fs.writeFileSync(pkgPath, JSON.stringify(pkg, null, 2) + "\n");
|
||||
console.log(`✅ Updated ${pkg.name} to ${version}`);
|
||||
}
|
||||
|
||||
// Update root
|
||||
rootPkg.version = version;
|
||||
fs.writeFileSync("package.json", JSON.stringify(rootPkg, null, 2) + "\n");
|
||||
|
||||
// Update all packages
|
||||
const packages = fs.readdirSync(packagesDir);
|
||||
for (const p of packages) {
|
||||
updatePkg(path.join(packagesDir, p, "package.json"));
|
||||
}
|
||||
|
||||
// Update all apps
|
||||
const apps = fs.readdirSync(appsDir);
|
||||
for (const a of apps) {
|
||||
updatePkg(path.join(appsDir, a, "package.json"));
|
||||
}
|
||||
|
||||
console.log("✨ All versions synced!");
|
||||
Reference in New Issue
Block a user