From be7b2ec016dccb99d437c3ba692720e9869154de Mon Sep 17 00:00:00 2001 From: Aiden McClelland Date: Tue, 17 Aug 2021 17:21:05 -0600 Subject: [PATCH] migrations --- appmgr/src/context/rpc.rs | 16 ++++++++++++---- appmgr/src/install/cleanup.rs | 7 +++++++ appmgr/src/install/mod.rs | 20 ++++++++++++-------- 3 files changed, 31 insertions(+), 12 deletions(-) create mode 100644 appmgr/src/install/cleanup.rs diff --git a/appmgr/src/context/rpc.rs b/appmgr/src/context/rpc.rs index b72ba5c88..5c01571ff 100644 --- a/appmgr/src/context/rpc.rs +++ b/appmgr/src/context/rpc.rs @@ -10,7 +10,8 @@ use reqwest::Url; use rpc_toolkit::url::Host; use rpc_toolkit::Context; use serde::Deserialize; -use sqlx::SqlitePool; +use sqlx::migrate::MigrateDatabase; +use sqlx::{Sqlite, SqlitePool}; use tokio::fs::File; use tokio::sync::RwLock; @@ -63,13 +64,20 @@ impl RpcContext { .unwrap_or_else(|| Path::new("/mnt/embassy-os/embassy.db").to_owned()), ) .await?; - let secret_store = SqlitePool::connect(&format!( + let secret_store_url = format!( "sqlite://{}", base.secret_store .unwrap_or_else(|| Path::new("/mnt/embassy-os/secrets.db").to_owned()) .display() - )) - .await?; + ); + if !Sqlite::database_exists(&secret_store_url).await? { + Sqlite::create_database(&secret_store_url).await?; + } + let secret_store = SqlitePool::connect(&secret_store_url).await?; + sqlx::migrate!() + .run(&secret_store) + .await + .with_kind(crate::ErrorKind::Database)?; let docker = Docker::connect_with_unix_defaults()?; let net_controller = Arc::new( NetController::init( diff --git a/appmgr/src/install/cleanup.rs b/appmgr/src/install/cleanup.rs new file mode 100644 index 000000000..bd2573a12 --- /dev/null +++ b/appmgr/src/install/cleanup.rs @@ -0,0 +1,7 @@ +use crate::db::model::InstalledPackageDataEntry; +use crate::s9pk::manifest::{Manifest, PackageId}; +use crate::Error; + +pub async fn cleanup(info: Result) -> Result<(), Error> { + Ok(()) // TODO +} diff --git a/appmgr/src/install/mod.rs b/appmgr/src/install/mod.rs index bff7503ab..563712f78 100644 --- a/appmgr/src/install/mod.rs +++ b/appmgr/src/install/mod.rs @@ -25,6 +25,7 @@ use sha2::{Digest, Sha256}; use tokio::fs::{File, OpenOptions}; use tokio::io::{AsyncRead, AsyncSeek, AsyncSeekExt, AsyncWrite, AsyncWriteExt}; +use self::cleanup::cleanup; use self::progress::{InstallProgress, InstallProgressTracker}; use crate::context::{EitherContext, ExtendedContext, RpcContext}; use crate::db::model::{ @@ -37,6 +38,7 @@ use crate::status::{DependencyErrors, MainStatus, Status}; use crate::util::{display_none, AsyncFileExt, Version}; use crate::{Error, ResultExt}; +pub mod cleanup; pub mod progress; pub const PKG_CACHE: &'static str = "/mnt/embassy-os/cache/packages"; @@ -232,13 +234,15 @@ pub async fn download_install_s9pk( .await; if let Err(e) = res { - let mut handle = ctx.db.handle(); - let mut broken = crate::db::DatabaseModel::new() - .broken_packages() - .get_mut(&mut handle) - .await?; - broken.push(pkg_id.clone()); - broken.save(&mut handle).await?; + if let Err(e) = cleanup(Err(temp_manifest)).await { + let mut handle = ctx.db.handle(); + let mut broken = crate::db::DatabaseModel::new() + .broken_packages() + .get_mut(&mut handle) + .await?; + broken.push(pkg_id.clone()); + broken.save(&mut handle).await?; + } Err(e) } else { Ok(()) @@ -536,7 +540,7 @@ pub async fn install_s9pk( { configured &= res.configured; } - // cleanup(pkg_id, Some(prev)).await?; + cleanup(Ok(prev)).await?; if let Some(res) = manifest .migrations .from(&prev_manifest.version, pkg_id, version, &manifest.volumes)