FROM alpine:3.23 AS base

RUN apk update && \
        apk add --no-cache \
        make \
        gcc \
        git \
        musl-dev \
        libstdc++

COPY --from=golang:1.25.6-alpine3.22 /usr/local/go/ /usr/local/go/
ENV PATH="/usr/local/go/bin:${PATH}"
ENV CGO_ENABLED=0

COPY --from=node:24.13.0-alpine3.22 /usr/local/ /usr/local/
ENV NODE_PATH="/usr/local/lib/node_modules"
ENV PATH="/usr/local/bin:${PATH}"

WORKDIR /opengist

COPY . .


FROM base AS dev
RUN apk add --no-cache \
    openssl \
    openssh-server \
    curl \
    wget \
    git \
    gnupg \
    xz

EXPOSE 6157 6158 2222 16157

RUN git config --global --add safe.directory /opengist
RUN make install

VOLUME /opengist

CMD ["make", "watch"]


FROM base AS build

RUN make


FROM alpine:3.23 AS prod

RUN apk update && \
    apk add --no-cache \
    shadow \
    openssh-server \
    curl \
    git

RUN addgroup -S opengist && \
    adduser -S -G opengist -s /bin/ash -g 'Opengist User' opengist

WORKDIR /app/opengist

COPY --from=build --chown=opengist:opengist /opengist/config.yml /config.yml
COPY --from=build --chown=opengist:opengist /opengist/opengist .
COPY --from=build --chown=opengist:opengist /opengist/docker ./docker

EXPOSE 6157 6158 2222
VOLUME /opengist
HEALTHCHECK --interval=60s --timeout=30s --start-period=15s --retries=3 CMD curl -f http://localhost:6157/healthcheck || exit 1
ENTRYPOINT ["./docker/entrypoint.sh"]
