Skip to content

CI Validation

Integrate sql-splitter validation into your CI/CD pipeline.

#!/bin/bash
set -euo pipefail
sql-splitter validate "dumps/*.sql" --strict --fail-fast --progress

Exit codes:

  • 0: All dumps valid
  • 1: Validation errors or warnings (with --strict)
.github/workflows/validate-dumps.yml
name: Validate SQL Dumps
on:
push:
paths:
- "dumps/**/*.sql"
pull_request:
paths:
- "dumps/**/*.sql"
jobs:
validate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Install sql-splitter
run: cargo install sql-splitter
- name: Validate dumps
run: |
sql-splitter validate "dumps/**/*.sql" \
--strict \
--fail-fast \
--json > validation-results.json
- name: Upload results
if: always()
uses: actions/upload-artifact@v4
with:
name: validation-results
path: validation-results.json
.gitlab-ci.yml
validate-dumps:
stage: test
image: rust:latest
before_script:
- cargo install sql-splitter
script:
- sql-splitter validate "dumps/**/*.sql" --strict --fail-fast
rules:
- changes:
- dumps/**/*.sql
Terminal window
sql-splitter validate "dumps/*.sql" --json | jq '.results[] | select(.passed == false)'

Example output:

{
"file": "dumps/broken.sql",
"passed": false,
"errors": [
{
"type": "syntax_error",
"line": 42,
"message": "Unexpected token near 'CREAT'"
}
],
"warnings": []
}

For many dump files:

Terminal window
find dumps -name '*.sql.gz' -print0 | \
xargs -0 -n1 -P4 sql-splitter validate --strict
.git/hooks/pre-commit
#!/bin/bash
# Find staged SQL files
staged_sql=$(git diff --cached --name-only --diff-filter=ACM | grep '\.sql$' || true)
if [ -n "$staged_sql" ]; then
echo "Validating SQL files..."
echo "$staged_sql" | xargs sql-splitter validate --strict
fi
FROM rust:latest as builder
RUN cargo install sql-splitter
FROM debian:bookworm-slim
COPY --from=builder /usr/local/cargo/bin/sql-splitter /usr/local/bin/
ENTRYPOINT ["sql-splitter"]
Terminal window
docker build -t sql-splitter .
docker run -v $(pwd):/data sql-splitter validate /data/dump.sql --strict
  1. Use --strict - Treat warnings as errors
  2. Use --fail-fast - Stop on first error for faster feedback
  3. Use --json - Machine-readable output for reporting
  4. Run on PRs - Catch issues before merge
  5. Cache the binary - Speed up CI runs