import { readFileSync, writeFileSync, existsSync } from 'fs'; import { join, dirname } from 'path'; import { fileURLToPath } from 'url'; const __dirname = dirname(fileURLToPath(import.meta.url)); const PROJECT_ROOT = join(__dirname, '..', '..'); // Shared Coolify config from gitea.repo.management const COOLIFY_CONFIG_PATH = join(PROJECT_ROOT, '..', 'gitea.repo.management', 'config.json'); // Local deployment config const DEPLOY_CONFIG_PATH = join(PROJECT_ROOT, 'deployment-config.json'); // SSH credentials from app/.env const ENV_PATH = join(PROJECT_ROOT, 'app', '.env'); let _coolifyCache = null; let _deployCache = null; export function loadConfig() { if (_coolifyCache) return _coolifyCache; if (!existsSync(COOLIFY_CONFIG_PATH)) { throw new Error(`Coolify config not found at ${COOLIFY_CONFIG_PATH}`); } _coolifyCache = JSON.parse(readFileSync(COOLIFY_CONFIG_PATH, 'utf8')); return _coolifyCache; } export function reloadConfig() { _coolifyCache = null; return loadConfig(); } export function loadDeployConfig() { if (_deployCache) return _deployCache; if (!existsSync(DEPLOY_CONFIG_PATH)) { _deployCache = { servers: [], projectsRoot: 'C:\\.bucket\\repos.gitea', projects: {} }; return _deployCache; } _deployCache = JSON.parse(readFileSync(DEPLOY_CONFIG_PATH, 'utf8')); return _deployCache; } export function saveDeployConfig(config) { writeFileSync(DEPLOY_CONFIG_PATH, JSON.stringify(config, null, 2)); _deployCache = config; } export function reloadDeployConfig() { _deployCache = null; return loadDeployConfig(); } export function loadEnv() { if (!existsSync(ENV_PATH)) return {}; const content = readFileSync(ENV_PATH, 'utf8'); const env = {}; for (const line of content.split('\n')) { if (line.startsWith('#') || !line.includes('=')) continue; const [key, ...valueParts] = line.split('='); if (key && valueParts.length > 0) { env[key.trim()] = valueParts.join('=').trim(); } } return env; } export function getProjectsRoot() { return loadDeployConfig().projectsRoot || 'C:\\.bucket\\repos.gitea'; } export function getServerSshConfig(server) { const env = loadEnv(); return { host: server.host, port: 22, username: env.SSH_USERNAME || server.username, password: env.SSH_PASSWORD || server.password, useSudo: server.useSudo || false, }; }