FROM crystallang/crystal:latest-alpine as micrate-deps WORKDIR /app COPY ./micrate/shard.yml ./micrate/shard.lock ./ RUN shards install --production FROM crystallang/crystal:latest-alpine as micrate-builder ARG BUILD_ENV WORKDIR /app COPY --from=micrate-deps /app/shard.yml /app/shard.lock ./ COPY --from=micrate-deps /app/lib lib/ COPY ./micrate/src ./src RUN shards build --production --static --release --no-debug --verbose -s -p -t FROM crystallang/crystal:latest-alpine as deps WORKDIR /app RUN apk add curl --no-cache COPY ./shard.yml ./shard.lock ./ RUN shards install FROM crystallang/crystal:latest-alpine as builder ARG BUILD_ENV WORKDIR /app COPY --from=deps /app/shard.yml /app/shard.lock ./ COPY --from=deps /app/lib ./lib COPY ./src ./src RUN if [ "${BUILD_ENV}" = "development" ]; then \ shards build --static --verbose -s -p -t; \ else \ shards build --static --release --no-debug --verbose -s -p -t; \ fi FROM scratch as runner COPY --from=micrate-builder /app/bin/micrate /bin/micrate COPY --from=builder /app/bin/mw /bin/mw COPY ./db ./db EXPOSE 80 CMD [ "mw" ]