1
0
Files
breadcrumb-the-shire/bin/dev

142 lines
2.8 KiB
Plaintext
Raw Normal View History

#!/usr/bin/env bash
set -euo pipefail
script_dir="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
repo_root="$(cd -- "${script_dir}/.." && pwd)"
cd "${repo_root}"
usage() {
cat <<'USAGE'
Usage: bin/dev <command> [args...]
Commands:
init First-time, non-destructive setup
up Start local containers
down Stop local containers
logs [service] Follow docker compose logs (optional service)
console <args...> Run php bin/console inside php container
qa Run mandatory quality gates (QG-001/002/003/006)
USAGE
}
require_docker_compose() {
if ! command -v docker >/dev/null 2>&1; then
echo "[ERROR] docker is required." >&2
exit 2
fi
docker compose version >/dev/null 2>&1 || {
echo "[ERROR] docker compose is required." >&2
exit 2
}
}
wait_for_php_container() {
local max_attempts=60
local attempt=1
while (( attempt <= max_attempts )); do
if docker compose exec -T php php -v >/dev/null 2>&1; then
return 0
fi
sleep 1
attempt=$((attempt + 1))
done
echo "[ERROR] php container did not become ready in time." >&2
return 1
}
run_console() {
if [[ $# -eq 0 ]]; then
echo "[ERROR] console requires arguments, e.g. bin/dev console list" >&2
exit 2
fi
docker compose exec -T php php bin/console "$@"
}
cmd_init() {
require_docker_compose
if [[ ! -f .env ]]; then
if [[ ! -f .env.example ]]; then
echo "[ERROR] .env missing and .env.example not found." >&2
exit 2
fi
cp .env.example .env
echo "[INFO] created .env from .env.example"
fi
docker compose up --build -d
wait_for_php_container
run_console module:sync
run_console doctor
}
cmd_up() {
require_docker_compose
docker compose up -d
}
cmd_down() {
require_docker_compose
docker compose down
}
cmd_logs() {
require_docker_compose
if [[ $# -gt 1 ]]; then
echo "[ERROR] logs accepts at most one optional service name." >&2
exit 2
fi
if [[ $# -eq 1 ]]; then
docker compose logs -f "$1"
else
docker compose logs -f
fi
}
cmd_qa() {
require_docker_compose
docker compose exec -T php vendor/bin/phpunit
docker compose exec -T php vendor/bin/phpstan analyse -c phpstan.neon --no-progress
docker compose exec -T php vendor/bin/phpunit tests/Architecture/CoreStarterkitContractTest.php
docker compose exec -T php vendor/bin/php-cs-fixer fix --config=tools/php-cs-fixer/.php-cs-fixer.dist.php --dry-run --diff --verbose
}
if [[ $# -eq 0 ]]; then
usage
exit 0
fi
command="$1"
shift || true
case "${command}" in
init)
cmd_init "$@"
;;
up)
cmd_up "$@"
;;
down)
cmd_down "$@"
;;
logs)
cmd_logs "$@"
;;
console)
run_console "$@"
;;
qa)
cmd_qa "$@"
;;
-h|--help|help)
usage
;;
*)
echo "[ERROR] unknown command: ${command}" >&2
usage
exit 2
;;
esac