| # 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 |