75 lines
2.0 KiB
Docker
75 lines
2.0 KiB
Docker
ARG BUILDKIT_SBOM_SCAN_CONTEXT=true
|
|
# Suppress warning about invalid variable expansion
|
|
ARG GO_VERSION=PLEASE_PROVIDE_GO_VERSION
|
|
ARG DEBIAN=sid-slim
|
|
|
|
# Hack to normalize platform to match the chosed build image
|
|
# Get the gotify/build image tag
|
|
ARG __TARGETPLATFORM_DASHES=${TARGETPLATFORM/\//-}
|
|
ARG __TARGETPLATFORM_GO_NOTATION=${__TARGETPLATFORM_DASHES/arm\/v7/arm-7}
|
|
|
|
# --- JS Builder ---
|
|
|
|
FROM --platform=${BUILDPLATFORM} node:23 AS js-builder
|
|
|
|
ARG BUILD_JS=0
|
|
|
|
COPY ./Makefile /src/gotify/Makefile
|
|
COPY ./ui /src/gotify/ui
|
|
|
|
RUN if [ "$BUILD_JS" = "1" ]; then \
|
|
(cd /src/gotify/ui && yarn install) && \
|
|
(cd /src/gotify && make build-js) \
|
|
else \
|
|
mkdir -p /src/gotify/ui/build; \
|
|
fi
|
|
|
|
# --- Go Builder ---
|
|
|
|
FROM --platform=${BUILDPLATFORM} gotify/build:${GO_VERSION}-${__TARGETPLATFORM_GO_NOTATION} AS builder
|
|
|
|
ARG BUILDPLATFORM
|
|
ARG TARGETPLATFORM
|
|
ARG BUILD_JS=0
|
|
ARG RUN_TESTS=0 # 0=never, 1=native only
|
|
ARG LD_FLAGS=""
|
|
ENV DEBIAN_FRONTEND=noninteractive
|
|
|
|
RUN apt-get update && apt-get install -yq --no-install-recommends \
|
|
ca-certificates \
|
|
git
|
|
|
|
COPY . /src/gotify
|
|
COPY --from=js-builder /src/gotify/ui/build /ui-build
|
|
|
|
RUN if [ "$BUILD_JS" = "1" ]; then \
|
|
cp -r --update /ui-build /src/gotify/ui/build; \
|
|
fi
|
|
|
|
RUN cd /src/gotify && \
|
|
if [ "$RUN_TESTS" = "1" ] && [ "$BUILDPLATFORM" = "$TARGETPLATFORM" ]; then \
|
|
go test -v ./...; \
|
|
fi && \
|
|
LD_FLAGS=${LD_FLAGS} make OUTPUT=/target/app/gotify-app _build_within_docker
|
|
|
|
FROM debian:${DEBIAN}
|
|
|
|
# Build-time configurables
|
|
ARG GOTIFY_SERVER_EXPOSE=80
|
|
ENV GOTIFY_SERVER_PORT=$GOTIFY_SERVER_EXPOSE
|
|
|
|
WORKDIR /app
|
|
|
|
RUN export DEBIAN_FRONTEND=noninteractive && apt-get update && apt-get install -yq --no-install-recommends \
|
|
tzdata \
|
|
curl \
|
|
ca-certificates && \
|
|
rm -rf /var/lib/apt/lists/*
|
|
|
|
HEALTHCHECK --interval=30s --timeout=5s --start-period=5s CMD curl --fail http://localhost:$GOTIFY_SERVER_PORT/health || exit 1
|
|
EXPOSE $GOTIFY_SERVER_EXPOSE
|
|
|
|
COPY --from=builder /target /
|
|
|
|
ENTRYPOINT ["./gotify-app"]
|