From bc812587f63ba6f50fcef9e42dfea02a5273a94d Mon Sep 17 00:00:00 2001 From: Dustin Kaiser <8209087+mrnicegyu11@users.noreply.github.com> Date: Fri, 17 Nov 2023 09:33:47 +0100 Subject: [PATCH] Add: validate simcore stack yml bash script - to be used in CI/CD (#441) * Add the file * fixes * Add version-pinned yq * minor fixes * Add comment * Rename venv folder to .venv --------- Co-authored-by: kaiser --- .../validate_simcore_stack_yml.bash | 71 +++++++++++++++++++ services/graylog/Makefile | 6 +- 2 files changed, 74 insertions(+), 3 deletions(-) create mode 100755 scripts/deployments/validate_simcore_stack_yml.bash diff --git a/scripts/deployments/validate_simcore_stack_yml.bash b/scripts/deployments/validate_simcore_stack_yml.bash new file mode 100755 index 00000000..8f5cccf2 --- /dev/null +++ b/scripts/deployments/validate_simcore_stack_yml.bash @@ -0,0 +1,71 @@ +#!/bin/bash +set -o nounset +set -o pipefail +# +# This bash script expects the following environment variables to be set: +# - PREFIX_STACK_NAME: prefix of the stack name +# +export COMPOSE_FILE=simcore_stack.yml +export SETTINGS_BINARY_PATH=/home/scu/.venv/bin +# +export SERVICES_PREFIX=${PREFIX_STACK_NAME} +exit_code=0 +# Download version-pinned yq binary +python -c "import urllib.request,os,sys,urllib; f = open(os.path.basename(sys.argv[1]), 'wb'); f.write(urllib.request.urlopen(sys.argv[1]).read()); f.close();" https://github.com/mikefarah/yq/releases/download/v4.29.2/yq_linux_amd64 +mv yq_linux_amd64 yq +chmod +x yq +_yq=$(realpath ./yq) +export _yq +# +# start +# +for service in $($_yq e '.services | keys | .[]' ${COMPOSE_FILE}) +do + export TARGETNAME=${service#"${SERVICES_PREFIX}"_} + # continue if the service == director since it doesnt have settings + if [ "${TARGETNAME}" == "director" ]; then + continue + fi + if [ "${TARGETNAME}" == "migration" ]; then + continue + fi + if [ "${TARGETNAME}" == "postgres" ]; then + continue + fi + if [ "${TARGETNAME}" == "rabbit" ]; then + continue + fi + if [ "${TARGETNAME}" == "redis" ]; then + continue + fi + if [ "${TARGETNAME}" == "traefik" ]; then + continue + fi + if [ "${TARGETNAME}" == "traefik_api" ]; then + continue + fi + if [ "${TARGETNAME}" == "whoami" ]; then + continue + fi + export TARGETFILE="simcore-service-${TARGETNAME}" + echo TARGETFILE="${TARGETFILE}" + echo "Assuming targetfile in ${SETTINGS_BINARY_PATH}/${TARGETFILE}" + echo "Checking ${SETTINGS_BINARY_PATH}/${TARGETFILE}" + if docker compose --file ${COMPOSE_FILE} run --rm "${service}" test -f "${SETTINGS_BINARY_PATH}"/"${TARGETFILE}" > /dev/null 2>&1; then + echo "FOUND_EXECUTABLE=${SETTINGS_BINARY_PATH}/$TARGETFILE" + export FOUND_EXECUTABLE="${SETTINGS_BINARY_PATH}/$TARGETFILE" + if docker compose --file ${COMPOSE_FILE} run --entrypoint "${FOUND_EXECUTABLE}" --rm "${service}" settings --as-json > /dev/null 2>&1; then + echo "SUCCESS: Validation of environment variables for ${service}" + else + echo "ERROR: Validation of environment variables for ${service} failed" + docker compose --file ${COMPOSE_FILE} run --entrypoint "${FOUND_EXECUTABLE}" --rm "${service}" settings --as-json + exit_code=1 + fi + else + echo "WARN: Settings executable not found for ${service}" + fi + + + echo "--------------------------" +done +exit $exit_code diff --git a/services/graylog/Makefile b/services/graylog/Makefile index c7bbceb8..8c2487fc 100644 --- a/services/graylog/Makefile +++ b/services/graylog/Makefile @@ -87,11 +87,11 @@ ${TEMP_COMPOSE}-aws: docker-compose.yml docker-compose.letsencrypt.dns.yml docke .PHONY: configure configure: .env ## Test is Graylog is online and configure Graylog inputs @cd scripts;\ - if [ ! -d "venv" ]; \ + if [ ! -d ".venv" ]; \ then\ - python3 -m venv venv;\ + python3 -m venv .venv;\ fi;\ - source venv/bin/activate;\ + source .venv/bin/activate;\ pip install -r requirements.txt > /dev/null 2>&1;\ set -o allexport; \ source ../$<;\