ci: containerize + arcd GHCR semver build (DOKS deploy) (#2)
Docker Build & Push (Reusable) / build-arm64 (push) Skipped
Docker Build & Push (Reusable) / create-manifest (push) Canceled after 0s
Docker Build & Push (Reusable) / tag-single-arch (push) Canceled after 0s
Docker Build & Push (Reusable) / deploy (push) Canceled after 0s
Docker Build & Push (Reusable) / sbom (push) Canceled after 0s
Build image / docker (push) Canceled after 0s
Docker Build & Push (Reusable) / build-amd64 (push) Canceled after 0s

* ci: containerize + arcd GHCR semver build (DOKS deploy)

Add multi-stage Dockerfile (npm Vite build -> minimal node:22-slim static
server via serve, no nginx/caddy, port 3000) and .github/workflows/build.yml
that builds+pushes ghcr.io/hanzoai/computer on v* tags via the canonical
hanzoai/.github docker-build reusable workflow on the self-hosted arcd fleet.
Ships only the static SPA (api/ Vercel functions excluded). Semver-only tags.

* ci: serve via canonical hanzoai/spa (static SPA, one way)

---------

Co-authored-by: hanzo-dev <[email protected]>
This commit is contained in:
2026-06-19 16:22:44 -07:00
committed by GitHub
co-authored by z
parent bb6587d75b
commit c6ba2a75e2
3 changed files with 46 additions and 0 deletions
+13
View File
@@ -0,0 +1,13 @@
node_modules
dist
.git
.github
*.md
.env*
.vscode
e2e
tests
test-*.html
test-*.mjs
playwright.config.ts
.playwright-mcp
+21
View File
@@ -0,0 +1,21 @@
name: Build image
# Builds + pushes ghcr.io/hanzoai/computer on a v* semver tag via the
# canonical reusable workflow, natively on the self-hosted arcd fleet
# (NO GitHub-hosted runners). Semver-only tags. Deployable on DOKS.
on:
push:
tags: ['v*']
workflow_dispatch:
permissions:
contents: read
packages: write
id-token: write
jobs:
docker:
uses: hanzoai/.github/.github/workflows/docker-build.yml@main
with:
image: ghcr.io/hanzoai/computer
secrets: inherit
+12
View File
@@ -0,0 +1,12 @@
# syntax=docker/dockerfile:1
# hanzo.computer (Vite + React 19 SPA) — served via the canonical hanzoai/spa
# static server (one way for static SPAs). No node runtime in the final stage.
# The repo api/ dir holds Vercel serverless funcs (hosted deploy only); the
# container ships ONLY the static SPA bundle.
FROM node:22-slim AS build
WORKDIR /app
COPY . .
RUN npm ci
RUN npm run build
FROM ghcr.io/hanzoai/spa
COPY --from=build /app/dist /public