jay-ds / Dockerfile
hank-vibe's picture
feat: clone-and-build Dockerfile for CJackHwang/ds2api
6bf4962
ARG DS2API_REF=main
FROM golang:1.26 AS source
RUN apt-get update \
&& apt-get install -y --no-install-recommends git ca-certificates \
&& rm -rf /var/lib/apt/lists/*
WORKDIR /src
ARG DS2API_REF
RUN git clone --depth 1 --branch "${DS2API_REF}" https://github.com/CJackHwang/ds2api.git .
FROM node:24 AS webui-builder
WORKDIR /app/webui
COPY --from=source /src/webui/package.json /src/webui/package-lock.json ./
RUN npm ci
COPY --from=source /src/webui ./
COPY --from=source /src/config.example.json /app/config.example.json
RUN npm run build
FROM golang:1.26 AS go-builder
WORKDIR /app
COPY --from=source /src/go.mod /src/go.sum* ./
RUN go mod download
COPY --from=source /src ./
RUN set -eux; \
BUILD_VERSION_RESOLVED=""; \
if [ -f VERSION ]; then BUILD_VERSION_RESOLVED="$(cat VERSION | tr -d '[:space:]')"; fi; \
CGO_ENABLED=0 go build -buildvcs=false \
-ldflags="-s -w -X ds2api/internal/version.BuildVersion=${BUILD_VERSION_RESOLVED}" \
-o /out/ds2api ./cmd/ds2api
FROM debian:bookworm-slim
WORKDIR /app
RUN apt-get update \
&& apt-get install -y --no-install-recommends ca-certificates \
&& rm -rf /var/lib/apt/lists/* \
&& mkdir -p /app/data /app/static \
&& chmod -R 777 /app
COPY --from=go-builder /out/ds2api /usr/local/bin/ds2api
COPY --from=go-builder /app/config.example.json /app/config.example.json
COPY --from=webui-builder /app/static/admin /app/static/admin
ENV PORT=7860
ENV DS2API_CONFIG_PATH=/app/data/config.json
EXPOSE 7860
CMD ["/usr/local/bin/ds2api"]