blob: 24181729aef9947409622ed6265792832ac3d73f [file] [log] [blame]
# TODO(comc): cargo chef caching doesn't seem to be working properly.
FROM lukemathwalker/cargo-chef:latest-rust-1 AS chef
RUN apt-get update
RUN apt-get install -y make pkg-config git unzip cmake protobuf-compiler libssl-dev --no-install-recommends
RUN cargo install trunk
RUN rustup target add wasm32-unknown-unknown
RUN mkdir /extract_proto
COPY tools/extract_proto/avm_frame.proto /extract_proto/avm_frame.proto
WORKDIR /app
FROM chef as planner_frontend
COPY tools/avm_analyzer .
RUN cargo chef prepare --recipe-path recipe.json --bin avm_analyzer_app
FROM chef AS cacher_frontend
COPY --from=planner_frontend /app/recipe.json recipe.json
RUN cargo chef cook --release --target wasm32-unknown-unknown --recipe-path recipe.json --bin avm-analyzer-app
FROM chef as planner_backend
COPY tools/avm_analyzer /app
RUN cargo chef prepare --recipe-path recipe.json --bin avm_analyzer_server
FROM chef AS cacher_backend
COPY --from=planner_backend /app/recipe.json recipe.json
RUN cargo chef cook --release --recipe-path recipe.json --bin avm-analyzer-server
FROM chef AS builder_frontend
COPY --from=cacher_frontend /app .
COPY tools/avm_analyzer .
RUN trunk build --release avm_analyzer_app/index.html
FROM chef AS builder_backend
COPY --from=cacher_backend /app .
COPY tools/avm_analyzer .
RUN cargo build --release --bin avm-analyzer-server
FROM avm_analyzer_runtime as avm_builder
COPY . /avm
RUN mkdir /avm_build
RUN /scripts/build_avm.sh --avm_build_dir /avm_build --avm_source_dir /avm
RUN rm -r /avm
FROM avm_analyzer_runtime as runtime
WORKDIR /app
COPY --from=builder_frontend /app/avm_analyzer_app/dist dist
COPY --from=builder_backend /app/target/release/avm-analyzer-server avm-analyzer-server
COPY --from=avm_builder /avm_build /avm_build