// Reliability contracts for Jenkins cadence and lab isolation. // // Scope: inspect Jenkins and CI entrypoint scripts. // Targets: `Jenkinsfile`, `scripts/ci/daily_master_gate.sh`, // `scripts/ci/baremetal_lab_gate.sh`. // Why: Lesavka needs daily primary-branch signal without letting hardware or // virtual HID tests disturb a shared desktop. The slower lab path must stay // explicit so quality ratchets can grow safely. const JENKINSFILE: &str = include_str!(concat!(env!("CARGO_MANIFEST_DIR"), "/Jenkinsfile")); const DAILY_GATE: &str = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), "/scripts/ci/daily_master_gate.sh" )); const LAB_GATE: &str = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), "/scripts/ci/baremetal_lab_gate.sh" )); const OPERATIONAL_ENV: &str = include_str!(concat!( env!("CARGO_MANIFEST_DIR"), "/docs/operational-env.md" )); #[test] fn jenkins_exposes_safe_daily_and_lab_profiles() { for expected in [ "LESAVKA_CI_PROFILE", "choices: ['safe', 'daily', 'lab']", "Daily Master Gate", "scripts/ci/daily_master_gate.sh", "RUN_DISRUPTIVE_INPUT_TESTS", "Input Transport (Isolated Opt-In)", "LESAVKA_ALLOW_DISRUPTIVE_INPUT_TESTS=1", "RUN_LAB_HARDWARE_GATES", "Bare-Metal Lab Gates (Opt-In)", "scripts/ci/baremetal_lab_gate.sh", ] { assert!( JENKINSFILE.contains(expected), "Jenkinsfile should expose cadence/safety control: {expected}" ); } } #[test] fn jenkins_archives_profile_and_performance_artifacts() { for expected in [ "target/daily-master-gate/**", "target/performance-gate/**", "target/input-transport-gate/**", "target/baremetal-lab-gate/**", "target/video-downstream-gate/**", ] { assert!( JENKINSFILE.contains(expected), "Jenkins should retain ratchet evidence: {expected}" ); } } #[test] fn daily_gate_is_primary_branch_safe_and_runs_platform_gate() { for expected in [ "master|main|origin/master|origin/main|*/master|*/main", "LESAVKA_DAILY_ALLOW_NON_PRIMARY", "LESAVKA_CI_PROFILE=daily scripts/ci/platform_quality_gate.sh", "target/daily-master-gate", "lesavka_ci_profile_last_run_success", "LESAVKA_DAILY_GATE_PUSHGATEWAY_JOB", ] { assert!( DAILY_GATE.contains(expected), "daily gate should guard primary-branch cadence: {expected}" ); } } #[test] fn lab_gate_requires_explicit_hardware_and_probe_opt_ins() { for expected in [ "LESAVKA_ALLOW_LAB_HARDWARE_TESTS", "Skipping bare-metal lab gates", "LESAVKA_RUN_VIDEO_DOWNSTREAM_GATE", "LESAVKA_ALLOW_DISRUPTIVE_INPUT_TESTS", "LESAVKA_RUN_SERVER_RCT_MATRIX", "LESAVKA_SERVER_RCT_MATRIX_CMD", "run_server_to_rc_mode_matrix.sh", "LESAVKA_RUN_CLIENT_RCT_PROBE", "LESAVKA_CLIENT_RCT_PROBE_CMD", "run_client_to_rct_transport_probe.sh", "target/baremetal-lab-gate", "lesavka_lab_gate_step_result", ] { assert!( LAB_GATE.contains(expected), "lab gate should make hardware/disruptive work explicit: {expected}" ); } } #[test] fn new_ci_cadence_knobs_are_documented() { for expected in [ "LESAVKA_ALLOW_LAB_HARDWARE_TESTS", "LESAVKA_CI_PROFILE", "LESAVKA_DAILY_ALLOW_NON_PRIMARY", "LESAVKA_DAILY_GATE_PUSHGATEWAY_JOB", "LESAVKA_LAB_GATE_PUSHGATEWAY_JOB", "LESAVKA_CLIENT_RCT_PROBE_CMD", "LESAVKA_RUN_CLIENT_RCT_PROBE", "LESAVKA_RUN_SERVER_RCT_MATRIX", "LESAVKA_RUN_VIDEO_DOWNSTREAM_GATE", "LESAVKA_SERVER_RCT_MATRIX_CMD", ] { assert!( OPERATIONAL_ENV.contains(expected), "operational env inventory should document {expected}" ); } }