mirror of
https://github.com/nearai/ironclaw.git
synced 2026-09-03 08:06:01 +08:00
* docs: consolidate docs/reborn/ into docs/internal/reborn/ Move-only migration; no content changes beyond path references. Executes the follow-up that PR #7259 left open: docs/.mintignore's reborn/ entry was kept only because the path was load-bearing, and its comment documented that it moves under internal/ once its consumers move with it. - git mv docs/reborn docs/internal/reborn (115 files, history preserved) - rewrite docs/reborn -> docs/internal/reborn across every consumer (crate AGENTS/READMEs and doc-comments, .claude/ skills and rules, AGENTS.md, CI scripts, reborn-e2e.yml path filters, Dockerfile, tests, docs/internal plans) - fix six relative internal/adr/ links inside the moved tree for the added directory level - drop reborn/ from docs/.mintignore and FROZEN_MINTIGNORE_PATTERNS in scripts/ci/docs_publication_boundary.py (the frozen list only ever shrinks); internal/ already fences the new location Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> * ci: classify tests/dockerfile_runtime_home.rs and shrink boundary self-test fixture Two CI gates failed on the docs/reborn consolidation and forced decisions this commit records: - The Reborn PR test planner failed closed on tests/dockerfile_runtime_home.rs (its path-rewrite edit is functional: the test reads the moved deploy doc). The file was deliberately unmapped because no lane inventoried it. Decide it now: _root_test_partitions() and run-reborn-root-partition.sh both inventory it alongside support_unit_tests.rs, so the hermetic root-partition lanes run it (they previously ran it nowhere) and a change to it selects its partition. With the reader laned, map the two config.hosted-single-tenant*.toml readers it owns in DOCKER_RUNTIME_CONFIG_OWNERS — root-test owners select their root partition, completing the per-file decision set the planner comments left open. docker/process-sandbox-entrypoint.sh stays fail-closed. - test_docs_publication_boundary.py's subset fixture still listed reborn/ in the frozen mintignore list; use the surviving entries. Verified: both self-test suites pass (77 planner + boundary), the planner emits a valid selected plan for this PR's full 342-path diff, shell and Python inventories agree on partition assignment (index 0), and dockerfile_runtime_home passes (19 tests). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> --------- Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
147 lines
5.3 KiB
Docker
147 lines
5.3 KiB
Docker
# Multi-stage Dockerfile for the standalone Reborn CLI HTTP service.
|
|
#
|
|
# Build:
|
|
# docker build -f Dockerfile -t ironclaw-reborn:latest .
|
|
#
|
|
# Run locally:
|
|
# docker run --rm --env-file .env.reborn -p 127.0.0.1:3000:3000 ironclaw-reborn:latest
|
|
#
|
|
# Railway:
|
|
# Set Dockerfile path to Dockerfile and IRONCLAW_REBORN_SERVE_HOST=0.0.0.0.
|
|
# Railway supplies PORT. Set IRONCLAW_REBORN_PROFILE=hosted-single-tenant for
|
|
# Postgres-backed storage, hosted-single-tenant-volume for a volume-backed
|
|
# preview, or hosted-single-tenant-volume-sandboxed-railway for the explicit
|
|
# Railway Sandbox preview described in docs/internal/reborn/railway-sandbox-operator.md.
|
|
|
|
FROM node:22.23.1-bookworm-slim@sha256:813a7480f28fdadac1f7f5c824bcdad435b5bc1322a5968bbbdef8d058f9dff4 AS node_toolchain
|
|
|
|
FROM debian:bookworm-slim@sha256:7b140f374b289a7c2befc338f42ebe6441b7ea838a042bbd5acbfca6ec875818 AS railway_cli
|
|
|
|
ARG TARGETARCH
|
|
ARG RAILWAY_CLI_VERSION=5.30.4
|
|
RUN apt-get -o Acquire::Retries=3 update \
|
|
&& apt-get -o Acquire::Retries=3 install -y --no-install-recommends \
|
|
ca-certificates \
|
|
curl \
|
|
&& case "$TARGETARCH" in \
|
|
amd64) \
|
|
railway_target="x86_64-unknown-linux-gnu"; \
|
|
railway_sha256="33addd7729e99291f329ac671b02e9fe14fec8b7d9cdc11be77569739dae5c0e"; \
|
|
;; \
|
|
arm64) \
|
|
railway_target="aarch64-unknown-linux-musl"; \
|
|
railway_sha256="11c24392e5e3551687c5e35ade2eec63e2ea7689603117de83f4f480dbb2d2a7"; \
|
|
;; \
|
|
*) \
|
|
echo "unsupported Railway CLI architecture: $TARGETARCH" >&2; \
|
|
exit 1 \
|
|
;; \
|
|
esac \
|
|
&& railway_archive="railway-v${RAILWAY_CLI_VERSION}-${railway_target}.tar.gz" \
|
|
&& curl -fsSL \
|
|
"https://github.com/railwayapp/cli/releases/download/v${RAILWAY_CLI_VERSION}/${railway_archive}" \
|
|
-o "/tmp/${railway_archive}" \
|
|
&& echo "${railway_sha256} /tmp/${railway_archive}" | sha256sum -c - \
|
|
&& tar -xzf "/tmp/${railway_archive}" -C /tmp railway \
|
|
&& install -m 0755 /tmp/railway /usr/local/bin/railway \
|
|
&& railway --version
|
|
|
|
FROM rust:1.96-bookworm@sha256:5e2214abe154fe26e39f64488952e5c991eeed1d6d6da7cc8381ae83927f0cfc AS chef
|
|
|
|
COPY --from=node_toolchain /usr/local/bin/node /usr/local/bin/node
|
|
COPY --from=node_toolchain /usr/local/lib/node_modules/ /usr/local/lib/node_modules/
|
|
|
|
WORKDIR /app
|
|
COPY .cargo/config.toml .cargo/config.toml
|
|
|
|
RUN ln -sf ../lib/node_modules/npm/bin/npm-cli.js /usr/local/bin/npm \
|
|
&& ln -sf ../lib/node_modules/npm/bin/npx-cli.js /usr/local/bin/npx \
|
|
&& ln -sf ../lib/node_modules/corepack/dist/corepack.js /usr/local/bin/corepack \
|
|
&& node --version \
|
|
&& npm --version \
|
|
&& corepack --version \
|
|
&& corepack enable pnpm \
|
|
&& cargo install --locked cargo-chef@0.1.77
|
|
|
|
FROM chef AS planner
|
|
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY crates/ crates/
|
|
COPY tools/ironclaw_stress/ tools/ironclaw_stress/
|
|
COPY skills/ skills/
|
|
COPY tests/ tests/
|
|
RUN mkdir -p src \
|
|
&& printf 'fn main() {}\n' > src/main.rs \
|
|
&& printf '\n' > src/lib.rs
|
|
|
|
RUN cargo chef prepare --recipe-path recipe.json
|
|
|
|
FROM chef AS deps
|
|
|
|
ENV CARGO_PROFILE_DIST_PANIC=abort \
|
|
CARGO_PROFILE_DIST_CODEGEN_UNITS=1
|
|
|
|
COPY --from=planner /app/recipe.json recipe.json
|
|
COPY crates/product/ironclaw_webui/frontend/ crates/product/ironclaw_webui/frontend/
|
|
WORKDIR /app/crates/product/ironclaw_webui/frontend
|
|
RUN pnpm install --frozen-lockfile
|
|
WORKDIR /app
|
|
RUN cargo chef cook \
|
|
--profile dist \
|
|
--package ironclaw \
|
|
--recipe-path recipe.json
|
|
FROM deps AS builder
|
|
|
|
COPY Cargo.toml Cargo.lock ./
|
|
COPY crates/ crates/
|
|
COPY tools/ironclaw_stress/ tools/ironclaw_stress/
|
|
COPY migrations/ migrations/
|
|
COPY skills/ skills/
|
|
COPY tests/ tests/
|
|
RUN mkdir -p src \
|
|
&& printf 'fn main() {}\n' > src/main.rs \
|
|
&& printf '\n' > src/lib.rs
|
|
|
|
WORKDIR /app/crates/product/ironclaw_webui/frontend
|
|
RUN pnpm install --frozen-lockfile
|
|
WORKDIR /app
|
|
|
|
RUN cargo build \
|
|
--profile dist \
|
|
--package ironclaw \
|
|
--bin ironclaw
|
|
|
|
FROM debian:bookworm-slim@sha256:7b140f374b289a7c2befc338f42ebe6441b7ea838a042bbd5acbfca6ec875818 AS runtime
|
|
|
|
RUN apt-get -o Acquire::Retries=3 update \
|
|
&& apt-get -o Acquire::Retries=3 install -y --no-install-recommends \
|
|
ca-certificates \
|
|
postgresql-client \
|
|
sqlite3 \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=builder /app/target/dist/ironclaw /usr/local/bin/ironclaw
|
|
COPY --from=railway_cli /usr/local/bin/railway /usr/local/bin/railway
|
|
COPY docker/reborn/config.toml /opt/ironclaw/reborn/config.toml
|
|
COPY docker/reborn/config.hosted-single-tenant.toml /opt/ironclaw/reborn/config.hosted-single-tenant.toml
|
|
COPY docker/reborn/config.hosted-single-tenant-volume.toml /opt/ironclaw/reborn/config.hosted-single-tenant-volume.toml
|
|
COPY docker/reborn/config.production.toml /opt/ironclaw/reborn/config.production.toml
|
|
COPY docker/reborn/entrypoint.sh /usr/local/bin/ironclaw-reborn-entrypoint
|
|
|
|
ENV HOME=/home/ironclaw \
|
|
IRONCLAW_REBORN_LOG=info \
|
|
IRONCLAW_REBORN_SERVE_HOST=127.0.0.1
|
|
|
|
RUN useradd -m -d /home/ironclaw -u 1000 ironclaw \
|
|
&& mkdir -p /data/ironclaw-reborn /workspace \
|
|
&& chown -R ironclaw:ironclaw /home/ironclaw /data/ironclaw-reborn /workspace \
|
|
&& chmod +x /usr/local/bin/ironclaw-reborn-entrypoint
|
|
|
|
WORKDIR /workspace
|
|
|
|
EXPOSE 3000
|
|
|
|
USER ironclaw
|
|
|
|
ENTRYPOINT ["ironclaw-reborn-entrypoint"]
|