#!/bin/bash set -euo pipefail SCRIPT_DIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd) # FUNCTIONS function title() { echo "----------------------------------------" # Center the text local text="$1" local line_length=40 local text_length=${#text} local padding=$(( (line_length - text_length) / 2 )) printf "%*s%s%*s\n" $padding "" "$text" $padding "" echo "----------------------------------------" } function wait_for_container { container_id="$1" container_name="$(docker inspect "${container_id}" --format '{{ .Name }}')" echo "Waiting for container: ${container_name} [${container_id}]" waiting_done="false" while [[ "${waiting_done}" != "true" ]]; do container_state="$(docker inspect "${container_id}" --format '{{ .State.Status }}')" if [[ "${container_state}" == "running" ]]; then health_status="$(docker inspect "${container_id}" --format '{{ .State.Health.Status }}')" echo "${container_name}: container_state=${container_state}, health_status=${health_status}" if [[ ${health_status} == "healthy" ]]; then waiting_done="true" fi else echo "${container_name}: container_state=${container_state}" waiting_done="true" fi sleep 1; done; [ "${health_status}" == "healthy" ] || die "Container ${container_name} is not healthy" } #------------------------------------------------------------------------------------------------ # build the executable title "Building amd64 executable" "${SCRIPT_DIR}/build.sh" amd64 #------------------------------------------------------------------------------------------------ # build the docker image title "Building docker image" docker buildx build --load -t gitea.jde.nz/public/simple-object-storage:test --platform linux/amd64 "${SCRIPT_DIR}" #------------------------------------------------------------------------------------------------ # run the docker container title "Running docker container" export LOCALCONFIG="${SCRIPT_DIR}/.test-docker/config.json" if [ ! -f "${LOCALCONFIG}" ]; then echo "PWD = $(pwd)" echo "SCRIPT_DIR = ${SCRIPT_DIR}" ls -la "${SCRIPT_DIR}" ls -la "${SCRIPT_DIR}/.test-docker" echo "Config file not found: ${LOCALCONFIG}" exit 1 fi COMPOSE_FILE="${SCRIPT_DIR}/.test-docker/compose.yaml" if [ ! -f "${COMPOSE_FILE}" ]; then echo "Compose file not found: ${COMPOSE_FILE}" exit 1 fi #------------------------------------------------------------------------------------------------ title "Running tests" docker compose -f "${COMPOSE_FILE}" down docker compose -f "${COMPOSE_FILE}" rm -v docker compose -f "${COMPOSE_FILE}" up -d # wait until healthy. wait_for_container "sos-test" "${SCRIPT_DIR}/test.sh" "http://localhost:7703" RESULT=$? docker compose -f "${COMPOSE_FILE}" down docker compose -f "${COMPOSE_FILE}" rm -v exit $RESULT