1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
# Rivet developer shortcuts.
# Requires Rust 1.94+ (see rust-toolchain.toml if present).
:
# PR-fast: offline type-mapping contracts (no docker).
:
# Full type matrix: MySQL + PostgreSQL × Parquet + CSV (docker required).
:
# Property-based value round-trip (OPT-3): random in-range values → MySQL →
# Parquet → read-back, asserting every value survives. Requires `docker compose
# up -d mysql`. Tune case count with PROPTEST_CASES (default 12).
:
# Independent-reader validators: PG/MySQL matrix → Parquet → {DuckDB, ClickHouse}.
# Requires `docker compose up -d postgres mysql duckdb clickhouse` first.
# See ADR-0014; the duckdb + clickhouse services are oracles for the Parquet
# layer, not productive components.
:
# Cloud validator: PG/MySQL matrix → Parquet → BigQuery (real warehouse oracle).
# Requires:
# - `bq` CLI on PATH and authenticated (`gcloud auth application-default login`).
# - BIGQUERY_TEST_PROJECT env var. Optional: BIGQUERY_TEST_DATASET (default
# `rivet_type_lab`), BIGQUERY_TEST_LOCATION (default `EU`).
# - docker-compose postgres + mysql for the source databases.
# Mirrors the docs/recipes/snowflake-load.md fidelity table — pins what
# BigQuery's autoload actually does to rivet Parquet today.
# Example: `BIGQUERY_TEST_PROJECT=my-proj make test-types-bigquery`.
:
# Cloud validator: PG matrix → Parquet → Snowflake (real warehouse oracle).
# The CI guardian for the Snowflake resolver claims in src/types/target.rs —
# asserts INFER_SCHEMA autoload degradations + the recovery casts against a
# live account. Requires:
# - `snow` CLI on PATH (NOT `snowsql`).
# - SNOWFLAKE_TEST_CONNECTION env (the connection name). Optional:
# SNOWFLAKE_TEST_PRIVATE_KEY (absolute .p8 path if the connection's
# private_key_file uses a literal `~`), SNOWFLAKE_TEST_DATABASE / _SCHEMA.
# - docker-compose postgres for the source database.
# Example: `SNOWFLAKE_TEST_CONNECTION=rivet make test-types-snowflake`.
:
# Drop test-fixture tables left behind by INTERRUPTED live runs (a killed test
# process skips the RAII Drop guard, so the slow cloud suites can leak
# `<prefix>_<pid>_<counter>` tables into the shared `rivet` fixture DB). Safe
# anytime — only touches those fixtures, never the init.sql / seed.rs tables.
# Best-effort per engine: a down service is skipped. See dev/sweep-test-cruft.sh.
:
# Full live suite under nextest (per-test isolation), sweeping stale fixtures
# FIRST so an interrupted prior run never pollutes the shared `rivet` DB.
# Requires `docker compose up -d` (postgres + mysql + the validator containers).
: # ── Fixture seed ────────────────────────────────────────────────────────────
# Regenerate the shared live-test dataset (orders/users/events/page_views/
# content_items). The SQL seed tool is gated behind the off-by-default
# `dev-seed` feature (so `cargo install` never ships the destructive TRUNCATE
# tool); RIVET_SEED_I_KNOW=1 confirms the TRUNCATE…CASCADE. Standard size mirrors
# nightly-live.yml — 60k content_items (~1 min) is enough to trigger WAL pressure;
# the 1M-row `max_pressure` test stays manual (override SEED_ARGS to change).
SEED_ARGS ?=
:
# Seed EVERY live database. A per-DB target below runs one engine at a time.
:
: : # NOTE: the seed tool's SQL Server `dbo.orders` (rich benchmark shape: user_id /
# product / price DECIMAL(10,2) / …) DIVERGES from dev/mssql/init.sql's `dbo.orders`
# (simple id / name / amount DECIMAL(12,2) — a decimal-precision test fixture that
# `audit_init_deferred::init_mssql_*` asserts on). CI seeds only Postgres, so its
# MSSQL fixture stays init.sql. Running `seed-mssql` locally therefore overwrites
# that test fixture; re-apply dev/mssql/init.sql (the `dbo.orders` section) if you
# then run the MSSQL init tests. PG/MySQL init.sql agree with the seed tool's rich
# shape, so this only bites MSSQL.
: # Mongo has no shared bench fixture (the live suite self-seeds each collection
# via the Rig), so this seeds a standard `rivet.orders`/`rivet.users` collection
# for demos + manual runs. Idempotent (drops + rebuilds). See dev/mongo/seed.js.
:
# ── Garbage-profile fixture ─────────────────────────────────────────────────
# Materialize the obfuscated GARBAGE profile — the anonymized SHAPE of a real
# 200+-table field DB (heterogeneous PK, dual timestamps, non-default schema,
# sparse spans, scale-0 decimal key, BIGINT UNSIGNED past i64::MAX, a wide table)
# — as persistent tables in a NON-default schema/database `ext`, for manual runs
# + exploration. ZERO source identity, ZERO real data. The automated verification
# of these shapes lives in the offline oracle (src/init/catalog_replay.rs) + the
# live stand (tests/live/chunking_stand.rs), which self-seed; this target is for
# poking at rivet by hand against the profile. Idempotent. The sweep never touches
# `ext.*`, so it persists. See docs/cli-flag-matrix.yaml + dev/garbage/*.sql.
:
:
:
:
: ## Release gate: every engine×version × scenario against local MinIO/fake-gcs/Azurite + a BigQuery golden. Green everywhere ⇒ releasable.