FROM node:lts-alpine as build_vue

# make the 'app' folder the current working directory
WORKDIR /app

# copy both 'package.json' and 'package-lock.json' (if available)
COPY cmd/frontend/package*.json ./

# install project dependencies
RUN npm install

COPY cmd/frontend .

RUN npm run build

FROM golang:1.16-alpine as build_go

COPY go.* /music-server/
COPY ./cmd/*.go /music-server/cmd/
COPY ./cmd/swagger /music-server/cmd/swagger
COPY ./pkg /music-server/pkg/

WORKDIR /music-server/
RUN go mod download

WORKDIR /music-server/cmd

COPY --from=build_vue /app/dist ./frontend/dist

RUN go build -o /music-server/MusicServer

# Stage 2, distribution container
FROM golang:1.16-alpine
RUN apk add --no-cache bash
EXPOSE 8080
VOLUME /sorted
VOLUME /doc

ENV DB_HOST ""
ENV DB_PORT ""
ENV DB_USERNAME ""
ENV DB_PASSWORD ""
ENV DB_NAME ""

COPY --from=build_go /music-server/MusicServer .
COPY docs/swagger.yaml .
COPY ./songs/ ./songs/
COPY ./init.sh .
RUN chmod 777 ./init.sh

CMD ./init.sh