forge-guard 0.1.3

Pre-deployment smart contract auditing framework for Foundry
Documentation
//! `forge-guard fuzz` — run fuzzing campaigns.

use super::FuzzArgs;
use anyhow::{Context, Result};
use colored::*;

/// Run fuzzing campaigns against smart contracts.
pub fn run(args: &FuzzArgs) -> Result<()> {
    eprintln!("{}", "🎯 Forge Guard — Fuzzing Campaign".bold());
    eprintln!("   Runs:     {}", args.runs);
    eprintln!(
        "   Seed:     {}",
        args.seed.map_or("random".into(), |s| s.to_string())
    );
    eprintln!("   Contract: {}", args.contract.as_deref().unwrap_or("all"));

    // Build forge fuzz command
    let mut cmd = std::process::Command::new("forge");
    cmd.arg("test");

    cmd.arg("--fuzz-runs").arg(args.runs.to_string());

    if let Some(seed) = args.seed {
        cmd.arg("--fuzz-seed").arg(seed.to_string());
    }

    if let Some(test) = &args.test {
        cmd.arg("--match-test").arg(test);
    }

    if let Some(contract) = &args.contract {
        cmd.arg("--match-contract").arg(contract);
    }

    eprintln!("\n🚀 Running fuzzing campaign...\n");
    let status = cmd.status().context("Failed to run forge test")?;

    if !status.success() {
        anyhow::bail!("Fuzzing found issues — inspect output above");
    }

    eprintln!(
        "\n{}",
        "✅ Fuzzing passed — no issues found.".green().bold()
    );
    Ok(())
}