# build >>>
FROM golang:1.26-alpine AS builder

ARG SERVER_VERSION="main"

RUN apk update && apk add --no-cache git
RUN git clone --branch $SERVER_VERSION --depth 1 https://github.com/esm-dev/esm.sh /tmp/esm.sh

WORKDIR /tmp/esm.sh
RUN go build -ldflags="-s -w -X 'github.com/esm-dev/esm.sh/server.VERSION=${SERVER_VERSION}'" -o esmd server/esmd/main.go
# <<< build

FROM alpine:latest

RUN apk update && apk add --no-cache git
RUN addgroup -g 1000 esm && adduser -u 1000 --home=/esm -G esm -D esm

COPY --from=builder /tmp/esm.sh/esmd /bin/esmd
COPY --from=denoland/deno:bin-2.6.9 --chown=esm:esm /deno /esm/bin/deno

# deno doesn't provide musl build yet, the hack below makes the gnu build working in alpine
# see https://github.com/denoland/deno_docker/blob/main/alpine.dockerfile
COPY --from=gcr.io/distroless/cc --chown=root:root --chmod=755 /lib/*-linux-gnu/* /usr/local/lib/
COPY --from=gcr.io/distroless/cc --chown=root:root --chmod=755 /lib/ld-linux-* /lib/
RUN mkdir /lib64 && ln -s /usr/local/lib/ld-linux-* /lib64/

ENV DENO_USE_CGROUPS=1
ENV LD_LIBRARY_PATH="/usr/local/lib"
ENV ESMDIR="/esm"

WORKDIR /esm
EXPOSE 80
USER esm
CMD ["esmd"]
