Files
databases/Justfile

73 lines
2.0 KiB
Makefile

set shell := ["bash", "-euo", "pipefail", "-c"]
set dotenv-load := true
VARIANT := env("VARIANT", "postgres")
REGISTRY_URL := env("REGISTRY_URL", "")
VERSION := env("VERSION", "latest")
_default:
@echo "Default env variables:"
@echo " VARIANT: {{VARIANT}}"
@echo " REGISTRY_URL: {{REGISTRY_URL}}"
@echo " VERSION: {{VERSION}}"
@just --list
### Container Management ###
# Start the database and wait until it's healthy
up db=VARIANT:
just build {{db}}
docker compose -f {{db}}/compose.yml up -d --wait
# Stop the database container but preserve data volumes
down db=VARIANT:
docker compose -f {{db}}/compose.yml down
# Stop the database container and remove data volumes
clean db=VARIANT:
docker compose -f {{db}}/compose.yml down -v
# Remove the database image from local Docker cache
clean-images db=VARIANT:
docker compose -f {{db}}/compose.yml down --rmi local
### Build & Publish ###
# Build image locally
build db=VARIANT:
#!/usr/bin/env bash
IMAGE="database-{{db}}:latest"
echo "docker build -f {{db}}/Dockerfile -t ${IMAGE} {{db}}"
docker build -f {{db}}/Dockerfile -t ${IMAGE} {{db}}
# Build and push image to registry
push db=VARIANT version=VERSION:
#!/usr/bin/env bash
REGISTRY_URL='{{REGISTRY_URL}}'
PREFIX=${REGISTRY_URL:+${REGISTRY_URL}/}
IMAGE="database-{{db}}"
VERSION={{version}}
just build {{db}}
echo "docker tag ${IMAGE}:latest ${PREFIX}${IMAGE}:${VERSION}"
docker tag ${IMAGE}:latest ${PREFIX}${IMAGE}:${VERSION}
echo "docker push ${PREFIX}${IMAGE}:${VERSION}"
docker push ${PREFIX}${IMAGE}:${VERSION}
### Tests ###
# Run tests against a database variant
test db=VARIANT:
@case "{{db}}" in \
postgres) just _test-postgres ;; \
*) echo "Unknown database: {{db}}" >&2; exit 1 ;; \
esac
# Run tests against a Postgres database
_test-postgres:
#!/usr/bin/env bash
just up postgres
docker compose -f postgres/compose.yml exec postgres pg_isready -U ${POSTGRES_USER:-postgres}