# syntax=docker/dockerfile:1.6
#
# Kamado Pool StartOS package image.
#
# Clones KamadoPool at a pinned SHA, builds the patched ckpool-solo
# binary, builds the Go api binary with embedded Svelte UI, then
# assembles a small runtime image that supervises both processes.
#
# TODO: set KAMADO_REPO + KAMADO_SHA to a pushed commit before
# running `make` — the defaults below are placeholders and the build
# WILL fail until the KamadoPool source repo is pushed to GitHub.

ARG KAMADO_REPO=https://github.com/Relaxo143/KamadoPool.git
ARG KAMADO_SHA=0000000000000000000000000000000000000000
ARG ARCH

# ---------- stage 1: fetch source ----------
FROM debian:bookworm-slim AS source
ARG KAMADO_REPO
ARG KAMADO_SHA
RUN apt-get update && apt-get install -y --no-install-recommends \
        git ca-certificates \
    && rm -rf /var/lib/apt/lists/*
WORKDIR /src
RUN git clone "${KAMADO_REPO}" kamado \
    && cd kamado && git checkout "${KAMADO_SHA}"

# ---------- stage 2: build ckpool ----------
FROM debian:bookworm-slim AS ckpool-build
RUN apt-get update && apt-get install -y --no-install-recommends \
        build-essential autoconf automake libtool pkg-config \
        yasm libzmq3-dev git ca-certificates \
    && rm -rf /var/lib/apt/lists/*
COPY --from=source /src/kamado /src/kamado
WORKDIR /src/kamado
RUN make ckpool-src \
    && cd ckpool/src \
    && ./autogen.sh \
    && ./configure --without-ckdb --prefix=/usr/local \
    && make -j"$(nproc)" \
    && install -Dm755 src/ckpool /out/usr/local/bin/ckpool

# ---------- stage 3: build UI ----------
FROM node:22-bookworm-slim AS ui-build
WORKDIR /ui
COPY --from=source /src/kamado/ui/package.json ./
RUN npm install --no-audit --no-fund
COPY --from=source /src/kamado/ui/ ./
RUN npm run build

# ---------- stage 4: build Go api with embedded UI ----------
FROM golang:1.22-bookworm AS api-build
WORKDIR /src
COPY --from=source /src/kamado/api/ ./
RUN rm -rf internal/webui/dist && mkdir -p internal/webui/dist
COPY --from=ui-build /ui/dist/ internal/webui/dist/
RUN CGO_ENABLED=0 GOOS=linux go build \
        -trimpath -ldflags="-s -w" \
        -o /out/kamado-api ./cmd/kamado-api

# ---------- stage 5: runtime ----------
FROM debian:bookworm-slim AS runtime
ARG ARCH
ARG YQ_VERSION=v4.44.3
RUN apt-get update && apt-get install -y --no-install-recommends \
        tini ca-certificates curl libzmq5 \
    && rm -rf /var/lib/apt/lists/*

# yq for parsing StartOS config.yaml inside the entrypoint
RUN set -eu; \
    case "${ARCH}" in \
      x86_64|amd64) YQ_ARCH=amd64 ;; \
      aarch64|arm64) YQ_ARCH=arm64 ;; \
      *) echo "unsupported arch: ${ARCH}" >&2; exit 1 ;; \
    esac; \
    curl -fsSL -o /usr/local/bin/yq \
        "https://github.com/mikefarah/yq/releases/download/${YQ_VERSION}/yq_linux_${YQ_ARCH}"; \
    chmod +x /usr/local/bin/yq

COPY --from=ckpool-build /out/usr/local/bin/ckpool /usr/local/bin/ckpool
COPY --from=api-build /out/kamado-api /usr/local/bin/kamado-api
COPY docker_entrypoint.sh /usr/local/bin/docker_entrypoint.sh
RUN chmod +x /usr/local/bin/docker_entrypoint.sh

EXPOSE 3333 8080
WORKDIR /root
ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/docker_entrypoint.sh"]
