Files
lingxi/scripts/check-dev-deps.mjs
Stev_Wang 5628e158c0
ci / 质量门禁 (push) Canceled after 0s
fix(infra): 移除本地 S3 容器并改用 check:dev
背景:本地 PG/Redis 已按要求复用 docker-postgres-1 / docker-redis-1;
S3 容器按用户要求删除,后续接入公网自建 RustFS。

改动:
- 删除 infra/docker-compose.dev.yaml、infra/compose.dev.yaml
- 移除 compose:up / compose:down 脚本,改用 check:dev 预检本机 PG/Redis
- 新增 scripts/check-dev-deps.mjs;.env.example 的 S3_* 改为待填
- README / AGENTS / A0 报告同步本地依赖与对象存储说明

影响面:本地开发依赖与 CI 本地脚本、环境变量样例、文档。
回滚方式:恢复被删除的两个 compose 文件与 package.json 脚本即可。
验证:format:check、lint、pnpm ci:local(含 e2e 4/4)全部通过,用时 106.3s。
2026-11-02 18:26:24 +08:00

68 lines
2.1 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env node
/**
* 检查本地已有依赖是否可连接:PostgreSQL(DATABASE_URL)与 Redis(REDIS_URL)。
* 仓库不再启动任何数据库/缓存容器;依赖由本机 Docker 服务提供。
*/
import { createConnection } from 'node:net';
import { loadEnvFile } from 'node:process';
// Node 24 支持 process.loadEnvFile;两个文件都不存在时忽略。
for (const file of ['.env.local', '.env']) {
try {
loadEnvFile(file);
} catch {
// 文件不存在时跳过。
}
}
const targets = [
{ name: 'PostgreSQL', value: process.env.DATABASE_URL, fallbackPort: 5432 },
{ name: 'Redis', value: process.env.REDIS_URL, fallbackPort: 6379 },
];
function parseTarget({ name, value, fallbackPort }) {
if (!value) {
throw new Error(`${name} 未配置连接串`);
}
const url = new URL(value);
return {
name,
host: url.hostname,
port: Number(url.port || fallbackPort),
database: url.pathname.replace(/^\//, '') || undefined,
};
}
function probe({ name, host, port, database }) {
return new Promise((resolve, reject) => {
const socket = createConnection({ host, port });
const timer = setTimeout(() => {
socket.destroy();
reject(new Error(`${name} 连接超时:${host}:${port}`));
}, 3_000);
socket.once('connect', () => {
clearTimeout(timer);
socket.end();
const suffix = database ? `/${database}` : '';
resolve(`${name} 可用:${host}:${port}${suffix}`);
});
socket.once('error', (error) => {
clearTimeout(timer);
reject(new Error(`${name} 不可用:${host}:${port}(${error.message})`));
});
});
}
try {
for (const target of targets) {
const info = await probe(parseTarget(target));
console.log(`✓ ${info}`);
}
console.log('本地依赖检查通过(PostgreSQL / Redis 使用本机已有 Docker 服务)。');
} catch (error) {
console.error(`✗ ${error instanceof Error ? error.message : String(error)}`);
console.error('请确认 docker-postgres-1(5432)与 docker-redis-1(6379)已启动。');
process.exit(1);
}