mirror of
				https://github.com/Unleash/unleash.git
				synced 2025-10-27 11:02:16 +01:00 
			
		
		
		
	refactor: docker wait for db with condition (#3101)
This commit is contained in:
		
							parent
							
								
									68cca1b019
								
							
						
					
					
						commit
						c5a90a7d44
					
				@ -36,10 +36,11 @@ services:
 | 
				
			|||||||
      # comma (`token1,token2`).
 | 
					      # comma (`token1,token2`).
 | 
				
			||||||
      INIT_CLIENT_API_TOKENS: "default:development.unleash-insecure-api-token"
 | 
					      INIT_CLIENT_API_TOKENS: "default:development.unleash-insecure-api-token"
 | 
				
			||||||
    depends_on:
 | 
					    depends_on:
 | 
				
			||||||
      - db
 | 
					      db:
 | 
				
			||||||
 | 
					        condition: service_healthy
 | 
				
			||||||
    volumes:
 | 
					    volumes:
 | 
				
			||||||
      - ./scripts:/scripts
 | 
					      - ./scripts:/scripts
 | 
				
			||||||
    command: ["/scripts/wait-for", "db:5432", "--", "node", "index.js"]
 | 
					    command: [ "node", "index.js" ]
 | 
				
			||||||
    healthcheck:
 | 
					    healthcheck:
 | 
				
			||||||
      test: wget --no-verbose --tries=1 --spider http://localhost:4242/health || exit 1
 | 
					      test: wget --no-verbose --tries=1 --spider http://localhost:4242/health || exit 1
 | 
				
			||||||
      interval: 1s
 | 
					      interval: 1s
 | 
				
			||||||
@ -56,7 +57,14 @@ services:
 | 
				
			|||||||
      # trust incoming connections blindly (DON'T DO THIS IN PRODUCTION!)
 | 
					      # trust incoming connections blindly (DON'T DO THIS IN PRODUCTION!)
 | 
				
			||||||
      POSTGRES_HOST_AUTH_METHOD: "trust"
 | 
					      POSTGRES_HOST_AUTH_METHOD: "trust"
 | 
				
			||||||
    healthcheck:
 | 
					    healthcheck:
 | 
				
			||||||
      test: ["CMD", "pg_isready", "--username=postgres", "--host=127.0.0.1", "--port=5432"]
 | 
					      test:
 | 
				
			||||||
 | 
					        [
 | 
				
			||||||
 | 
					          "CMD",
 | 
				
			||||||
 | 
					          "pg_isready",
 | 
				
			||||||
 | 
					          "--username=postgres",
 | 
				
			||||||
 | 
					          "--host=127.0.0.1",
 | 
				
			||||||
 | 
					          "--port=5432"
 | 
				
			||||||
 | 
					        ]
 | 
				
			||||||
      interval: 2s
 | 
					      interval: 2s
 | 
				
			||||||
      timeout: 1m
 | 
					      timeout: 1m
 | 
				
			||||||
      retries: 5
 | 
					      retries: 5
 | 
				
			||||||
 | 
				
			|||||||
							
								
								
									
										191
									
								
								scripts/wait-for
									
									
									
									
									
								
							
							
						
						
									
										191
									
								
								scripts/wait-for
									
									
									
									
									
								
							@ -1,191 +0,0 @@
 | 
				
			|||||||
#!/bin/sh
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
# The MIT License (MIT)
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Copyright (c) 2017 Eficode Oy
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# Permission is hereby granted, free of charge, to any person obtaining a copy
 | 
					 | 
				
			||||||
# of this software and associated documentation files (the "Software"), to deal
 | 
					 | 
				
			||||||
# in the Software without restriction, including without limitation the rights
 | 
					 | 
				
			||||||
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 | 
					 | 
				
			||||||
# copies of the Software, and to permit persons to whom the Software is
 | 
					 | 
				
			||||||
# furnished to do so, subject to the following conditions:
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# The above copyright notice and this permission notice shall be included in all
 | 
					 | 
				
			||||||
# copies or substantial portions of the Software.
 | 
					 | 
				
			||||||
#
 | 
					 | 
				
			||||||
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 | 
					 | 
				
			||||||
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 | 
					 | 
				
			||||||
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 | 
					 | 
				
			||||||
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 | 
					 | 
				
			||||||
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 | 
					 | 
				
			||||||
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
 | 
					 | 
				
			||||||
# SOFTWARE.
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
VERSION="2.2.3"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
set -- "$@" -- "$TIMEOUT" "$QUIET" "$PROTOCOL" "$HOST" "$PORT" "$result"
 | 
					 | 
				
			||||||
TIMEOUT=15
 | 
					 | 
				
			||||||
QUIET=0
 | 
					 | 
				
			||||||
# The protocol to make the request with, either "tcp" or "http"
 | 
					 | 
				
			||||||
PROTOCOL="tcp"
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
echoerr() {
 | 
					 | 
				
			||||||
  if [ "$QUIET" -ne 1 ]; then printf "%s\n" "$*" 1>&2; fi
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
usage() {
 | 
					 | 
				
			||||||
  exitcode="$1"
 | 
					 | 
				
			||||||
  cat << USAGE >&2
 | 
					 | 
				
			||||||
Usage:
 | 
					 | 
				
			||||||
  $0 host:port|url [-t timeout] [-- command args]
 | 
					 | 
				
			||||||
  -q | --quiet                        Do not output any status messages
 | 
					 | 
				
			||||||
  -t TIMEOUT | --timeout=timeout      Timeout in seconds, zero for no timeout
 | 
					 | 
				
			||||||
  -v | --version                      Show the version of this tool
 | 
					 | 
				
			||||||
  -- COMMAND ARGS                     Execute command with args after the test finishes
 | 
					 | 
				
			||||||
USAGE
 | 
					 | 
				
			||||||
  exit "$exitcode"
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wait_for() {
 | 
					 | 
				
			||||||
  case "$PROTOCOL" in
 | 
					 | 
				
			||||||
    tcp)
 | 
					 | 
				
			||||||
      if ! command -v nc >/dev/null; then
 | 
					 | 
				
			||||||
        echoerr 'nc command is missing!'
 | 
					 | 
				
			||||||
        exit 1
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
    http)
 | 
					 | 
				
			||||||
      if ! command -v wget >/dev/null; then
 | 
					 | 
				
			||||||
        echoerr 'wget command is missing!'
 | 
					 | 
				
			||||||
        exit 1
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
      ;;
 | 
					 | 
				
			||||||
  esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  TIMEOUT_END=$(($(date +%s) + TIMEOUT))
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
  while :; do
 | 
					 | 
				
			||||||
    case "$PROTOCOL" in
 | 
					 | 
				
			||||||
      tcp) 
 | 
					 | 
				
			||||||
        nc -w 1 -z "$HOST" "$PORT" > /dev/null 2>&1
 | 
					 | 
				
			||||||
        ;;
 | 
					 | 
				
			||||||
      http)
 | 
					 | 
				
			||||||
        wget --timeout=1 -q "$HOST" -O /dev/null > /dev/null 2>&1 
 | 
					 | 
				
			||||||
        ;;
 | 
					 | 
				
			||||||
      *)
 | 
					 | 
				
			||||||
        echoerr "Unknown protocol '$PROTOCOL'"
 | 
					 | 
				
			||||||
        exit 1
 | 
					 | 
				
			||||||
        ;;
 | 
					 | 
				
			||||||
    esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    result=$?
 | 
					 | 
				
			||||||
        
 | 
					 | 
				
			||||||
    if [ $result -eq 0 ] ; then
 | 
					 | 
				
			||||||
      if [ $# -gt 7 ] ; then
 | 
					 | 
				
			||||||
        for result in $(seq $(($# - 7))); do
 | 
					 | 
				
			||||||
          result=$1
 | 
					 | 
				
			||||||
          shift
 | 
					 | 
				
			||||||
          set -- "$@" "$result"
 | 
					 | 
				
			||||||
        done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
        TIMEOUT=$2 QUIET=$3 PROTOCOL=$4 HOST=$5 PORT=$6 result=$7
 | 
					 | 
				
			||||||
        shift 7
 | 
					 | 
				
			||||||
        exec "$@"
 | 
					 | 
				
			||||||
      fi
 | 
					 | 
				
			||||||
      exit 0
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    if [ $TIMEOUT -ne 0 -a $(date +%s) -ge $TIMEOUT_END ]; then
 | 
					 | 
				
			||||||
      echo "Operation timed out" >&2
 | 
					 | 
				
			||||||
      exit 1
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    sleep 1
 | 
					 | 
				
			||||||
  done
 | 
					 | 
				
			||||||
}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
while :; do
 | 
					 | 
				
			||||||
  case "$1" in
 | 
					 | 
				
			||||||
    http://*|https://*)
 | 
					 | 
				
			||||||
    HOST="$1"
 | 
					 | 
				
			||||||
    PROTOCOL="http"
 | 
					 | 
				
			||||||
    shift 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    *:* )
 | 
					 | 
				
			||||||
    HOST=$(printf "%s\n" "$1"| cut -d : -f 1)
 | 
					 | 
				
			||||||
    PORT=$(printf "%s\n" "$1"| cut -d : -f 2)
 | 
					 | 
				
			||||||
    shift 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -v | --version)
 | 
					 | 
				
			||||||
    echo $VERSION
 | 
					 | 
				
			||||||
    exit
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -q | --quiet)
 | 
					 | 
				
			||||||
    QUIET=1
 | 
					 | 
				
			||||||
    shift 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -q-*)
 | 
					 | 
				
			||||||
    QUIET=0
 | 
					 | 
				
			||||||
    echoerr "Unknown option: $1"
 | 
					 | 
				
			||||||
    usage 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -q*)
 | 
					 | 
				
			||||||
    QUIET=1
 | 
					 | 
				
			||||||
    result=$1
 | 
					 | 
				
			||||||
    shift 1
 | 
					 | 
				
			||||||
    set -- -"${result#-q}" "$@"
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -t | --timeout)
 | 
					 | 
				
			||||||
    TIMEOUT="$2"
 | 
					 | 
				
			||||||
    shift 2
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -t*)
 | 
					 | 
				
			||||||
    TIMEOUT="${1#-t}"
 | 
					 | 
				
			||||||
    shift 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    --timeout=*)
 | 
					 | 
				
			||||||
    TIMEOUT="${1#*=}"
 | 
					 | 
				
			||||||
    shift 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    --)
 | 
					 | 
				
			||||||
    shift
 | 
					 | 
				
			||||||
    break
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    --help)
 | 
					 | 
				
			||||||
    usage 0
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    -*)
 | 
					 | 
				
			||||||
    QUIET=0
 | 
					 | 
				
			||||||
    echoerr "Unknown option: $1"
 | 
					 | 
				
			||||||
    usage 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
    *)
 | 
					 | 
				
			||||||
    QUIET=0
 | 
					 | 
				
			||||||
    echoerr "Unknown argument: $1"
 | 
					 | 
				
			||||||
    usage 1
 | 
					 | 
				
			||||||
    ;;
 | 
					 | 
				
			||||||
  esac
 | 
					 | 
				
			||||||
done
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
if ! [ "$TIMEOUT" -ge 0 ] 2>/dev/null; then
 | 
					 | 
				
			||||||
  echoerr "Error: invalid timeout '$TIMEOUT'"
 | 
					 | 
				
			||||||
  usage 3
 | 
					 | 
				
			||||||
fi
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
case "$PROTOCOL" in
 | 
					 | 
				
			||||||
  tcp)
 | 
					 | 
				
			||||||
    if [ "$HOST" = "" ] || [ "$PORT" = "" ]; then
 | 
					 | 
				
			||||||
      echoerr "Error: you need to provide a host and port to test."
 | 
					 | 
				
			||||||
      usage 2
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  ;;
 | 
					 | 
				
			||||||
  http)
 | 
					 | 
				
			||||||
    if [ "$HOST" = "" ]; then
 | 
					 | 
				
			||||||
      echoerr "Error: you need to provide a host to test."
 | 
					 | 
				
			||||||
      usage 2
 | 
					 | 
				
			||||||
    fi
 | 
					 | 
				
			||||||
  ;;
 | 
					 | 
				
			||||||
esac
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
wait_for "$@"
 | 
					 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user