Files
lifeforge/scripts/forge.ts
melvinchia3636 e2112a0853 fix(scripts): update PROJECTS_ALLOWED to dynamically include directories from apps folder
Former-commit-id: 09024ea966618fcac32539764dcf9f0f47497f8c [formerly 8f78db02e0432e631c672630ba027e940ea58b5e] [formerly 228aefba27e2062053580015db9b9d37b5c7c11a [formerly d8bca92db171fe20f7c5cb9f85a28e4e216434e2]]
Former-commit-id: 0c9ba69ae9aa92a550453541d72978e376e2f547 [formerly 33063b3f5d6bae9f114ea2c1d81ca8bd8192e284]
Former-commit-id: 9126ed704c482616868f0a61aeb853341dc31fab
2025-09-23 12:57:56 +08:00

82 lines
2.0 KiB
TypeScript

import { execSync } from 'child_process'
import fs from 'fs'
import path from 'path'
const APP_DIR = path.join(__dirname, '../apps')
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(APP_DIR)
.filter(f => fs.statSync(path.join(APP_DIR, f)).isDirectory())
.map(f => [f, `apps/${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)