71 lines
2.3 KiB
Bash
Executable File
71 lines
2.3 KiB
Bash
Executable File
#!/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"
|