1use anyhow::Context as _;
2use platform_core::{AppConfig, apply_migrations, connect_pool, telemetry};
3use tracing::info;
4
5pub async fn run_from_env() -> anyhow::Result<()> {
6 run_from_env_with_composition(lenso_bootstrap::HostComposition::default()).await
7}
8
9pub async fn run_from_env_with_composition(
10 composition: lenso_bootstrap::HostComposition,
11) -> anyhow::Result<()> {
12 let config = AppConfig::try_from_env().context("invalid application configuration")?;
13 telemetry::init(&config.telemetry)?;
14
15 let pool = connect_pool(&config.database).await?;
16 let migrations = collect_migrations(&config, &composition)?;
17 info!(count = migrations.len(), "applying migrations");
18 apply_migrations(&pool, &migrations).await?;
19
20 Ok(())
21}
22
23fn collect_migrations(
24 config: &AppConfig,
25 composition: &lenso_bootstrap::HostComposition,
26) -> platform_core::AppResult<Vec<platform_core::Migration>> {
27 lenso_bootstrap::migrations_for_config_with_composition(config, composition)
28}