/* * Author: Ruben Fiszel * Copyright: Windmill Labs, Inc 2022 * This file and its contents are licensed under the AGPLv3 License. * Please see the included NOTICE for copyright information and * LICENSE-AGPL for a copy of the license. */ use sqlx::Postgres; use windmill_common::error::Error; use crate::db::{CustomMigrator, DB}; use sqlx::migrate::Migrate; use sqlx::Executor; pub async fn custom_migrations(migrator: &mut CustomMigrator, db: &DB) -> Result<(), Error> { if let Err(err) = fix_flow_versioning_migration(migrator, db).await { tracing::error!("Could not apply flow versioning fix migration: {err:#}"); } Ok(()) } async fn fix_flow_versioning_migration( migrator: &mut CustomMigrator, db: &DB, ) -> Result<(), Error> { let has_done_migration = sqlx::query_scalar!( "SELECT EXISTS(SELECT name FROM windmill_migrations WHERE name = 'fix_flow_versioning_2')", ) .fetch_one(db) .await? .unwrap_or(false); if !has_done_migration { migrator.lock().await?; if migrator .list_applied_migrations() .await? .iter() .any(|x| x.version == 20240630102146) { let has_done_migration = sqlx::query_scalar!( "SELECT EXISTS(SELECT name FROM windmill_migrations WHERE name = 'fix_flow_versioning_2')", ) .fetch_one(db) .await? .unwrap_or(false); if !has_done_migration { let query = include_str!("../../custom_migrations/fix_flow_versioning_2.sql"); tracing::info!("Applying fix_flow_versioning_2.sql"); let mut tx: sqlx::Transaction<'_, Postgres> = db.begin().await?; tx.execute(query).await?; tracing::info!("Applied fix_flow_versioning_2.sql"); sqlx::query!( "INSERT INTO windmill_migrations (name) VALUES ('fix_flow_versioning_2')" ) .execute(&mut *tx) .await?; tx.commit().await?; } } migrator.unlock().await?; } Ok(()) }