FROM source.spushk.ru/rustyworks/rust-alpine-mimalloc:1.95 as build WORKDIR /build ENV OPENSSL_DIR=/usr ENV TARGET_CC=x86_64-linux-musl-clang ENV CARGO_BUILD_TARGET=x86_64-unknown-linux-musl COPY .cargo .cargo COPY rust-toolchain.toml rust-toolchain.toml RUN --mount=type=secret,id=cargo-token \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cat /run/secrets/cargo-token | cargo login --quiet --registry Technologygeek FROM build as planner WORKDIR /build COPY . . RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cargo chef prepare --recipe-path=recipe.json FROM build as build-debug WORKDIR /build COPY --from=planner /build/recipe.json recipe.json RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cargo --config=.cargo/container_debug.toml \ chef cook --recipe-path=recipe.json COPY . . RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cargo --config=.cargo/container_debug.toml \ test RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cargo --config=.cargo/container_debug.toml \ build FROM build as build-release WORKDIR /build COPY --from=planner /build/recipe.json recipe.json RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cargo --config=.cargo/container_release.toml \ chef cook --release --recipe-path=recipe.json COPY . . RUN --mount=type=cache,target=/usr/local/cargo/registry,id=cargo_registry \ --mount=type=cache,target=/usr/local/rustup,id=rustup_cache \ cargo --config=.cargo/container_release.toml \ build --release FROM scratch as app WORKDIR / VOLUME /adsbot.db VOLUME /adsbot.log EXPOSE 3000 FROM app as app-debug WORKDIR / COPY --from=build-debug /build/target/x86_64-unknown-linux-musl/debug/adsbot /adsbot ENV RUST_LOG="debug" ENTRYPOINT [ "/adsbot" ] FROM app as app-release WORKDIR / COPY --from=build-release /build/target/x86_64-unknown-linux-musl/release/adsbot /adsbot ENV RUST_LOG="info" ENTRYPOINT [ "/adsbot" ]