#!/usr/bin/env bash set -euo pipefail # Clean up old test artifacts rm -f promptfoo-errors.log redteam.yaml # Run the CLI tool and capture the output # Use a temp file so we can display output on failure (logger writes to stdout) generate_output_file=$(mktemp) if ! npm run bin redteam generate -- -c test/redteam/integration/promptfooconfig.yaml --force >"$generate_output_file" 2>&1; then echo "ERROR: promptfoo redteam generate failed" echo "--- Output ---" cat "$generate_output_file" echo "--- End Output ---" rm -f "$generate_output_file" exit 1 fi output=$(cat "$generate_output_file") rm -f "$generate_output_file" echo "Done running promptfoo redteam generate" # Check if error log exists and display contents if it does if [ -f "promptfoo-errors.log" ]; then echo "ERROR: promptfoo-errors.log exists:" cat "promptfoo-errors.log" exit 1 else echo "Confirmed: No promptfoo-errors.log file exists" fi # Check for expected output patterns # With numTests: 1 on jailbreak:composite, we get 2 plugin tests + 1 strategy test = 3 total if echo "$output" | grep -q "Wrote 3 test cases to redteam.yaml"; then echo "Expected line (Wrote 3 test cases to redteam.yaml) found for promptfoo redteam generate" else echo "ERROR: Expected line (Wrote 3 test cases to redteam.yaml) not found in output." echo "$output" exit 1 fi echo "Running promptfoo redteam eval" export PROMPTFOO_AUTHOR="ci-placeholder@promptfoo.dev" eval_output_file=$(mktemp) set +e npm run bin redteam eval >"$eval_output_file" 2>&1 exit_code=$? set -e output=$(cat "$eval_output_file") rm -f "$eval_output_file" if [ $exit_code -ne 0 ]; then if [ $exit_code -eq 100 ]; then echo "Got exit code 100 - this is acceptable" else echo "Command failed with exit code $exit_code" echo "--- Output ---" echo "$output" echo "--- End Output ---" exit $exit_code fi fi echo "Done running promptfoo redteam eval" echo "Checking for errors in promptfoo-errors.log" if [ -f "promptfoo-errors.log" ]; then echo "ERROR: promptfoo-errors.log exists:" cat "promptfoo-errors.log" exit 1 else echo "Confirmed: No promptfoo-errors.log file exists" fi if echo "$output" | grep -q "0 errors"; then echo "Expected line found (0 errors) for promptfoo redteam eval" else echo "ERROR: Expected line (0 errors) not found in output." echo "$output" exit 1 fi echo "All checks passed!" exit 0