#!/usr/bin/env bash function error_handler() { echo >&2 "Exited with BAD EXIT CODE '${2}' in ${0} script at line: ${1}." exit "$2" } trap 'error_handler ${LINENO} $?' ERR set -o errtrace -o errexit -o nounset -o pipefail script_dir="$( cd -- "$(dirname "$0")" >/dev/null 2>&1 pwd -P )" supported_session_types=$(grep -E '^(el)?if.*\.*==' "$0" | sed -E 's/.*== "([^"]+)".*/\1/' | tr '\n' ' ') session_type="${1:-}" shift if [[ -z "${session_type}" ]] || ! grep -qE "\<${session_type}\>" <<<"$supported_session_types"; then if [[ -n "$session_type" ]]; then echo >&2 "ERROR: Given session typeis not supported - ${session_type}" fi echo >&2 "usage: $(basename "$0") [session_type]" echo >&2 -e "\tsupported session types: ${supported_session_types}" exit 1 fi if [[ -z "${SPIFFWORKFLOW_BACKEND_RUNNING_IN_CI:-}" ]]; then export FLASK_SESSION_SECRET_KEY=super_secret_key export FORCE_COLOR="1" export PRE_COMMIT_COLOR="always" export SPIFFWORKFLOW_BACKEND_DATABASE_PASSWORD= export SPIFFWORKFLOW_BACKEND_DATABASE_TYPE=mysql export SPIFFWORKFLOW_BACKEND_RUNNING_IN_CI='true' fi function setup_db_for_ci() { # Set environment variables export FLASK_INSTANCE_PATH="${script_dir}/../src/instance" export FLASK_SESSION_SECRET_KEY="e7711a3ba96c46c68e084a86952de16f" export FLASK_APP="src/spiffworkflow_backend" export SPIFFWORKFLOW_BACKEND_ENV="unit_testing" # Check if SPIFFWORKFLOW_BACKEND_DATABASE_TYPE is set to "sqlite" if [[ "$SPIFFWORKFLOW_BACKEND_DATABASE_TYPE" == "sqlite" ]]; then # Remove existing migrations folder if it exists if [[ -d "migrations" ]]; then rm -rf "migrations" fi # Run the 'init' and 'migrate' tasks using flask poetry run flask db init poetry run flask db migrate fi # Run the 'upgrade' task using flask poetry run flask db upgrade } poetry install if [[ "${session_type}" == "tests" ]]; then setup_db_for_ci poetry run coverage run --parallel -m pytest "$@" elif [[ "${session_type}" == "typeguard" ]]; then setup_db_for_ci RUN_TYPEGUARD=true poetry run pytest "$@" elif [[ "${session_type}" == "mypy" ]]; then poetry run mypy src tests elif [[ "${session_type}" == "safety" ]]; then poetry run safety check --full-report --ignore=70624 --ignore=70612 elif [[ "${session_type}" == "coverage" ]]; then if ls .coverage.* 1>/dev/null 2>&1; then poetry run coverage combine fi poetry run coverage report poetry run coverage xml fi