From 0a9f1d2a27ffa87c0c12ec24141016cecd0332f0 Mon Sep 17 00:00:00 2001 From: Aiden McClelland <3732071+dr-bonez@users.noreply.github.com> Date: Wed, 15 Jan 2025 22:40:10 +0000 Subject: [PATCH] fix migration for alpha.10 (#2811) * fix migration for alpha.10 * fix binds * don't commit if db model does not match * stronger guard * better guard --- core/Cargo.lock | 2 +- core/startos/Cargo.toml | 4 +- core/startos/src/version/mod.rs | 8 +- core/startos/src/version/v0_3_6_alpha_11.rs | 83 +++++++++++++++++++++ web/package-lock.json | 4 +- web/package.json | 2 +- 6 files changed, 96 insertions(+), 7 deletions(-) create mode 100644 core/startos/src/version/v0_3_6_alpha_11.rs diff --git a/core/Cargo.lock b/core/Cargo.lock index 41b912eaf..bc489c481 100644 --- a/core/Cargo.lock +++ b/core/Cargo.lock @@ -5920,7 +5920,7 @@ checksum = "a8f112729512f8e442d81f95a8a7ddf2b7c6b8a1a6f509a95864142b30cab2d3" [[package]] name = "start-os" -version = "0.3.6-alpha.10" +version = "0.3.6-alpha.11" dependencies = [ "aes 0.7.5", "async-acme", diff --git a/core/startos/Cargo.toml b/core/startos/Cargo.toml index a476db313..62453460a 100644 --- a/core/startos/Cargo.toml +++ b/core/startos/Cargo.toml @@ -14,7 +14,7 @@ keywords = [ name = "start-os" readme = "README.md" repository = "https://github.com/Start9Labs/start-os" -version = "0.3.6-alpha.10" +version = "0.3.6-alpha.11" license = "MIT" [lib] @@ -226,7 +226,7 @@ zbus = "5.1.1" zeroize = "1.6.0" mail-send = { git = "https://github.com/dr-bonez/mail-send.git", branch = "main" } rustls = "0.23.20" -rustls-pki-types = { version = "1.10.1", features = ["alloc"]} +rustls-pki-types = { version = "1.10.1", features = ["alloc"] } [profile.test] opt-level = 3 diff --git a/core/startos/src/version/mod.rs b/core/startos/src/version/mod.rs index ff7c3da99..3c1687ea9 100644 --- a/core/startos/src/version/mod.rs +++ b/core/startos/src/version/mod.rs @@ -10,6 +10,7 @@ use imbl_value::{to_value, InternedString}; use patch_db::json_ptr::ROOT; use crate::context::RpcContext; +use crate::db::model::Database; use crate::prelude::*; use crate::Error; @@ -28,8 +29,9 @@ mod v0_3_6_alpha_8; mod v0_3_6_alpha_9; mod v0_3_6_alpha_10; +mod v0_3_6_alpha_11; -pub type Current = v0_3_6_alpha_10::Version; // VERSION_BUMP +pub type Current = v0_3_6_alpha_11::Version; // VERSION_BUMP impl Current { #[instrument(skip(self, db))] @@ -52,6 +54,7 @@ impl Current { let pre_ups = PreUps::load(&from, &self).await?; db.apply_function(|mut db| { migrate_from_unchecked(&from, &self, pre_ups, &mut db)?; + from_value::(db.clone())?; Ok::<_, Error>((db, ())) }) .await?; @@ -109,6 +112,7 @@ enum Version { V0_3_6_alpha_8(Wrapper), V0_3_6_alpha_9(Wrapper), V0_3_6_alpha_10(Wrapper), + V0_3_6_alpha_11(Wrapper), Other(exver::Version), } @@ -143,6 +147,7 @@ impl Version { Self::V0_3_6_alpha_8(v) => DynVersion(Box::new(v.0)), Self::V0_3_6_alpha_9(v) => DynVersion(Box::new(v.0)), Self::V0_3_6_alpha_10(v) => DynVersion(Box::new(v.0)), + Self::V0_3_6_alpha_11(v) => DynVersion(Box::new(v.0)), Self::Other(v) => { return Err(Error::new( eyre!("unknown version {v}"), @@ -169,6 +174,7 @@ impl Version { Version::V0_3_6_alpha_8(Wrapper(x)) => x.semver(), Version::V0_3_6_alpha_9(Wrapper(x)) => x.semver(), Version::V0_3_6_alpha_10(Wrapper(x)) => x.semver(), + Version::V0_3_6_alpha_11(Wrapper(x)) => x.semver(), Version::Other(x) => x.clone(), } } diff --git a/core/startos/src/version/v0_3_6_alpha_11.rs b/core/startos/src/version/v0_3_6_alpha_11.rs new file mode 100644 index 000000000..8a6dedd6e --- /dev/null +++ b/core/startos/src/version/v0_3_6_alpha_11.rs @@ -0,0 +1,83 @@ +use exver::{PreReleaseSegment, VersionRange}; +use imbl_value::json; + +use super::v0_3_5::V0_3_0_COMPAT; +use super::{v0_3_6_alpha_10, VersionT}; +use crate::prelude::*; + +lazy_static::lazy_static! { + static ref V0_3_6_alpha_11: exver::Version = exver::Version::new( + [0, 3, 6], + [PreReleaseSegment::String("alpha".into()), 11.into()] + ); +} + +#[derive(Clone, Copy, Debug, Default)] +pub struct Version; + +impl VersionT for Version { + type Previous = v0_3_6_alpha_10::Version; + type PreUpRes = (); + + async fn pre_up(self) -> Result { + Ok(()) + } + fn semver(self) -> exver::Version { + V0_3_6_alpha_11.clone() + } + fn compat(self) -> &'static VersionRange { + &V0_3_0_COMPAT + } + fn up(self, db: &mut Value, _: Self::PreUpRes) -> Result<(), Error> { + let acme = std::mem::replace( + &mut db["public"]["serverInfo"]["acme"], + Value::Object(Default::default()), + ); + if !acme.is_null() && acme["provider"].as_str().is_some() { + db["public"]["serverInfo"]["acme"] + [&acme["provider"].as_str().or_not_found("provider")?] = + json!({ "contact": &acme["contact"] }); + } + + for (_, package) in db["public"]["packageData"] + .as_object_mut() + .ok_or_else(|| { + Error::new( + eyre!("expected public.packageData to be an object"), + ErrorKind::Database, + ) + })? + .iter_mut() + { + for (_, host) in package["hosts"] + .as_object_mut() + .ok_or_else(|| { + Error::new( + eyre!("expected public.packageData[id].hosts to be an object"), + ErrorKind::Database, + ) + })? + .iter_mut() + { + for (_, bind) in host["bindings"] + .as_object_mut() + .ok_or_else(|| { + Error::new( + eyre!("expected public.packageData[id].hosts[hostId].bindings to be an object"), + ErrorKind::Database, + ) + })? + .iter_mut() + { + bind["net"] = bind["lan"].clone(); + bind["net"]["public"] = Value::Bool(false); + } + } + } + + Ok(()) + } + fn down(self, _db: &mut Value) -> Result<(), Error> { + Ok(()) + } +} diff --git a/web/package-lock.json b/web/package-lock.json index ee7a93d8d..740020a3a 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,12 +1,12 @@ { "name": "startos-ui", - "version": "0.3.6-alpha.10", + "version": "0.3.6-alpha.11", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "startos-ui", - "version": "0.3.6-alpha.10", + "version": "0.3.6-alpha.11", "license": "MIT", "dependencies": { "@angular/animations": "^14.1.0", diff --git a/web/package.json b/web/package.json index d71b2f0a2..800297407 100644 --- a/web/package.json +++ b/web/package.json @@ -1,6 +1,6 @@ { "name": "startos-ui", - "version": "0.3.6-alpha.10", + "version": "0.3.6-alpha.11", "author": "Start9 Labs, Inc", "homepage": "https://start9.com/", "license": "MIT",