# syntax=docker/dockerfile:1.7@sha256:a57df69d0ea827fb7266491f2813635de6f17269be881f696fbfdf2d83dda33e ARG RUST_IMAGE=docker.io/library/rust:1.97.0-bookworm@sha256:8fa55b2f3ddf97471ab6a767bfa3f37e6bad0986ba823e75fea57e2a2a5c3073 ARG NODE_IMAGE=docker.io/library/node:24.18.0-bookworm@sha256:5711a0d445a1af54af9589066c646df387d1831a608226f4cd694fc59e745059 ARG NODE_RUNTIME_IMAGE=docker.io/library/node:24.18.0-bookworm-slim@sha256:6f7b03f7c2c8e2e784dcf9295400527b9b1270fd37b7e9a7285cf83b6951452d ARG CARGO_BUILD_JOBS=4 FROM ${RUST_IMAGE} AS rust-build ARG CARGO_BUILD_JOBS WORKDIR /workspace COPY Cargo.toml Cargo.lock rust-toolchain.toml ./ COPY .config .config COPY contracts contracts COPY crates crates COPY docs/api docs/api RUN cargo build --release --locked --jobs ${CARGO_BUILD_JOBS} --package remora-api --package remora-worker --bins FROM ${RUST_IMAGE} AS api COPY --from=rust-build /workspace/target/release/remora-api /usr/local/bin/remora-api COPY LICENSE NOTICE /usr/share/licenses/remora/ USER 65532:65532 ENTRYPOINT ["/usr/local/bin/remora-api"] FROM ${RUST_IMAGE} AS worker COPY --from=rust-build /workspace/target/release/remora-worker /usr/local/bin/remora-worker COPY LICENSE NOTICE /usr/share/licenses/remora/ USER 65532:65532 ENTRYPOINT ["/usr/local/bin/remora-worker"] FROM ${NODE_IMAGE} AS web-build ENV NODE_OPTIONS=--max-old-space-size=4096 WORKDIR /workspace RUN corepack enable COPY web/package.json web/pnpm-lock.yaml web/pnpm-workspace.yaml ./ COPY web/tools tools RUN pnpm install --frozen-lockfile COPY web/index.html web/tsconfig*.json web/vite.config.ts ./ COPY web/public public COPY web/src src RUN pnpm build RUN CI=true pnpm prune --prod FROM ${NODE_RUNTIME_IMAGE} AS web WORKDIR /app COPY --from=web-build /workspace/dist dist COPY --from=web-build /workspace/node_modules node_modules COPY web/server.mjs server.mjs COPY web/server server COPY LICENSE NOTICE /usr/share/licenses/remora/ USER 65532:65532 ENTRYPOINT ["node", "/app/server.mjs"]