#!/usr/bin/env bash set -euo pipefail ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)" cd "$ROOT_DIR" env_value() { python3 "$ROOT_DIR/scripts/env-value.py" "$ROOT_DIR/.env" "$1" "${2:-}" } MYSQL_CONTAINER="${MYSQL_CONTAINER:-$(env_value MYSQL_CONTAINER chatapp-test-mysql)}" MYSQL_DATABASE="${MYSQL_DATABASE:-$(env_value MYSQL_DATABASE likei)}" MYSQL_ROOT_PASSWORD="${MYSQL_ROOT_PASSWORD:-$(env_value MYSQL_ROOT_PASSWORD)}" GOLANG_SOURCE_DIR="${GOLANG_SOURCE_DIR:-$(env_value GOLANG_SOURCE_DIR "$ROOT_DIR/sources/chatapp3-golang")}" JAVA_SOURCE_DIR="${JAVA_SOURCE_DIR:-$(env_value JAVA_SOURCE_DIR "$ROOT_DIR/sources/chatapp3-java")}" TESTBOX_APPLY_JAVA_SQL="${TESTBOX_APPLY_JAVA_SQL:-$(env_value TESTBOX_APPLY_JAVA_SQL 1)}" if [ -z "$MYSQL_ROOT_PASSWORD" ]; then echo "MYSQL_ROOT_PASSWORD is required" >&2 exit 1 fi mysql_exec() { docker exec -i "$MYSQL_CONTAINER" mysql -uroot -p"$MYSQL_ROOT_PASSWORD" "$@" } echo "waiting mysql..." for _ in $(seq 1 90); do if docker exec "$MYSQL_CONTAINER" mysqladmin ping -h 127.0.0.1 -uroot -p"$MYSQL_ROOT_PASSWORD" --silent >/dev/null 2>&1; then break fi sleep 2 done mysql_exec -e "CREATE DATABASE IF NOT EXISTS \`$MYSQL_DATABASE\` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;" shopt -s nullglob baseline_files=("$ROOT_DIR"/mysql/baseline/*.sql) if [ "${#baseline_files[@]}" -eq 0 ]; then echo "warn: no mysql baseline SQL found in mysql/baseline; Java services need schema/base data before full use" >&2 else for sql in "${baseline_files[@]}"; do echo "applying baseline $(basename "$sql")" mysql_exec "$MYSQL_DATABASE" < "$sql" done fi GO_MIGRATIONS_DIR="$GOLANG_SOURCE_DIR/migrations" if [ -d "$GO_MIGRATIONS_DIR" ]; then for sql in "$GO_MIGRATIONS_DIR"/*.sql; do [ -f "$sql" ] || continue echo "applying go migration $(basename "$sql")" mysql_exec "$MYSQL_DATABASE" < "$sql" || { echo "warn: go migration failed, continuing: $sql" >&2 } done fi JAVA_SQL_DIR="$JAVA_SOURCE_DIR/sql" if [ "${TESTBOX_APPLY_JAVA_SQL:-1}" = "1" ] && [ -d "$JAVA_SQL_DIR" ]; then for sql in "$JAVA_SQL_DIR"/*.sql; do [ -f "$sql" ] || continue echo "applying java sql $(basename "$sql")" mysql_exec "$MYSQL_DATABASE" < "$sql" || { echo "warn: java sql failed, continuing: $sql" >&2 } done fi echo "mysql baseline step done"