Skip to content

feat: Container release via GitHub Actions + ghcr.io #48

@pmcfadin

Description

@pmcfadin

Summary

Add Docker containerization and automated container image publishing via GitHub Actions to ghcr.io.

Acceptance Criteria

Files to Create

  1. .dockerignore - Exclude build artifacts, node_modules, .git, docs, editor configs
  2. docker/nginx.conf.template - Nginx config with:
    • Port 8080 (non-privileged)
    • SPA routing (try_files)
    • API reverse proxy to ${API_BACKEND_URL} (default http://localhost:8443)
    • Cache headers (immutable for hashed assets, no-cache for index.html)
    • Gzip compression
  3. Dockerfile - Multi-stage build:
    • Stage 1: node:22-alpine, npm ci, npm run build
    • Stage 2: nginx:alpine, serve static files (~45-55 MB final image)
  4. .github/workflows/container-release.yml - GitHub Actions workflow:
    • Triggers: push to main, v* tags
    • Build & push to ghcr.io/killrvideo/killrvideo-react-frontend
    • Tags: latest + sha on main, semver on v* tags

Verification

  • docker build -t killrvideo-frontend:local . builds successfully
  • SPA routing works (non-root paths return 200 with index.html)
  • /assets/* has Cache-Control: public, immutable
  • index.html has Cache-Control: no-cache
  • Final image is ~45-55 MB
  • GitHub Actions workflow triggers on push to main

Metadata

Metadata

Assignees

No one assigned

    Labels

    ai-taskAI-generated task

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions