feat(docker): bundle homecore-server (HOMECORE / ADRs 126-134) in the image

The HOMECORE native Rust port of Home Assistant landed in v0.10.0
(PR #800). The published Docker image now ships its binary alongside
sensing-server and cog-ha-matter so a single `docker run` brings up
the full RuView + HA-wire-compatible stack.

Dockerfile.rust:
  - cargo build --release -p homecore-server in the build stage
  - strip the new binary
  - copy /app/homecore-server in the runtime stage
  - sanity-check: image build now fails if /app/homecore-server isn't
    executable (same guard pattern that already covers sensing-server
    and cog-ha-matter)
  - EXPOSE 8123 (HA-compat REST + WebSocket port — homecore-api
    binds 0.0.0.0:8123 by default per its --bind CLI flag)

docker-entrypoint.sh:
  - new dispatch keyword: `homecore` or `homecore-server`
    Usage: docker run --network host ruvnet/wifi-densepose:latest homecore
    Defaults --bind to 0.0.0.0:8123 (overridable via HOMECORE_BIND env)

The existing two dispatch paths (no arg → sensing-server, `cog-ha-matter`
→ HA + Matter cog) keep working unchanged. Three-binary image, one
entrypoint, operator picks the role at run time.

Triggers a workflow rebuild on push to main per the docker workflow's
path filter; the multi-arch (amd64 + arm64) image will be published
to Docker Hub as `ruvnet/wifi-densepose:latest` after CI green.

Refs ADRs 126-134, v0.10.0 release.

Co-Authored-By: claude-flow <ruv@ruv.net>
This commit is contained in:
ruv
2026-05-25 23:06:14 -04:00
parent e96ebaea81
commit 8cb8a37dc4
2 changed files with 17 additions and 1 deletions
+9 -1
View File
@@ -19,9 +19,13 @@ COPY vendor/ruvector/ /build/vendor/ruvector/
# (ADR-115) is wired in (auto-discovery topics flow to Home Assistant)
# - cog-ha-matter, the ADR-116 Cognitum cog that wraps HA-DISCO +
# HA-MIND + mDNS + embedded broker for Home Assistant / Matter
# - homecore-server, the ADRs-126-134 HOMECORE native Rust port of
# Home Assistant (HA-wire-compat REST + WebSocket on :8123,
# SQLite + ruvector recorder, automation, assist, plugins, HAP)
RUN cargo build --release -p wifi-densepose-sensing-server --features mqtt 2>&1 \
&& cargo build --release -p cog-ha-matter 2>&1 \
&& strip target/release/sensing-server target/release/cog-ha-matter
&& cargo build --release -p homecore-server 2>&1 \
&& strip target/release/sensing-server target/release/cog-ha-matter target/release/homecore-server
# Stage 2: Runtime
FROM debian:bookworm-slim
@@ -35,6 +39,7 @@ WORKDIR /app
# Copy binaries
COPY --from=builder /build/target/release/sensing-server /app/sensing-server
COPY --from=builder /build/target/release/cog-ha-matter /app/cog-ha-matter
COPY --from=builder /build/target/release/homecore-server /app/homecore-server
# Copy UI assets
COPY ui/ /app/ui/
@@ -52,6 +57,7 @@ RUN set -e; \
done; \
test -x /app/sensing-server || { echo "FATAL: /app/sensing-server is not executable"; exit 1; }; \
test -x /app/cog-ha-matter || { echo "FATAL: /app/cog-ha-matter is not executable"; exit 1; }; \
test -x /app/homecore-server || { echo "FATAL: /app/homecore-server is not executable"; exit 1; }; \
echo "image assets OK"
# Optional bearer-token auth on /api/v1/*: leave unset for LAN-mode (default),
@@ -67,6 +73,8 @@ EXPOSE 3001
EXPOSE 5005/udp
# MQTT broker (cog-ha-matter embedded broker — Home Assistant + Matter)
EXPOSE 1883
# HOMECORE HA-compatible REST + WebSocket (homecore-server)
EXPOSE 8123
ENV RUST_LOG=info
+8
View File
@@ -28,6 +28,14 @@ case "${1:-}" in
--sensing-url "${SENSING_URL:-http://127.0.0.1:3000}" \
"$@"
;;
homecore|homecore-server)
# Route to the HOMECORE native Rust port of Home Assistant
# (ADRs 126-134, v0.10.0). Default bind matches HA at :8123.
shift
exec /app/homecore-server \
--bind "${HOMECORE_BIND:-0.0.0.0:8123}" \
"$@"
;;
esac
# If the first argument looks like a flag (starts with -), prepend the