chore: bootstrap independent git workflow
Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
126
SMOKE_RUNBOOK.md
Normal file
126
SMOKE_RUNBOOK.md
Normal file
@@ -0,0 +1,126 @@
|
||||
# dbtool-cli-v1 Smoke Runbook
|
||||
|
||||
## Purpose
|
||||
|
||||
This runbook defines the smallest repeatable cross-database validation path for `connect`, `inspect`, `query`, and `export`.
|
||||
|
||||
## Current Status
|
||||
|
||||
- Demo databases and query fixtures are prepared.
|
||||
- A repeatable Docker path exists for PostgreSQL and MySQL.
|
||||
- 推荐执行环境已明确为“宿主机执行 + Docker Compose 临时数据库”,详见 `QA_RUNTIME_ENVIRONMENT.md`。
|
||||
- SQLite bootstrap exists for local execution.
|
||||
- PostgreSQL `connect`, `inspect`, and `query` are now implemented in the Rust CLI.
|
||||
- MySQL `connect`, `inspect`, and `query` are now implemented in the Rust CLI.
|
||||
- SQLite `connect`, `inspect`, and `query` are now implemented in the Rust CLI.
|
||||
- `export` to CSV / JSON is now implemented in the Rust CLI.
|
||||
- Release artifact smoke is now defined separately in `RELEASE_RUNBOOK.md`.
|
||||
- This runbook remains partially staged only because PostgreSQL / MySQL runtime smoke still requires a Docker-capable environment.
|
||||
|
||||
## Preconditions
|
||||
|
||||
- Docker with `docker compose`
|
||||
- one of `sqlite3`, `node`, or `python3` for SQLite bootstrap
|
||||
- compiled CLI binary from the Rust workspace baseline
|
||||
|
||||
## Bootstrap
|
||||
|
||||
### 1. Start PostgreSQL and MySQL
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.demo.yml up -d postgres mysql
|
||||
```
|
||||
|
||||
### 2. Seed PostgreSQL
|
||||
|
||||
```bash
|
||||
./examples/scripts/bootstrap-postgres.sh
|
||||
```
|
||||
|
||||
Expected result:
|
||||
|
||||
- database: `dbtool_demo`
|
||||
- schema: `qa_demo`
|
||||
- tables: `accounts`, `tickets`
|
||||
|
||||
### 3. Seed MySQL
|
||||
|
||||
```bash
|
||||
./examples/scripts/bootstrap-mysql.sh
|
||||
```
|
||||
|
||||
Expected result:
|
||||
|
||||
- database: `qa_demo`
|
||||
- tables: `accounts`, `tickets`
|
||||
- user `dbtool` retains privileges on `qa_demo`
|
||||
|
||||
### 4. Seed SQLite
|
||||
|
||||
```bash
|
||||
./examples/scripts/bootstrap-sqlite.sh
|
||||
```
|
||||
|
||||
Expected result:
|
||||
|
||||
- file: `examples/tmp/dbtool-demo.sqlite`
|
||||
- tables: `accounts`, `tickets`
|
||||
|
||||
## Smoke Inputs
|
||||
|
||||
### PostgreSQL
|
||||
|
||||
- connect target: host `127.0.0.1`, port `55432`, database `dbtool_demo`, user `dbtool`
|
||||
- inspect scope: schema `qa_demo`
|
||||
- happy query: `examples/sql/postgres/happy_path_query.sql`
|
||||
- export query: `examples/sql/postgres/export_query.sql`
|
||||
- failure query: `examples/sql/postgres/failing_query.sql`
|
||||
|
||||
### MySQL
|
||||
|
||||
- connect target: host `127.0.0.1`, port `53306`, database `qa_demo`, user `dbtool`
|
||||
- inspect scope: database `qa_demo`
|
||||
- happy query: `examples/sql/mysql/happy_path_query.sql`
|
||||
- export query: `examples/sql/mysql/export_query.sql`
|
||||
- failure query: `examples/sql/mysql/failing_query.sql`
|
||||
|
||||
### SQLite
|
||||
|
||||
- connect target: `examples/tmp/dbtool-demo.sqlite`
|
||||
- inspect scope: schema `main`
|
||||
- happy query: `examples/sql/sqlite/happy_path_query.sql`
|
||||
- export query: `examples/sql/sqlite/export_query.sql`
|
||||
- failure query: `examples/sql/sqlite/failing_query.sql`
|
||||
|
||||
## Required Assertions
|
||||
|
||||
Use `examples/fixtures/EXPECTED_RESULTS.md` as the shared oracle.
|
||||
|
||||
- `connect` succeeds for each valid target
|
||||
- `inspect` reveals `accounts` and `tickets`
|
||||
- `query` returns `3` account rows in the happy-path query
|
||||
- `export` returns `4` ticket rows in deterministic order
|
||||
- failure query exits non-zero and identifies a missing object
|
||||
- secrets do not appear in terminal errors
|
||||
|
||||
## Failure Paths To Capture
|
||||
|
||||
- PostgreSQL wrong password
|
||||
- PostgreSQL unreachable port
|
||||
- MySQL wrong password
|
||||
- SQLite missing file
|
||||
- invalid SQL from `failing_query.sql`
|
||||
- export path collision once the CLI contract exists
|
||||
|
||||
## Cleanup
|
||||
|
||||
```bash
|
||||
docker compose -f docker-compose.demo.yml down -v
|
||||
rm -f examples/tmp/dbtool-demo.sqlite
|
||||
```
|
||||
|
||||
## Blocker
|
||||
|
||||
This runbook cannot be marked passed until engineering lands:
|
||||
|
||||
- full runtime smoke on a Docker-capable host as described in `QA_RUNTIME_ENVIRONMENT.md`
|
||||
Reference in New Issue
Block a user