git.delta.rocks / jrsonnet / refs/commits / d70668683ed2

difftreelog

fix primop registration

ynqztwqxYaroslav Bolyukin2026-01-22parent: #98314cf.patch.diff
in: trunk

5 files changed

modifiedcrates/fleet-base/src/opts.rsdiffbeforeafterboth
--- a/crates/fleet-base/src/opts.rs
+++ b/crates/fleet-base/src/opts.rs
@@ -22,7 +22,7 @@
 
 use crate::{
 	fleetdata::FleetData,
-	host::{Config, ConfigHost, FleetConfigInternals},
+	host::{Config, ConfigHost, FleetConfigInternals}, primops::init_primops,
 };
 
 #[derive(Clone)]
@@ -213,6 +213,8 @@
 			std::fs::read_to_string(&fleet_data_path).context("reading fleet state (fleet.nix)")?;
 		let data = Arc::new(Mutex::new(FleetData::from_str(&bytes)?));
 
+		init_primops(data.clone());
+
 		let mut fetch_settings = FetchSettings::new();
 		fetch_settings.set(c"warn-dirty", c"false");
 
modifiedcrates/fleet-base/src/primops.rsdiffbeforeafterboth
--- a/crates/fleet-base/src/primops.rs
+++ b/crates/fleet-base/src/primops.rs
@@ -2,6 +2,7 @@
 use std::sync::{Arc, Mutex};
 
 use nix_eval::{NativeFn, Value};
+use tracing::info;
 
 use crate::fleetdata::{FleetData, FleetSecrets};
 
@@ -23,21 +24,9 @@
 struct FsSecretsBackend {}
 
 pub fn init_primops(secrets: Arc<Mutex<FleetData>>) {
-	NativeFn::new(
-		c"fleet_ensure_host_secret",
-		c"Ensure secret existence for a host, regenerating it in case of some mismatch",
-		[c"host", c"secret", c"generator"],
-		|[host, secret, generator]| {
-			todo!("ensure secret");
-			Ok(Value::new_attrs(HashMap::from_iter([(
-				"raw",
-				Value::new_str("rawData"),
-			)])))
-		},
-	)
-	.register();
+	info!("initializing primops");
 	NativeFn::new(
-		c"fleet_ensure_host_secret",
+		c"__fleetEnsureHostSecret",
 		c"Ensure secret existence for a host, regenerating it in case of some mismatch",
 		[c"host", c"secret", c"generator"],
 		|[host, secret, generator]| {
modifiedcrates/nix-eval/src/lib.rsdiffbeforeafterboth
966 let mut args = args.into_iter().map(|v| v.as_ptr()).collect_vec();966 let mut args = args.into_iter().map(|v| v.as_ptr()).collect_vec();
967 args.push(null());967 args.push(null());
968 let args = args.as_mut_ptr();968 let args = args.as_mut_ptr();
969 let primop = with_default_context(|c, _| unsafe {969 let primop = unsafe {
970 alloc_primop(970 alloc_primop(
971 c,971 null_mut(),
972 f,972 f,
973 N as i32,973 N as i32,
974 name.as_ptr(),974 name.as_ptr(),
975 args,975 args,
976 doc.as_ptr(),976 doc.as_ptr(),
977 Box::into_raw(closure).cast(),977 Box::into_raw(closure).cast(),
978 )978 )
979 })979 };
980 .expect("primop allocation should not fail");980
981 assert!(!primop.is_null(), "primop allocation should not fail");
981982
982 Self(primop)983 Self(primop)
983 }984 }
984 pub fn register(self) {985 pub fn register(self) {
985 with_default_context(|c, _| unsafe { register_primop(c, self.0) })986 unsafe { register_primop(null_mut(), self.0) };
986 .expect("primop registration should not fail");
987 }987 }
988}988}
989989
999#[test_log::test]999#[test_log::test]
1000fn test_native() -> Result<()> {1000fn test_native() -> Result<()> {
1001 init_libraries();1001 init_libraries();
1002 NativeFn::new(
1003 c"__uppercaseSuffix2",
1004 c"make string uppercase and add suffix",
1005 [c"str", c"suffix"],
1006 |[str, suffix]: [&Value; 2]| {
1007 let str = str.to_string()?;
1008 let suffix = suffix.to_string()?;
1009 Ok(Value::new_str(&format!("{}{suffix}", str.to_uppercase())))
1010 },
1011 )
1012 .register();
10021013
1003 let mut fetch_settings = FetchSettings::new();1014 let mut fetch_settings = FetchSettings::new();
1004 fetch_settings.set(c"warn-dirty", c"false");1015 fetch_settings.set(c"warn-dirty", c"false");
10361047
1037 let test_result: String = nix_go_json!(test_data.testPrimop(uppercase_suffix));1048 let test_result: String = nix_go_json!(test_data.testPrimop(uppercase_suffix));
1038 assert_eq!(test_result, "PREFIX_BODY_SUFFIX");1049 assert_eq!(test_result, "PREFIX_BODY_SUFFIX");
1050 let test_result: String = nix_go_json!(builtins.uppercaseSuffix2("test")("suffix"));
1051 assert_eq!(test_result, "TESTsuffix");
10391052
1040 let nix_ctx = NixContext::new();1053 let nix_ctx = NixContext::new();
1041 let store = GLOBAL_STATE.store.parse_path(s.as_c_str())?;1054 let store = GLOBAL_STATE.store.parse_path(s.as_c_str())?;
modifiedcrates/nix-eval/src/macros.rsdiffbeforeafterboth
--- a/crates/nix-eval/src/macros.rs
+++ b/crates/nix-eval/src/macros.rs
@@ -47,11 +47,7 @@
 		nix_expr_inner!(@field(out) $($tt)*);
 		out
 	}};
-	($v:literal) => {{
-		use $crate::macros::NixExprBuilder;
-		NixExprBuilder::string($v)
-	}};
-	({$v:expr}) => {{
+	($v:expr) => {{
 		$crate::Value::serialized(&$v)?
 	}}
 }
modifiedmodules/nixos/secrets.nixdiffbeforeafterboth
--- a/modules/nixos/secrets.nix
+++ b/modules/nixos/secrets.nix
@@ -103,7 +103,7 @@
         };
       };
       config = {
-        parts = builtins.fleet_ensure_host_secret sysConfig.networking.hostName secretName config.generator;
+        parts = builtins.fleetEnsureHostSecret sysConfig.networking.hostName secretName config.generator;
       };
     }
   );