Files
appfactory-tools/scripts/migrate-jobs-db.sh
T

82 lines
1.8 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
DB_FILE="/opt/appfactory/data/appfactory/appfactory.db"
if [ ! -f "$DB_FILE" ]; then
echo "Missing database: $DB_FILE"
exit 1
fi
python3 - "$DB_FILE" <<'PY'
import sqlite3
import sys
db_file = sys.argv[1]
con = sqlite3.connect(db_file)
con.execute("""
CREATE TABLE IF NOT EXISTS jobs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
type TEXT NOT NULL,
target_type TEXT NOT NULL,
target_id TEXT NOT NULL,
payload_json TEXT,
status TEXT NOT NULL DEFAULT 'queued',
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP,
started_at TEXT,
finished_at TEXT,
created_by_user_id INTEGER,
created_by_username TEXT,
created_by_display_name TEXT,
source TEXT NOT NULL DEFAULT 'system',
worker_id TEXT,
result_json TEXT,
error_text TEXT
)
""")
con.execute("""
CREATE TABLE IF NOT EXISTS job_logs (
id INTEGER PRIMARY KEY AUTOINCREMENT,
job_id INTEGER NOT NULL,
stream TEXT NOT NULL DEFAULT 'system',
message TEXT NOT NULL,
created_at TEXT NOT NULL DEFAULT CURRENT_TIMESTAMP
)
""")
con.execute("""
CREATE INDEX IF NOT EXISTS idx_jobs_status
ON jobs(status)
""")
con.execute("""
CREATE INDEX IF NOT EXISTS idx_jobs_target
ON jobs(target_type, target_id)
""")
con.execute("""
CREATE INDEX IF NOT EXISTS idx_jobs_created_at
ON jobs(created_at)
""")
con.execute("""
CREATE INDEX IF NOT EXISTS idx_job_logs_job_id
ON job_logs(job_id)
""")
columns = [row[1] for row in con.execute("PRAGMA table_info(deployments)").fetchall()]
if "job_id" not in columns:
con.execute("ALTER TABLE deployments ADD COLUMN job_id INTEGER")
con.commit()
print("Jobs migration completed.")
print("")
for row in con.execute("SELECT name FROM sqlite_master WHERE type='table' ORDER BY name"):
print(f"- {row[0]}")
con.close()
PY