# The shared deploy streams projects/language-web/app as its build context.
# prepare_release.py supplies only validated curriculum and filtered source.
FROM docker.io/library/rust:1.97.1-bookworm AS builder
WORKDIR /build/app
ENV CARGO_BUILD_JOBS=1
COPY app/release/source/app/Cargo.toml app/release/source/app/Cargo.lock ./
COPY app/release/source/app/vendor ./vendor
COPY app/release/source/app/.cargo ./.cargo
# Cache dependencies independently from application changes.
RUN mkdir src && printf 'fn main() {}\n' > src/main.rs \
 && cargo build --release --locked --offline
COPY app/src ./src
RUN touch src/main.rs && cargo build --release --locked --offline

FROM docker.io/library/debian:bookworm-slim
RUN useradd --system --uid 10001 --user-group --no-create-home --shell /usr/sbin/nologin languages
WORKDIR /opt/language-web
COPY --from=builder /build/app/target/release/language-web /usr/local/bin/language-web
COPY app/static ./static
COPY app/release/source.tar.gz ./static/source.tar.gz
COPY app/release/curriculum ./curriculum
USER 10001:10001
EXPOSE 8788
ENTRYPOINT ["/usr/local/bin/language-web"]
