104 lines
3.5 KiB
Bash
Executable File
104 lines
3.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIRECTORY="$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)"
|
|
PROJECT_DIRECTORY="$(CDPATH= cd -- "$SCRIPT_DIRECTORY/.." && pwd)"
|
|
GODOT_EXECUTABLE="${GODOT_BIN:-godot}"
|
|
REQUIRED_GODOT_VERSION="4.7.2"
|
|
QUALITY_TEMP_DIRECTORY="$(mktemp -d "${TMPDIR:-/tmp}/ransoms-wake-quality.XXXXXX")"
|
|
|
|
cleanup_quality_directory() {
|
|
if [ -n "$QUALITY_TEMP_DIRECTORY" ] && [ -d "$QUALITY_TEMP_DIRECTORY" ]; then
|
|
rm -r -- "$QUALITY_TEMP_DIRECTORY"
|
|
fi
|
|
}
|
|
trap cleanup_quality_directory EXIT
|
|
|
|
cd "$PROJECT_DIRECTORY"
|
|
|
|
check_godot_log() {
|
|
local stage_name="$1"
|
|
local log_path="$2"
|
|
local unexpected_messages
|
|
unexpected_messages="$(
|
|
rg -n '^(ERROR|SCRIPT ERROR|WARNING):' "$log_path" \
|
|
| rg -v '^.*ERROR: Condition "ret != noErr" is true\. Returning: ""$' \
|
|
|| true
|
|
)"
|
|
if [ -n "$unexpected_messages" ]; then
|
|
printf 'Quality gate: unexpected Godot diagnostics during %s\n%s\n' \
|
|
"$stage_name" "$unexpected_messages"
|
|
exit 1
|
|
fi
|
|
}
|
|
|
|
actual_version="$($GODOT_EXECUTABLE --version)"
|
|
case "$actual_version" in
|
|
"$REQUIRED_GODOT_VERSION"*) ;;
|
|
*)
|
|
printf 'Quality gate: Godot %s required, found %s.\n' \
|
|
"$REQUIRED_GODOT_VERSION" "$actual_version"
|
|
exit 1
|
|
;;
|
|
esac
|
|
|
|
printf 'Quality gate: shell scripts\n'
|
|
bash -n scripts/check_architecture.sh scripts/quality_gate.sh
|
|
|
|
printf 'Quality gate: architecture\n'
|
|
bash scripts/check_architecture.sh
|
|
|
|
printf 'Quality gate: resource loading\n'
|
|
"$GODOT_EXECUTABLE" --headless \
|
|
--log-file "$QUALITY_TEMP_DIRECTORY/load.log" \
|
|
--path . \
|
|
--script tests/run_load_checks.gd \
|
|
2>&1 | tee "$QUALITY_TEMP_DIRECTORY/load-console.log"
|
|
check_godot_log "resource loading" "$QUALITY_TEMP_DIRECTORY/load-console.log"
|
|
|
|
printf 'Quality gate: POC unit tests\n'
|
|
"$GODOT_EXECUTABLE" --headless \
|
|
--log-file "$QUALITY_TEMP_DIRECTORY/unit.log" \
|
|
--path . \
|
|
--script tests/run_tests.gd \
|
|
2>&1 | tee "$QUALITY_TEMP_DIRECTORY/unit-console.log"
|
|
check_godot_log "unit tests" "$QUALITY_TEMP_DIRECTORY/unit-console.log"
|
|
|
|
printf 'Quality gate: production dive unit tests\n'
|
|
"$GODOT_EXECUTABLE" --headless \
|
|
--log-file "$QUALITY_TEMP_DIRECTORY/dive-unit.log" \
|
|
--path . \
|
|
--script tests/unit/run_dive_foundation_tests.gd \
|
|
2>&1 | tee "$QUALITY_TEMP_DIRECTORY/dive-unit-console.log"
|
|
check_godot_log "production dive unit tests" "$QUALITY_TEMP_DIRECTORY/dive-unit-console.log"
|
|
|
|
printf 'Quality gate: production vehicle application unit tests\n'
|
|
"$GODOT_EXECUTABLE" --headless \
|
|
--log-file "$QUALITY_TEMP_DIRECTORY/vehicle-application-unit.log" \
|
|
--path . \
|
|
--script tests/unit/run_vehicle_application_tests.gd \
|
|
2>&1 | tee "$QUALITY_TEMP_DIRECTORY/vehicle-application-unit-console.log"
|
|
check_godot_log \
|
|
"production vehicle application unit tests" \
|
|
"$QUALITY_TEMP_DIRECTORY/vehicle-application-unit-console.log"
|
|
|
|
printf 'Quality gate: production foundation integration\n'
|
|
"$GODOT_EXECUTABLE" --headless \
|
|
--log-file "$QUALITY_TEMP_DIRECTORY/foundation-integration.log" \
|
|
--path . \
|
|
--script tests/integration/run_vertical_slice_foundation.gd \
|
|
2>&1 | tee "$QUALITY_TEMP_DIRECTORY/foundation-integration-console.log"
|
|
check_godot_log \
|
|
"production foundation integration" \
|
|
"$QUALITY_TEMP_DIRECTORY/foundation-integration-console.log"
|
|
|
|
printf 'Quality gate: POC B integration\n'
|
|
"$GODOT_EXECUTABLE" --headless \
|
|
--log-file "$QUALITY_TEMP_DIRECTORY/poc_b_integration.log" \
|
|
--path . \
|
|
--script tests/run_poc_b_integration.gd \
|
|
2>&1 | tee "$QUALITY_TEMP_DIRECTORY/poc_b-integration-console.log"
|
|
check_godot_log "POC B integration" "$QUALITY_TEMP_DIRECTORY/poc_b-integration-console.log"
|
|
|
|
printf 'Quality gate: passed.\n'
|