#!/bin/bash # Runs the original NetBox unit tests and tests whether all initializers work. # Usage: # ./test.sh latest # ./test.sh v2.9.7 # ./test.sh develop-2.10 # IMAGE='netboxcommunity/netbox:latest' ./test.sh # IMAGE='netboxcommunity/netbox:v2.9.7' ./test.sh # IMAGE='netboxcommunity/netbox:develop-2.10' ./test.sh # export IMAGE='netboxcommunity/netbox:latest'; ./test.sh # export IMAGE='netboxcommunity/netbox:v2.9.7'; ./test.sh # export IMAGE='netboxcommunity/netbox:develop-2.10'; ./test.sh # exit when a command exits with an exit code != 0 set -e source ./build-functions/gh-functions.sh # IMAGE is used by `docker-compose.yml` do determine the tag # of the Docker Image that is to be used if [ "${1}x" != "x" ]; then # Use the command line argument export IMAGE="netboxcommunity/netbox:${1}" else export IMAGE="${IMAGE-netboxcommunity/netbox:latest}" fi # Ensure that an IMAGE is defined if [ -z "${IMAGE}" ]; then echo "âš ī¸ No image defined" if [ -z "${DEBUG}" ]; then exit 1 else echo "âš ī¸ Would 'exit 1' here, but DEBUG is '${DEBUG}'." fi fi # The docker compose command to use doco="docker-compose --file docker-compose.test.yml --project-name netbox_docker_test_${1}" INITIALIZERS_DIR=".initializers" test_setup() { echo "🏗 Setup up test environment" if [ -d "${INITIALIZERS_DIR}" ]; then rm -rf "${INITIALIZERS_DIR}" fi mkdir "${INITIALIZERS_DIR}" ( cd initializers for script in *.yml; do sed -E 's/^# //' "${script}" >"../${INITIALIZERS_DIR}/${script}" done ) } test_netbox_unit_tests() { echo "⏱ Running NetBox Unit Tests" $doco run --rm netbox /opt/netbox/venv/bin/python /opt/netbox/netbox/manage.py test } test_initializers() { echo "🏭 Testing Initializers" export INITIALIZERS_DIR $doco run --rm netbox /opt/netbox/docker-entrypoint.sh ./manage.py check } test_cleanup() { echo "đŸ’Ŗ Cleaning Up" $doco down -v if [ -d "${INITIALIZERS_DIR}" ]; then rm -rf "${INITIALIZERS_DIR}" fi } echo "đŸŗđŸŗđŸŗ Start testing '${IMAGE}'" # Make sure the cleanup script is executed trap test_cleanup EXIT ERR test_setup gh_echo "::group::Netbox unit tests" test_netbox_unit_tests gh_echo "::endgroup::" gh_echo "::group::Innitializer tests" if [ "$SKIP_INITIALIZER_TESTS" == "true" ]; then echo "â†Šī¸ Skipping initializer tests" else test_initializers fi gh_echo "::endgroup::" echo "đŸŗđŸŗđŸŗ Done testing '${IMAGE}'"