Root cause: The R2 bucket 'acb-data' is empty - no replay files were ever uploaded. The matches/index.json lists test matches, but the corresponding replay files return 404 when accessed via the Pages Function at /r2/. Fix: Add tooling to generate test replays matching index.json entries and upload them to R2. The viewer already has proper error handling (response.ok check + user-visible error messages in replay.ts:1397-1402). Changes: - scripts/generate-test-replays.sh: Generate all 8 test replays from index.json with correct match IDs, gzip them, place in test-replays/ - scripts/upload-test-replays.sh: Upload generated replays to R2 via wrangler - scripts/README.md: Document the R2 setup and replay upload workflow - .gitignore: Add test-replays/ (generated files, not committed) Usage: 1. bash scripts/generate-test-replays.sh 2. npm install -g wrangler && wrangler login 3. bash scripts/upload-test-replays.sh Verified: Generated replays have correct match_id, format_version="1.0", and valid JSON structure. The viewer error path handles 404 correctly. Closes: bf-360t
76 lines
2 KiB
Markdown
76 lines
2 KiB
Markdown
# Scripts
|
|
|
|
This directory contains utility scripts for the AI Code Battle project.
|
|
|
|
## Test Replay Management
|
|
|
|
### Problem
|
|
|
|
The web viewer at `/watch/replay` loads replays from the R2 bucket (`acb-data`) via the Pages Function at `web/functions/r2/[[path]].ts`. The `matches/index.json` file lists test matches, but the corresponding replay files were never uploaded to R2, causing 404 errors.
|
|
|
|
### Solution
|
|
|
|
Two scripts are provided to generate and upload test replays:
|
|
|
|
#### 1. `generate-test-replays.sh`
|
|
|
|
Generates all test replays that match the entries in `web/public/data/matches/index.json`:
|
|
|
|
```bash
|
|
bash scripts/generate-test-replays.sh
|
|
```
|
|
|
|
This creates `test-replays/*.json.gz` files with proper match IDs.
|
|
|
|
#### 2. `upload-test-replays.sh`
|
|
|
|
Uploads the generated replays to the R2 bucket:
|
|
|
|
```bash
|
|
# Install wrangler first (one-time)
|
|
npm install -g wrangler
|
|
wrangler login
|
|
|
|
# Upload the replays
|
|
bash scripts/upload-test-replays.sh
|
|
```
|
|
|
|
### Verification
|
|
|
|
After uploading, verify the replays are accessible:
|
|
|
|
```bash
|
|
curl -I https://r2.aicodebattle.com/replays/m_test_upset_v1.json.gz
|
|
```
|
|
|
|
Or test directly in the viewer:
|
|
https://ai-code-battle.pages.dev/#/watch/replay?url=/r2/replays/m_test_upset_v1.json.gz
|
|
|
|
### R2 Bucket Configuration
|
|
|
|
- **Bucket Name**: `acb-data`
|
|
- **Binding**: `ACB_BUCKET` (configured in `web/wrangler.toml`)
|
|
- **Custom Domain**: `r2.aicodebattle.com`
|
|
- **Public URL**: `https://r2.aicodebattle.com/`
|
|
|
|
### Expected R2 Layout
|
|
|
|
```
|
|
acb-data/
|
|
├── replays/ # Match replay JSON files (gzipped)
|
|
│ ├── m_test_upset_v1.json.gz
|
|
│ ├── m_test_6p_v1.json.gz
|
|
│ └── ...
|
|
├── matches/ # Per-match metadata
|
|
├── thumbnails/ # Match thumbnails
|
|
├── cards/ # Bot profile cards
|
|
└── evolution/ # Evolution live feed
|
|
```
|
|
|
|
### Error Handling
|
|
|
|
The replay viewer (`web/src/pages/replay.ts`) already has proper error handling:
|
|
- Checks `response.ok` before parsing JSON
|
|
- Displays user-visible error messages via `showLoadError()`
|
|
|
|
No additional error handling code is needed.
|