FROM alpine:latest AS builder WORKDIR /build RUN apk add rustup build-base # todo: arm64 target RUN rustup-init --default-host x86_64-unknown-linux-musl --default-toolchain nightly-2024-08-20 --profile default -y ENV PATH=/root/.cargo/bin:$PATH ENV RUSTFLAGS='-C link-arg=-s' RUN cargo install cargo-chef --locked # build dependencies first to cache FROM builder AS recipe-builder COPY . . RUN cargo chef prepare --recipe-path recipe.json FROM builder AS binary-builder COPY --from=recipe-builder /build/recipe.json recipe.json RUN cargo chef cook --release --recipe-path recipe.json --target x86_64-unknown-linux-musl COPY Cargo.toml /build/ COPY Cargo.lock /build/ COPY crates/ /build/crates RUN cargo build --bin migrate --release --target x86_64-unknown-linux-musl RUN cargo build --bin api --release --target x86_64-unknown-linux-musl RUN cargo build --bin dispatch --release --target x86_64-unknown-linux-musl RUN cargo build --bin gateway --release --target x86_64-unknown-linux-musl RUN cargo build --bin avatars --release --target x86_64-unknown-linux-musl RUN cargo build --bin avatar_cleanup --release --target x86_64-unknown-linux-musl RUN cargo build --bin scheduled_tasks --release --target x86_64-unknown-linux-musl RUN cargo build --bin gdpr_worker --release --target x86_64-unknown-linux-musl FROM alpine:latest COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/migrate /migrate COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/api /api COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/dispatch /dispatch COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/gateway /gateway COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/avatars /avatars COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/avatar_cleanup /avatar_cleanup COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/scheduled_tasks /scheduled_tasks COPY --from=binary-builder /build/target/x86_64-unknown-linux-musl/release/gdpr_worker /gdpr_worker