redact-client 1.5.9

Receives request for private data and decrypts it to display securely in browser
FROM rust:1.57.0-alpine3.13 AS builder

# Create an unprivileged user
RUN adduser --disabled-password --no-create-home --uid 1000 notroot notroot

# Perform apk actions as root
RUN apk add --no-cache musl-dev=1.2.2-r1 openssl-dev=1.1.1l-r0 libsodium-dev=1.0.18-r0 make=4.3-r0

# Create build directory as root
WORKDIR /usr/src
RUN USER=root cargo new redact-client

# Perform an initial compilation to cache dependencies
WORKDIR /usr/src/redact-client
COPY Cargo.lock Cargo.toml ./
RUN echo "fn main() {println!(\"if you see this, the image build failed and kept the depency-caching entrypoint. check your dockerfile and image build logs.\")}" > src/main.rs
RUN cargo build --release --locked

# Load source code to create final binary
RUN rm -rf src
RUN rm -rf target/release/deps/redact_client*
RUN rm -rf target/release/redact-client*
COPY src src
RUN cargo build --release --locked

# Create tiny final image containing binary
FROM scratch

# Load unprivileged user from build container
COPY --from=builder /etc/group /etc/passwd /etc/

# Switch to unprivileged user
USER notroot:notroot

# Copy binary files
WORKDIR /usr/local/bin
COPY --from=builder /usr/src/redact-client/target/release/redact-client service

ENTRYPOINT ["service"]