UNPKG

skeet

Version:

Full-stack TypeScript Serverless Framework

83 lines (78 loc) 2.66 kB
import { Logger } from '@/lib/logger' import fs from 'fs' import { execSyncCmd } from '@/lib/execSyncCmd' import { importConfig } from '@/index' import { SkeetCloudConfig } from '@/types/skeetTypes' import { setupActions } from '../setup' import { SKEET_CONFIG_PATH, ROUTE_PACKAGE_JSON_PATH, getWorkerEnvPath, WORKER_REPO_URL, getWorkerName, WORKER_PATH, } from '@/lib/getNetworkConfig' export const addWorker = async (workerName: string) => { const workerDir = './apps/workers/' + workerName if (fs.existsSync(workerDir)) { await Logger.error(`Already exist workerName: ${workerName}!`) return '' } else { fs.mkdir(workerDir, { recursive: true }, (err) => { if (err) throw err }) } const gitCloneCmd = ['git', 'clone', WORKER_REPO_URL, workerDir] await execSyncCmd(gitCloneCmd) const rmDefaultGit = ['rm', '-rf', '.git'] await execSyncCmd(rmDefaultGit, workerDir) await addWorkerEnv(workerName) await updateSkeetCloudConfig(workerName) await addWorkerToPackageJson(workerName) await setupActions() const yarnCmd = ['yarn'] await execSyncCmd(yarnCmd, `${WORKER_PATH}/${workerName}`) Logger.success(`Successfully created ${workerName}!`) } export const updateSkeetCloudConfig = async (workerName: string) => { let skeetConfig: SkeetCloudConfig = await importConfig() const name = await getWorkerName(skeetConfig.api.appName, workerName) if (skeetConfig.workers) skeetConfig.workers.push({ workerName, cloudRun: { name, url: '', cpu: 1, maxConcurrency: 80, maxInstances: 100, minInstances: 0, memory: '1Gi', }, }) fs.writeFileSync(SKEET_CONFIG_PATH, JSON.stringify(skeetConfig, null, 2)) Logger.success('Successfully Updated skeet-cloud.config.json!') } export const addWorkerToPackageJson = async (workerName: string) => { const packageJson = fs.readFileSync('./package.json') const newPackageJson = JSON.parse(String(packageJson)) newPackageJson.scripts[ `skeet:${workerName}` ] = `yarn --cwd ./apps/workers/${workerName} dev` fs.writeFileSync( ROUTE_PACKAGE_JSON_PATH, JSON.stringify(newPackageJson, null, 2) ) Logger.success('Successfully Updated ./package.json!') } export const addWorkerEnv = async (workerName: string) => { try { const workerEnvPath = await getWorkerEnvPath(workerName) const { workers } = await importConfig() const port = workers ? 3000 + workers.length : 3000 fs.writeFileSync(workerEnvPath, `\nPORT=${String(port)}`, { flag: 'a' }) } catch (error) { console.log(error) throw new Error(JSON.stringify(String(error))) } }