# Copyright (c) 2016-2024 Martin Donath <martin.donath@squidfunk.com> # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE # AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER # LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING # FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS # IN THE SOFTWARE. FROM python:3.11-alpine3.19 AS build # Build-time flags ARG WITH_PLUGINS=true # Environment variables ENV PACKAGES=/usr/local/lib/python3.11/site-packages ENV PYTHONDONTWRITEBYTECODE=1 # Set build directory WORKDIR /tmp # Copy files necessary for build COPY material material COPY package.json package.json COPY README.md README.md COPY *requirements.txt ./ COPY pyproject.toml pyproject.toml # Perform build and cleanup artifacts and caches RUN \ apk upgrade --update-cache -a \ && \ apk add --no-cache \ cairo \ freetype-dev \ git \ git-fast-import \ jpeg-dev \ openssh \ tini \ zlib-dev \ && \ apk add --no-cache --virtual .build \ gcc \ g++ \ libffi-dev \ musl-dev \ && \ pip install --no-cache-dir --upgrade pip \ && \ pip install --no-cache-dir . \ && \ if [ "${WITH_PLUGINS}" = "true" ]; then \ pip install --no-cache-dir \ mkdocs-material[recommended] \ mkdocs-material[imaging]; \ fi \ && \ if [ -e user-requirements.txt ]; then \ pip install -U -r user-requirements.txt; \ fi \ && \ apk del .build \ && \ for theme in mkdocs readthedocs; do \ rm -rf ${PACKAGES}/mkdocs/themes/$theme; \ ln -s \ ${PACKAGES}/material/templates \ ${PACKAGES}/mkdocs/themes/$theme; \ done \ && \ rm -rf /tmp/* /root/.cache \ && \ find ${PACKAGES} \ -type f \ -path "*/__pycache__/*" \ -exec rm -f {} \; \ && \ git config --system --add safe.directory /docs \ && \ git config --system --add safe.directory /site # From empty image FROM scratch # Copy all from build COPY --from=build / / # Set working directory WORKDIR /docs # Expose MkDocs development server port EXPOSE 8000 # Start development server by default ENTRYPOINT ["/sbin/tini", "--", "mkdocs"] CMD ["serve", "--dev-addr=0.0.0.0:8000"]