FROM golang:1.17-alpine3.15 AS go_builder
RUN apk --no-cache add \
    --virtual .build-deps \
    	alpine-sdk \
    	cmake \
    	sudo \
    	libssh2 libssh2-dev \
    	git \
    	dep \
    	bash \
    	curl \
    imagemagick \
    imagemagick-dev
WORKDIR /go/src/app
COPY go.* ./
RUN go mod download
COPY . ./
RUN go build -o app ./frontend

FROM node:alpine as asset_builder
RUN apk --no-cache add \
    --virtual .build-deps \
    	alpine-sdk \
    	cmake \
    	libssh2 libssh2-dev \
    	git \
    	dep \
    	bash \
    	curl \
    python3
WORKDIR /app
COPY frontend/package* /app/
RUN npm ci
COPY frontend/assets /app/assets
RUN npm run build

FROM alpine:3.15
RUN apk --no-cache add imagemagick
RUN addgroup -g 1000 -S app && \
    adduser -u 1000 -G app -S app
COPY --from=go_builder /go/src/app/app /
COPY frontend/templates /templates
COPY --from=asset_builder /app/assets /assets
USER app
ENTRYPOINT ["/app"]