| .. | .. |
|---|
| 28 | 28 | to_env: str, |
|---|
| 29 | 29 | db_only: bool, |
|---|
| 30 | 30 | uploads_only: bool, |
|---|
| 31 | + dry_run: bool = False, |
|---|
| 31 | 32 | ) -> AsyncGenerator[str, None]: |
|---|
| 32 | 33 | """Stream sync output via SSE.""" |
|---|
| 33 | | - args = ["sync", project, "--from", from_env, "--to", to_env, "--yes"] |
|---|
| 34 | + args = ["sync", project, "--from", from_env, "--to", to_env] |
|---|
| 34 | 35 | if db_only: |
|---|
| 35 | 36 | args.append("--db-only") |
|---|
| 36 | 37 | if uploads_only: |
|---|
| 37 | 38 | args.append("--uploads-only") |
|---|
| 39 | + if dry_run: |
|---|
| 40 | + args.append("--dry-run") |
|---|
| 38 | 41 | |
|---|
| 39 | 42 | mode = "db-only" if db_only else ("uploads-only" if uploads_only else "full") |
|---|
| 40 | 43 | yield _sse_line({ |
|---|
| .. | .. |
|---|
| 58 | 61 | to_env: str = Query(default="int", alias="to"), |
|---|
| 59 | 62 | db_only: bool = Query(default=False), |
|---|
| 60 | 63 | uploads_only: bool = Query(default=False), |
|---|
| 64 | + dry_run: bool = Query(default=False), |
|---|
| 61 | 65 | _: str = Depends(verify_token), |
|---|
| 62 | 66 | ) -> StreamingResponse: |
|---|
| 63 | 67 | """Sync data backward (prod->int, int->dev) with SSE streaming.""" |
|---|
| .. | .. |
|---|
| 67 | 71 | detail=f"Invalid sync path '{from_env} -> {to_env}'. Only adjacent pairs are allowed: prod->int, int->dev.", |
|---|
| 68 | 72 | ) |
|---|
| 69 | 73 | return StreamingResponse( |
|---|
| 70 | | - _sync_generator(project, from_env, to_env, db_only, uploads_only), |
|---|
| 74 | + _sync_generator(project, from_env, to_env, db_only, uploads_only, dry_run), |
|---|
| 71 | 75 | media_type="text/event-stream", |
|---|
| 72 | 76 | headers={ |
|---|
| 73 | 77 | "Cache-Control": "no-cache", |
|---|