#################
# Build Step
#################

FROM golang:buster as build
LABEL maintainers="Ben Yanke <ben@benyanke.com>, Jörn Friedrich Dreyer <jfd@butonic.de>, Chris F Ravenscroft <chris@voilaweb.com>"

# Setup work env
RUN mkdir /app /tmp/gocode
ADD . /app/
WORKDIR /app

# Required envs for GO
ENV GOPATH=/tmp/gocode
ENV GOOS=linux
ENV GOARCH=amd64
ENV GO_ENABLED=1

# Only needed for alpine builds // also: busybox
RUN apt -qq update && apt -qq install -y git make build-essential busybox-static dumb-init

# Install deps
RUN go get -d -v ./...

# Build and copy final result
RUN uname -a
RUN uname -m
RUN bash -c '[[ $(uname -m) == x86_64 ]] && { make linuxamd64 && cp ./bin/linuxamd64/glauth /app/glauth; export PLUGIN_OS=linux PLUGIN_ARCH=amd64; make bin/linuxamd64/sqlite.so bin/linuxamd64/postgres.so bin/linuxamd64/mysql.so && cp ./bin/linuxamd64/*.so /app/; } || { true; }'
RUN bash -c '[[ $(uname -m) == aarch64 ]] && { make linuxarm64 && cp ./bin/linuxarm64/glauth /app/glauth; export PLUGIN_OS=linux PLUGIN_ARCH=arm64; make bin/linuxarm64/sqlite.so bin/linuxarm64/postgres.so bin/linuxarm64/mysql.so && cp ./bin/linuxarm64/*.so /app/; } || { true; }'

# Check glauth works
RUN /app/glauth --version

#################
# Run Step
#################

FROM gcr.io/distroless/base-debian10 as run
LABEL maintainers="Ben Yanke <ben@benyanke.com>, Jörn Friedrich Dreyer <jfd@butonic.de>, Chris F Ravenscroft <chris@voilaweb.com>"

# Copy binary from build container
COPY --from=build /app/glauth /app/glauth
COPY --from=build /app/*.so /app/

# Copy docker specific scripts from build container
COPY --from=build /app/scripts/docker/start-plugins.sh /app/docker/
COPY --from=build /app/scripts/docker/default-config-plugins.cfg /app/docker/
COPY --from=build /app/scripts/docker/gl.db /app/docker/

# Just what we need
COPY --from=build /usr/bin/dumb-init /usr/bin/dumb-init
COPY --from=build /bin/busybox /bin/sh
COPY --from=build /bin/busybox /bin/ln
COPY --from=build /bin/busybox /bin/rm
# Debug env: COPY --from=build /bin/busybox /bin/busybox
RUN ln /bin/sh /usr/bin/cp && ln /bin/sh /usr/bin/mkdir && rm /bin/ln /bin/rm

# Install init

# Expose web and LDAP ports
EXPOSE 389 636 5555

ENTRYPOINT ["/usr/bin/dumb-init", "--"]
CMD ["/bin/sh", "/app/docker/start-plugins.sh"]
