Improve scripts

This commit is contained in:
Paul Brinkmeier 2025-09-19 08:55:56 +02:00
parent 78d317c7bd
commit 22867bc229
3 changed files with 15 additions and 4 deletions

View File

@ -12,7 +12,7 @@ The rest of this section assumes you're in the dev shell.
### Running Postgres
`scripts/with-db $COMMAND` will create a Postgres cluster in a temporary directory with the credentials `user=yore-test dbname=yore-test port=5433`, start the Postgres server, run `$COMMAND` and then stop the Postgres erver.
`scripts/with-db $COMMAND` will create a Postgres cluster in a temporary directory with the credentials `user=yore-test dbname=yore-test port=5433`, start the Postgres server, apply migrations using `dbmate`, run `$COMMAND` and then stop the Postgres server.
On Linux, you need to have write permissions vor `/var/run/postgresql` to run it.
You can use this to run the tests in an entirely fresh database, e.g.:
@ -24,6 +24,8 @@ You can also use it to run a database for development by choosing a `$COMMAND` t
```
BASE_DIR=./pgdata scripts/with-db psql "dbname=yore-test port=5433 user=yore-test"
# cabal repl with env vars set
BASE_DIR=./pgdata scripts/with-db scripts/dev
```
By setting `$BASE_DIR` you can persist the database for later runs.

3
scripts/dev Executable file
View File

@ -0,0 +1,3 @@
#!/usr/bin/env bash
YORE_DB="host=localhost port=${DB_PORT} user=${DB_USER} dbname=${DB_DBNAME}" cabal repl exe:yore

View File

@ -5,19 +5,25 @@ if [ -z "$BASE_DIR" ]; then
fi
export PGDATA="$BASE_DIR/pgdata"
export DB_USER=yore-test
export DB_DBNAME=yore-test
export DB_PORT=5433
# On error or exit: Stop the DB server
stop_db_server() {
pg_ctl stop -o "-p 5433" --wait
pg_ctl stop -o "-p ${DB_PORT}" --wait
}
trap stop_db_server EXIT
if [ ! -s "$PGDATA/PG_VERSION" ]; then
initdb --username=yore-test --auth=trust || true
initdb --username="${DB_USER}" --auth=trust || true
DO_CREATE_DB=1
fi
pg_ctl start -o "-p 5433" --wait
if [ -n "$DO_CREATE_DB" ]; then
createdb -p 5433 yore-test --username=yore-test || true
createdb -p "${DB_PORT}" "${DB_DBNAME}" --username="${DB_USER}" || true
fi
DATABASE_URL="postgres://${DB_USER}@localhost:${DB_PORT}/${DB_DBNAME}?sslmode=disable" dbmate up
"$@"