#!/usr/bin/env bash set -euo pipefail DB_FILE="/opt/appfactory/data/appfactory/appfactory.db" CATALOG_FILE="/opt/appfactory/apps/catalog.yml" mkdir -p "$(dirname "$CATALOG_FILE")" python3 - "$DB_FILE" "$CATALOG_FILE" <<'PY' import sqlite3 import sys from pathlib import Path db_file = Path(sys.argv[1]) catalog_file = Path(sys.argv[2]) con = sqlite3.connect(db_file) rows = con.execute(""" SELECT id, name, language, version, status, COALESCE(memory, ''), COALESCE(cpus, ''), COALESCE(container_port, 8000), COALESCE(health_url, '/health'), COALESCE(runtime, ''), COALESCE(template, '') FROM apps WHERE is_enabled = 1 ORDER BY id """).fetchall() lines = ["apps:"] for row in rows: ( app_id, name, language, version, status, memory, cpus, container_port, health_url, runtime, template, ) = row if not str(health_url).startswith("/"): health_path = "/health" else: health_path = health_url lines.append("") lines.append(f" - id: {app_id}") lines.append(f" name: {name}") lines.append(f" language: {language}") lines.append(f" runtime: {runtime}") lines.append(f" template: {template}") lines.append(f" version: {version}") lines.append(f" container_port: {container_port}") lines.append(f" base_path: /apps/{app_id}") lines.append(f" docs: /apps/{app_id}/docs") lines.append(f" health: /apps/{app_id}{health_path}") lines.append(f" status: {status}") if memory: lines.append(f" memory: {memory}") if cpus: lines.append(f' cpus: "{cpus}"') catalog_file.write_text( "\n".join(lines) + "\n", encoding="utf-8" ) print(f"Generated: {catalog_file}") PY