mirror of
https://github.com/esauflores/databases.git
synced 2026-03-09 06:30:34 +00:00
feat: restructure PostgreSQL setup with base variant
This commit is contained in:
52
.github/workflows/test-and-push.yml
vendored
52
.github/workflows/test-and-push.yml
vendored
@@ -9,56 +9,38 @@ jobs:
|
|||||||
test:
|
test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy: &db-matrix
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
matrix:
|
matrix:
|
||||||
db: [postgres]
|
include:
|
||||||
|
- db: postgres
|
||||||
env:
|
variant: base
|
||||||
### Postgres ###
|
|
||||||
POSTGRES_USER: postgres
|
|
||||||
POSTGRES_PASSWORD: postgres
|
|
||||||
POSTGRES_DB: postgres
|
|
||||||
POSTGRES_PORT: 5432
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v4
|
||||||
- uses: jdx/mise-action@v3
|
- uses: jdx/mise-action@v3
|
||||||
|
|
||||||
- name: Test ${{ matrix.db }}
|
- name: Test
|
||||||
run: just test ${{ matrix.db }}
|
run: just test ${{ matrix.db }} ${{ matrix.variant }}
|
||||||
|
|
||||||
- name: Cleanup ${{ matrix.db }}
|
- name: Cleanup
|
||||||
run: just clean ${{ matrix.db }}
|
if: always()
|
||||||
|
run: just down-all ${{ matrix.db }} ${{ matrix.variant }}
|
||||||
|
|
||||||
publish:
|
publish:
|
||||||
needs: test
|
needs: test
|
||||||
if: startsWith(github.ref, 'refs/tags/v')
|
if: startsWith(github.ref, 'refs/tags/v')
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
strategy:
|
strategy: *db-matrix
|
||||||
matrix:
|
|
||||||
db: [postgres]
|
|
||||||
|
|
||||||
env:
|
|
||||||
REGISTRY_URL: ${{ secrets.REGISTRY_URL }}
|
|
||||||
VERSION: ${{ github.ref_name }}
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v6
|
- uses: actions/checkout@v4
|
||||||
- uses: jdx/mise-action@v3
|
- uses: jdx/mise-action@v3
|
||||||
|
|
||||||
- name: Login to registry
|
- name: Push
|
||||||
uses: docker/login-action@v3
|
run: just push ${{ matrix.db }} ${{ matrix.variant }}
|
||||||
with:
|
|
||||||
registry: ${{ env.REGISTRY_URL }}
|
|
||||||
username: ${{ secrets.REGISTRY_USERNAME }}
|
|
||||||
password: ${{ secrets.REGISTRY_PASSWORD }}
|
|
||||||
|
|
||||||
- name: Push ${{ matrix.db }}
|
- name: Cleanup
|
||||||
run: just push ${{ matrix.db }} ${{ env.VERSION }}
|
if: always()
|
||||||
|
run: just down-all ${{ matrix.db }} ${{ matrix.variant }}
|
||||||
- name: Cleanup ${{ matrix.db }}
|
|
||||||
run: |
|
|
||||||
just clean ${{ matrix.db }}
|
|
||||||
just clean-images ${{ matrix.db }}
|
|
||||||
|
|||||||
70
Justfile
70
Justfile
@@ -1,57 +1,56 @@
|
|||||||
set shell := ["bash", "-euo", "pipefail", "-c"]
|
set shell := ["bash", "-euo", "pipefail", "-c"]
|
||||||
set dotenv-load := true
|
set dotenv-load := true
|
||||||
|
|
||||||
VARIANT := env("VARIANT", "postgres")
|
DATABASE := env("DATABASE", "postgres")
|
||||||
REGISTRY_URL := env("REGISTRY_URL", "")
|
VARIANT := env("VARIANT", "base")
|
||||||
VERSION := env("VERSION", "latest")
|
|
||||||
|
|
||||||
_default:
|
_default:
|
||||||
@echo "Default env variables:"
|
@echo "Default env variables:"
|
||||||
|
@echo " DATABASE: {{DATABASE}}"
|
||||||
@echo " VARIANT: {{VARIANT}}"
|
@echo " VARIANT: {{VARIANT}}"
|
||||||
@echo " REGISTRY_URL: {{REGISTRY_URL}}"
|
|
||||||
@echo " VERSION: {{VERSION}}"
|
|
||||||
@just --list
|
@just --list
|
||||||
|
|
||||||
### Container Management ###
|
### Container Management ###
|
||||||
|
|
||||||
# Start the database and wait until it's healthy
|
# Start the database and wait until it's healthy
|
||||||
up db=VARIANT:
|
up db=DATABASE variant=VARIANT:
|
||||||
just build {{db}}
|
just build {{db}} {{variant}}
|
||||||
docker compose -f {{db}}/compose.yml up -d --wait
|
docker compose -f {{db}}-{{variant}}/compose.yml up -d --wait
|
||||||
|
|
||||||
# Stop the database container but preserve data volumes
|
# Stop the database container but preserve data volumes
|
||||||
down db=VARIANT:
|
down db=DATABASE variant=VARIANT:
|
||||||
docker compose -f {{db}}/compose.yml down
|
docker compose -f {{db}}-{{variant}}/compose.yml down
|
||||||
|
|
||||||
# Stop the database container and remove data volumes
|
# Remove containers and data volumes but preserve images
|
||||||
clean db=VARIANT:
|
down-volumes db=DATABASE variant=VARIANT:
|
||||||
docker compose -f {{db}}/compose.yml down -v
|
docker compose -f {{db}}-{{variant}}/compose.yml down -v
|
||||||
|
|
||||||
# Remove the database image from local Docker cache
|
# Remove containers, volumes, and images
|
||||||
clean-images db=VARIANT:
|
down-all db=DATABASE variant=VARIANT:
|
||||||
docker compose -f {{db}}/compose.yml down --rmi local
|
docker compose -f {{db}}-{{variant}}/compose.yml down -v --rmi local
|
||||||
|
|
||||||
### Build & Publish ###
|
### Build & Publish ###
|
||||||
|
|
||||||
# Build image locally
|
# Build image locally
|
||||||
build db=VARIANT:
|
build db=DATABASE variant=VARIANT:
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
IMAGE="db-{{db}}:latest"
|
IMAGE="db-{{db}}"
|
||||||
echo "docker build -f {{db}}/Dockerfile -t ${IMAGE} {{db}}"
|
VERSION="{{variant}}"
|
||||||
docker build -f {{db}}/Dockerfile -t ${IMAGE} {{db}}
|
|
||||||
|
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
|
# Build and push image to registry
|
||||||
push db=VARIANT version=VERSION:
|
push db=DATABASE variant=VARIANT:
|
||||||
#!/usr/bin/env bash
|
#!/usr/bin/env bash
|
||||||
REGISTRY_URL='{{REGISTRY_URL}}'
|
PREFIX="${REGISTRY_URL:+${REGISTRY_URL}/}"
|
||||||
PREFIX=${REGISTRY_URL:+${REGISTRY_URL}/}
|
|
||||||
IMAGE="db-{{db}}"
|
IMAGE="db-{{db}}"
|
||||||
VERSION={{version}}
|
VERSION="{{variant}}"
|
||||||
|
|
||||||
just build {{db}}
|
just build {{db}} {{variant}}
|
||||||
|
|
||||||
echo "docker tag ${IMAGE}:latest ${PREFIX}${IMAGE}:${VERSION}"
|
echo "docker tag ${IMAGE}:${VERSION} ${PREFIX}${IMAGE}:${VERSION}"
|
||||||
docker tag ${IMAGE}:latest ${PREFIX}${IMAGE}:${VERSION}
|
docker tag ${IMAGE}:${VERSION} ${PREFIX}${IMAGE}:${VERSION}
|
||||||
|
|
||||||
echo "docker push ${PREFIX}${IMAGE}:${VERSION}"
|
echo "docker push ${PREFIX}${IMAGE}:${VERSION}"
|
||||||
docker push ${PREFIX}${IMAGE}:${VERSION}
|
docker push ${PREFIX}${IMAGE}:${VERSION}
|
||||||
@@ -59,14 +58,15 @@ push db=VARIANT version=VERSION:
|
|||||||
### Tests ###
|
### Tests ###
|
||||||
|
|
||||||
# Run tests against a database variant
|
# Run tests against a database variant
|
||||||
test db=VARIANT:
|
test db=DATABASE variant=VARIANT:
|
||||||
@case "{{db}}" in \
|
#!/usr/bin/env bash
|
||||||
postgres) just _test-postgres ;; \
|
just up {{db}} {{variant}}
|
||||||
*) echo "Unknown database: {{db}}" >&2; exit 1 ;; \
|
case "{{db}}:{{variant}}" in
|
||||||
|
postgres:base) just _test-postgres base ;;
|
||||||
|
*) echo "Unknown database: {{db}}" >&2; exit 1 ;;
|
||||||
esac
|
esac
|
||||||
|
just down {{db}} {{variant}}
|
||||||
|
|
||||||
# Run tests against a Postgres database
|
# Run tests against a Postgres database
|
||||||
_test-postgres:
|
_test-postgres variant=VARIANT:
|
||||||
#!/usr/bin/env bash
|
docker compose -f postgres-{{variant}}/compose.yml exec postgres pg_isready -U ${POSTGRES_USER:-postgres}
|
||||||
just up postgres
|
|
||||||
docker compose -f postgres/compose.yml exec postgres pg_isready -U ${POSTGRES_USER:-postgres}
|
|
||||||
|
|||||||
Reference in New Issue
Block a user