#!/bin/bash # Copyright (c) The OpenTofu Authors # SPDX-License-Identifier: MPL-2.0 # Copyright (c) 2023 HashiCorp, Inc. # SPDX-License-Identifier: MPL-2.0 # This script tests the installation instructions on all relevant Linux operating systems listed in docker-compose.yaml. set -eo pipefail TEMPFILE=$(mktemp) set +e docker compose down >/dev/null 2>&1 docker compose up $1 >$TEMPFILE 2>&1 EXIT_CODE=$? if [ "${EXIT_CODE}" -ne 0 ]; then echo -e "\033[0;31mFailed to execute docker compose up\033[0m" cat $TEMPFILE >&2 rm $TEMPFILE exit "${EXIT_CODE}" fi SERVICES=$(docker compose ps -a --format '{{.Service}}') FINAL_EXIT_CODE=0 FAILED=0 for SERVICE in $SERVICES; do EXIT_CODE=$(docker compose ps -a --format '{{.Service}}\t{{.ExitCode}}' | grep -E "^${SERVICE}\s" | cut -f 2) if [ "${EXIT_CODE}" -eq 0 ]; then echo -e "::group::\033[0;32m✅ ${SERVICE}\033[0m" else echo -e "::group::\033[0;31m❌ ${SERVICE}\033[0m" docker compose logs ${SERVICE} FAILED=$((${FAILED}+1)) fi cat $TEMPFILE | grep -a -E "^[a-zA-Z]+-${SERVICE}-1\s+\| " | sed -E "s/^[a-zA-Z]+-${SERVICE}-1\s+\| //" echo "::endgroup::" done if [ "${FAILED}" -ne 0 ]; then echo -e "::group::\033[0;31m❌ Summary (${FAILED} failed)\033[0m" else echo -e "::group::\033[0;32m✅ Summary (all tests passed)\033[0m" fi echo -en "\033[1m" printf '%-32s%s\n' 'Test case' 'Result (exit code)' echo -en "\033[0m" for SERVICE in $SERVICES; do EXIT_CODE=$(docker compose ps -a --format '{{.Service}}\t{{.ExitCode}}' | grep -E "^${SERVICE}\s" | cut -f 2) if [ "${EXIT_CODE}" -eq 0 ]; then RESULT=$(echo -ne "\033[0;32mpass (${EXIT_CODE})\033[0m") else RESULT=$(echo -ne "\033[0;31mfail (${EXIT_CODE})\033[0m") fi printf '%-32s%s\n' "${SERVICE}" "${RESULT}" done echo "::endgroup::" docker compose down >/dev/null 2>&1 rm $TEMPFILE if [ "${FAILED}" -ne 0 ]; then exit 1 fi exit 0