@mindbase/deploy 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +201 -0
- package/bin/index.ts +3 -0
- package/bin/shared.ts +66 -0
- package/package.json +13 -13
- package/scripts/ensure-tsx.cjs +18 -0
- package/src/app.ts +156 -0
- package/src/config/manager.ts +56 -0
- package/src/config/schema.ts +102 -0
- package/src/index.ts +2 -0
- package/src/init/app.ts +415 -0
- package/src/script/parser.ts +28 -0
- package/src/script/runner.ts +88 -0
- package/src/server/app.ts +266 -0
- package/src/ssh/client.ts +62 -0
- package/src/ssh/executor.ts +43 -0
- package/dist/bin/index.d.ts +0 -1
- package/dist/bin/index.js +0 -245
- package/dist/bin/index.js.map +0 -1
- package/dist/chunk-YB2FK4HH.js +0 -626
- package/dist/chunk-YB2FK4HH.js.map +0 -1
- package/dist/executor-OQZFWKVP.js +0 -38
- package/dist/executor-OQZFWKVP.js.map +0 -1
- package/dist/index.d.ts +0 -19
- package/dist/index.js +0 -3
- package/dist/index.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/config/manager.ts","../src/ssh/client.ts","../src/script/parser.ts","../src/script/runner.ts","../src/app.ts","../src/init/app.ts"],"names":["homedir","readFileSync","resolve","clack","spinner","handleCancel","noteBox","existsSync","pc"],"mappings":"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","file":"chunk-YB2FK4HH.js","sourcesContent":["import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { dirname, join } from 'path';\nimport { homedir } from 'os';\nimport type { DeployConfig } from './schema.js';\n\n/** 默认配置 */\nconst defaultConfig: DeployConfig = {\n servers: {},\n projects: {},\n};\n\n/** 配置文件路径 */\nconst CONFIG_DIR = join(homedir(), '.mindbase');\nconst CONFIG_PATH = join(CONFIG_DIR, 'deploy.json');\n\n/**\n * 确保配置目录存在\n */\nfunction ensureConfigDir(): void {\n if (!existsSync(CONFIG_DIR)) {\n mkdirSync(CONFIG_DIR, { recursive: true });\n }\n}\n\n/**\n * 读取部署配置\n */\nexport function getConfig(): DeployConfig {\n if (!existsSync(CONFIG_PATH)) {\n ensureConfigDir();\n writeFileSync(CONFIG_PATH, JSON.stringify(defaultConfig, null, 2), 'utf-8');\n return structuredClone(defaultConfig);\n }\n\n try {\n const content = readFileSync(CONFIG_PATH, 'utf-8');\n return JSON.parse(content);\n } catch {\n return structuredClone(defaultConfig);\n }\n}\n\n/**\n * 写入部署配置\n */\nexport function setConfig(config: DeployConfig): void {\n ensureConfigDir();\n writeFileSync(CONFIG_PATH, JSON.stringify(config, null, 2), 'utf-8');\n}\n\n/**\n * 获取配置文件路径\n */\nexport function getConfigPath(): string {\n return CONFIG_PATH;\n}\n","import SftpClient from 'ssh2-sftp-client';\nimport { readFileSync } from 'fs';\nimport { homedir } from 'os';\nimport type { ServerConfig } from '../config/schema.js';\n\n/**\n * 解析路径中的 ~ 为用户目录\n */\nfunction resolvePath(path: string): string {\n if (path.startsWith('~/')) {\n return `${homedir()}${path.slice(1)}`;\n }\n return path;\n}\n\n/**\n * 构建 SSH 连接配置\n */\nfunction buildConnectConfig(config: ServerConfig): Record<string, unknown> {\n const base = {\n host: config.host,\n port: config.port,\n username: config.username,\n };\n\n if (config.privateKeyPath) {\n return {\n ...base,\n privateKey: readFileSync(resolvePath(config.privateKeyPath)),\n passphrase: config.passphrase || undefined,\n };\n }\n\n return {\n ...base,\n password: config.password,\n };\n}\n\n/**\n * 创建并连接 SFTP 客户端\n */\nexport async function connectSftp(name: string, config: ServerConfig): Promise<SftpClient> {\n const sftp = new SftpClient(name);\n await sftp.connect(buildConnectConfig(config));\n return sftp;\n}\n\n/**\n * 测试服务器连接\n */\nexport async function testConnection(config: ServerConfig): Promise<boolean> {\n const sftp = new SftpClient('test');\n try {\n await sftp.connect(buildConnectConfig(config));\n return true;\n } catch {\n return false;\n } finally {\n await sftp.end();\n }\n}\n","import type { ProjectConfig } from '../config/schema.js';\n\n/**\n * 内置变量名\n */\nconst BUILT_IN_VARS = ['localDir', 'remoteDir', 'projectName'] as const;\n\n/**\n * 替换字符串中的 ${varName} 占位符\n */\nexport function resolveVariables(template: string, project: ProjectConfig): string {\n const vars: Record<string, string> = {\n localDir: project.localDir,\n remoteDir: project.remoteDir,\n projectName: project.name,\n };\n\n return template.replace(/\\$\\{(\\w+)\\}/g, (match, key: string) => {\n return vars[key] !== undefined ? vars[key] : match;\n });\n}\n\n/**\n * 获取可用变量列表(用于提示)\n */\nexport function getAvailableVariables(): string[] {\n return [...BUILT_IN_VARS];\n}\n","import type SftpClient from 'ssh2-sftp-client';\nimport spawn from 'cross-spawn';\nimport type { Step, ProjectConfig } from '../config/schema.js';\nimport { resolveVariables } from './parser.js';\n\n/**\n * 在本地执行命令\n */\nfunction runLocal(cmd: string, cwd?: string): Promise<void> {\n return new Promise((resolve, reject) => {\n const cp = spawn(cmd, [], {\n cwd,\n detached: false,\n shell: true,\n });\n if (cp.stdout) cp.stdout.pipe(process.stdout);\n if (cp.stderr) cp.stderr.pipe(process.stderr);\n cp.on('close', (code) => {\n if (code === 0) {\n resolve();\n } else {\n reject(new Error(`本地命令执行失败 (code=${code}): ${cmd}`));\n }\n });\n cp.on('error', (err) => {\n reject(err);\n });\n });\n}\n\n/**\n * 执行单个步骤\n */\nasync function runStep(step: Step, project: ProjectConfig, sftp: SftpClient): Promise<void> {\n switch (step.type) {\n case 'log': {\n const msg = resolveVariables(step.message, project);\n console.log(msg);\n break;\n }\n case 'local': {\n const cmd = resolveVariables(step.cmd, project);\n const cwd = step.cwd ? resolveVariables(step.cwd, project) : undefined;\n await runLocal(cmd, cwd);\n break;\n }\n case 'remote': {\n const { execRemote } = await import('../ssh/executor.js');\n const cmd = resolveVariables(step.cmd, project);\n await execRemote(sftp, cmd);\n break;\n }\n case 'uploadDir': {\n const local = resolveVariables(step.local, project);\n const remote = resolveVariables(step.remote, project);\n await sftp.mkdir(remote, true);\n await sftp.uploadDir(local, remote, { useFastput: true });\n break;\n }\n case 'uploadFile': {\n const local = resolveVariables(step.local, project);\n const remote = resolveVariables(step.remote, project);\n await sftp.fastPut(local, remote);\n break;\n }\n case 'downloadDir': {\n const remote = resolveVariables(step.remote, project);\n const local = resolveVariables(step.local, project);\n await sftp.downloadDir(remote, local);\n break;\n }\n case 'downloadFile': {\n const remote = resolveVariables(step.remote, project);\n const local = resolveVariables(step.local, project);\n await sftp.fastGet(remote, local);\n break;\n }\n }\n}\n\n/**\n * 执行项目的所有步骤\n */\nexport async function runSteps(steps: Step[], project: ProjectConfig, sftp: SftpClient): Promise<void> {\n for (const step of steps) {\n await runStep(step, project, sftp);\n }\n}\n","import * as clack from '@clack/prompts';\nimport pc from 'picocolors';\nimport { noteBox } from '@mindbase/cli-ui';\nimport { getConfig, getConfigPath } from './config/manager.js';\nimport type { DeployConfig, ProjectConfig } from './config/schema.js';\nimport { connectSftp } from './ssh/client.js';\nimport { runSteps } from './script/runner.js';\n\n/** 取消处理 */\nfunction handleCancel<T>(result: T | symbol): T {\n if (typeof result === 'symbol' && clack.isCancel(result)) {\n clack.cancel('操作已取消');\n process.exit(0);\n }\n return result as T;\n}\n\n/**\n * 查看配置\n */\nexport function showConfig(): void {\n clack.intro('配置信息');\n const config = getConfig();\n const path = getConfigPath();\n noteBox(`配置文件: ${path}\\n\\n${JSON.stringify(config, null, 2)}`, '当前配置');\n clack.outro('完成');\n}\n\n/**\n * 直接运行指定项目\n */\nexport async function runProject(projectId: string, serverOverride?: string): Promise<void> {\n const config = getConfig();\n\n const project = config.projects[projectId];\n if (!project) {\n clack.log.error(`项目 \"${projectId}\" 不存在`);\n const available = Object.keys(config.projects);\n if (available.length > 0) {\n clack.log.info(`可用项目: ${available.join(', ')}`);\n }\n process.exit(1);\n }\n\n const serverId = serverOverride || project.server;\n const serverConfig = config.servers[serverId];\n if (!serverConfig) {\n clack.log.error(`服务器 \"${serverId}\" 不存在`);\n process.exit(1);\n }\n\n clack.intro(`部署 ${pc.cyan(project.name)} → ${pc.cyan(serverId)}`);\n\n const spinner = clack.spinner();\n spinner.start('连接服务器...');\n const sftp = await connectSftp(projectId, serverConfig);\n spinner.stop('已连接');\n\n try {\n await runSteps(project.steps, project, sftp);\n clack.log.success(`${project.name} 部署完成`);\n } catch (err) {\n clack.log.error(`部署失败: ${err}`);\n } finally {\n await sftp.end();\n }\n\n clack.outro('完成');\n}\n\n/**\n * 交互式主流程:选服务器 → 多选项目 → 依次部署\n */\nexport async function runApp(): Promise<void> {\n const config = getConfig();\n\n // 检查配置\n const serverIds = Object.keys(config.servers);\n const projectIds = Object.keys(config.projects);\n\n if (serverIds.length === 0) {\n clack.log.error('没有已配置的服务器,请先运行 deploy server add');\n return;\n }\n if (projectIds.length === 0) {\n clack.log.error('没有已配置的项目,请先运行 deploy init');\n return;\n }\n\n clack.intro('deploy');\n\n // 选择服务器\n const serverId = handleCancel<string>(\n await clack.select({\n message: '选择目标服务器',\n options: serverIds.map((id) => ({\n value: id,\n label: `${id} (${config.servers[id].host}:${config.servers[id].port})`,\n })),\n })\n );\n\n // 筛选该项目服务器下的项目(或显示全部)\n const filteredProjects = projectIds.filter(\n (id) => config.projects[id].server === serverId\n );\n const selectableProjects = filteredProjects.length > 0 ? filteredProjects : projectIds;\n\n // 多选项目\n const selectedProjects = handleCancel<string[]>(\n await clack.multiselect({\n message: '选择要部署的项目(空格切换,a 全选)',\n options: selectableProjects.map((id) => ({\n value: id,\n label: `${config.projects[id].name} (${id})`,\n })),\n required: true,\n })\n );\n\n // 连接服务器\n const spinner = clack.spinner();\n spinner.start(`连接 ${serverId}...`);\n const serverConfig = config.servers[serverId];\n const sftp = await connectSftp('deploy', serverConfig);\n spinner.stop('已连接');\n\n try {\n // 依次部署选中的项目\n for (const projectId of selectedProjects) {\n const project = config.projects[projectId];\n // 运行时使用选中的服务器覆盖项目默认服务器\n const effectiveProject: ProjectConfig = {\n ...project,\n server: serverId,\n };\n\n clack.log.step(`开始部署 ${pc.cyan(project.name)}`);\n\n try {\n await runSteps(project.steps, effectiveProject, sftp);\n clack.log.success(`${project.name} 部署完成`);\n } catch (err) {\n clack.log.error(`${project.name} 部署失败: ${err}`);\n const continueDeploy = handleCancel<boolean>(\n await clack.confirm({ message: '是否继续部署下一个项目?' })\n );\n if (!continueDeploy) break;\n }\n }\n } finally {\n await sftp.end();\n }\n\n clack.outro('全部完成');\n}\n","import * as clack from '@clack/prompts';\nimport pc from 'picocolors';\nimport { resolve } from 'path';\nimport { existsSync, readFileSync } from 'fs';\nimport { noteBox } from '@mindbase/cli-ui';\nimport { getConfig, setConfig } from '../config/manager.js';\nimport type { Step, StepType, ProjectConfig, ServerConfig } from '../config/schema.js';\nimport { connectSftp } from '../ssh/client.js';\n\n/** 取消处理 */\nfunction handleCancel<T>(result: T | symbol): T {\n if (typeof result === 'symbol' && clack.isCancel(result)) {\n clack.cancel('操作已取消');\n process.exit(0);\n }\n return result as T;\n}\n\n/** 格式化单个步骤为摘要行 */\nfunction formatStepSummary(step: Step): string {\n switch (step.type) {\n case 'log':\n return `log: ${step.message}`;\n case 'local':\n return step.cwd\n ? `local: ${step.cmd} (cwd: ${step.cwd})`\n : `local: ${step.cmd}`;\n case 'remote':\n return `remote: ${step.cmd}`;\n case 'uploadDir':\n return `uploadDir: ${step.local} → ${step.remote}`;\n case 'uploadFile':\n return `uploadFile: ${step.local} → ${step.remote}`;\n case 'downloadDir':\n return `downloadDir: ${step.remote} → ${step.local}`;\n case 'downloadFile':\n return `downloadFile: ${step.remote} → ${step.local}`;\n }\n}\n\n/** 展示当前所有已配置步骤 */\nfunction showStepsSummary(steps: Step[]): void {\n const lines = steps.map((s, i) => `${i + 1}. ${formatStepSummary(s)}`).join('\\n');\n noteBox(lines, `已配置步骤 (${steps.length})`);\n}\n\n/** 可用变量参考文本 */\nconst VARS_REFERENCE = [\n '可用变量:',\n ' ${localDir} 项目本地目录',\n ' ${remoteDir} 项目远程目录',\n ' ${projectName} 项目名称',\n].join('\\n');\n\n/** 步骤类型示例 */\nconst STEP_EXAMPLES: Record<StepType, string> = {\n log: [\n '示例:',\n ' 开始发布...',\n ' 编译完成',\n ].join('\\n'),\n local: [\n VARS_REFERENCE,\n '',\n '示例:',\n ' npm run build',\n ' pnpm install',\n '',\n 'cwd: 工作目录,留空使用默认,可用 ${localDir}',\n ].join('\\n'),\n remote: [\n VARS_REFERENCE,\n '',\n '示例:',\n ' cd ${remoteDir} && rm -rf ./*',\n ' mkdir -p ${remoteDir}src',\n ' pm2 restart myapp',\n ].join('\\n'),\n uploadDir: [\n VARS_REFERENCE,\n '',\n '示例:',\n ' 本地: ${localDir}/dist',\n ' 远端: ${remoteDir}',\n ].join('\\n'),\n uploadFile: [\n VARS_REFERENCE,\n '',\n '示例:',\n ' 本地: ${localDir}/package.json',\n ' 远端: ${remoteDir}package.json',\n ].join('\\n'),\n downloadDir: [\n VARS_REFERENCE,\n '',\n '示例:',\n ' 远端: ${remoteDir}backup/',\n ' 本地: ${localDir}/backup',\n ].join('\\n'),\n downloadFile: [\n VARS_REFERENCE,\n '',\n '示例:',\n ' 远端: ${remoteDir}config.json',\n ' 本地: ${localDir}/config.json.bak',\n ].join('\\n'),\n};\n\n/** 步骤类型选项 */\nconst STEP_TYPE_OPTIONS = [\n { value: 'log' as StepType, label: '日志输出', hint: '输出信息' },\n { value: 'local' as StepType, label: '本地命令', hint: '在本地执行 shell 命令' },\n { value: 'remote' as StepType, label: '远程命令', hint: '在服务器执行 shell 命令' },\n { value: 'uploadDir' as StepType, label: '上传目录', hint: '上传整个目录到服务器' },\n { value: 'uploadFile' as StepType, label: '上传文件', hint: '上传单个文件到服务器' },\n { value: 'downloadDir' as StepType, label: '下载目录(备份)', hint: '从服务器下载整个目录' },\n { value: 'downloadFile' as StepType, label: '下载文件(备份)', hint: '从服务器下载单个文件' },\n];\n\n/**\n * 读取 package.json 的 name 字段作为默认项目名\n */\nfunction getDefaultProjectName(cwd: string): string {\n const pkgPath = resolve(cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n if (pkg.name) return pkg.name;\n } catch { /* 忽略 */ }\n }\n return '';\n}\n\n/**\n * 通过 SFTP 浏览远端目录\n */\nasync function browseRemoteDir(sftp: import('ssh2-sftp-client'), currentPath: string): Promise<string> {\n while (true) {\n let entries: import('ssh2-sftp-client').FileInfo[];\n try {\n entries = await sftp.list(currentPath);\n } catch {\n // 目录不存在,直接返回手动输入的路径\n return currentPath;\n }\n\n const dirOptions = entries\n .filter((e) => e.type === 'd')\n .map((e) => ({ value: e.name, label: `📁 ${e.name}` }));\n\n const choices = [\n { value: '__confirm__', label: pc.green(`✓ 使用当前目录: ${currentPath}`) },\n { value: '__manual__', label: pc.yellow('✎ 手动输入路径') },\n ...dirOptions,\n ];\n\n const selected = handleCancel<string>(\n await clack.select({\n message: `浏览远端目录: ${currentPath}`,\n options: choices,\n })\n );\n\n if (selected === '__confirm__') {\n return currentPath;\n }\n\n if (selected === '__manual__') {\n const input = handleCancel<string>(\n await clack.text({\n message: '输入远端目录路径',\n initialValue: currentPath,\n })\n );\n currentPath = input;\n continue;\n }\n\n // 进入子目录\n currentPath = currentPath.endsWith('/') ? `${currentPath}${selected}` : `${currentPath}/${selected}`;\n }\n}\n\n/**\n * 收集单个步骤\n */\nasync function collectStep(): Promise<Step | null> {\n const stepType = handleCancel<StepType>(\n await clack.select({\n message: '选择步骤类型',\n options: STEP_TYPE_OPTIONS,\n })\n );\n\n noteBox(STEP_EXAMPLES[stepType], '参考(可直接复制变量)');\n\n switch (stepType) {\n case 'log': {\n const message = handleCancel<string>(\n await clack.text({ message: '日志信息' })\n );\n return { type: 'log', message };\n }\n case 'local': {\n const cmd = handleCancel<string>(\n await clack.text({ message: '命令' })\n );\n const cwd = handleCancel<string>(\n await clack.text({\n message: '工作目录(可选,留空使用默认)',\n placeholder: '${localDir}',\n })\n );\n const step: Step = { type: 'local', cmd };\n if (cwd) step.cwd = cwd;\n return step;\n }\n case 'remote': {\n const cmd = handleCancel<string>(\n await clack.text({ message: '远程命令' })\n );\n return { type: 'remote', cmd };\n }\n case 'uploadDir': {\n const local = handleCancel<string>(\n await clack.text({ message: '本地目录', placeholder: '${localDir}/dist' })\n );\n const remote = handleCancel<string>(\n await clack.text({ message: '远端目录', placeholder: '${remoteDir}' })\n );\n return { type: 'uploadDir', local, remote };\n }\n case 'uploadFile': {\n const local = handleCancel<string>(\n await clack.text({ message: '本地文件路径' })\n );\n const remote = handleCancel<string>(\n await clack.text({ message: '远端文件路径' })\n );\n return { type: 'uploadFile', local, remote };\n }\n case 'downloadDir': {\n const remote = handleCancel<string>(\n await clack.text({ message: '远端目录' })\n );\n const local = handleCancel<string>(\n await clack.text({ message: '本地保存目录' })\n );\n return { type: 'downloadDir', remote, local };\n }\n case 'downloadFile': {\n const remote = handleCancel<string>(\n await clack.text({ message: '远端文件路径' })\n );\n const local = handleCancel<string>(\n await clack.text({ message: '本地保存路径' })\n );\n return { type: 'downloadFile', remote, local };\n }\n }\n}\n\n/**\n * 运行 deploy init 主流程\n */\nexport async function runInit(cwd: string): Promise<void> {\n clack.intro('deploy init');\n\n const deployConfig = getConfig();\n\n // 1. 项目名称\n const defaultName = getDefaultProjectName(cwd);\n const projectId = handleCancel<string>(\n await clack.text({\n message: '项目 ID(用于标识)',\n initialValue: defaultName,\n })\n );\n\n if (deployConfig.projects[projectId]) {\n clack.log.warn(`项目 \"${projectId}\" 已存在,将覆盖配置`);\n }\n\n const name = handleCancel<string>(\n await clack.text({\n message: '项目显示名称',\n initialValue: projectId,\n })\n );\n\n // 2. 检查是否有可用服务器\n const serverIds = Object.keys(deployConfig.servers);\n if (serverIds.length === 0) {\n clack.log.error('没有已配置的服务器,请先运行 deploy server add 添加服务器');\n clack.outro('请先配置服务器');\n return;\n }\n\n // 3. 选择目标服务器\n const serverId = handleCancel<string>(\n await clack.select({\n message: '选择目标服务器',\n options: serverIds.map((id) => ({\n value: id,\n label: `${id} (${deployConfig.servers[id].host})`,\n })),\n })\n );\n\n // 4. 本地目录(绝对路径)\n const localDir = handleCancel<string>(\n await clack.text({\n message: '本地目录(绝对路径)',\n initialValue: cwd,\n })\n );\n\n // 5. 远端目录\n const spinner = clack.spinner();\n spinner.start('连接服务器...');\n let sftp: import('ssh2-sftp-client');\n try {\n sftp = await connectSftp('init', deployConfig.servers[serverId]);\n spinner.stop('已连接');\n } catch (err) {\n spinner.stop('连接失败');\n clack.log.error(`无法连接服务器: ${err}`);\n clack.outro('连接失败');\n return;\n }\n\n let remoteDir: string;\n try {\n const browseChoice = handleCancel<'browse' | 'manual'>(\n await clack.select({\n message: '远端目录设置方式',\n options: [\n { value: 'browse', label: '浏览服务器目录' },\n { value: 'manual', label: '手动输入路径' },\n ],\n })\n );\n\n if (browseChoice === 'browse') {\n remoteDir = await browseRemoteDir(sftp, '/');\n } else {\n remoteDir = handleCancel<string>(\n await clack.text({\n message: '远端目录路径',\n placeholder: '/appliction/my-app/',\n })\n );\n // 确保目录存在(循环创建)\n const confirmMkdir = handleCancel<boolean>(\n await clack.confirm({ message: `是否自动创建目录 ${remoteDir}(如果不存在)?` })\n );\n if (confirmMkdir) {\n await sftp.mkdir(remoteDir, true);\n clack.log.success(`目录已创建: ${remoteDir}`);\n }\n }\n } finally {\n await sftp.end();\n }\n\n // 6. 收集步骤\n const steps: Step[] = [];\n clack.log.info('开始配置部署步骤(每个步骤会展示参考和可用变量)');\n\n while (true) {\n if (steps.length > 0) {\n const action = handleCancel<'add' | 'done'>(\n await clack.select({\n message: `已配置 ${steps.length} 个步骤`,\n options: [\n { value: 'add', label: '添加步骤' },\n { value: 'done', label: '完成配置' },\n ],\n })\n );\n if (action === 'done') break;\n }\n\n const step = await collectStep();\n if (step) {\n steps.push(step);\n showStepsSummary(steps);\n }\n }\n\n // 7. 预览配置\n const projectConfig: ProjectConfig = {\n name,\n localDir: resolve(localDir),\n server: serverId,\n remoteDir,\n steps,\n };\n\n noteBox(JSON.stringify(projectConfig, null, 2), '项目配置预览');\n\n const confirmSave = handleCancel<boolean>(\n await clack.confirm({ message: '确认保存此配置?' })\n );\n\n if (confirmSave) {\n deployConfig.projects[projectId] = projectConfig;\n setConfig(deployConfig);\n clack.log.success(`项目 \"${projectId}\" 配置已保存`);\n } else {\n clack.log.info('已取消保存');\n }\n\n clack.outro('完成');\n}\n"]}
|
|
@@ -1,38 +0,0 @@
|
|
|
1
|
-
// src/ssh/executor.ts
|
|
2
|
-
async function execRemote(sftp, command) {
|
|
3
|
-
const fullCommand = `[ -f /etc/profile ] && source /etc/profile; ${command}`;
|
|
4
|
-
return new Promise((resolve, reject) => {
|
|
5
|
-
const client = sftp.client;
|
|
6
|
-
if (!client) {
|
|
7
|
-
reject(new Error("SSH \u5BA2\u6237\u7AEF\u672A\u8FDE\u63A5"));
|
|
8
|
-
return;
|
|
9
|
-
}
|
|
10
|
-
client.exec(fullCommand, (err, stream) => {
|
|
11
|
-
if (err) {
|
|
12
|
-
reject(err);
|
|
13
|
-
return;
|
|
14
|
-
}
|
|
15
|
-
let outStr = "";
|
|
16
|
-
let errStr = "";
|
|
17
|
-
stream.on("close", (code, signal) => {
|
|
18
|
-
if (code !== 0) {
|
|
19
|
-
reject(new Error(`\u8FDC\u7A0B\u547D\u4EE4\u6267\u884C\u5931\u8D25 (code=${code}): ${errStr || signal}`));
|
|
20
|
-
return;
|
|
21
|
-
}
|
|
22
|
-
resolve(outStr);
|
|
23
|
-
}).on("data", (data) => {
|
|
24
|
-
const str = data.toString();
|
|
25
|
-
outStr += str;
|
|
26
|
-
process.stdout.write(str);
|
|
27
|
-
}).stderr.on("data", (data) => {
|
|
28
|
-
const str = data.toString();
|
|
29
|
-
errStr += str;
|
|
30
|
-
process.stderr.write(str);
|
|
31
|
-
});
|
|
32
|
-
});
|
|
33
|
-
});
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
export { execRemote };
|
|
37
|
-
//# sourceMappingURL=executor-OQZFWKVP.js.map
|
|
38
|
-
//# sourceMappingURL=executor-OQZFWKVP.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ssh/executor.ts"],"names":[],"mappings":";AAKA,eAAsB,UAAA,CAAW,MAAkB,OAAA,EAAkC;AAEnF,EAAA,MAAM,WAAA,GAAc,+CAA+C,OAAO,CAAA,CAAA;AAC1E,EAAA,OAAO,IAAI,OAAA,CAAQ,CAAC,OAAA,EAAS,MAAA,KAAW;AAEtC,IAAA,MAAM,SAAU,IAAA,CAAa,MAAA;AAC7B,IAAA,IAAI,CAAC,MAAA,EAAQ;AACX,MAAA,MAAA,CAAO,IAAI,KAAA,CAAM,0CAAY,CAAC,CAAA;AAC9B,MAAA;AAAA,IACF;AACA,IAAA,MAAA,CAAO,IAAA,CAAK,WAAA,EAAa,CAAC,GAAA,EAAwB,MAAA,KAAgB;AAChE,MAAA,IAAI,GAAA,EAAK;AACP,QAAA,MAAA,CAAO,GAAG,CAAA;AACV,QAAA;AAAA,MACF;AACA,MAAA,IAAI,MAAA,GAAS,EAAA;AACb,MAAA,IAAI,MAAA,GAAS,EAAA;AACb,MAAA,MAAA,CACG,EAAA,CAAG,OAAA,EAAS,CAAC,IAAA,EAAc,MAAA,KAAmB;AAC7C,QAAA,IAAI,SAAS,CAAA,EAAG;AACd,UAAA,MAAA,CAAO,IAAI,MAAM,CAAA,uDAAA,EAAkB,IAAI,MAAM,MAAA,IAAU,MAAM,EAAE,CAAC,CAAA;AAChE,UAAA;AAAA,QACF;AACA,QAAA,OAAA,CAAQ,MAAM,CAAA;AAAA,MAChB,CAAC,CAAA,CACA,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AAC5B,QAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAC1B,QAAA,MAAA,IAAU,GAAA;AACV,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA,MAC1B,CAAC,CAAA,CACA,MAAA,CAAO,EAAA,CAAG,MAAA,EAAQ,CAAC,IAAA,KAAiB;AACnC,QAAA,MAAM,GAAA,GAAM,KAAK,QAAA,EAAS;AAC1B,QAAA,MAAA,IAAU,GAAA;AACV,QAAA,OAAA,CAAQ,MAAA,CAAO,MAAM,GAAG,CAAA;AAAA,MAC1B,CAAC,CAAA;AAAA,IACL,CAAC,CAAA;AAAA,EACH,CAAC,CAAA;AACH","file":"executor-OQZFWKVP.js","sourcesContent":["import type SftpClient from 'ssh2-sftp-client';\n\n/**\n * 在远程服务器执行命令\n */\nexport async function execRemote(sftp: SftpClient, command: string): Promise<string> {\n // 尝试加载环境变量,如果文件不存在则忽略错误\n const fullCommand = `[ -f /etc/profile ] && source /etc/profile; ${command}`;\n return new Promise((resolve, reject) => {\n // @ts-ignore: ssh2-sftp-client types don't expose client but it exists at runtime\n const client = (sftp as any).client;\n if (!client) {\n reject(new Error('SSH 客户端未连接'));\n return;\n }\n client.exec(fullCommand, (err: Error | undefined, stream: any) => {\n if (err) {\n reject(err);\n return;\n }\n let outStr = '';\n let errStr = '';\n stream\n .on('close', (code: number, signal: string) => {\n if (code !== 0) {\n reject(new Error(`远程命令执行失败 (code=${code}): ${errStr || signal}`));\n return;\n }\n resolve(outStr);\n })\n .on('data', (data: Buffer) => {\n const str = data.toString();\n outStr += str;\n process.stdout.write(str);\n })\n .stderr.on('data', (data: Buffer) => {\n const str = data.toString();\n errStr += str;\n process.stderr.write(str);\n });\n });\n });\n}\n"]}
|
package/dist/index.d.ts
DELETED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 查看配置
|
|
3
|
-
*/
|
|
4
|
-
declare function showConfig(): void;
|
|
5
|
-
/**
|
|
6
|
-
* 直接运行指定项目
|
|
7
|
-
*/
|
|
8
|
-
declare function runProject(projectId: string, serverOverride?: string): Promise<void>;
|
|
9
|
-
/**
|
|
10
|
-
* 交互式主流程:选服务器 → 多选项目 → 依次部署
|
|
11
|
-
*/
|
|
12
|
-
declare function runApp(): Promise<void>;
|
|
13
|
-
|
|
14
|
-
/**
|
|
15
|
-
* 运行 deploy init 主流程
|
|
16
|
-
*/
|
|
17
|
-
declare function runInit(cwd: string): Promise<void>;
|
|
18
|
-
|
|
19
|
-
export { runApp, runInit, runProject, showConfig };
|
package/dist/index.js
DELETED
package/dist/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}
|