@kne/fastify-app-manager 0.1.16 → 0.1.17
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/README.md +2 -2
- package/libs/services/app.js +5 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -428,7 +428,7 @@ await fastify.listen({ port: 3000 });
|
|
|
428
428
|
|
|
429
429
|
##### POST `{prefix}/app/deploy`
|
|
430
430
|
|
|
431
|
-
|
|
431
|
+
选择版本部署。同一应用同时只能有一个部署:已有部署未结束(含就绪检查阶段)时返回 409,不影响进行中的部署。版本目录不在磁盘时先经 `resolveVersionFile` 取回 zip 解压并 `npm install`(耗时,取不回返回 400 且不改应用状态),再以数据库中的 SQL 覆盖目录内 `.sql`;接着按版本的 `env.schema.json` 校验最终环境变量(含注入的变量),版本没有 schema 或变量不合规时返回 400,且不切换版本、不执行迁移、不启动进程;随后立即返回 `deploying`,后台做健康检查。进程启动后删除该应用其它有 `fileId` 的版本目录(只保留当前版本)。
|
|
432
432
|
|
|
433
433
|
| 参数名 | 类型 | 必填 | 默认值 | 说明 |
|
|
434
434
|
|--------|------|------|--------|------|
|
|
@@ -757,7 +757,7 @@ data: {"name":"demo","ts":1791456608533,...}
|
|
|
757
757
|
| `pruneAllVersionArtifacts()` | 对所有应用执行 `pruneVersionArtifacts` |
|
|
758
758
|
| `restoreMissingArtifacts()` | 当前版本目录(`artifactPath/server`)缺失时,按版本 `fileId` 经 `resolveVersionFile` 取回 zip 重建并恢复 `current` 链接(不跑 SQL 迁移);返回 `[{ name, version, action: 'restored' \| 'skipped' \| 'failed', reason? }]`,无 `fileId` 的记 `skipped` |
|
|
759
759
|
| `listVersions({ name, perPage, currentPage })` | 版本列表 |
|
|
760
|
-
| `deploy({ name, versionId, version, runMigration, migrations?, progressId? })` |
|
|
760
|
+
| `deploy({ name, versionId, version, runMigration, migrations?, progressId? })` | 部署;同一应用已有部署未结束时 409;版本目录缺失时先从宿主文件重建,启动后清理其它版本目录;立即 `deploying`,后台 `syncRealStatus`;各阶段进度写入 `getDeployProgress()` |
|
|
761
761
|
| `getDeployProgress()` | 部署进度中心:`emitter`(事件名 `deploy:{name}`、日志 `deploy-log:{name}`)、`snapshot(name)` 返回最近一次部署 `{ progressId, status, events, ... }`、`active(name)` 进行中的部署 |
|
|
762
762
|
| `deployList({ name, perPage?, currentPage? })` | 同 `GET .../app/deploy/list` |
|
|
763
763
|
| `deployDetail({ name, progressId?, logLines? })` | 同 `GET .../app/deploy/detail` |
|
package/libs/services/app.js
CHANGED
|
@@ -1089,6 +1089,11 @@ module.exports = fp(async (fastify, options) => {
|
|
|
1089
1089
|
httpError(404, 'version not found');
|
|
1090
1090
|
}
|
|
1091
1091
|
|
|
1092
|
+
// 判断与登记之间不能有 await,否则并发请求会同时通过
|
|
1093
|
+
const running = deployProgress.active(app.name);
|
|
1094
|
+
if (running) {
|
|
1095
|
+
httpError(409, `app ${app.name} is deploying version ${running.version}`);
|
|
1096
|
+
}
|
|
1092
1097
|
const progress = deployProgress.begin(app.name, progressId || crypto.randomUUID(), { versionId: String(ver.id), version: ver.version });
|
|
1093
1098
|
let step = 'package';
|
|
1094
1099
|
progress.report(step, 'running');
|