From cd01c7379f23d9189beef840ddc523a3c90a9a10 Mon Sep 17 00:00:00 2001 From: DanConwayDev Date: Wed, 25 Feb 2026 10:50:59 +0000 Subject: add probe subcommand for end-to-end relay health checks Implements grasp-audit probe with full write path (publish events, poll for repo init, push, verify refs match state) and read-only fallback (find existing announcement, fetch refs). Supports --nsec for whitelisted relays, --json output, and --watch for continuous monitoring. --- grasp-audit/src/fixtures.rs | 72 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 72 insertions(+) (limited to 'grasp-audit/src/fixtures.rs') diff --git a/grasp-audit/src/fixtures.rs b/grasp-audit/src/fixtures.rs index 0a9bf65..4678790 100644 --- a/grasp-audit/src/fixtures.rs +++ b/grasp-audit/src/fixtures.rs @@ -2516,6 +2516,78 @@ pub fn try_push_to_ref(clone_path: &Path, ref_name: &str) -> Result Result<(), String> { + // Step 1: git init + let output = Command::new("git") + .args(["init", path.to_str().unwrap_or(".")]) + .output() + .map_err(|e| format!("Failed to execute git init: {}", e))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(format!("git init failed: {}", stderr)); + } + + // Step 2: git config user.email + let output = Command::new("git") + .args(["config", "user.email", "probe@grasp-audit.local"]) + .current_dir(path) + .output() + .map_err(|e| format!("Failed to set git user.email: {}", e))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(format!("git config user.email failed: {}", stderr)); + } + + // Step 3: git config user.name + let output = Command::new("git") + .args(["config", "user.name", "GRASP Probe"]) + .current_dir(path) + .output() + .map_err(|e| format!("Failed to set git user.name: {}", e))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(format!("git config user.name failed: {}", stderr)); + } + + // Step 4: git symbolic-ref HEAD refs/heads/main (sets default branch to main) + let output = Command::new("git") + .args(["symbolic-ref", "HEAD", "refs/heads/main"]) + .current_dir(path) + .output() + .map_err(|e| format!("Failed to set default branch: {}", e))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(format!("git symbolic-ref HEAD failed: {}", stderr)); + } + + // Step 5: git remote add origin + let output = Command::new("git") + .args(["remote", "add", "origin", remote_url]) + .current_dir(path) + .output() + .map_err(|e| format!("Failed to add remote: {}", e))?; + + if !output.status.success() { + let stderr = String::from_utf8_lossy(&output.stderr); + return Err(format!("git remote add origin failed: {}", stderr)); + } + + Ok(()) +} + #[cfg(test)] mod tests { use super::*; -- cgit v1.2.3