keyhog 0.5.73

GPU-accelerated secret scanner for code, Git history, cloud, containers, browser assets, and live credential verification
#[test]
fn install_static_analysis_gate_requires_real_linters_in_ci() {
    let gate = std::fs::read_to_string(concat!(
        env!("CARGO_MANIFEST_DIR"),
        "/../../scripts/gates/install_static_analysis.sh"
    ))
    .expect("install static-analysis gate readable");
    assert!(gate.contains("shellcheck -x"), "gate must run ShellCheck");
    assert!(
        gate.contains("shfmt -d"),
        "gate must run shfmt in diff mode"
    );
    assert!(
        gate.contains("Invoke-ScriptAnalyzer"),
        "gate must run PSScriptAnalyzer for install.ps1"
    );
    assert!(
        gate.contains("REQUIRE_INSTALL_LINTERS"),
        "gate must fail CI when a linter is missing"
    );
}

#[test]
fn ci_install_scripts_job_runs_static_analysis_in_required_mode() {
    let workflow = std::fs::read_to_string(concat!(
        env!("CARGO_MANIFEST_DIR"),
        "/../../.github/workflows/ci.yml"
    ))
    .expect("ci workflow readable");
    assert!(
        workflow.contains("shellcheck shfmt"),
        "install-scripts job must install shellcheck and shfmt"
    );
    assert!(
        workflow.contains("Install-Module -Name PSScriptAnalyzer"),
        "install-scripts job must install PSScriptAnalyzer"
    );
    assert!(
        workflow.contains("REQUIRE_INSTALL_LINTERS: '1'")
            && workflow.contains("bash scripts/gates/install_static_analysis.sh"),
        "install-scripts job must run the static-analysis gate in required mode"
    );
}