# syntax=docker/dockerfile:1

# Multi-stage Dockerfile for brewlog.
# Uses chisel to create a minimal Ubuntu rootfs for the runtime image.

# ---------------------------------------------------------------------------
# Builder — Ubuntu with Rust toolchain installed
# ---------------------------------------------------------------------------
FROM ubuntu:26.04 AS builder
ENV RUSTUP_HOME=/usr/local/rustup \
    CARGO_HOME=/usr/local/cargo \
    PATH=/usr/local/cargo/bin:${PATH}
RUN apt-get update && apt-get install -y --no-install-recommends \
    ca-certificates \
    build-essential \
    pkg-config \
    libssl-dev \
    mold \
    binutils \
    curl \
    && rm -rf /var/lib/apt/lists/*
RUN curl -sSf https://sh.rustup.rs \
    | sh -s -- -y --profile minimal --default-toolchain 1.94.1

# Install tailwindcss standalone (needed by build.rs)
RUN mkdir -p /usr/local/bin \
    && curl -sL https://github.com/tailwindlabs/tailwindcss/releases/latest/download/tailwindcss-linux-x64 \
    -o /usr/local/bin/tailwindcss && chmod +x /usr/local/bin/tailwindcss

WORKDIR /app
COPY . .

RUN --mount=type=cache,target=/usr/local/cargo/registry \
    --mount=type=cache,target=/app/target \
    cargo build --release --locked \
    && mkdir -p /out \
    && cp target/release/brewlog /out/brewlog

# ---------------------------------------------------------------------------
# Chisel — minimal Ubuntu rootfs
# ---------------------------------------------------------------------------
FROM ubuntu:26.04 AS chisel
ARG TARGETARCH=amd64
RUN apt-get update && apt-get install -y --no-install-recommends \
    curl ca-certificates \
    && rm -rf /var/lib/apt/lists/*
RUN curl -sL "https://github.com/canonical/chisel/releases/download/v1.4.1/chisel_v1.4.1_linux_${TARGETARCH}.tar.gz" \
    | tar xz -C /usr/local/bin

RUN mkdir /rootfs && chisel cut --root /rootfs \
    base-files_base \
    base-files_release-info \
    base-passwd_data \
    ca-certificates_data \
    libgcc-s1_libs \
    libc6_libs \
    libssl3t64_libs \
    openssl_bins

RUN useradd --root /rootfs -u 1000 -U -M -s /bin/false brewlog \
    && mkdir -p /rootfs/home/brewlog /rootfs/data \
    && chown 1000:1000 /rootfs/home/brewlog /rootfs/data

# ---------------------------------------------------------------------------
# Runtime — scratch with chisel rootfs
# ---------------------------------------------------------------------------
FROM scratch
COPY --from=chisel /rootfs /
COPY --from=builder /out/brewlog /usr/local/bin/brewlog
USER 1000:1000
ENTRYPOINT ["brewlog", "serve", "--database-url", "sqlite:///data/brewlog.db"]
