##########################################################################################
## STEP 1: Create AlpineLinux container with Rust/Cargo installed                       ##
##         Using alpine:edge to get the latest stable Rust toolchain                    ##

FROM alpine:edge AS alpine-edge

RUN apk upgrade --no-cache \
 && apk add --no-cache cargo

##########################################################################################
## STEP 2: Compile cargo-doc2readme from the current source code (which should be that  ##
##         of the current release)                                                      ##

FROM alpine-edge AS builder

RUN apk add --no-cache cargo-auditable

ENV CARGO_PROFILE_RELEASE_OPT_LEVEL="s"
ENV CARGO_PROFILE_RELEASE_PANIC="abort"
ENV CARGO_PROFILE_RELEASE_CODEGEN_UNITS=1
ENV CARGO_PROFILE_RELEASE_LTO="true"
ENV CARGO_PROFILE_RELEASE_STRIP="true"

# Copy source code
COPY Cargo.toml /src/cargo-doc2readme/
COPY Cargo.lock /src/cargo-doc2readme/
COPY src/       /src/cargo-doc2readme/src
COPY tests/     /src/cargo-doc2readme/tests

WORKDIR /src/cargo-doc2readme

# Build the binary
RUN cargo auditable build --release --locked
# Run tests
RUN cargo test --release --locked

##########################################################################################
## STEP 3: Create final image from the AlpineLinux container and the cargo-doc2readme   ##
##         binary from step 2                                                           ##

FROM alpine-edge

COPY --from=builder /src/cargo-doc2readme/target/release/cargo-doc2readme /usr/bin/
