|
## Python VENV configuration |
|
FROM scratch AS context |
|
|
|
ADD pyproject.toml poetry.lock /workspace/ |
|
|
|
## Source-tree |
|
FROM scratch AS source-tree |
|
|
|
COPY --from=context /workspace /workspace |
|
|
|
ADD static/ /workspace/static/ |
|
ADD templates/ /workspace/templates/ |
|
ADD mydjangoproject/ /workspace/mydjangoproject/ |
|
ADD gunicorn.conf.py manage.py /workspace/ |
|
|
|
## Test suite |
|
FROM scratch AS test-suite |
|
|
|
ADD pytest.ini /workspace/pytest.ini |
|
ADD tests/ /workspace/tests |
|
|
|
## Python VENV production dependencies |
|
FROM linksociety/nodepython:1.0.0-python3.10-node18 AS deps |
|
|
|
COPY --from=context /workspace /workspace |
|
WORKDIR /workspace |
|
|
|
RUN poetry install --no-root --no-dev |
|
|
|
## Python VENV development dependencies |
|
FROM linksociety/nodepython:1.0.0-python3.10-node18 AS dev-deps |
|
|
|
COPY --from=deps /workspace /workspace |
|
WORKDIR /workspace |
|
|
|
RUN poetry install --no-root |
|
|
|
## CI steps |
|
FROM linksociety/nodepython:1.0.0-python3.10-node18 AS ci |
|
|
|
COPY --from=source-tree /workspace /workspace |
|
COPY --from=dev-deps /workspace/.venv /workspace/.venv |
|
COPY --from=test-suite /workspace/pytest.ini /workspace/pytest.ini |
|
COPY --from=test-suite /workspace/tests /workspace/tests |
|
WORKDIR /workspace |
|
|
|
ENV MYDJANGOPROJECT_ENV "test" |
|
|
|
RUN poetry run poe ci:lint |
|
RUN poetry run poe ci:django-check |
|
RUN poetry run poe ci:test |
|
|
|
RUN poetry run poe css:deps |
|
RUN poetry run poe css:build |
|
RUN poetry run poe app:collectstatic |
|
|
|
## Final artifact |
|
FROM linksociety/poetry:3.10.4 AS runner |
|
ARG BUILD_ENV="prod" |
|
|
|
COPY --from=source-tree /workspace /workspace |
|
COPY --from=deps /workspace/.venv /workspace/.venv |
|
COPY --from=ci /workspace/dist /workspace/dist |
|
WORKDIR /workspace |
|
|
|
ADD docker/webserver-entrypoint.sh /docker-entrypoint.sh |
|
RUN chmod +x /docker-entrypoint.sh |
|
|
|
ENV MYDJANGOPROJECT_ENV "${BUILD_ENV}" |
|
|
|
RUN poetry install --no-dev |
|
|
|
EXPOSE 8000 |
|
|
|
ENV DJANGO_SECRET_KEY "" |
|
|
|
ENTRYPOINT [ "/docker-entrypoint.sh" ] |