ARG alpine_version=3.21 FROM docker.io/library/rust:1-alpine${alpine_version} AS builder WORKDIR /src RUN apk add --no-cache musl-dev RUN cargo install sqlx-cli --no-default-features --features sqlite # Required for compile-time schemata checks of migrations ENV DATABASE_URL=sqlite:/tmp/rvault.db RUN touch /tmp/rvault.db COPY Cargo.toml Cargo.lock . RUN --mount=type=cache,target=/usr/local/cargo/registry \ mkdir src && echo "fn main() {}" > src/main.rs && \ cargo fetch --locked --target $(rustc -vV | sed -n 's|host: ||p') && \ rm src/main.rs # Required for compile-time checks of query - database-schema compatibility COPY migrations migrations RUN cargo sqlx migrate run COPY src src RUN --mount=type=cache,target=/usr/local/cargo/registry \ cargo build --release --locked FROM docker.io/library/alpine:${alpine_version} AS runner # FROM scratch AS runner COPY --from=builder /src/target/release/rvault-server /usr/bin/rvault-server CMD ["/usr/bin/rvault-server"]