53 lines
1.5 KiB
Bash
53 lines
1.5 KiB
Bash
|
|
#!/bin/sh
|
||
|
|
set -eu
|
||
|
|
|
||
|
|
script_dir=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
|
||
|
|
cd "$script_dir"
|
||
|
|
|
||
|
|
backend_container=${BACKEND_CONTAINER:-test_eventapi}
|
||
|
|
service_container=${SERVICE_CONTAINER:-yd-competition-api}
|
||
|
|
image_name=${IMAGE_NAME:-yd-competition-api:local}
|
||
|
|
volume_name=${DATA_VOLUME:-yd-competition-data}
|
||
|
|
|
||
|
|
if [ "$(docker inspect --format '{{.State.Running}}' "$backend_container")" != true ]; then
|
||
|
|
echo "Backend container is not running: $backend_container" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
if docker container inspect "$service_container" >/dev/null 2>&1; then
|
||
|
|
echo "Service container already exists: $service_container" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
docker build -f Dockerfile -t "$image_name" .
|
||
|
|
docker volume create "$volume_name" >/dev/null
|
||
|
|
docker run -d \
|
||
|
|
--name "$service_container" \
|
||
|
|
--restart unless-stopped \
|
||
|
|
--network "container:$backend_container" \
|
||
|
|
--mount "type=volume,source=$volume_name,target=/app/data" \
|
||
|
|
"$image_name"
|
||
|
|
|
||
|
|
ready=false
|
||
|
|
attempt=0
|
||
|
|
while [ "$attempt" -lt 20 ]; do
|
||
|
|
if docker exec "$backend_container" sh -c \
|
||
|
|
'curl -fsS --max-time 5 http://127.0.0.1:8787/api/competition/ping' >/dev/null 2>&1; then
|
||
|
|
ready=true
|
||
|
|
break
|
||
|
|
fi
|
||
|
|
attempt=$((attempt + 1))
|
||
|
|
sleep 1
|
||
|
|
done
|
||
|
|
|
||
|
|
if [ "$ready" != true ]; then
|
||
|
|
echo "Competition API did not become ready on 127.0.0.1:8787" >&2
|
||
|
|
docker logs --tail 30 "$service_container" >&2
|
||
|
|
exit 1
|
||
|
|
fi
|
||
|
|
|
||
|
|
docker exec "$backend_container" sh -c \
|
||
|
|
'curl -fsS --max-time 5 http://127.0.0.1:8787/api/competition/ping'
|
||
|
|
echo
|
||
|
|
echo "Competition API is running beside $backend_container"
|