From dc9c55234eb2a822dd0b2ca76873cc99940fefd8 Mon Sep 17 00:00:00 2001 From: David Alpert Date: Sat, 23 Oct 2021 02:12:34 -0500 Subject: [PATCH] Chore: rework docker-postgres.sh to be cross-platform (#1037) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I found the previous docker-postgres.sh script did not work for me on macOS. this commit abstracts a pair of commands behind functions which can be customized by platform. Co-authored-by: Ivar Conradi Ă˜sthus --- package.json | 1 + scripts/docker-postgres.sh | 68 +++++++++++++++++++++++++++++++------- 2 files changed, 57 insertions(+), 12 deletions(-) diff --git a/package.json b/package.json index 72cb5c2906..639f51d0db 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "prepare": "yarn run build", "test": "NODE_ENV=test PORT=4243 jest", "test:docker": "./scripts/docker-postgres.sh", + "test:docker:cleanup":"docker rm -f unleash-postgres", "test:watch": "yarn test --watch", "test:coverage": "NODE_ENV=test PORT=4243 jest --coverage --forceExit", "test:coverage:jest": "NODE_ENV=test PORT=4243 jest --silent --ci --json --coverage --testLocationInResults --outputFile=\"report.json\" --forceExit", diff --git a/scripts/docker-postgres.sh b/scripts/docker-postgres.sh index 1b0b9a6720..5d9ebfc59c 100755 --- a/scripts/docker-postgres.sh +++ b/scripts/docker-postgres.sh @@ -1,31 +1,75 @@ #!/bin/bash +set -e + export POSTGRES_PASSWORD="uleash" -echo "starting postgres in docker " +function getDockerDBPort() { + case "$OSTYPE" in + darwin*) echo `docker ps| grep unleash-post| awk '{print $(NF-1)}'| awk -F "->" '{print $1}'| awk -F \: '{print $4}'`;; + # solaris*) echo "SOLARIS" ;; + # linux*) echo "LINUX" ;; + # bsd*) echo "BSD" ;; + # msys*) echo "WINDOWS" ;; + # cygwin*) echo "ALSO WINDOWS" ;; + *) echo `docker ps| grep unleash-post| awk '{print $(NF-1)}'| awk -F "->" '{print $1}'| awk -F \: '{print $2}'`;; + esac +} -HASH=`docker run -P --name unleash-postgres -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD -d postgres:10` -export PGPORT=`docker ps| grep unleash-post| awk '{print $(NF-1)}'| awk -F "->" '{print $1}'| awk -F \: '{print $2}'` +if docker ps | grep unleash-postgres > /dev/null; then + echo "unleash-postgress is already running" +else + echo "starting postgres in docker " + HASH=`docker run -P --name unleash-postgres -e POSTGRES_PASSWORD=$POSTGRES_PASSWORD -d postgres:10` +fi + +export PGPORT=$(getDockerDBPort) +if [ -z "$PGPORT" ]; then + echo "could not find PGPORT! is postgres running?" + exit 1 +fi echo "PGPORT: $PGPORT" echo "" -# ----------- Wait for postgres to start ----------- + +echo "Waiting for postgres to start..." + +function isPostgresAvailable() { + echo "polling $1:$2" + + case "$OSTYPE" in + darwin*) nc -z $1 $2;; + # solaris*) echo "SOLARIS" ;; + # linux*) echo "LINUX" ;; + # bsd*) echo "BSD" ;; + # msys*) echo "WINDOWS" ;; + # cygwin*) echo "ALSO WINDOWS" ;; + *) netcat -z $1 $2;; + esac +} + if [ -z "$DOCKER_HOST" ] then export database_host="127.0.0.1" else export database_host=$(echo $DOCKER_HOST |awk -F \/ '{print $NF}'| awk -F \: '{print $1}') fi -for i in `seq 1 120`; -do - echo -n "." - sleep 1 - netcat -z $database_host $PGPORT && echo "postgres is up and running in docker in $i seconds!" && break -done - export TEST_DATABASE_URL=postgres://postgres:$POSTGRES_PASSWORD@$database_host:$PGPORT/postgres -yarn +for i in `seq 1 120`; +do + # echo -n "." + sleep 1 + isPostgresAvailable $database_host $PGPORT && echo "postgres is up and running in docker in $i seconds!" && break +done + +echo "running migrations..." DATABASE_URL=$TEST_DATABASE_URL npm run db-migrate -- up + +echo "running tests..." yarn test + +echo "cleanup..." docker stop $HASH docker rm $HASH + +echo "done"