Files
lifeforge/scripts/forge.ts
melvinchia3636 fa569fa464 chore: rename app dir to tools
Former-commit-id: 9d7e5d8020b3a85db232b3e2e244e943562f675c [formerly 84524c6249beaa375c30c03ee7bda46421e23add] [formerly 7cfef4c7dfb0acf6602a3f375e9e0cba74b65ecb [formerly 335184cae12876996fd182fa95d2195344d8e44c]]
Former-commit-id: 7d83bfee351715b9827b89407446bd325d793cfd [formerly 38a644ed7de37442463f2f97a39e1b56666dbe78]
Former-commit-id: 491bed9115a21a0ff699356e6674d76e35c3cc7f
2025-10-03 11:15:05 +08:00

82 lines
2.0 KiB
TypeScript

import { execSync } from 'child_process'
import fs from 'fs'
import path from 'path'
const TOOLS_DIR = path.join(__dirname, '../tools')
const PROCESS_ALLOWED = ['build', 'dev', 'types', 'lint']
const PROJECTS_ALLOWED = Object.assign(
{
shared: 'shared',
ui: 'packages/lifeforge-ui',
client: 'client',
server: 'server'
},
Object.fromEntries(
fs
.readdirSync(TOOLS_DIR)
.filter(f => fs.statSync(path.join(TOOLS_DIR, f)).isDirectory())
.map(f => [f, `tools/${f}`])
)
)
const processType = process.argv[2]
const projectTypes = process.argv.slice(3)
if (!PROCESS_ALLOWED.includes(processType)) {
console.error(
`Invalid process type: ${processType}. Allowed types are: ${PROCESS_ALLOWED.join(', ')}`
)
process.exit(1)
}
if (projectTypes.length === 0) {
console.error(
`No project type specified. Allowed projects are: all, ${Object.keys(
PROJECTS_ALLOWED
).join(', ')}`
)
process.exit(1)
}
if (
JSON.stringify(projectTypes) !== '["all"]' &&
!projectTypes.every(projectType =>
Object.keys(PROJECTS_ALLOWED).includes(projectType)
)
) {
console.error(
`Invalid project type: ${projectTypes.find(projectType => !Object.keys(PROJECTS_ALLOWED).includes(projectType))}. Allowed projects are: all, ${Object.keys(PROJECTS_ALLOWED).join(', ')}`
)
process.exit(1)
}
const isAll = JSON.stringify(projectTypes) === '["all"]'
const finalProjects = isAll ? Object.keys(PROJECTS_ALLOWED) : projectTypes
const commands = finalProjects.map(
projectType =>
`cd ${PROJECTS_ALLOWED[projectType as keyof typeof PROJECTS_ALLOWED]} && bun run ${processType}`
)
console.log(`Running ${processType} for ${finalProjects.length} projects...`)
for (const command of commands) {
console.log(`Executing command: ${command}`)
try {
execSync(command, { stdio: 'inherit' })
console.log(`Command completed: ${command}`)
} catch {
console.error(`Command failed: ${command}`)
process.exit(1)
}
}
console.log(`All projects ${processType} completed successfully.`)
process.exit(0)