use std::process::ExitCode;
use reliar_store_postgres::{MigrateOptions, migrate};
use sqlx::postgres::PgPoolOptions;
const SCHEMA_VAR: &str = "RELIAR_SCHEMA";
#[tokio::main]
async fn main() -> ExitCode {
match run().await {
Ok(schema) => {
println!("reliar migrate: schema `{schema}` is up to date");
ExitCode::SUCCESS
}
Err(message) => {
eprintln!("reliar migrate: {message}");
ExitCode::FAILURE
}
}
}
async fn run() -> Result<String, String> {
let url = std::env::var("DATABASE_URL").map_err(|_| "DATABASE_URL is not set".to_owned())?;
let schema =
std::env::var(SCHEMA_VAR).unwrap_or_else(|_| MigrateOptions::default().schema.to_owned());
let pool = PgPoolOptions::new()
.max_connections(1)
.connect(&url)
.await
.map_err(|e| format!("could not connect: {e}"))?;
migrate(&pool, MigrateOptions::default().schema(&schema))
.await
.map_err(|e| format!("migration failed: {e}"))?;
pool.close().await;
Ok(schema)
}