FROM        086679231553.dkr.ecr.us-east-1.amazonaws.com/docker-parent-images:debian12 AS base

USER        root
WORKDIR     /var/app
# Install curl for healthcheck
RUN         apt-get update && apt-get install -y curl

# Create service user
RUN         /usr/sbin/useradd -c 'graphql-playlist user' -m -d /home/graphql-playlist -s /bin/bash graphql-playlist
RUN         chown -R graphql-playlist:graphql-playlist /var/app

USER        graphql-playlist

FROM        base AS build-deps
# Install Rust
# Re-assume root to install build-time only deb packages
USER        root
RUN         apt-get update && apt-get install -y build-essential
USER        graphql-playlist
RUN         curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash -s -- -y --default-toolchain 1.85.0
ENV         PATH="/home/graphql-playlist/.cargo/bin:${PATH}"

# Copy requirements
COPY        --chown=graphql-playlist:graphql-playlist Cargo.toml Cargo.lock ./
RUN         mkdir src && echo "fn main() {}" > src/main.rs
RUN         cargo build --release
RUN         rm -r src/
RUN         rm /var/app/target/release/graphql-playlist && rm -r /var/app/target/release/.fingerprint/graphql-playlist-*/

# Prepare a layer with the source files
FROM        build-deps AS build-base
COPY        src/ src/

# Lint and test source files
FROM        build-base AS lint-and-test
COPY        scripts/lint-and-test.sh scripts/
ENTRYPOINT  ["/var/app/scripts/lint-and-test.sh"]

# Build graphql-playlist binary
FROM        build-base AS build
RUN         cargo build --release

FROM        base AS deploy
# Copy graphql-playlist binary
COPY        --from=build /var/app/target/release/graphql-playlist ./

EXPOSE      8080

CMD [ "/var/app/graphql-playlist" ]
