FROM python:alpine3.15 as pgsanity WORKDIR /app RUN apk add libecpg-dev --no-cache RUN pip3 install pgsanity COPY ./db ./db RUN find -name "*.sql" | xargs pgsanity FROM crystallang/crystal:1.2.2-alpine as micrate-deps WORKDIR /app COPY ./micrate/shard.yml ./micrate/shard.lock ./ RUN shards install --production FROM crystallang/crystal:1.2.2-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 COPY ./scripts ./scripts RUN . ./scripts/build.sh ${BUILD_ENV} FROM crystallang/crystal:1.2.2-alpine as deps WORKDIR /app RUN apk add curl --no-cache COPY ./shard.yml ./shard.lock ./ RUN shards install FROM crystallang/crystal:1.2.2-alpine as builder ARG BUILD_ENV WORKDIR /app COPY --from=deps /app/shard.yml /app/shard.lock ./ COPY --from=deps /app/lib ./lib COPY --from=deps /app/bin ./bin COPY ./src ./src RUN if [ ${BUILD_ENV} = "development" ]; then ./bin/ameba ./src; fi COPY ./scripts ./scripts RUN . ./scripts/build.sh ${BUILD_ENV} FROM scratch as runner COPY --from=micrate-builder /app/bin/micrate . COPY --from=builder /app/bin/mw . COPY --from=pgsanity /app/db ./db EXPOSE 8080 CMD [ "/mw" ]