The hosting and CI/CD environment: version control, continuous integration and web hosting, orchestrated by Docker Compose.
| Service | Image | Role |
|---|---|---|
| Traefik | traefik:latest |
Edge router. Host-header routing, ports 80/8080. |
| Gitea | gitea/gitea:latest |
Self-hosted Git service. |
| Woodpecker Server | woodpeckerci/woodpecker-server |
CI/CD server, integrated with Gitea. |
| Woodpecker Agent | woodpeckerci/woodpecker-agent |
Runs the pipeline steps; mounts the Docker socket and the shared softwares volume. |
| MySQL | mysql:8 |
The softwares database: software metadata and releases. |
| phpMyAdmin | phpmyadmin:latest |
Web UI for the database. |
| API | local build | Rails 8 app: catalog REST API, file downloads, ActiveAdmin, /build/* endpoints. Routed for /api, /file, /build, /admin and the games.teletype.hu host. |
| Frontend | local build | The Vue 3 / Vite game portal. |
Artifacts arrive over HTTP: POST /build/upload writes into the API's artifact directory — ./data/softwares on the host, mounted as /softwares in the container (FILE_CONTAINER_PATH). The updater and /file/* static serving read the same directory.
A game repo's .woodpecker.yaml is a one-line marker (platform: <platform>, plus name: when the software name differs from the repo name). The full pipeline comes from the update server's Woodpecker configuration extension — see WarpEngine:
curl "https://teletypegames.org/build/config?platform=<platform>"
The repo also needs metadata.json and the application_token Woodpecker secret. After building, the pipeline publishes in two steps.
1. Upload — one multipart curl request per file. Filenames must carry the <name>-<version> prefix.
curl -X POST -H "X-Update-Secret: ${UPDATE_SECRET}" -F "file=@<name>-<version>.zip" \
"${UPDATE_SERVER}/build/upload?name=...&version=..."
2. Publish — registers the new version.
curl -X POST -H "X-Update-Secret: ${UPDATE_SECRET}" \
"${UPDATE_SERVER}/build/publish?platform=...&name=...&version=..."
UPDATE_SECRET is a WarpEngine::ApplicationToken with the update + upload scopes — per-owner, optionally expiring, created in the admin.
Once published, the software and its releases appear on the games.teletype.hu portal automatically.