Goal
Add a GitHub Actions workflow that verifies the Docker image builds and the container starts healthy.
Acceptance criteria
- New workflow file:
.github/workflows/docker-smoke-test.yml
- Triggers on
push to master and on pull_request
- Steps:
docker build -t codex-proxy-test .
- Run container on default port 8080, wait for healthcheck (up to 30s),
curl /health returns 200
- Cleanup, then test custom port 8090 by mounting a modified
config/default.yaml (use sed to change port: 8080 → port: 8090)
- Verify
/health returns 200 on 8090
- Runner:
ubuntu-latest
Context
- Dockerfile is at repo root
- Healthcheck script:
docker-healthcheck.sh (reads port from config/default.yaml)
- Health endpoint:
GET /health
- Port is configured in YAML config, NOT via environment variable
Constraints — read before writing code
- Package manager: npm — do NOT introduce pnpm, yarn, or any lock file other than
package-lock.json
- Branch name:
master — this repo's default branch is master, not main
- Do NOT modify
.gitignore — tests/ is intentionally gitignored
- Do NOT modify existing dependencies — no version bumps, no downgrades, no moving deps between dependencies/devDependencies
- Do NOT add new dependencies unless absolutely necessary for this workflow (a pure shell/docker workflow should need none)
- TypeScript: no
any — if you write TS, use concrete types, unknown, or generics
- This is a standalone workflow — do NOT combine with unit tests or other smoke tests. Keep it focused on Docker only.
Goal
Add a GitHub Actions workflow that verifies the Docker image builds and the container starts healthy.
Acceptance criteria
.github/workflows/docker-smoke-test.ymlpushtomasterand onpull_requestdocker build -t codex-proxy-test .curl /healthreturns 200config/default.yaml(usesedto changeport: 8080→port: 8090)/healthreturns 200 on 8090ubuntu-latestContext
docker-healthcheck.sh(reads port fromconfig/default.yaml)GET /healthConstraints — read before writing code
package-lock.jsonmaster— this repo's default branch ismaster, notmain.gitignore—tests/is intentionally gitignoredany— if you write TS, use concrete types,unknown, or generics