Files
TravianZ/scripts/check.sh
T
2026-07-31 08:11:25 +03:00

117 lines
1.9 KiB
Bash
Executable File

#!/usr/bin/env bash
set -euo pipefail
repository_root="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
cd "$repository_root"
lint_php()
{
local file
local linted=0
while IFS= read -r -d '' file; do
# This installer source is a PHP generator template. Its %TOKEN%
# placeholders are replaced before the generated file is executed.
if [[ "$file" == "install/data/constant_format.tpl" ]]; then
continue
fi
php -l "$file" > /dev/null
linted=$((linted + 1))
done < <(git ls-files -z -- '*.php' '*.tpl')
echo "PHP syntax check passed for ${linted} tracked files."
}
run_php_tests()
{
local file
local tested=0
while IFS= read -r -d '' file; do
if [[ "$file" != *Test.php ]]; then
continue
fi
echo "Running ${file}"
php "$file"
tested=$((tested + 1))
done < <(git ls-files -z -- 'tests/*.php' 'tests/**/*.php')
if [[ "$tested" -eq 0 ]]; then
echo "No zero-dependency PHP tests found."
else
echo "PHP tests passed for ${tested} files."
fi
}
run_shell_tests()
{
local file
local tested=0
while IFS= read -r -d '' file; do
if [[ "$file" != *.sh ]]; then
continue
fi
echo "Running ${file}"
sh -n "$file"
sh "$file"
tested=$((tested + 1))
done < <(git ls-files -z -- 'tests/*.sh' 'tests/**/*.sh')
if [[ "$tested" -eq 0 ]]; then
echo "No shell contract tests found."
else
echo "Shell contract tests passed for ${tested} files."
fi
}
validate_compose()
{
if ! command -v docker > /dev/null 2>&1; then
echo "Docker is required for Compose validation." >&2
exit 1
fi
docker compose config --quiet
echo "Docker Compose configuration is valid."
}
usage()
{
echo "Usage: $0 {all|php|lint|test|shell|compose}" >&2
exit 2
}
case "${1:-all}" in
all)
lint_php
run_php_tests
validate_compose
run_shell_tests
;;
php)
lint_php
run_php_tests
;;
lint)
lint_php
;;
test)
run_php_tests
run_shell_tests
;;
shell)
run_shell_tests
;;
compose)
validate_compose
;;
*)
usage
;;
esac