fulltest-cypress 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. #!/bin/bash
  2. set -e
  3. STACK="${1:-}"
  4. DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  5. # remember this is running in "ci" folder..
  6. # Some defaults for running this script outside of CI
  7. export COMPOSE_PROJECT_NAME="${COMPOSE_PROJECT_NAME:-npm_local_fulltest}"
  8. export IMAGE="${IMAGE:-nginx-proxy-manager}"
  9. export BRANCH_LOWER="${BRANCH_LOWER:-unknown}"
  10. export BUILD_NUMBER="${BUILD_NUMBER:-0000}"
  11. if [ "${COMPOSE_FILE:-}" = "" ]; then
  12. export COMPOSE_FILE="docker/docker-compose.ci.yml"
  13. if [ "$STACK" != "" ]; then
  14. export COMPOSE_FILE="${COMPOSE_FILE}:docker/docker-compose.ci.${STACK}.yml"
  15. fi
  16. fi
  17. # Colors
  18. BLUE='\E[1;34m'
  19. RED='\E[1;31m'
  20. CYAN='\E[1;36m'
  21. GREEN='\E[1;32m'
  22. RESET='\E[0m'
  23. YELLOW='\E[1;33m'
  24. export BLUE CYAN GREEN RESET YELLOW
  25. echo -e "${BLUE}❯ ${CYAN}Starting fullstack cypress testing ...${RESET}"
  26. echo -e "${BLUE}❯ $(docker-compose config)${RESET}"
  27. # $1: container_name
  28. get_container_ip () {
  29. local container_name=$1
  30. local container
  31. local ip
  32. container=$(docker-compose ps --all -q "${container_name}" | tail -n1)
  33. ip=$(docker inspect --format='{{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' "$container")
  34. echo "$ip"
  35. }
  36. # Bring up a stack, in steps so we can inject IPs everywhere
  37. docker-compose up -d pdns pdns-db
  38. PDNS_IP=$(get_container_ip "pdns")
  39. echo -e "${BLUE}❯ ${YELLOW}PDNS IP is ${PDNS_IP}${RESET}"
  40. # adjust the dnsrouter config
  41. LOCAL_DNSROUTER_CONFIG="$DIR/../../docker/dev/dnsrouter-config.json"
  42. rm -rf "$LOCAL_DNSROUTER_CONFIG.tmp"
  43. # IMPORTANT: changes to dnsrouter-config.json will affect this line:
  44. jq --arg a "$PDNS_IP" '.servers[0].upstreams[1].upstream = $a' "$LOCAL_DNSROUTER_CONFIG" > "$LOCAL_DNSROUTER_CONFIG.tmp"
  45. docker-compose up -d dnsrouter
  46. DNSROUTER_IP=$(get_container_ip "dnsrouter")
  47. echo -e "${BLUE}❯ ${YELLOW}DNS Router IP is ${DNSROUTER_IP}"
  48. if [ "${DNSROUTER_IP:-}" = "" ]; then
  49. echo -e "${RED}❯ ERROR: DNS Router IP is not set${RESET}"
  50. exit 1
  51. fi
  52. # mount the resolver
  53. LOCAL_RESOLVE="$DIR/../../docker/dev/resolv.conf"
  54. rm -rf "${LOCAL_RESOLVE}"
  55. printf "nameserver %s\noptions ndots:0" "${DNSROUTER_IP}" > "${LOCAL_RESOLVE}"
  56. # bring up all remaining containers, except cypress!
  57. docker-compose up -d --remove-orphans stepca
  58. docker-compose pull db-mysql || true # ok to fail
  59. docker-compose pull db-postgres || true # ok to fail
  60. docker-compose pull authentik authentik-redis authentik-ldap || true # ok to fail
  61. docker-compose up -d --remove-orphans --pull=never fullstack
  62. # wait for main container to be healthy
  63. bash "$DIR/../wait-healthy" "$(docker-compose ps --all -q fullstack)" 120
  64. # Wait for authentik to be healthy, if it exists as a compose service
  65. if [ "$(docker-compose ps --all -q authentik)" != "" ]; then
  66. bash "$DIR/../wait-healthy" "$(docker-compose ps --all -q authentik)" 90 'true'
  67. fi
  68. # Run tests
  69. rm -rf "$DIR/../../test/results"
  70. docker-compose up --build cypress
  71. # Get results
  72. docker cp -L "$(docker-compose ps --all -q cypress):/test/results" "$DIR/../../test/"
  73. docker cp -L "$(docker-compose ps --all -q fullstack):/data/logs" "$DIR/../../test/results/"
  74. if [ "$2" = "cleanup" ]; then
  75. echo -e "${BLUE}❯ ${CYAN}Cleaning up containers ...${RESET}"
  76. docker-compose down --remove-orphans --volumes -t 30
  77. fi
  78. echo -e "${BLUE}❯ ${GREEN}Fullstack cypress testing complete${RESET}"