forked from heavy-duty/rig
The db PR only unit-tested arg parsing; this adds executable proof that dump/restore actually works end to end. - test/db-integration.sh: stands up two throwaway Postgres containers whose superusers DIFFER by construction (src_super vs dst_super), seeds a known checksummable fixture, runs the real `rig db dump`/`rig db restore`, and reads the rows back out — proving both invariants db.sh cares about: the code reads the container's OWN $POSTGRES_USER/$POSTGRES_DB (a hardcoded `postgres` would break on the non-default source superuser), and --no-owner --no-acl makes the dump portable across differing superusers (a plain dump would abort under ON_ERROR_STOP=1 on the missing role). Also asserts default-outfile naming, restore idempotency (--clean --if-exists), and the named-[db] scratch-database path. Skips cleanly (exit 0) when Docker is absent/unreachable or root is unobtainable; always cleans up via trap. - ci.yml: separate `db-integration` job on ubuntu-latest (Docker preinstalled), kept apart from the fast shellcheck+cli.sh `check` job so an image pull can't slow lint feedback. - README: "Verifying a dump/restore actually works" — the safe manual round-trip against a real Coolify container via a fresh scratch db, echoing "a backup you have never read back is not yet a backup." Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
35 lines
1.3 KiB
YAML
35 lines
1.3 KiB
YAML
name: ci
|
|
on:
|
|
push:
|
|
branches: [main]
|
|
pull_request:
|
|
jobs:
|
|
check:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: shellcheck
|
|
# -x follows the `source=SCRIPTDIR/...` directives into commands/lib/.
|
|
# globstar so a script in a new subdirectory is linted without anyone
|
|
# remembering to edit this list; bin/* covers the extensionless entrypoints.
|
|
# The file list is printed so under-coverage shows up in the log.
|
|
run: |
|
|
shopt -s globstar
|
|
files=(bin/* **/*.sh)
|
|
printf 'shellcheck: %s\n' "${files[@]}"
|
|
shellcheck -x "${files[@]}"
|
|
- name: cli tests
|
|
run: bash test/cli.sh
|
|
|
|
# Kept SEPARATE from `check` on purpose: this job pulls a Postgres image and
|
|
# stands up throwaway containers, and a slow image pull must never delay the
|
|
# fast shellcheck + cli.sh feedback above. ubuntu-latest ships Docker running
|
|
# and passwordless sudo, so test/db-integration.sh EXECUTES here (it only
|
|
# skips where Docker is absent). It is the automated proof that dump/restore
|
|
# actually round-trips, not just that the args parse.
|
|
db-integration:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
- name: db dump/restore round-trip
|
|
run: bash test/db-integration.sh
|