INNER CODE UNIT · TypeScript
cmdUp
PerryTS/perry · example-code/forgejo-deployment/main.ts:345
async function cmdUp(c: StackConfig): Promise<void> {
await preflightOrExit(c.httpPort, c.sshPort);
console.log(`🚀 Deploying Forgejo ${c.version} (data.forgejo.org/forgejo/forgejo:${c.version})`);
console.log(` • Web ${c.protocol}://${c.domain}:${c.httpPort}`);
console.log(` • SSH ssh://git@${c.domain}:${c.sshPort}`);
console.log(` • DB postgres:${c.pgVersion} (user=${c.dbUser}, db=${c.dbName})`);
// `up()` is idempotent: re-running this script while the stack is
// already running is a no-op (Perry's compose engine inspects each
// service and skips when status is "running"; if the container exists
// but is stopped, it `start`s it).
const stack = await up(buildSpec(c) as never);
console.log(`✅ Stack started (handle ${String(stack)})`);
console.log('\n🏥 Waiting for PostgreSQL to accept connections (≤60s)...');
if (!await waitForPostgres(stack, 60_000)) {
console.error('❌ PostgreSQL never became ready. Tearing down.');