From 3ecb20afd6af7dd6bbc53d1667af67fad1e202f3 Mon Sep 17 00:00:00 2001 From: didirus4 Date: Tue, 8 Jul 2025 05:15:01 +0300 Subject: [PATCH] chore: store db fix patch file in all patches --- patches/db_migrations_fix.patch | 103 ++++++++++++++++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 patches/db_migrations_fix.patch diff --git a/patches/db_migrations_fix.patch b/patches/db_migrations_fix.patch new file mode 100644 index 00000000..21bdebe3 --- /dev/null +++ b/patches/db_migrations_fix.patch @@ -0,0 +1,103 @@ +diff --git a/packages/app-lib/src/state/db.rs b/packages/app-lib/src/state/db.rs +index 14c53d81..607a345f 100644 +--- a/packages/app-lib/src/state/db.rs ++++ b/packages/app-lib/src/state/db.rs +@@ -3,6 +3,7 @@ use sqlx::sqlite::{ + SqliteConnectOptions, SqliteJournalMode, SqlitePoolOptions, + }; + use sqlx::{Pool, Sqlite}; ++use tokio::time::Instant; + use std::str::FromStr; + use std::time::Duration; + +@@ -17,8 +18,10 @@ pub(crate) async fn connect() -> crate::Result> { + crate::util::io::create_dir_all(&settings_dir).await?; + } + +- let uri = format!("sqlite:{}", settings_dir.join("app.db").display()); ++ let db_path = settings_dir.join("app.db"); ++ let db_exists = db_path.exists(); + ++ let uri = format!("sqlite:{}", db_path.display()); + let conn_options = SqliteConnectOptions::from_str(&uri)? + .busy_timeout(Duration::from_secs(30)) + .journal_mode(SqliteJournalMode::Wal) +@@ -30,10 +33,16 @@ pub(crate) async fn connect() -> crate::Result> { + .connect_with(conn_options) + .await?; + +- fix_migration_20240711194701(&pool).await?; // Patch by AstralRinth - 08.07.2025 ++ if db_exists { ++ fix_modrinth_issued_migrations(&pool).await?; ++ } + + sqlx::migrate!().run(&pool).await?; + ++ if !db_exists { ++ fix_modrinth_issued_migrations(&pool).await?; ++ } ++ + if let Err(err) = stale_data_cleanup(&pool).await { + tracing::warn!( + "Failed to clean up stale data from state database: {err}" +@@ -66,8 +75,17 @@ async fn stale_data_cleanup(pool: &Pool) -> crate::Result<()> { + } + /* + // Patch by AstralRinth - 08.07.2025 ++Problem files: ++/packages/app-lib/migrations/20240711194701_init.sql !eol ++/packages/app-lib/migrations/20240813205023_drop-active-unique.sql !eol ++/packages/app-lib/migrations/20240930001852_disable-personalized-ads.sql !eol ++/packages/app-lib/migrations/20241222013857_feature-flags.sql !eol + */ +-async fn fix_migration_20240711194701(pool: &Pool) -> crate::Result<()> { ++async fn fix_modrinth_issued_migrations( ++ pool: &Pool, ++) -> crate::Result<()> { ++ let started = Instant::now(); ++ tracing::info!("Fixing modrinth issued migrations"); + sqlx::query( + r#" + UPDATE "_sqlx_migrations" +@@ -77,5 +95,41 @@ async fn fix_migration_20240711194701(pool: &Pool) -> crate::Result<()> + ) + .execute(pool) + .await?; ++ tracing::info!("⚙️ Fixed first migration"); ++ sqlx::query( ++ r#" ++ UPDATE "_sqlx_migrations" ++ SET checksum = X'5b53534a7ffd74eebede234222be47e1d37bd0cc5fee4475212491b0c0379c16e3079e08eee0af959b1fa20835eeb206' ++ WHERE version = '20240813205023'; ++ "#, ++ ) ++ .execute(pool) ++ .await?; ++ tracing::info!("⚙️ Fixed second migration"); ++ sqlx::query( ++ r#" ++ UPDATE "_sqlx_migrations" ++ SET checksum = X'c0de804f171b5530010edae087a6e75645c0e90177e28365f935c9fdd9a5c68e24850b8c1498e386a379d525d520bc57' ++ WHERE version = '20240930001852'; ++ "#, ++ ) ++ .execute(pool) ++ .await?; ++ tracing::info!("⚙️ Fixed third migration"); ++ sqlx::query( ++ r#" ++ UPDATE "_sqlx_migrations" ++ SET checksum = X'c17542cb989a0466153e695bfa4717f8970feee185ca186a2caa1f2f6c5d4adb990ab97c26cacfbbe09c39ac81551704' ++ WHERE version = '20241222013857'; ++ "#, ++ ) ++ .execute(pool) ++ .await?; ++ tracing::info!("⚙️ Fixed fourth migration"); ++ let elapsed = started.elapsed(); ++ tracing::info!( ++ "✅ Fixed all known modrinth-issued migrations in {:.2?}", ++ elapsed ++ ); + Ok(()) + }