lomavuokraus/scripts/run-tests-with-redmine.sh
2025-12-14 01:24:44 +02:00

59 lines
1.5 KiB
Bash
Executable file

#!/usr/bin/env bash
set -euo pipefail
# Wraps any test command and files a Redmine ticket on failure.
# Usage: ./scripts/run-tests-with-redmine.sh <command ...>
if [ "$#" -eq 0 ]; then
echo "Usage: $0 <command ...>"
exit 1
fi
RUN_TS=$(date +"%Y%m%d-%H%M%S")
RUN_DIR="reports/runs/manual-${RUN_TS}"
mkdir -p "$RUN_DIR"
CMD=("$@")
NAME="${TEST_NAME:-${CMD[*]}}"
LOG_FILE="$RUN_DIR/command.log"
echo "[run-with-redmine] Running ${CMD[*]}..."
set +e
"${CMD[@]}" >"$LOG_FILE" 2>&1
STATUS=$?
set -e
if [ "$STATUS" -eq 0 ]; then
echo "[run-with-redmine] Command succeeded. Log: $LOG_FILE"
exit 0
fi
echo "[run-with-redmine] Command failed with status ${STATUS}. Log: $LOG_FILE"
TAIL_SNIPPET=$(tail -n 40 "$LOG_FILE" 2>/dev/null || true)
FAILURE_FILE="$RUN_DIR/failures.txt"
{
echo "Command: ${CMD[*]}"
echo "Exit status: ${STATUS}"
echo "--- tail ---"
echo "${TAIL_SNIPPET}"
} >"$FAILURE_FILE"
if command -v node >/dev/null 2>&1 && [ -x "${BASH_SOURCE%/*}/redmine-report.js" ]; then
if node "${BASH_SOURCE%/*}/redmine-report.js" create-test-issue \
--suite "${NAME}" \
--run "$RUN_TS" \
--fail-count 1 \
--failures-file "$FAILURE_FILE" \
--summary-file "$LOG_FILE" \
--tracker "${TRACKER:-bug}" \
--fingerprint-seed "${NAME}|${CMD[*]}|${STATUS}|${TAIL_SNIPPET}"; then
echo "[run-with-redmine] Redmine notification complete."
else
echo "[run-with-redmine] Redmine notification failed or skipped."
fi
else
echo "[run-with-redmine] Redmine reporter not available; skipping Redmine notification."
fi
exit "$STATUS"