Add script for running test with Postgres

This commit is contained in:
Paul Brinkmeier 2023-09-02 16:09:19 +02:00
parent 4dd23d561e
commit f55e7fd06f

39
with-db.sh Executable file
View File

@ -0,0 +1,39 @@
#!/usr/bin/env bash
# * Run a postgres server at localhost:${DB_PORT}
# * Wait for it to be up and running
# * Run the passed arguments as a command
# * Kill the postgres server
#
# Example usage: ./with-db.sh cabal test
#
# The application running in this context can use
# the DB_* variables to connect to postgres.
export DB_USER=opium
export DB_PASS=opium
export DB_NAME=opium
export DB_PORT=5442
# On error or exit: Kill the postgres container
function kill_db_container {
docker kill "${CONTAINER_ID}" > /dev/null
}
trap kill_db_container EXIT
CONTAINER_ID=$(docker run --rm \
-e "POSTGRES_USER=${DB_USER}" \
-e "POSTGRES_PASSWORD=${DB_PASS}" \
-e "POSTGRES_DB=${DB_NAME}" \
-p "127.0.0.1:${DB_PORT}:5432" \
--health-cmd pg_isready \
--health-interval 0.25s \
--detach \
postgres:14-alpine)
# Setting --health-cmd above allows us to wait for postgres to be up
until [[ "$(docker inspect -f "{{.State.Health.Status}}" "${CONTAINER_ID}" || true)" = healthy ]]
do
sleep 0.1
done
"$@"