mirror of
https://github.com/DeusData/codebase-memory-mcp.git
synced 2026-11-12 09:47:20 +08:00
Stand up a separate, non-gating reproduce-first suite that holds one RED case per open bug issue (the redness is the deliverable + the regression guard): - tests/repro/ + repro_main.c -> `make test-repro` (its own runner with its own main + counters; deliberately EXCLUDED from ALL_TEST_SRCS so the gating `make test` / ci-ok required check stays green and PRs are not wedged) - repro_extraction.c: first reproduction, #554 -- a C++ out-of-line method's inner CALLS edge must attribute to the class-qualified Method QN, not the Module; ties the call's enclosing_func_qn to the method definition's own qualified_name so a class-qualifier drop (the live root cause) fails it - scripts/repro.sh: build+run the board; a build/link failure fails the job, while expected test redness is reported as the board state (job stays green) - .github/workflows/bug-repro.yml: workflow_dispatch (platform filter) + qa/** push; runs the board on linux x2 / macos x2 / windows so many bug vectors can be reproduced on many platforms at once Signed-off-by: Martin Vogel <martin.vogel.tech@gmail.com>
66 lines
2.2 KiB
Bash
Executable File
66 lines
2.2 KiB
Bash
Executable File
#!/bin/bash
|
|
# repro.sh — Build + run the cumulative BUG-REPRODUCTION suite (test-repro).
|
|
#
|
|
# Unlike test.sh (the gating suite, must be GREEN), this suite is RED by design:
|
|
# every case reproduces an open bug. So we distinguish two outcomes:
|
|
# - BUILD/LINK failure → real breakage → exit non-zero (fail the CI job).
|
|
# - Test redness → EXPECTED → report the count, exit 0 (green board).
|
|
#
|
|
# Usage: scripts/repro.sh [CC=clang] [CXX=clang++] [--arch arm64|x86_64]
|
|
set -uo pipefail
|
|
|
|
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
cd "$ROOT"
|
|
|
|
# --arch before sourcing env.sh (mirrors test.sh)
|
|
prev_arg=""
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
arm64|x86_64) [[ "$prev_arg" == "--arch" ]] && export CBM_ARCH="$arg" ;;
|
|
--arch=*) export CBM_ARCH="${arg#--arch=}" ;;
|
|
esac
|
|
prev_arg="$arg"
|
|
done
|
|
|
|
# shellcheck source=env.sh
|
|
source "$ROOT/scripts/env.sh"
|
|
|
|
MAKE_ARGS=""
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
CC=*|CXX=*) export "${arg?}" ;;
|
|
--arch|--arch=*|arm64|x86_64) ;;
|
|
*=*) MAKE_ARGS="$MAKE_ARGS $arg" ;;
|
|
esac
|
|
done
|
|
|
|
print_env "repro.sh"
|
|
verify_compiler "$CC"
|
|
|
|
OUT="$ROOT/repro-out.txt"
|
|
# test-repro both builds and runs the runner; tolerate its non-zero (red) exit.
|
|
set +e
|
|
$ARCH_PREFIX make -j"$NPROC" -f Makefile.cbm test-repro $MAKE_ARGS 2>&1 | tee "$OUT"
|
|
set -e
|
|
|
|
# The runner prints a "<N> passed[, <M> failed]" summary line only if it actually
|
|
# ran. No summary line ⇒ the build/link failed ⇒ real breakage.
|
|
if ! grep -qE '[0-9]+ passed' "$OUT"; then
|
|
echo "::error::bug-repro runner did not execute — build or link failure"
|
|
exit 1
|
|
fi
|
|
|
|
reproduced=$(grep -oE '[0-9]+ failed' "$OUT" | head -1 | grep -oE '[0-9]+' || echo 0)
|
|
green=$(grep -oE '[0-9]+ passed' "$OUT" | head -1 | grep -oE '[0-9]+' || echo 0)
|
|
|
|
{
|
|
echo "## Bug-reproduction board — ${OS:-$(uname -s)} ${ARCH:-}"
|
|
echo ""
|
|
echo "- **${reproduced}** open bug(s) still reproduced (RED — expected)"
|
|
echo "- **${green}** case(s) PASSING — candidate-fixed → verify + close the issue + promote the guard to the gating suite"
|
|
} >> "${GITHUB_STEP_SUMMARY:-/dev/stderr}"
|
|
|
|
echo "=== bug-repro board: ${reproduced} reproduced (RED), ${green} passing (candidate-fixed) ==="
|
|
# Green board: the suite ran. Redness is the data, not a job failure.
|
|
exit 0
|