Adjust CI tests

This commit is contained in:
cytopia
2022-03-23 11:26:50 +01:00
parent 176f48d063
commit 7041e6ef0a
3 changed files with 141 additions and 95 deletions

View File

@@ -10,11 +10,11 @@ set -o pipefail
###
function run() {
local cmd="${1}"
local to_stderr=0
local to_stdout=0
# Output to stderr instead?
# Output to stdout instead?
if [ "${#}" -eq "2" ]; then
to_stderr="${2}"
to_stdout="${2}"
fi
local red="\033[0;31m"
@@ -22,24 +22,24 @@ function run() {
local yellow="\033[0;33m"
local reset="\033[0m"
if [ "${to_stderr}" -eq "0" ]; then
printf "${yellow}[%s] ${red}%s \$ ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
else
if [ "${to_stdout}" -eq "0" ]; then
printf "${yellow}[%s] ${red}%s \$ ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)" >&2
else
printf "${yellow}[%s] ${red}%s \$ ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
fi
if sh -c "${cmd}"; then
if [ "${to_stderr}" -eq "0" ]; then
printf "${green}[%s]${reset}\n" "OK"
else
if [ "${to_stdout}" -eq "0" ]; then
printf "${green}[%s]${reset}\n" "OK" >&2
else
printf "${green}[%s]${reset}\n" "OK"
fi
return 0
else
if [ "${to_stderr}" -eq "0" ]; then
printf "${red}[%s]${reset}\n" "NO"
else
if [ "${to_stdout}" -eq "0" ]; then
printf "${red}[%s]${reset}\n" "NO" >&2
else
printf "${red}[%s]${reset}\n" "NO"
fi
return 1
fi
@@ -49,11 +49,11 @@ function run() {
###
function run_fail() {
local cmd="${1}"
local to_stderr=0
local to_stdout=0
# Output to stderr instead?
# Output to stdout instead?
if [ "${#}" -eq "2" ]; then
to_stderr="${2}"
to_stdout="${2}"
fi
local red="\033[0;31m"
@@ -61,29 +61,51 @@ function run_fail() {
local yellow="\033[0;33m"
local reset="\033[0m"
if [ "${to_stderr}" -eq "0" ]; then
printf "${yellow}[%s] ${red}%s \$ ${yellow}[NOT] ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
else
if [ "${to_stdout}" -eq "0" ]; then
printf "${yellow}[%s] ${red}%s \$ ${yellow}[NOT] ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)" >&2
else
printf "${yellow}[%s] ${red}%s \$ ${yellow}[NOT] ${green}${cmd}${reset}\n" "$(hostname)" "$(whoami)"
fi
if ! sh -c "${cmd}"; then
if [ "${to_stderr}" -eq "0" ]; then
printf "${green}[%s]${reset}\n" "OK"
else
if [ "${to_stdout}" -eq "0" ]; then
printf "${green}[%s]${reset}\n" "OK" >&2
else
printf "${green}[%s]${reset}\n" "OK"
fi
return 0
else
if [ "${to_stderr}" -eq "0" ]; then
printf "${red}[%s]${reset}\n" "NO"
else
if [ "${to_stdout}" -eq "0" ]; then
printf "${red}[%s]${reset}\n" "NO" >&2
else
printf "${red}[%s]${reset}\n" "NO"
fi
return 1
fi
}
###
### Print H2
###
function print_h2() {
local text="${1}"
local red="\033[0;31m"
local green="\033[0;32m"
local yellow="\033[0;33m"
local purple="\033[0;35m"
local reset="\033[0m"
echo
echo
printf "${purple}%s${reset}\n" "###"
printf "${purple}%s${reset}\n" "### ${text}"
printf "${purple}%s${reset}\n" "###"
echo
}
###
### Get 15 character random word
###
@@ -114,17 +136,43 @@ function docker_run() {
local args="${*}"
# Returns docker-id
did="$( run "docker run --rm -d --platform ${architecture} --name $( get_random_name ) ${args} ${image_name}" "1" )"
sleep 10
>&2 echo "------------------------------ [STARTING CONTAINER] ------------------------------"
name="$( get_random_name )"
run "docker run --rm --platform ${architecture} --name ${name} ${args} ${image_name} &" 1>&2
run "sleep 10"
# If it fails, start again in foreground to fail again, but show errors
if ! docker exec "$(tty -s && echo "-it" || echo )" "${did}" ls >/dev/null 2>&1; then
run "docker run --rm --name $( get_random_name ) ${args} ${image_name}" "1"
>&2 echo "[CHECK IF RUNNING] docker ps"
# Check docker ps if running
if ! run "docker ps | grep '${name}'" 1>&2; then
docker_stop "${name}"
>&2 echo "------------------------------ [STARTING CONTAINER] FAILED ------------------------------"
return 1
fi
# Check if we can ls
>&2 echo "[CHECK IF RUNNING] docker exec"
if ! run "docker exec $(tty -s && echo "-it" || echo ) ${name} id" 1>&2; then
docker_stop "${name}"
>&2 echo "------------------------------ [STARTING CONTAINER] FAILED ------------------------------"
return 1
fi
>&2 echo "------------------------------ [STARTING CONTAINER] OK ------------------------------"
echo "${name}"
# Only get 8 digits of docker id
echo "${did}" | grep -Eo '^[0-9a-zA-Z]{8}'
## If it fails, start again without --rm in order to show errors
# run "docker logs ${did}" "1" || true
# run "docker kill ${did}" "1" || true
# run "docker rm -f ${did}" "1" || true
# name="$( get_random_name )"
# run "docker run -d --platform ${architecture} --name ${name} ${args} ${image_name}" "1"
# run "sleep 10" "1"
# run "docker logs ${name}" "1" || true
# run "docker kill ${name}" "1" || true
# run "docker rm -f ${name}" "1" || true
# return 1
#fi
## Only get 8 digits of docker id
#echo "${did}" | grep -Eo '^[0-9a-zA-Z]{8}'
}
@@ -132,9 +180,9 @@ function docker_run() {
### Show Docker logs
###
function docker_logs() {
local docker_id="${1}"
local name="${1}"
run "docker logs ${docker_id}"
run "docker logs ${name}"
}
@@ -142,13 +190,13 @@ function docker_logs() {
### Docker exec
###
function docker_exec() {
local did="${1}"
local name="${1}"
local cmd="${2}"
shift
shift
local args="${*}"
run "docker exec ${args} $(tty -s && echo '-it' || echo) ${did} ${cmd}"
run "docker exec ${args} $(tty -s && echo '-it' || echo) ${name} ${cmd}"
}
@@ -156,14 +204,14 @@ function docker_exec() {
### Get docker name
###
function docker_name() {
local did="${1}"
local name=
name="$( docker ps | grep "${did}" | awk '{print $(NF)}' )"
if [ -z "${name}" ]; then
return 1
fi
local name="${1}"
echo "${name}"
#name="$( docker ps | grep "${did}" | awk '{print $(NF)}' )"
#if [ -z "${name}" ]; then
# return 1
#fi
#echo "${name}"
}
@@ -171,15 +219,9 @@ function docker_name() {
### Stop container
###
function docker_stop() {
local did="${1}"
local name=
name="$( docker ps --no-trunc --format='{{.ID}} {{.Names}}' | grep "${did}" | head -1 | awk '{print $2}' )"
local name="${1}"
# Stop
run "docker stop ${did} >/dev/null"
if docker ps | grep -q "${did}"; then
run "docker kill ${did} >/dev/null" || true
fi
# Remove if still exist
run "docker rm ${name} >/dev/null 2>&1 || true"
run "docker stop ${name}" || true
run "docker kill ${name} || true" 2>/dev/null
run "docker rm -f ${name} || true" 2>/dev/null
}

View File

@@ -23,76 +23,76 @@ FLAVOUR="${4}"
###
### Debug == 0
###
did="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "${ARCH}" "-e DEBUG_ENTRYPOINT=0" )"
if ! run_fail "docker logs ${did} 2>&1 | grep 'Debug level'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
print_h2 "DEBUG_ENTRYPOINT=0"
if ! name="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "${ARCH}" "-e DEBUG_ENTRYPOINT=0" )"; then
exit 1
fi
if ! run_fail "docker logs ${name} 2>&1 | grep '\[INFO\]'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
if ! run_fail "docker logs ${did} 2>&1 | grep '\[INFO\]'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
if ! run_fail "docker logs ${name} 2>&1 | grep -E '\[(ERR|\?\?\?)\]'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
if ! run_fail "docker logs ${did} 2>&1 | grep -E '\[(ERR|\?\?\?)\]'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
echo "Failed"
exit 1
fi
docker_stop "${did}"
docker_stop "${name}"
###
### Debug == 1
###
did="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "${ARCH}" "-e DEBUG_ENTRYPOINT=1" )"
if ! run "docker logs ${did} 2>&1 | grep 'Debug level: 1'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
print_h2 "DEBUG_ENTRYPOINT=1"
if ! name="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "${ARCH}" "-e DEBUG_ENTRYPOINT=1" )"; then
exit 1
fi
if ! run "docker logs ${name} 2>&1 | grep 'Debug level: 1'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
if ! run "docker logs ${did} 2>&1 | grep '\[INFO\]'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
if ! run "docker logs ${name} 2>&1 | grep '\[INFO\]'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
if ! run_fail "docker logs ${did} 2>&1 | grep -E '\[(ERR|\?\?\?)\]'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
if ! run_fail "docker logs ${name} 2>&1 | grep -E '\[(ERR|\?\?\?)\]'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
docker_stop "${did}"
docker_stop "${name}"
###
### Debug == 2
###
did="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "${ARCH}" "-e DEBUG_ENTRYPOINT=2" )"
if ! run "docker logs ${did} 2>&1 | grep 'Debug level: 2'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
print_h2 "DEBUG_ENTRYPOINT=2"
if ! name="$( docker_run "${IMAGE}:${VERSION}-${FLAVOUR}" "${ARCH}" "-e DEBUG_ENTRYPOINT=2" )"; then
exit 1
fi
if ! run "docker logs ${name} 2>&1 | grep 'Debug level: 2'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
if ! run "docker logs ${did} 2>&1 | grep '\[INFO\]'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
if ! run "docker logs ${name} 2>&1 | grep '\[INFO\]'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
if ! run_fail "docker logs ${did} 2>&1 | grep -E '\[(ERR|\?\?\?)\]'"; then
docker_logs "${did}" || true
docker_stop "${did}" || true
if ! run_fail "docker logs ${name} 2>&1 | grep -E '\[(ERR|\?\?\?)\]'"; then
docker_logs "${name}" || true
docker_stop "${name}" || true
echo "Failed"
exit 1
fi
docker_stop "${did}"
docker_stop "${name}"

View File

@@ -48,7 +48,8 @@ if [ "${FLAVOUR}" = "base" ] || [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "p
TESTS="$( find "${CWD}" -regex "${CWD}/base/[0-9].+.*\.sh" | sort -u )"
for t in ${TESTS}; do
printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH}): ${t}"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH})"
printf "\033[0;33m%s %s\033[0m\n" "#" "${t} ${IMAGE} ${ARCH} ${VERSION} ${FLAVOUR}"
printf "\033[0;33m%s\033[0m\n\n" "################################################################################"
time ${t} "${IMAGE}" "${ARCH}" "${VERSION}" "${FLAVOUR}"
done
@@ -58,7 +59,8 @@ if [ "${FLAVOUR}" = "mods" ] || [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "w
TESTS="$( find "${CWD}" -regex "${CWD}/mods/[0-9].+.*\.sh" | sort -u )"
for t in ${TESTS}; do
printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH}): ${t}"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH})"
printf "\033[0;33m%s %s\033[0m\n" "#" "${t} ${IMAGE} ${ARCH} ${VERSION} ${FLAVOUR}"
printf "\033[0;33m%s\033[0m\n\n" "################################################################################"
time ${t} "${IMAGE}" "${ARCH}" "${VERSION}" "${FLAVOUR}"
done
@@ -68,7 +70,8 @@ if [ "${FLAVOUR}" = "prod" ] || [ "${FLAVOUR}" = "work" ]; then
TESTS="$( find "${CWD}" -regex "${CWD}/prod/[0-9].+.*\.sh" | sort -u )"
for t in ${TESTS}; do
printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH}): ${t}"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH})"
printf "\033[0;33m%s %s\033[0m\n" "#" "${t} ${IMAGE} ${ARCH} ${VERSION} ${FLAVOUR}"
printf "\033[0;33m%s\033[0m\n\n" "################################################################################"
time ${t} "${IMAGE}" "${ARCH}" "${VERSION}" "${FLAVOUR}"
done
@@ -78,7 +81,8 @@ if [ "${FLAVOUR}" = "work" ]; then
TESTS="$( find "${CWD}" -regex "${CWD}/work/[0-9].+.*\.sh" | sort -u )"
for t in ${TESTS}; do
printf "\n\n\033[0;33m%s\033[0m\n" "################################################################################"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH}): ${t}"
printf "\033[0;33m%s %s\033[0m\n" "#" "[${VERSION}-${FLAVOUR}] (${ARCH})"
printf "\033[0;33m%s %s\033[0m\n" "#" "${t} ${IMAGE} ${ARCH} ${VERSION} ${FLAVOUR}"
printf "\033[0;33m%s\033[0m\n\n" "################################################################################"
time ${t} "${IMAGE}" "${ARCH}" "${VERSION}" "${FLAVOUR}"
done