-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile.dev
More file actions
75 lines (61 loc) · 2.81 KB
/
Dockerfile.dev
File metadata and controls
75 lines (61 loc) · 2.81 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# syntax=docker/dockerfile:1
# Hermes development image — Rust, .NET, Zig, 1Password CLI, Node
# Multi-stage build optimized for aarch64 (RK3588 on The Roadhouse)
FROM rust:1.84-slim-bookworm AS rust-builder
RUN rustup target add aarch64-unknown-linux-gnu && \
rustup component add rustfmt clippy && \
cargo install cargo-watch cargo-nextest sqlx-cli cargo-deny trunk wasm-bindgen-cli
FROM mcr.microsoft.com/dotnet/sdk:9.0-bookworm-slim AS dotnet-layer
# Just pull the SDK layer
FROM node:22-bookworm-slim AS node-layer
RUN npm install -g pnpm
FROM debian:bookworm-slim AS base
# --- System deps ---
RUN apt-get update && apt-get install -y \
curl ca-certificates git build-essential pkg-config \
libssl-dev sqlite3 libsqlite3-dev \
python3 python3-pip python3-venv \
cmake ninja-build \
unzip jq wget \
&& rm -rf /var/lib/apt/lists/*
# --- Rust (copy from builder) ---
COPY --from=rust-builder /usr/local/cargo /usr/local/cargo
COPY --from=rust-builder /usr/local/rustup /usr/local/rustup
ENV CARGO_HOME=/usr/local/cargo
ENV RUSTUP_HOME=/usr/local/rustup
ENV PATH="/usr/local/cargo/bin:/usr/local/rustup/bin:${PATH}"
# --- Mono ---
RUN apt-get update && apt-get install -y gnupg dirmngr && \
apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys 3FA7E0328081BFF6A14DA29AA6A19B38D3D831EF && \
echo "deb https://download.mono-project.com/repo/debian stable-bookworm main" | tee /etc/apt/sources.list.d/mono-official-stable.list && \
apt-get update && apt-get install -y mono-complete && \
rm -rf /var/lib/apt/lists/*
# --- .NET ---
COPY --from=dotnet-layer /usr/share/dotnet /usr/share/dotnet
RUN ln -s /usr/share/dotnet/dotnet /usr/bin/dotnet
ENV DOTNET_CLI_TELEMETRY_OPTOUT=1
ENV DOTNET_ROOT=/usr/share/dotnet
# --- Node / pnpm ---
COPY --from=node-layer /usr/local/bin/node /usr/local/bin/node
COPY --from=node-layer /usr/local/lib/node_modules /usr/local/lib/node_modules
COPY --from=node-layer /usr/local/bin/pnpm /usr/local/bin/pnpm
# --- Zig ---
ARG ZIG_VERSION=0.13.0
RUN wget -q "https://ziglang.org/download/${ZIG_VERSION}/zig-linux-aarch64-${ZIG_VERSION}.tar.xz" -O /tmp/zig.tar.xz && \
tar -xf /tmp/zig.tar.xz -C /usr/local && \
ln -s "/usr/local/zig-linux-aarch64-${ZIG_VERSION}/zig" /usr/local/bin/zig && \
rm /tmp/zig.tar.xz
# --- 1Password CLI ---
ARG OP_VERSION=2.30.0
RUN wget -q "https://cache.agilebits.com/dist/1P/op2/pkg/v${OP_VERSION}/op_linux_arm64_v${OP_VERSION}.zip" -O /tmp/op.zip && \
unzip -o /tmp/op.zip -d /usr/local/bin && \
rm /tmp/op.zip && \
chmod +x /usr/local/bin/op
# --- Hermes agent runtime deps ---
RUN pip3 install --break-system-packages uv pyjwt requests
# --- Workspace ---
WORKDIR /workspace
ENV HERMES_HOME=/workspace
ENV PATH="/workspace/.bin:${PATH}"
# Default: tail so container stays up for exec
CMD ["tail", "-f", "/dev/null"]