Documentation Index
Fetch the complete documentation index at: https://docs.ellomas.com/llms.txt
Use this file to discover all available pages before exploring further.
CI/CD Integration
Replay is designed to run in CI/CD pipelines. It has zero runtime dependencies (for HTTP-only workflows) and produces exit codes that integrate naturally with CI systems.
GitHub Actions
Basic E2E Test
name: E2E Tests
on: [push, pull_request]
jobs:
e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Set up Go
uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Install Replay
run: go install github.com/replay/replay@latest
- name: Run E2E workflows
run: replay run tests/e2e/*.yaml --concurrency 4 --fail-fast
With PostgreSQL and Redis
jobs:
e2e-with-db:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15-alpine
env:
POSTGRES_PASSWORD: password
options: >-
--health-cmd pg_isready
--health-interval 5s
redis:
image: redis:7-alpine
options: >-
--health-cmd "redis-cli ping"
--health-interval 5s
steps:
- uses: actions/checkout@v4
- uses: actions/setup-go@v5
with:
go-version: "1.25"
- name: Install Replay
run: go install github.com/replay/replay@latest
- name: Run workflows
run: replay run tests/db/*.yaml --concurrency 2 --fail-fast
env:
POSTGRES_DSN: postgres://postgres:password@postgres:5432/postgres
REDIS_ADDR: redis:6379
GitLab CI
e2e-tests:
image: golang:1.25-alpine
services:
- postgres:15-alpine
- redis:7-alpine
variables:
POSTGRES_PASSWORD: password
POSTGRES_DB: testdb
REDIS_ADDR: redis:6379
script:
- go install github.com/replay/replay@latest
- replay run tests/*.yaml --concurrency 4 --fail-fast
Post-Deployment Smoke Tests
Run smoke tests after deploying to staging or production:
deploy:
stage: deploy
script:
- ./deploy.sh
only:
- main
smoke-test:
stage: verification
script:
- go install github.com/replay/replay@latest
- replay run smoke.yaml --profile ${CI_ENVIRONMENT_NAME}
environment:
name: staging
needs: [deploy]
Docker in CI
jobs:
docker-e2e:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: Run Replay via Docker
run: |
docker run --rm \
-v $(pwd):/app \
ghcr.io/replay/replay:latest \
run /app/workflows/*.yaml --concurrency 4
Integration with Seedling
Replay and Seedling work together to create reproducible, data-backed E2E tests.
Seed DB with Seedling, Test with Replay
Use Seedling to populate a database with deterministic test data (pass --seed for repeatability), then run Replay workflows against it:
jobs:
seedling-replay-e2e:
runs-on: ubuntu-latest
services:
postgres:
image: postgres:15-alpine
env:
POSTGRES_PASSWORD: password
options: >-
--health-cmd pg_isready
--health-interval 5s
steps:
- uses: actions/checkout@v4
- name: Install Seedling
run: go install github.com/tomiwa-a/seedling@latest
- name: Seed test data
run: |
seedling generate \
--count 1000 \
--seed 42 \
--dsn "postgres://postgres:password@postgres:5432/postgres"
- name: Install Replay
run: go install github.com/replay/replay@latest
- name: Run E2E workflows
run: replay run tests/e2e/*.yaml --concurrency 4 --fail-fast
env:
POSTGRES_DSN: postgres://postgres:password@postgres:5432/postgres
Using the same --seed 42 in every run guarantees identical data sets, which means your Replay assertions stay stable across CI runs.
Local Dev Loop
seedling generate --count 500 --seed 42 --dsn "$DSN" && replay run test.yaml
Pair this with replay run --watch during development for instant feedback on schema changes.
Exit Codes
Replay exits with:
0 — All workflows passed
1 — One or more workflows failed (or validation error)
This means standard CI failure handling works without special configuration.
Best Practices for CI
- Use
--concurrency 4 to speed up multi-workflow runs
- Use
--fail-fast to stop on first failure, saving pipeline time
- Use
--profile to switch between environment configs
- Pin a specific Replay version in CI (
@latest or a specific tag)
- Place workflows in a
tests/ or e2e/ directory for organisation
- Use deterministic seeds and data to avoid flaky tests
What’s Next?