CI Validation
Integrate sql-splitter validation into your CI/CD pipeline.
Basic CI Gate
Section titled “Basic CI Gate”#!/bin/bashset -euo pipefail
sql-splitter validate "dumps/*.sql" --strict --fail-fast --progressExit codes:
0: All dumps valid1: Validation errors or warnings (with--strict)
GitHub Actions
Section titled “GitHub Actions”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.jsonGitLab CI
Section titled “GitLab CI”validate-dumps: stage: test image: rust:slim before_script: - cargo install sql-splitter script: - sql-splitter validate "dumps/**/*.sql" --strict --fail-fast rules: - changes: - dumps/**/*.sqlJSON Output for Reporting
Section titled “JSON Output for Reporting”sql-splitter validate "dumps/*.sql" --json | jq '.results[] | select(.passed == false)'Example output:
{ "file": "dumps/broken.sql", "passed": false, "size_mb": 12.4, "summary": { "dialect": "mysql", "issues": [ { "code": "DDL_MISSING_TABLE", "severity": "error", "message": "INSERT/COPY references table 'users' with no CREATE TABLE", "location": { "table": "users", "statement_index": 1 } } ], "summary": { "errors": 1, "warnings": 0, "info": 0 }, "checks": { "syntax": "ok", "ddl_dml_consistency": { "failed": 1 } } }}Parallel Validation
Section titled “Parallel Validation”For many dump files:
find dumps -name '*.sql.gz' -print0 | \ xargs -0 -n1 -P4 sql-splitter validate --strictPre-commit Hook
Section titled “Pre-commit Hook”#!/bin/bash# Find staged SQL filesstaged_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 -n1 sql-splitter validate --strictfiValidation in Docker
Section titled “Validation in Docker”FROM rust:slim AS builderRUN cargo install sql-splitter
FROM debian:bookworm-slimCOPY --from=builder /usr/local/cargo/bin/sql-splitter /usr/local/bin/ENTRYPOINT ["sql-splitter"]docker build -t sql-splitter .docker run -v $(pwd):/data sql-splitter validate /data/dump.sql --strictBest Practices
Section titled “Best Practices”- Use
--strict- Treat warnings as errors - Use
--fail-fast- Stop on first error for faster feedback - Use
--json- Machine-readable output for reporting - Run on PRs - Catch issues before merge
- Cache the binary - Speed up CI runs