Add Gitea Actions CI/CD and deploy descriptor
- .gitea/workflows/ci.yaml: test on PR/push to master, deploy on push to master - deploy/docker-compose.yml: 15-puzzle container on the edge network with a persistent data volume - Dockerfile: create /data owned by app for the DATA_FILE volume - README: document deployment, required Actions secrets/variables, and persistence
This commit is contained in:
@@ -37,6 +37,40 @@ Certain environment variables should be set for the server to start:
|
||||
| `CONTEXT_ROOT` | Server requests URI root path, defaulting to `/` if not set. |
|
||||
| `STATIC_DIR` | Directory where static files are located, defaulting to the current directory if not set. |
|
||||
|
||||
## Deployment
|
||||
|
||||
The repository ships a [Gitea Actions](https://docs.gitea.com/usage/actions/overview)
|
||||
workflow ([`.gitea/workflows/ci.yaml`](.gitea/workflows/ci.yaml)) that runs the
|
||||
server test suite on every pull request to `master`, and on every push to
|
||||
`master` additionally rebuilds the Docker image and (re)deploys the container on
|
||||
the host Docker daemon through [`deploy/docker-compose.yml`](deploy/docker-compose.yml).
|
||||
|
||||
The deploy job runs in host mode: it builds the image locally (no registry) and
|
||||
recreates the `15-puzzle` container attached to the external `edge` Docker
|
||||
network, so a host reverse proxy can route to `15-puzzle:8080`.
|
||||
|
||||
### Required Actions secrets and variables
|
||||
|
||||
Configure these under the repository's *Settings → Actions*:
|
||||
|
||||
| Kind | Name | Example / note |
|
||||
| - | - | - |
|
||||
| Secret | `BOT_TOKEN` | Telegram Bot API token. |
|
||||
| Secret | `ACCESS_CODE` | Pin-code for the Statistics Screen. |
|
||||
| Variable | `PROJECT_LINK` | URL to the project's source code. |
|
||||
| Variable | `DATA_FILE` | `/data/data.json` (lives on the persistent volume). |
|
||||
| Variable | `SERVER_PORT` | `8080`. |
|
||||
| Variable | `CONTEXT_ROOT` | `/`. |
|
||||
|
||||
`STATIC_DIR` is intentionally left unset: the static assets (HTML, `game.wasm`,
|
||||
`wasm_exec.js`) are baked into the image and served from the working directory.
|
||||
|
||||
### Persistence
|
||||
|
||||
Game data is stored on the named Docker volume `15-puzzle-data` mounted at
|
||||
`/data`, so player ratings survive container recreation. The image creates
|
||||
`/data` owned by the unprivileged `app` user so the volume is writable.
|
||||
|
||||
## Credits
|
||||
|
||||
- [Ebitengine](https://github.com/hajimehoshi/ebiten) game engine by Hajime Hoshi.
|
||||
|
||||
Reference in New Issue
Block a user