diff --git a/.github/scripts/check-infra-dependencies.sh b/.github/scripts/check-infra-dependencies.sh new file mode 100755 index 0000000000..283223c99c --- /dev/null +++ b/.github/scripts/check-infra-dependencies.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + +set -eou pipefail + +usage() { + echo "${0} 'CHECK WHETHER THE SPECIFIED INFRA DEPENDENCE IS READY" +} + +if [ "$#" -ne 1 ] || [ -z "$1" ]; then + echo "Error: Missing the infra name which needs to check" + usage + exit 1 +fi + + +# infra is one of 'mysql', 'redis', 'mailhog', 'saml_idp'. +# use 'all' to check all these infras. +INFRA_NAME=${1} +INFRAS=() +RETRYNUM=10 + +if [ "$INFRA_NAME" == "all" ]; then + INFRAS=("mysql" "redis" "mailhog" "saml_idp") +else + INFRAS=("$INFRA_NAME") +fi + +checkInfraFun() { + INFRA=$1 + echo "check whether the $INFRA is ready" + if [ "$INFRA" == "mysql" ]; then + ! docker-compose exec -T mysql_test bash -c 'echo "SHOW DATABASES;" | mysql -uroot -ptoor' && return 1 + echo "mysql is ready!" + elif [ "$INFRA" == "redis" ]; then + ! docker-compose exec -T redis bash -c "redis-cli ping" && return 1 + echo "redis is ready!" + elif [ "$INFRA" == "mailhog" ]; then + echo "TODO" + echo "mailhog is ready!" + elif [ "$INFRA" == "saml_idp" ]; then + echo "TODO" + echo "saml_idp is ready!" + fi +} + +for INFRA in ${INFRAS[@]}; do + n=0 + success=false + until [ "$n" -ge $RETRYNUM ]; do + checkInfraFun $INFRA && success=true && break + n=$((n+1)) + sleep 1 + done + + if [ ! $success ]; then + exit 1 + fi +done diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7c77e02d96..4c2c5031bf 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -66,6 +66,7 @@ jobs: - name: Run E2E Tests run: | + .github/scripts/check-infra-dependencies.sh all make e2e-reset-db make e2e-serve & sleep 3