# syntax=docker/dockerfile:1.7
# Run from the tree root:
# docker build --output type=local,dest=build -f src/deploy/docker/build/Dockerfile .
FROM golang:1.26.0-trixie AS toolchain

FROM debian:trixie-slim AS guest
RUN apt-get -o Acquire::Retries=8 -o Acquire::http::Timeout=60 update \
 && apt-get -o Acquire::Retries=8 -o Acquire::http::Timeout=60 install -y --no-install-recommends \
      systemd-sysv udev tcpdump ca-certificates iproute2 openssl \
 && rm -rf /var/lib/apt/lists/*

FROM debian:trixie-slim AS builder
RUN apt-get -o Acquire::Retries=8 -o Acquire::http::Timeout=60 update \
 && apt-get -o Acquire::Retries=8 -o Acquire::http::Timeout=60 install -y --no-install-recommends \
      build-essential bc bison flex libssl-dev libelf-dev curl ca-certificates \
      xz-utils zstd patch e2fsprogs \
 && rm -rf /var/lib/apt/lists/*
COPY --from=toolchain /usr/local/go /usr/local/go
ENV PATH=/usr/local/go/bin:$PATH OUT=/out
WORKDIR /work

FROM builder AS rootfs
COPY src/server /work/src/server
COPY src/deploy /work/src/deploy
COPY --from=guest / /guest/
RUN ROOTFS_DIR=/guest bash src/deploy/build_rootfs.sh

FROM builder AS kernel
COPY src/kernel /work/src/kernel
COPY src/deploy/build_kernel.sh /work/src/deploy/build_kernel.sh
ARG JOBS=2
RUN --mount=type=cache,id=lauschangriff-kernel-download,target=/downloads \
    DOWNLOAD_CACHE=/downloads JOBS="$JOBS" bash src/deploy/build_kernel.sh

FROM scratch AS artifacts
COPY --from=kernel /out/bzImage /bzImage
COPY --from=rootfs /out/rootfs.img.zst /rootfs.img.zst
