FROM node:18 AS js-builder

COPY ui /home/node/app
RUN \
	cd /home/node/app && \
	npm install . && \
	npm run build

FROM rustlang/rust:nightly AS builder

ARG \
	RUSTC_WRAPPER \
	CARGO_INCREMENTAL=1 \
	SCCACHE_ENDPOINT \
	SCCACHE_S3_USE_SSL=off \
	SCCACHE_BUCKET \
	AWS_ACCESS_KEY_ID \
	AWS_SECRET_ACCESS_KEY

ADD tools/maybe-download-sccache /
RUN /maybe-download-sccache

WORKDIR /repo
COPY Cargo.toml sqlx-data.json /repo/

RUN \
	mkdir -v /repo/src && \
	echo 'fn main() {}' > /repo/src/main.rs && \
	cargo update && \
	cargo build --release && \
	bash -exc "if [ '${RUSTC_WRAPPER}' == '/sccache' ]; then /sccache -s; fi" && \
	rm -Rvf /repo/src

COPY schema /repo/schema
COPY build.rs /repo/
COPY src /repo/src

COPY --from=js-builder /home/node/app/public /repo/ui/public

RUN \
	touch src/main.rs && \
	cargo build --release && \
	bash -exc "if [ '${RUSTC_WRAPPER}' == '/sccache' ]; then /sccache -s; fi"

RUN strip target/release/ledgrr

FROM gcr.io/distroless/cc-debian11
COPY --from=builder /repo/target/release/ledgrr /usr/local/bin/
EXPOSE 80
ENV LEDGERR_PORT=80
ENV RUST_LOG=info,sqlx=warn,actix-web=debug
ENTRYPOINT ["/usr/local/bin/ledgrr"]

