mirror of
https://github.com/anomalyco/opentui.git
synced 2026-09-19 01:26:03 +08:00
aabb8ec6a4
Extract examples, assets, install.sh, and the standalone build script into a new workspace so they consume the public package surface (@opentui/core, @opentui/three, @opentui/keymap) instead of reaching into sibling internals. This makes examples a consumer of the published API. Drop the inherited browser export condition that prevented jimp from resolving its node entry, which broke the standalone build.
186 lines
6.3 KiB
TypeScript
186 lines
6.3 KiB
TypeScript
import { readFileSync, writeFileSync } from "fs"
|
|
import { join, resolve, dirname } from "path"
|
|
import { fileURLToPath } from "url"
|
|
import { execSync } from "child_process"
|
|
import process from "process"
|
|
|
|
interface PackageJson {
|
|
name: string
|
|
version: string
|
|
optionalDependencies?: Record<string, string>
|
|
dependencies?: Record<string, string>
|
|
[key: string]: any
|
|
}
|
|
|
|
const __filename = fileURLToPath(import.meta.url)
|
|
const __dirname = dirname(__filename)
|
|
const rootDir = resolve(__dirname, "..")
|
|
|
|
const args = process.argv.slice(2)
|
|
let version = args.find((arg) => !arg.startsWith("--"))
|
|
|
|
if (!version) {
|
|
console.error("Error: Please provide a version number")
|
|
console.error("Usage: bun scripts/prepare-release.ts <version>")
|
|
console.error("Example: bun scripts/prepare-release.ts 0.2.0")
|
|
console.error(" bun scripts/prepare-release.ts '*' (auto-increment patch)")
|
|
process.exit(1)
|
|
}
|
|
|
|
// Handle auto-increment case
|
|
if (version === "*") {
|
|
try {
|
|
const corePackageJsonPath = join(rootDir, "packages", "core", "package.json")
|
|
const corePackageJson: PackageJson = JSON.parse(readFileSync(corePackageJsonPath, "utf8"))
|
|
const currentVersion = corePackageJson.version
|
|
|
|
// Parse current version and increment patch
|
|
const versionParts = currentVersion.split(".")
|
|
if (versionParts.length !== 3) {
|
|
console.error(`Error: Invalid current version format: ${currentVersion}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
const major = parseInt(versionParts[0])
|
|
const minor = parseInt(versionParts[1])
|
|
const patch = parseInt(versionParts[2]) + 1
|
|
|
|
version = `${major}.${minor}.${patch}`
|
|
console.log(`Auto-incrementing version from ${currentVersion} to ${version}`)
|
|
} catch (error) {
|
|
console.error(`Error: Failed to read current version: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
}
|
|
|
|
if (!/^\d+\.\d+\.\d+(-[a-zA-Z0-9.-]+)?$/.test(version)) {
|
|
console.error(`Error: Invalid version format: ${version}`)
|
|
console.error("Version should follow semver format (e.g., 1.0.0, 1.0.0-beta.1)")
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log(`\nPreparing release ${version} for core, three, examples, react, solid, and keymap packages...\n`)
|
|
|
|
const corePackageJsonPath = join(rootDir, "packages", "core", "package.json")
|
|
console.log("Updating @opentui/core...")
|
|
|
|
try {
|
|
const corePackageJson: PackageJson = JSON.parse(readFileSync(corePackageJsonPath, "utf8"))
|
|
|
|
corePackageJson.version = version
|
|
|
|
if (corePackageJson.optionalDependencies) {
|
|
for (const depName in corePackageJson.optionalDependencies) {
|
|
if (depName.startsWith("@opentui/core-")) {
|
|
corePackageJson.optionalDependencies[depName] = version
|
|
console.log(` Updated ${depName} to ${version}`)
|
|
}
|
|
}
|
|
}
|
|
|
|
writeFileSync(corePackageJsonPath, JSON.stringify(corePackageJson, null, 2) + "\n")
|
|
console.log(` @opentui/core updated to version ${version}`)
|
|
} catch (error) {
|
|
console.error(` Failed to update @opentui/core: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
const reactPackageJsonPath = join(rootDir, "packages", "react", "package.json")
|
|
const threePackageJsonPath = join(rootDir, "packages", "three", "package.json")
|
|
const examplesPackageJsonPath = join(rootDir, "packages", "examples", "package.json")
|
|
|
|
console.log("\nUpdating @opentui/three...")
|
|
|
|
try {
|
|
const threePackageJson: PackageJson = JSON.parse(readFileSync(threePackageJsonPath, "utf8"))
|
|
|
|
threePackageJson.version = version
|
|
|
|
writeFileSync(threePackageJsonPath, JSON.stringify(threePackageJson, null, 2) + "\n")
|
|
console.log(` @opentui/three updated to version ${version}`)
|
|
console.log(` Note: @opentui/core dependency will be set to ${version} during build`)
|
|
} catch (error) {
|
|
console.error(` Failed to update @opentui/three: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log("\nUpdating @opentui/examples...")
|
|
|
|
try {
|
|
const examplesPackageJson: PackageJson = JSON.parse(readFileSync(examplesPackageJsonPath, "utf8"))
|
|
|
|
examplesPackageJson.version = version
|
|
|
|
writeFileSync(examplesPackageJsonPath, JSON.stringify(examplesPackageJson, null, 2) + "\n")
|
|
console.log(` @opentui/examples updated to version ${version}`)
|
|
} catch (error) {
|
|
console.error(` Failed to update @opentui/examples: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log("\nUpdating @opentui/react...")
|
|
|
|
try {
|
|
const reactPackageJson: PackageJson = JSON.parse(readFileSync(reactPackageJsonPath, "utf8"))
|
|
|
|
reactPackageJson.version = version
|
|
|
|
writeFileSync(reactPackageJsonPath, JSON.stringify(reactPackageJson, null, 2) + "\n")
|
|
console.log(` @opentui/react updated to version ${version}`)
|
|
console.log(` Note: @opentui/core dependency will be set to ${version} during build`)
|
|
} catch (error) {
|
|
console.error(` Failed to update @opentui/react: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
const solidPackageJsonPath = join(rootDir, "packages", "solid", "package.json")
|
|
console.log("\nUpdating @opentui/solid...")
|
|
|
|
try {
|
|
const solidPackageJson: PackageJson = JSON.parse(readFileSync(solidPackageJsonPath, "utf8"))
|
|
|
|
solidPackageJson.version = version
|
|
|
|
writeFileSync(solidPackageJsonPath, JSON.stringify(solidPackageJson, null, 2) + "\n")
|
|
console.log(` @opentui/solid updated to version ${version}`)
|
|
console.log(` Note: @opentui/core dependency will be set to ${version} during build`)
|
|
} catch (error) {
|
|
console.error(` Failed to update @opentui/solid: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
const keymapPackageJsonPath = join(rootDir, "packages", "keymap", "package.json")
|
|
console.log("\nUpdating @opentui/keymap...")
|
|
|
|
try {
|
|
const keymapPackageJson: PackageJson = JSON.parse(readFileSync(keymapPackageJsonPath, "utf8"))
|
|
|
|
keymapPackageJson.version = version
|
|
|
|
writeFileSync(keymapPackageJsonPath, JSON.stringify(keymapPackageJson, null, 2) + "\n")
|
|
console.log(` @opentui/keymap updated to version ${version}`)
|
|
} catch (error) {
|
|
console.error(` Failed to update @opentui/keymap: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log("\nUpdating bun.lock...")
|
|
try {
|
|
execSync("bun install", { cwd: rootDir, stdio: "inherit" })
|
|
console.log(" bun.lock updated successfully")
|
|
} catch (error) {
|
|
console.error(` Failed to update bun.lock: ${error}`)
|
|
process.exit(1)
|
|
}
|
|
|
|
console.log(`
|
|
Successfully prepared release ${version} for core, three, examples, react, solid, and keymap packages!
|
|
|
|
Next steps:
|
|
1. Review the changes: git diff
|
|
2. Build the packages: bun run build
|
|
3. Commit the changes: git add -A && git commit -m "Release v${version}" && git push
|
|
4. Publish to npm: bun run publish
|
|
5. Push to GitHub: git push
|
|
`)
|