feat: restructure PostgreSQL setup with base variant

This commit is contained in:
2026-03-08 18:11:18 +07:00
parent a3610d6756
commit d490100860
6 changed files with 52 additions and 70 deletions

View File

@@ -9,56 +9,38 @@ jobs:
test:
runs-on: ubuntu-latest
strategy:
strategy: &db-matrix
fail-fast: false
matrix:
db: [postgres]
env:
### Postgres ###
POSTGRES_USER: postgres
POSTGRES_PASSWORD: postgres
POSTGRES_DB: postgres
POSTGRES_PORT: 5432
include:
- db: postgres
variant: base
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: jdx/mise-action@v3
- name: Test ${{ matrix.db }}
run: just test ${{ matrix.db }}
- name: Test
run: just test ${{ matrix.db }} ${{ matrix.variant }}
- name: Cleanup ${{ matrix.db }}
run: just clean ${{ matrix.db }}
- name: Cleanup
if: always()
run: just down-all ${{ matrix.db }} ${{ matrix.variant }}
publish:
needs: test
if: startsWith(github.ref, 'refs/tags/v')
runs-on: ubuntu-latest
strategy:
matrix:
db: [postgres]
env:
REGISTRY_URL: ${{ secrets.REGISTRY_URL }}
VERSION: ${{ github.ref_name }}
strategy: *db-matrix
steps:
- uses: actions/checkout@v6
- uses: actions/checkout@v4
- uses: jdx/mise-action@v3
- name: Login to registry
uses: docker/login-action@v3
with:
registry: ${{ env.REGISTRY_URL }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
- name: Push
run: just push ${{ matrix.db }} ${{ matrix.variant }}
- name: Push ${{ matrix.db }}
run: just push ${{ matrix.db }} ${{ env.VERSION }}
- name: Cleanup ${{ matrix.db }}
run: |
just clean ${{ matrix.db }}
just clean-images ${{ matrix.db }}
- name: Cleanup
if: always()
run: just down-all ${{ matrix.db }} ${{ matrix.variant }}

View File

@@ -1,57 +1,56 @@
set shell := ["bash", "-euo", "pipefail", "-c"]
set dotenv-load := true
VARIANT := env("VARIANT", "postgres")
REGISTRY_URL := env("REGISTRY_URL", "")
VERSION := env("VERSION", "latest")
DATABASE := env("DATABASE", "postgres")
VARIANT := env("VARIANT", "base")
_default:
@echo "Default env variables:"
@echo " DATABASE: {{DATABASE}}"
@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
up db=DATABASE variant=VARIANT:
just build {{db}} {{variant}}
docker compose -f {{db}}-{{variant}}/compose.yml up -d --wait
# Stop the database container but preserve data volumes
down db=VARIANT:
docker compose -f {{db}}/compose.yml down
down db=DATABASE variant=VARIANT:
docker compose -f {{db}}-{{variant}}/compose.yml down
# Stop the database container and remove data volumes
clean db=VARIANT:
docker compose -f {{db}}/compose.yml down -v
# Remove containers and data volumes but preserve images
down-volumes db=DATABASE variant=VARIANT:
docker compose -f {{db}}-{{variant}}/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
# Remove containers, volumes, and images
down-all db=DATABASE variant=VARIANT:
docker compose -f {{db}}-{{variant}}/compose.yml down -v --rmi local
### Build & Publish ###
# Build image locally
build db=VARIANT:
build db=DATABASE variant=VARIANT:
#!/usr/bin/env bash
IMAGE="db-{{db}}:latest"
echo "docker build -f {{db}}/Dockerfile -t ${IMAGE} {{db}}"
docker build -f {{db}}/Dockerfile -t ${IMAGE} {{db}}
IMAGE="db-{{db}}"
VERSION="{{variant}}"
echo "docker build -f {{db}}-{{variant}}/Dockerfile -t ${IMAGE}:${VERSION} {{db}}-{{variant}}"
docker build -f {{db}}-{{variant}}/Dockerfile -t ${IMAGE}:${VERSION} {{db}}-{{variant}}
# Build and push image to registry
push db=VARIANT version=VERSION:
push db=DATABASE variant=VARIANT:
#!/usr/bin/env bash
REGISTRY_URL='{{REGISTRY_URL}}'
PREFIX=${REGISTRY_URL:+${REGISTRY_URL}/}
PREFIX="${REGISTRY_URL:+${REGISTRY_URL}/}"
IMAGE="db-{{db}}"
VERSION={{version}}
VERSION="{{variant}}"
just build {{db}}
just build {{db}} {{variant}}
echo "docker tag ${IMAGE}:latest ${PREFIX}${IMAGE}:${VERSION}"
docker tag ${IMAGE}:latest ${PREFIX}${IMAGE}:${VERSION}
echo "docker tag ${IMAGE}:${VERSION} ${PREFIX}${IMAGE}:${VERSION}"
docker tag ${IMAGE}:${VERSION} ${PREFIX}${IMAGE}:${VERSION}
echo "docker push ${PREFIX}${IMAGE}:${VERSION}"
docker push ${PREFIX}${IMAGE}:${VERSION}
@@ -59,14 +58,15 @@ push db=VARIANT version=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 ;; \
test db=DATABASE variant=VARIANT:
#!/usr/bin/env bash
just up {{db}} {{variant}}
case "{{db}}:{{variant}}" in
postgres:base) just _test-postgres base ;;
*) echo "Unknown database: {{db}}" >&2; exit 1 ;;
esac
just down {{db}} {{variant}}
# 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}
_test-postgres variant=VARIANT:
docker compose -f postgres-{{variant}}/compose.yml exec postgres pg_isready -U ${POSTGRES_USER:-postgres}