2.5 KiB
2.5 KiB
Rev Webhooks for Toes
Deploy Toes apps by saving to rev.host — no manual deploy step, no rsync scripts.
How It Works
rev save "fix combat" → rev.host → relay (sneaker.toes.space) → toes.local pulls + deploys
toes.local can't receive inbound connections (home NAT), so it maintains an outbound connection to a relay — same tunnel infrastructure used by toes share.
Setup Flow
- In the Toes dashboard (or
toesCLI via SSH), enable rev webhooks for an app - Toes connects to the relay and gets a stable webhook URL
- Add that URL in rev.host project settings as a webhook endpoint
- Done —
rev saveandrev mergenow trigger deploys
What Toes Does on Webhook
- Receives event from relay (repo, ref, timestamp)
- Pulls latest from rev.host (needs a rev auth token stored in Toes env)
- Runs
scripts.predeployif defined in package.json (type-check, build, etc.) - Runs
bun install - Restarts the app
CLI
# Enable/disable rev webhooks
toes webhook enable [name] # Shows the relay URL to paste into rev.host
toes webhook disable [name]
# Manual trigger (pull latest and deploy now)
toes deploy [name]
# Check webhook status
toes webhook status [name]
Settings UI
App settings page gets a "Rev Webhooks" section:
- Toggle to enable/disable
- Displays the relay URL (copy button)
- Field for rev.host auth token
- Last deploy timestamp + status
- "Deploy Now" button (manual trigger)
Auth
Toes needs read access to pull from rev.host. Store a rev API token per-app (or globally):
toes env set -g REV_TOKEN rt_abc123
# or per-app
toes env set my-app REV_TOKEN rt_abc123
Predeploy Scripts
Project-specific build steps go in package.json:
{
"scripts": {
"toes": "bun run --watch index.tsx",
"predeploy": "bunx tsc --noEmit && bun build client/main.tsx --outdir dist --minify"
}
}
Toes runs predeploy after pulling but before restarting. If it exits non-zero, the deploy is aborted and the previous version stays running.
Open Questions
- Should the relay URL be per-app or per-Toes-instance? (Per-instance with app routing via path seems simpler:
https://sneaker.toes.space/hooks/<instance-id>/<app-name>) - Webhook secret/signature verification — rev.host should sign payloads so the relay can't be spoofed
- Should
toes deploywork without webhooks enabled? (Just pull from rev.host on demand — useful as a migration path from deploy.sh) - Rollback:
toes rollback [name]to revert to previous rev version?