UNPKG

skeet

Version:

Full-stack TypeScript Serverless Framework

122 lines (115 loc) 3.73 kB
import { Logger } from '@/lib/logger' import { importConfig } from '@/index' import { setupActions, updateSkeetCloudConfig, getWorkerConfig, cloudRunDeploy, syncRunUrl, syncWorkerPluginUrl, saveSkeetSolanaTransfer, } from '@/cli' import { API_PATH, getContainerRegion, getPluginData, ROUTE_PACKAGE_JSON_PATH, } from '@/lib/getNetworkConfig' import fs from 'fs' import inquirer from 'inquirer' import { skeetWorkerPluginList } from '@/lib/workerPluginList' import { execSyncCmd } from '@/lib/execSyncCmd' export const addWorkerPlugin = async (pluginName: string) => { const skeetConfig = await importConfig() const cRegion = await getContainerRegion(skeetConfig.api.region) const isWorkerPlugin = true const workerConf = await getWorkerConfig(pluginName) const pluginInfo = await getPluginData(pluginName) await updateSkeetCloudConfig(pluginName) await addWorkerPluginToPackageJson( pluginName, cRegion, String(pluginInfo.port) ) await setupActions() await cloudRunDeploy( skeetConfig.api.projectId, skeetConfig.api.appName, skeetConfig.api.region, workerConf.cloudRun.memory, String(workerConf.cloudRun.cpu), String(workerConf.cloudRun.maxConcurrency), String(workerConf.cloudRun.maxInstances), String(workerConf.cloudRun.minInstances), pluginName, isWorkerPlugin, skeetConfig.api.hasLoadBalancer ) await syncRunUrl() await syncWorkerPluginUrl(pluginName) const shCmd = ['yarn', 'add', `@skeet-framework/api-plugin-${pluginName}`] await execSyncCmd(shCmd, API_PATH) Logger.success(`Successfully created ${pluginName}!`) } export const addWorkerPluginToPackageJson = async ( pluginName: string, cRegion: string, port: string = '1112' ) => { const packageJson = fs.readFileSync('./package.json') const newPackageJson = JSON.parse(String(packageJson)) newPackageJson.scripts[ `skeet:${pluginName}` ] = `yarn rm:${pluginName}-container && yarn run:${pluginName}` newPackageJson.scripts[ `rm:${pluginName}-container` ] = `docker rm -f skeet-worker-${pluginName}-dev` newPackageJson.scripts[ `run:${pluginName}` ] = `docker run -p ${port}:${port} --name skeet-worker-${pluginName}-dev --env-file apps/api/.env ${cRegion}/skeet-framework/skeet-worker-${pluginName}-dev:latest` fs.writeFileSync( ROUTE_PACKAGE_JSON_PATH, JSON.stringify(newPackageJson, null, 2) ) Logger.success('Successfully Updated ./package.json!') } export const selectWorkerPlugin = async () => { const workerPluginList = skeetWorkerPluginList.map((value) => value.name) inquirer .prompt([ { type: 'list', message: 'Select Services to deploy', name: 'deploying', choices: [new inquirer.Separator(' = Plugins = '), ...workerPluginList], validate(answer) { if (answer.length < 1) { return 'You must choose at least one service.' } return true }, }, ]) .then(async (answers) => { switch (answers.deploying) { case 'solana-transfer': await addWorkerPlugin(answers.deploying) const yarnAddSolanaPlugin = [ 'yarn', 'add', '@skeet-framework/api-plugin-solana-transfer', ] await execSyncCmd(yarnAddSolanaPlugin, API_PATH) await addSolanaResponse() break default: await Logger.sync('Coming soon!') break } }) } const addSolanaResponse = async () => { const fileData = await saveSkeetSolanaTransfer() fs.writeFileSync(fileData.filePath, JSON.stringify(fileData.body, null, 2)) await Logger.success(`Successfully added ${fileData.filePath}`) }