| 1 |
# val |
| 2 |
|
| 3 |
Five attackers with the spike, five defenders, and abilities on cooldown. First to 13. |
| 4 |
|
| 5 |
This is an app: the forge runs it. Production follows the default branch; |
| 6 |
every open pull gets a preview at its own address with its own copy of the |
| 7 |
data. Everything the app keeps lives under `FORGE_APP_DATA`, which is what |
| 8 |
makes "production data" and "preview data" two different things. |
| 9 |
|
| 10 |
```sh |
| 11 |
PORT=8080 FORGE_APP_DATA=./data bun run src/server.ts |
| 12 |
bun test |
| 13 |
FORGE_APP_DATA=./data bun run src/tty.ts |
| 14 |
``` |
| 15 |
|
| 16 |
It also has a terminal: the exact command is in `FORGE_APP_SSH` when the app |
| 17 |
runs (`ssh -p 2222 <name>@<forge>` — the app is the login name, the forge is |
| 18 |
the host; `<name>--<pull>@<forge>` for a preview's). It opens `src/tty.ts` on |
| 19 |
a real pty over the same data. |
| 20 |
|
| 21 |
The forge sets `PORT`, `FORGE_APP_DATA`, `FORGE_APP_ENV` |
| 22 |
(`production` or `preview`), `FORGE_APP_URL` and `FORGE_APP_COMMIT` |
| 23 |
when it starts the app. `forge.json` says how. |