From 19cf66be0f7b979263027b04a46aa9b978d7b6dc Mon Sep 17 00:00:00 2001 From: Trenton Holmes Date: Sat, 26 Mar 2022 13:21:17 -0700 Subject: [PATCH] Updates the Dockerfile to utilize our new base image 1.0 which provides the pre-compiled wheels for certain dependencies and most base packages --- .dockerignore | 2 + .editorconfig | 3 + .github/workflows/ci.yml | 81 ++++++------ Dockerfile | 146 ++++++---------------- Pipfile | 4 +- Pipfile.lock | 240 +++++++++++++++--------------------- docker/docker-entrypoint.sh | 2 +- docker/management_script.sh | 2 +- requirements.txt | 14 +-- 9 files changed, 190 insertions(+), 304 deletions(-) diff --git a/.dockerignore b/.dockerignore index a332c2ee7..d03b3b9ab 100644 --- a/.dockerignore +++ b/.dockerignore @@ -17,3 +17,5 @@ **/htmlcov /src/.pytest_cache .idea +.venv/ +.vscode/ diff --git a/.editorconfig b/.editorconfig index 284569845..125108a0c 100644 --- a/.editorconfig +++ b/.editorconfig @@ -32,3 +32,6 @@ indent_style = space # violate it. [**/test_*.py] max_line_length = off + +[Dockerfile] +indent_style = space diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index da3e7dfd2..7486fbd5c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -8,6 +8,8 @@ on: branches-ignore: - 'translations**' pull_request: + # We do not need synchronize event, it is covered by on:push + types: [opened, reopened] branches-ignore: - 'translations**' @@ -18,13 +20,13 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install pipenv run: pipx install pipenv - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.9 cache: "pipenv" @@ -40,7 +42,7 @@ jobs: pipenv run make html - name: Upload artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: documentation path: docs/_build/html/ @@ -51,7 +53,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Install checkers run: | @@ -91,8 +93,8 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 - - uses: actions/setup-node@v2 + uses: actions/checkout@v3 + - uses: actions/setup-node@v3 with: node-version: '16' - @@ -115,7 +117,7 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 with: fetch-depth: 2 - @@ -123,7 +125,7 @@ jobs: run: pipx install pipenv - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: "${{ matrix.python-version }}" cache: "pipenv" @@ -168,14 +170,14 @@ jobs: tests-frontend: needs: [code-checks-frontend] name: "Frontend Tests" - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 strategy: matrix: node-version: [16.x] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v3 - name: Use Node.js ${{ matrix.node-version }} - uses: actions/setup-node@v1 + uses: actions/setup-node@v3 with: node-version: ${{ matrix.node-version }} - run: cd src-ui && npm ci @@ -185,31 +187,23 @@ jobs: # build and push image to docker hub. build-docker-image: if: github.event_name == 'push' && (startsWith(github.ref, 'refs/heads/feature-') || github.ref == 'refs/heads/dev' || github.ref == 'refs/heads/beta' || startsWith(github.ref, 'refs/tags/ngx-') || startsWith(github.ref, 'refs/tags/beta-')) - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 needs: [tests-backend, tests-frontend] steps: - - name: Prepare - id: prepare - run: | - IMAGE_NAME=ghcr.io/${{ github.repository }} - if [[ $GITHUB_REF == refs/tags/ngx-* ]]; then - TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/tags/ngx-},${IMAGE_NAME}:latest - INSPECT_TAG=${IMAGE_NAME}:latest - elif [[ $GITHUB_REF == refs/tags/beta-* ]]; then - TAGS=${IMAGE_NAME}:beta - INSPECT_TAG=${TAGS} - elif [[ $GITHUB_REF == refs/heads/* ]]; then - TAGS=${IMAGE_NAME}:${GITHUB_REF#refs/heads/} - INSPECT_TAG=${TAGS} - else - exit 1 - fi - echo ::set-output name=tags::${TAGS} - echo ::set-output name=inspect_tag::${INSPECT_TAG} + name: Gather Docker metadata + id: docker-meta + uses: docker/metadata-action@v3 + with: + images: ghcr.io/${{ github.repository }}/paperless-ngx + tags: | + type=match,pattern=ngx-(\d.\d.\d),group=1 + type=semver,pattern=ngx-{{version}} + type=semver,pattern=ngx-{{major}}.{{minor}} + type=ref - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Docker Buildx uses: docker/setup-buildx-action@v1 @@ -230,22 +224,23 @@ jobs: context: . file: ./Dockerfile platforms: linux/amd64,linux/arm/v7,linux/arm64 - push: true - tags: ${{ steps.prepare.outputs.tags }} + push: ${{ github.event_name != 'pull_request' }} + tags: ${{ steps.docker-meta.outputs.tags }} + labels: ${{ steps.docker-meta.outputs.labels }} cache-from: type=gha cache-to: type=gha,mode=max - name: Inspect image run: | - docker buildx imagetools inspect ${{ steps.prepare.outputs.inspect_tag }} + docker buildx imagetools inspect ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }} - name: Export frontend artifact from docker run: | - docker run -d --name frontend-extract ${{ steps.prepare.outputs.inspect_tag }} + docker create --name frontend-extract ${{ fromJSON(steps.docker-meta.outputs.json).tags[0] }} docker cp frontend-extract:/usr/src/paperless/src/documents/static/frontend src/documents/static/frontend/ - name: Upload frontend artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: frontend-compiled path: src/documents/static/frontend/ @@ -256,10 +251,10 @@ jobs: steps: - name: Checkout - uses: actions/checkout@v2 + uses: actions/checkout@v3 - name: Set up Python - uses: actions/setup-python@v2 + uses: actions/setup-python@v3 with: python-version: 3.9 - @@ -271,13 +266,13 @@ jobs: pip3 install -r requirements.txt - name: Download frontend artifact - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: frontend-compiled path: src/documents/static/frontend/ - name: Download documentation artifact - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: documentation path: docs/_build/html/ @@ -312,19 +307,19 @@ jobs: tar -cJf paperless-ngx.tar.xz paperless-ngx/ - name: Upload release artifact - uses: actions/upload-artifact@v2 + uses: actions/upload-artifact@v3 with: name: release path: dist/paperless-ngx.tar.xz publish-release: - runs-on: ubuntu-latest + runs-on: ubuntu-20.04 needs: build-release if: contains(github.ref, 'refs/tags/ngx-') || contains(github.ref, 'refs/tags/beta-') steps: - name: Download release artifact - uses: actions/download-artifact@v2 + uses: actions/download-artifact@v3 with: name: release path: ./ diff --git a/Dockerfile b/Dockerfile index 187c2d59f..eaa00089f 100644 --- a/Dockerfile +++ b/Dockerfile @@ -6,69 +6,13 @@ WORKDIR /src/src-ui RUN npm update npm -g && npm ci --no-optional RUN ./node_modules/.bin/ng build --configuration production +FROM ghcr.io/paperless-ngx/builder/ngx-base:1.0 as main-app -FROM ubuntu:20.04 AS jbig2enc - -WORKDIR /usr/src/jbig2enc - -RUN apt-get update \ - && apt-get install -y --no-install-recommends build-essential \ - automake \ - libtool \ - libleptonica-dev \ - zlib1g-dev \ - git \ - ca-certificates \ - && rm -rf /var/lib/apt/lists/* - -RUN git clone https://github.com/agl/jbig2enc . -RUN ./autogen.sh -RUN ./configure && make - - -FROM python:3.9-slim-bullseye - -# Binary dependencies -RUN apt-get update \ - && apt-get -y --no-install-recommends install \ - # Basic dependencies - curl \ - gnupg \ - imagemagick \ - gettext \ - tzdata \ - gosu \ - # fonts for text file thumbnail generation - fonts-liberation \ - # for Numpy - libatlas-base-dev \ - libxslt1-dev \ - # thumbnail size reduction - optipng \ - libxml2 \ - pngquant \ - unpaper \ - zlib1g \ - ghostscript \ - icc-profiles-free \ - # Mime type detection - file \ - libmagic-dev \ - media-types \ - # OCRmyPDF dependencies - liblept5 \ - tesseract-ocr \ - tesseract-ocr-eng \ - tesseract-ocr-deu \ - tesseract-ocr-fra \ - tesseract-ocr-ita \ - tesseract-ocr-spa \ - && rm -rf /var/lib/apt/lists/* - -# copy jbig2enc -COPY --from=jbig2enc /usr/src/jbig2enc/src/.libs/libjbig2enc* /usr/local/lib/ -COPY --from=jbig2enc /usr/src/jbig2enc/src/jbig2 /usr/local/bin/ -COPY --from=jbig2enc /usr/src/jbig2enc/src/*.h /usr/local/include/ +LABEL org.opencontainers.image.authors="paperless-ngx team " +LABEL org.opencontainers.image.documentation="https://paperless-ngx.readthedocs.io/en/latest/" +LABEL org.opencontainers.image.source="https://github.com/paperless-ngx/paperless-ngx" +LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-ngx" +LABEL org.opencontainers.image.licenses="GPL-3.0-only" WORKDIR /usr/src/paperless/src/ @@ -76,47 +20,31 @@ COPY requirements.txt ../ # Python dependencies RUN apt-get update \ + # python-Levenshtein still needs to be compiled here && apt-get -y --no-install-recommends install \ - build-essential \ - libpq-dev \ - git \ - zlib1g-dev \ - libjpeg62-turbo-dev \ - && if [ "$(uname -m)" = "armv7l" ] || [ "$(uname -m)" = "aarch64" ]; \ - then echo "Building qpdf" \ - && mkdir -p /usr/src/qpdf \ - && cd /usr/src/qpdf \ - && git clone https://github.com/qpdf/qpdf.git . \ - && git checkout --quiet release-qpdf-10.6.2 \ - && ./configure \ - && make \ - && make install \ - && cd /usr/src/paperless/src/ \ - && rm -rf /usr/src/qpdf; \ - else \ - echo "Skipping qpdf build because pikepdf binary wheels are available."; \ - fi \ - && python3 -m pip install --upgrade pip wheel \ - && python3 -m pip install --default-timeout=1000 --upgrade --no-cache-dir supervisor \ - && python3 -m pip install --default-timeout=1000 --no-cache-dir -r ../requirements.txt \ - && apt-get -y purge build-essential git zlib1g-dev libjpeg62-turbo-dev \ - && apt-get -y autoremove --purge \ - && rm -rf /var/lib/apt/lists/* + build-essential \ + && python3 -m pip install --upgrade --no-cache-dir pip wheel \ + && python3 -m pip install --default-timeout=1000 --upgrade --no-cache-dir supervisor \ + && python3 -m pip install --default-timeout=1000 --no-cache-dir -r ../requirements.txt \ + && apt-get -y purge build-essential \ + && apt-get -y autoremove --purge \ + && rm -rf /var/lib/apt/lists/* # setup docker-specific things COPY docker/ ./docker/ RUN cd docker \ - && cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \ - && mkdir /var/log/supervisord /var/run/supervisord \ - && cp supervisord.conf /etc/supervisord.conf \ - && cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \ - && cp docker-prepare.sh /sbin/docker-prepare.sh \ - && chmod 755 /sbin/docker-entrypoint.sh \ - && chmod +x install_management_commands.sh \ - && ./install_management_commands.sh \ - && cd .. \ - && rm docker -rf + && cp imagemagick-policy.xml /etc/ImageMagick-6/policy.xml \ + && mkdir /var/log/supervisord /var/run/supervisord \ + && cp supervisord.conf /etc/supervisord.conf \ + && cp docker-entrypoint.sh /sbin/docker-entrypoint.sh \ + && chmod 755 /sbin/docker-entrypoint.sh \ + && cp docker-prepare.sh /sbin/docker-prepare.sh \ + && chmod 755 /sbin/docker-prepare.sh \ + && chmod +x install_management_commands.sh \ + && ./install_management_commands.sh \ + && cd .. \ + && rm -rf docker/ COPY gunicorn.conf.py ../ @@ -125,18 +53,18 @@ COPY --from=compile-frontend /src/src/ ./ # add users, setup scripts RUN addgroup --gid 1000 paperless \ - && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ - && chown -R paperless:paperless ../ \ - && gosu paperless python3 manage.py collectstatic --clear --no-input \ - && gosu paperless python3 manage.py compilemessages + && useradd --uid 1000 --gid paperless --home-dir /usr/src/paperless paperless \ + && chown -R paperless:paperless ../ \ + && gosu paperless python3 manage.py collectstatic --clear --no-input \ + && gosu paperless python3 manage.py compilemessages + +VOLUME ["/usr/src/paperless/data", \ + "/usr/src/paperless/media", \ + "/usr/src/paperless/consume", \ + "/usr/src/paperless/export"] -VOLUME ["/usr/src/paperless/data", "/usr/src/paperless/media", "/usr/src/paperless/consume", "/usr/src/paperless/export"] ENTRYPOINT ["/sbin/docker-entrypoint.sh"] -EXPOSE 8000 -CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"] -LABEL org.opencontainers.image.authors="paperless-ngx team " -LABEL org.opencontainers.image.documentation="https://paperless-ngx.readthedocs.io/en/latest/" -LABEL org.opencontainers.image.source="https://github.com/paperless-ngx/paperless-ngx" -LABEL org.opencontainers.image.url="https://github.com/paperless-ngx/paperless-ngx" -LABEL org.opencontainers.image.licenses="GPL-3.0-only" +EXPOSE 8000 + +CMD ["/usr/local/bin/supervisord", "-c", "/etc/supervisord.conf"] diff --git a/Pipfile b/Pipfile index 7cbd65b55..12f9b39f5 100644 --- a/Pipfile +++ b/Pipfile @@ -23,12 +23,14 @@ imap-tools = "*" langdetect = "*" pathvalidate = "*" pillow = "~=9.0" +# Any version update to pikepdf requires a base image update pikepdf = "~=5.1" python-gnupg = "*" python-dotenv = "*" python-dateutil = "*" python-magic = "*" -psycopg2-binary = "*" +# Any version update to psycopg2 requires a base image update +psycopg2 = "*" redis = "*" # Pinned because aarch64 wheels and updates cause warnings when loading the classifier model. scikit-learn="==1.0.2" diff --git a/Pipfile.lock b/Pipfile.lock index 8d0b9cfc0..8c1309e9e 100644 --- a/Pipfile.lock +++ b/Pipfile.lock @@ -1,7 +1,7 @@ { "_meta": { "hash": { - "sha256": "7e76d6b807f96506f56c1bddb36b44deda6745014e5ed7c94f047fc1eb972eb8" + "sha256": "f33c0aeb0cb880b444efd367ad5b47358dde2a9b18b55dcd6943dd81f6c7e2a6" }, "pipfile-spec": 6, "requires": {}, @@ -494,12 +494,12 @@ }, "importlib-resources": { "hashes": [ - "sha256:33a95faed5fc19b4bc16b29a6eeae248a3fe69dd55d4d229d2b480e23eeaad45", - "sha256:d756e2f85dd4de2ba89be0b21dba2a3bbec2e871a42a3a16719258a11f87506b" + "sha256:1b93238cbf23b4cde34240dd8321d99e9bf2eb4bc91c0c99b2886283e7baad85", + "sha256:a9dd72f6cc106aeb50f6e66b86b69b454766dd6e39b69ac68450253058706bcc" ], "index": "pypi", "markers": "python_version < '3.9'", - "version": "==5.4.0" + "version": "==5.6.0" }, "incremental": { "hashes": [ @@ -793,64 +793,19 @@ "markers": "python_version >= '3'", "version": "==2.4.0" }, - "psycopg2-binary": { + "psycopg2": { "hashes": [ - "sha256:01310cf4cf26db9aea5158c217caa92d291f0500051a6469ac52166e1a16f5b7", - "sha256:083a55275f09a62b8ca4902dd11f4b33075b743cf0d360419e2051a8a5d5ff76", - "sha256:090f3348c0ab2cceb6dfbe6bf721ef61262ddf518cd6cc6ecc7d334996d64efa", - "sha256:0a29729145aaaf1ad8bafe663131890e2111f13416b60e460dae0a96af5905c9", - "sha256:0c9d5450c566c80c396b7402895c4369a410cab5a82707b11aee1e624da7d004", - "sha256:10bb90fb4d523a2aa67773d4ff2b833ec00857f5912bafcfd5f5414e45280fb1", - "sha256:12b11322ea00ad8db8c46f18b7dfc47ae215e4df55b46c67a94b4effbaec7094", - "sha256:152f09f57417b831418304c7f30d727dc83a12761627bb826951692cc6491e57", - "sha256:15803fa813ea05bef089fa78835118b5434204f3a17cb9f1e5dbfd0b9deea5af", - "sha256:15c4e4cfa45f5a60599d9cec5f46cd7b1b29d86a6390ec23e8eebaae84e64554", - "sha256:183a517a3a63503f70f808b58bfbf962f23d73b6dccddae5aa56152ef2bcb232", - "sha256:1f14c8b0942714eb3c74e1e71700cbbcb415acbc311c730370e70c578a44a25c", - "sha256:1f6b813106a3abdf7b03640d36e24669234120c72e91d5cbaeb87c5f7c36c65b", - "sha256:280b0bb5cbfe8039205c7981cceb006156a675362a00fe29b16fbc264e242834", - "sha256:2d872e3c9d5d075a2e104540965a1cf898b52274a5923936e5bfddb58c59c7c2", - "sha256:2f9ffd643bc7349eeb664eba8864d9e01f057880f510e4681ba40a6532f93c71", - "sha256:3303f8807f342641851578ee7ed1f3efc9802d00a6f83c101d21c608cb864460", - "sha256:35168209c9d51b145e459e05c31a9eaeffa9a6b0fd61689b48e07464ffd1a83e", - "sha256:3a79d622f5206d695d7824cbf609a4f5b88ea6d6dab5f7c147fc6d333a8787e4", - "sha256:404224e5fef3b193f892abdbf8961ce20e0b6642886cfe1fe1923f41aaa75c9d", - "sha256:46f0e0a6b5fa5851bbd9ab1bc805eef362d3a230fbdfbc209f4a236d0a7a990d", - "sha256:47133f3f872faf28c1e87d4357220e809dfd3fa7c64295a4a148bcd1e6e34ec9", - "sha256:526ea0378246d9b080148f2d6681229f4b5964543c170dd10bf4faaab6e0d27f", - "sha256:53293533fcbb94c202b7c800a12c873cfe24599656b341f56e71dd2b557be063", - "sha256:539b28661b71da7c0e428692438efbcd048ca21ea81af618d845e06ebfd29478", - "sha256:57804fc02ca3ce0dbfbef35c4b3a4a774da66d66ea20f4bda601294ad2ea6092", - "sha256:63638d875be8c2784cfc952c9ac34e2b50e43f9f0a0660b65e2a87d656b3116c", - "sha256:6472a178e291b59e7f16ab49ec8b4f3bdada0a879c68d3817ff0963e722a82ce", - "sha256:68641a34023d306be959101b345732360fc2ea4938982309b786f7be1b43a4a1", - "sha256:6e82d38390a03da28c7985b394ec3f56873174e2c88130e6966cb1c946508e65", - "sha256:761df5313dc15da1502b21453642d7599d26be88bff659382f8f9747c7ebea4e", - "sha256:7af0dd86ddb2f8af5da57a976d27cd2cd15510518d582b478fbb2292428710b4", - "sha256:7b1e9b80afca7b7a386ef087db614faebbf8839b7f4db5eb107d0f1a53225029", - "sha256:874a52ecab70af13e899f7847b3e074eeb16ebac5615665db33bce8a1009cf33", - "sha256:887dd9aac71765ac0d0bac1d0d4b4f2c99d5f5c1382d8b770404f0f3d0ce8a39", - "sha256:8b344adbb9a862de0c635f4f0425b7958bf5a4b927c8594e6e8d261775796d53", - "sha256:8fc53f9af09426a61db9ba357865c77f26076d48669f2e1bb24d85a22fb52307", - "sha256:91920527dea30175cc02a1099f331aa8c1ba39bf8b7762b7b56cbf54bc5cce42", - "sha256:93cd1967a18aa0edd4b95b1dfd554cf15af657cb606280996d393dadc88c3c35", - "sha256:99485cab9ba0fa9b84f1f9e1fef106f44a46ef6afdeec8885e0b88d0772b49e8", - "sha256:9d29409b625a143649d03d0fd7b57e4b92e0ecad9726ba682244b73be91d2fdb", - "sha256:a29b3ca4ec9defec6d42bf5feb36bb5817ba3c0230dd83b4edf4bf02684cd0ae", - "sha256:a9e1f75f96ea388fbcef36c70640c4efbe4650658f3d6a2967b4cc70e907352e", - "sha256:accfe7e982411da3178ec690baaceaad3c278652998b2c45828aaac66cd8285f", - "sha256:adf20d9a67e0b6393eac162eb81fb10bc9130a80540f4df7e7355c2dd4af9fba", - "sha256:af9813db73395fb1fc211bac696faea4ca9ef53f32dc0cfa27e4e7cf766dcf24", - "sha256:b1c8068513f5b158cf7e29c43a77eb34b407db29aca749d3eb9293ee0d3103ca", - "sha256:bda845b664bb6c91446ca9609fc69f7db6c334ec5e4adc87571c34e4f47b7ddb", - "sha256:c381bda330ddf2fccbafab789d83ebc6c53db126e4383e73794c74eedce855ef", - "sha256:c3ae8e75eb7160851e59adc77b3a19a976e50622e44fd4fd47b8b18208189d42", - "sha256:d1c1b569ecafe3a69380a94e6ae09a4789bbb23666f3d3a08d06bbd2451f5ef1", - "sha256:def68d7c21984b0f8218e8a15d514f714d96904265164f75f8d3a70f9c295667", - "sha256:dffc08ca91c9ac09008870c9eb77b00a46b3378719584059c034b8945e26b272", - "sha256:e3699852e22aa68c10de06524a3721ade969abf382da95884e6a10ff798f9281", - "sha256:e847774f8ffd5b398a75bc1c18fbb56564cda3d629fe68fd81971fece2d3c67e", - "sha256:ffb7a888a047696e7f8240d649b43fb3644f14f0ee229077e7f6b9f9081635bd" + "sha256:06f32425949bd5fe8f625c49f17ebb9784e1e4fe928b7cce72edc36fb68e4c0c", + "sha256:0762c27d018edbcb2d34d51596e4346c983bd27c330218c56c4dc25ef7e819bf", + "sha256:083707a696e5e1c330af2508d8fab36f9700b26621ccbcb538abe22e15485362", + "sha256:34b33e0162cfcaad151f249c2649fd1030010c16f4bbc40a604c1cb77173dcf7", + "sha256:4295093a6ae3434d33ec6baab4ca5512a5082cc43c0505293087b8a46d108461", + "sha256:8cf3878353cc04b053822896bc4922b194792df9df2f1ad8da01fb3043602126", + "sha256:8e841d1bf3434da985cc5ef13e6f75c8981ced601fd70cc6bf33351b91562981", + "sha256:9572e08b50aed176ef6d66f15a21d823bb6f6d23152d35e8451d7d2d18fdac56", + "sha256:a81e3866f99382dfe8c15a151f1ca5fde5815fde879348fe5a9884a7c092a305", + "sha256:cb10d44e6694d763fa1078a26f7f6137d69f555a78ec85dc2ef716c37447e4b2", + "sha256:d3ca6421b942f60c008f81a3541e8faf6865a28d5a9b48544b0ee4f40cac7fca" ], "index": "pypi", "version": "==2.9.3" @@ -923,11 +878,11 @@ }, "python-dotenv": { "hashes": [ - "sha256:32b2bdc1873fd3a3c346da1c6db83d0053c3c62f28f1f38516070c4c8971b1d3", - "sha256:a5de49a31e953b45ff2d2fd434bbc2670e8db5273606c1e737cc6b93eff3655f" + "sha256:b7e3b04a59693c42c36f9ab1cc2acc46fa5df8c78e178fc33a8d4cd05c8d498f", + "sha256:d92a187be61fe482e4fd675b6d52200e7be63a12b724abbf931a40ce4fa92938" ], "index": "pypi", - "version": "==0.19.2" + "version": "==0.20.0" }, "python-gnupg": { "hashes": [ @@ -1094,45 +1049,45 @@ }, "reportlab": { "hashes": [ - "sha256:02a67c8caaf669c63f0c410525137b162d2ade43b43e10bf1ac19b1919f6aa95", - "sha256:03f2612f2213b78e31a2f1d580881eca89267874ae61e432a33f64df50f590a7", - "sha256:05627acc324ce213c79fbbcc012d0a576bef8bc540fe0a875a6491c78612b6f4", - "sha256:068000debb926a4dec6442de6e1fff831f5a6cecfe830d715926c82d8f4eeb0b", - "sha256:088359b44b418be27b8fb38dd733ac6c3dd611fad10e6dbba3876027ef216e58", - "sha256:0aabf425f215dc297052194166f951e940c077271d0133bfdd3a08bb56022d6c", - "sha256:12d9582d9a6cd18bf3f61b355c13261baeb22bc0e994f385750eae9d89ce6846", - "sha256:1aad24ddfdfcd89f2db7cd10298de55a6e3a6dfc482b2aabf98880986c550fcc", - "sha256:1be429316812a4c3aacfbee0ef9a84def4a3a0cba37d6c9155563ff8a8a04c8b", - "sha256:1c32ed1c42bbce03faa02e33d1949cc2ca5eda42c52267cacce28f69cb087663", - "sha256:1c51729484e0e1784812746c84c8c97215b95b02ba75057bb5dbe4f206a93c64", - "sha256:1cc100be35dba31ee6865de26d460ade8a4aef451b90c0ec2cc6b7cc5f293440", - "sha256:244b17fc544d0cd41f61648b247fa2fa8c4e1d47602f5fd6ff4ddd7b29f35642", - "sha256:25ca368637467d617cd73fd5e68b31f3ceed2db42a175b76951e32bc97345ed7", - "sha256:31ebc2997c1e57df0cc6a55a83c63e629c8420482bf994e0665e289c4b603c63", - "sha256:3842f9e815924f9880e4a127afd9b22607f701b352513880b9dd6bcf3a651bb4", - "sha256:53ec9fbd6e0c5ac9ee3f349700af8f1bb886878c802086b4d9d0b981def239a9", - "sha256:5da9b84b645e7e7b8f4a219e4d3b5bfce771d0e11f34f861bde4ef5c4b4fc4e6", - "sha256:603e9980f99cdf1a3325a49c092ad0847e3fe032aa59d9f69421f81b4e2199de", - "sha256:60bf28718e50f6d28b3e784c64b29bf73477773537ed7b4177aa90e4a54c2323", - "sha256:6415f16e64c0179ecb2f6231e3433014c5c837ce589661aa8b954944764a8d31", - "sha256:6566fa308633661ec9053ce4dcd145fb10b6f9cc0cf7aa2fee84e9e8f2c77d2d", - "sha256:662ee549793e9b38ecb5dae2521352ff73f05c2816665327835a3a12abe36edc", - "sha256:71617eac54a207ae24e6ac78feee02aca61d5954844ada786c186748c9517565", - "sha256:76257019f254b655b95e88df7ebd1c39ac90543987e968f6e5bdf91797d012f3", - "sha256:7c730dc5421b1b39cbaa39098ef9c7a79f216ab479718eb27bbd0fc3947ddea0", - "sha256:9aa2a746bfbd7878af74d22ed3c2cfc7b920dedf47d943146a20a6e196ab4fcd", - "sha256:9b2b28fe14de1124c310cc349dcb71bb3018ffa11d9eeb4ed7e8acd2570fb8b0", - "sha256:a12dd3ddc2950adbe47d874fd0b675f67d724600eb96da8ab72dc37f9d4d71b2", - "sha256:a8d071c30166deb03c4f99af1d8f48355f8acbe4d05b7b5c3a616a41b2bae3ad", - "sha256:a9218f499ac42133090f16e33a622eff69248753b5c6738c0ee7b916fa084752", - "sha256:b41ed7754de6d1702065c53e5e6f266571eca4139f875bc127849d9c8238a704", - "sha256:b4efd9b1b9bcc95e41e80130be00e89b1ea56b816a362d5f2eb2f141df624ad9", - "sha256:cd0f0cd614a6fdc3b5a76351e9462956fd4d9b62b0e3ca5e7767259768905818", - "sha256:dc7657fcb0bc3e485c3c869a44dddb52d711356a01a456664b7bef827222c982", - "sha256:fdfc56c20b77f0a8ddcdfd13e4dec916dc9c8f1dc59c27611fa7d69e2cfb9a4a" + "sha256:09b2ca175129a34292399fc4c6a8b1739f6c5946368fcaa6f931d69385b2f720", + "sha256:0a7f2b7232c3ffb451b649d55c51a6dd0c8104ad7bbcfe355addf7619705e7fa", + "sha256:0e767cf4507ca8eed7dde8511f0889b0f19f160a2bdf9ef07742b2aaeceed9f2", + "sha256:10681d89a0ca37bb4036283fb8c0efac9ac1b22265dbdf350bda0448be33e00c", + "sha256:15294435f786968bcdf1a7a67bcc23a136470b6ea26919497f5c76ff0f653041", + "sha256:193671445b4885128d8800d3e416eb2fa4fd89bafae08cc9889c0752fe5ad8c2", + "sha256:1967dbc9930917d75c39784712a137d432dbc2e5ca9e132a2453319c2619ccff", + "sha256:1ec84055cf2c83783958b74eadf0e577eb0cd9088c8b5d536e9ddc0f4a9f8c70", + "sha256:23f5aed2d212096f2fe95d56f868d63f839a08bf7e389237e644d93981274222", + "sha256:32a5c5cd9625a40feec956f460355b4813bc3187c4f8dc9efd9f1a7f8f854e34", + "sha256:37dda88dbe16dd3f4f9039464637cce66e462c0b95e5763dbd45ac5799136d3a", + "sha256:496f42840604255ce06777bc129048b3bab966213bbac4f07fbe4ceb6a2e0482", + "sha256:4ba8eebfa4383e4680d6e7e6dba9c45c1fe19bbc0a754db4d84823f1a9511e56", + "sha256:4fbe23ac870adf90544d2014c572dba6ec4d772afad6505bb91f171ddad12839", + "sha256:50f8e30f5410efc69b0217261b1f21912888da392a4549e79c7aaaac85f01bfa", + "sha256:5d0cc3682456ad213150f6dbffe7d47eab737d809e517c316103376be548fb84", + "sha256:6a114761ad3ba6e0cdfacf14a8fb2cb8f5713b115ca1f0c17f3cd638d0a5b4bd", + "sha256:713574da534b6ce73d884f1574c35a565e438af4888fcc75e752f1de02e356a7", + "sha256:8cb82b6d14ad4bd915acacc8f114c6a7bab8b9b1503cabb930e433ebd320f90c", + "sha256:90f74627cafecf3924741ab8b0690a19df4214eb56b1cfce2dc74a15c9744034", + "sha256:92a6613af9877e3ad2a1c5a16a122514a4f9f8d9b91b1f22e7fa0fa796617b36", + "sha256:a441afdfe31870b964bccde042d7172ed3c0077f519bbf3ed7d9d34c406b6b91", + "sha256:ab1ffe4ec7be99ad348791116d436610afdc7a9a02a968997f31eaa62eaadad8", + "sha256:b2c2fd861f10b2cd49ccf29a31da9ad5c3b95aa437804e4fd0351ed4eb695f74", + "sha256:bbaab798991863952c593c0459dcb82e0aade837675593310e13cba2ce7fb45a", + "sha256:c9a5f63bc381c0f945402ef4c1bccc74a8eed28f6be6596704b1db7d82ec89fe", + "sha256:cb21666fc9edec9716553bfcfe0c30d1bbbe2731910a96f07ec65652974e5f83", + "sha256:ce3a3aad287c8532f62223f5720b5504e31abe3dce52a27bd2a25f508c0d846e", + "sha256:cebd0b28a0e875a9ce789514700f80659269ecf2a8fcef0aa10b8ae52b40474a", + "sha256:d1bf9455aff37beb421a4447d89d6dd77bb46f677c0bab4eb0272cdb79faad2f", + "sha256:d927bf802bf53c1b5a3878a22e9be310900877984e7c436a3a99bdd19cfec4c3", + "sha256:de724c78f4eb1363b1195dce85a2a8806e7509b69ac5c842a714d942ea534d63", + "sha256:e1fc1b1f5d9d1c2e18b5e60602dfa7854b2330ba0efc312ef605abf588abea9c", + "sha256:e492e87886423192af1fafde23907bcd9d2fdccfc22f67e18aa5c73db3a380a3", + "sha256:e9b5e9115363545a727d8ebe7e4b94f7cf6f26113261a269d50d88b8db4eb726", + "sha256:ff0e014a3a3fe286c642ef51213c41684a156b9ed293ef205e8890bc1dbbfdc7" ], - "markers": "python_version >= '3.6' and python_version < '4'", - "version": "==3.6.8" + "markers": "python_version >= '3.7' and python_version < '4'", + "version": "==3.6.9" }, "requests": { "hashes": [ @@ -1218,11 +1173,11 @@ }, "setuptools": { "hashes": [ - "sha256:6599055eeb23bfef457d5605d33a4d68804266e6cb430b0fb12417c5efeae36c", - "sha256:782ef48d58982ddb49920c11a0c5c9c0b02e7d7d1c2ad0aa44e1a1e133051c96" + "sha256:89eef7b71423ab7fccc7dfafdc145410ef170c4a89567427f932448135e08cdf", + "sha256:92b15f45ab164eb0c410d2bf661a6e9d15e3b78c0dffb0325f2bf0f313071cae" ], "markers": "python_version >= '3.7'", - "version": "==60.10.0" + "version": "==61.1.1" }, "six": { "hashes": [ @@ -1265,11 +1220,11 @@ }, "tqdm": { "hashes": [ - "sha256:1d9835ede8e394bb8c9dcbffbca02d717217113adc679236873eeaac5bc0b3cd", - "sha256:e643e071046f17139dea55b880dc9b33822ce21613b4a4f5ea57f202833dbc29" + "sha256:4230a49119a416c88cc47d0d2d32d5d90f1a282d5e497d49801950704e49863d", + "sha256:6461b009d6792008d0000e1b0c7ca50195ec78c0e808a3a6b668a56a3236c3a5" ], "index": "pypi", - "version": "==4.63.0" + "version": "==4.63.1" }, "twisted": { "extras": [ @@ -1356,32 +1311,33 @@ }, "watchdog": { "hashes": [ - "sha256:25fb5240b195d17de949588628fdf93032ebf163524ef08933db0ea1f99bd685", - "sha256:3386b367e950a11b0568062b70cc026c6f645428a698d33d39e013aaeda4cc04", - "sha256:3becdb380d8916c873ad512f1701f8a92ce79ec6978ffde92919fd18d41da7fb", - "sha256:4ae38bf8ba6f39d5b83f78661273216e7db5b00f08be7592062cb1fc8b8ba542", - "sha256:8047da932432aa32c515ec1447ea79ce578d0559362ca3605f8e9568f844e3c6", - "sha256:8f1c00aa35f504197561060ca4c21d3cc079ba29cf6dd2fe61024c70160c990b", - "sha256:922a69fa533cb0c793b483becaaa0845f655151e7256ec73630a1b2e9ebcb660", - "sha256:9693f35162dc6208d10b10ddf0458cc09ad70c30ba689d9206e02cd836ce28a3", - "sha256:a0f1c7edf116a12f7245be06120b1852275f9506a7d90227648b250755a03923", - "sha256:a36e75df6c767cbf46f61a91c70b3ba71811dfa0aca4a324d9407a06a8b7a2e7", - "sha256:aba5c812f8ee8a3ff3be51887ca2d55fb8e268439ed44110d3846e4229eb0e8b", - "sha256:ad6f1796e37db2223d2a3f302f586f74c72c630b48a9872c1e7ae8e92e0ab669", - "sha256:ae67501c95606072aafa865b6ed47343ac6484472a2f95490ba151f6347acfc2", - "sha256:b2fcf9402fde2672545b139694284dc3b665fd1be660d73eca6805197ef776a3", - "sha256:b52b88021b9541a60531142b0a451baca08d28b74a723d0c99b13c8c8d48d604", - "sha256:b7d336912853d7b77f9b2c24eeed6a5065d0a0cc0d3b6a5a45ad6d1d05fb8cd8", - "sha256:bd9ba4f332cf57b2c1f698be0728c020399ef3040577cde2939f2e045b39c1e5", - "sha256:be9be735f827820a06340dff2ddea1fb7234561fa5e6300a62fe7f54d40546a0", - "sha256:cca7741c0fcc765568350cb139e92b7f9f3c9a08c4f32591d18ab0a6ac9e71b6", - "sha256:d0d19fb2441947b58fbf91336638c2b9f4cc98e05e1045404d7a4cb7cddc7a65", - "sha256:e02794ac791662a5eafc6ffeaf9bcc149035a0e48eb0a9d40a8feb4622605a3d", - "sha256:e0f30db709c939cabf64a6dc5babb276e6d823fd84464ab916f9b9ba5623ca15", - "sha256:e92c2d33858c8f560671b448205a268096e17870dcf60a9bb3ac7bfbafb7f5f9" + "sha256:03b43d583df0f18782a0431b6e9e9965c5b3f7cf8ec36a00b930def67942c385", + "sha256:0908bb50f6f7de54d5d31ec3da1654cb7287c6b87bce371954561e6de379d690", + "sha256:0b4a1fe6201c6e5a1926f5767b8664b45f0fcb429b62564a41f490ff1ce1dc7a", + "sha256:177bae28ca723bc00846466016d34f8c1d6a621383b6caca86745918d55c7383", + "sha256:19b36d436578eb437e029c6b838e732ed08054956366f6dd11875434a62d2b99", + "sha256:1d1cf7dfd747dec519486a98ef16097e6c480934ef115b16f18adb341df747a4", + "sha256:1e877c70245424b06c41ac258023ea4bd0c8e4ff15d7c1368f17cd0ae6e351dd", + "sha256:340b875aecf4b0e6672076a6f05cfce6686935559bb6d34cebedee04126a9566", + "sha256:351e09b6d9374d5bcb947e6ac47a608ec25b9d70583e9db00b2fcdb97b00b572", + "sha256:3fd47815353be9c44eebc94cc28fe26b2b0c5bd889dafc4a5a7cbdf924143480", + "sha256:49639865e3db4be032a96695c98ac09eed39bbb43fe876bb217da8f8101689a6", + "sha256:4d0e98ac2e8dd803a56f4e10438b33a2d40390a72750cff4939b4b274e7906fa", + "sha256:6e6ae29b72977f2e1ee3d0b760d7ee47896cb53e831cbeede3e64485e5633cc8", + "sha256:7f14ce6adea2af1bba495acdde0e510aecaeb13b33f7bd2f6324e551b26688ca", + "sha256:81982c7884aac75017a6ecc72f1a4fedbae04181a8665a34afce9539fc1b3fab", + "sha256:81a5861d0158a7e55fe149335fb2bbfa6f48cbcbd149b52dbe2cd9a544034bbd", + "sha256:ae934e34c11aa8296c18f70bf66ed60e9870fcdb4cc19129a04ca83ab23e7055", + "sha256:b26e13e8008dcaea6a909e91d39b629a39635d1a8a7239dd35327c74f4388601", + "sha256:b3750ee5399e6e9c69eae8b125092b871ee9e2fcbd657a92747aea28f9056a5c", + "sha256:b61acffaf5cd5d664af555c0850f9747cc5f2baf71e54bbac164c58398d6ca7b", + "sha256:b9777664848160449e5b4260e0b7bc1ae0f6f4992a8b285db4ec1ef119ffa0e2", + "sha256:bdcbf75580bf4b960fb659bbccd00123d83119619195f42d721e002c1621602f", + "sha256:d802d65262a560278cf1a65ef7cae4e2bc7ecfe19e5451349e4c67e23c9dc420", + "sha256:ed6d9aad09a2a948572224663ab00f8975fae242aa540509737bb4507133fa2d" ], "index": "pypi", - "version": "==2.1.6" + "version": "==2.1.7" }, "watchgod": { "hashes": [ @@ -1715,11 +1671,11 @@ }, "faker": { "hashes": [ - "sha256:66db859b6abe376d02e805ad81eb8dcfce38f0945f17ee7cdf74ed349985ea52", - "sha256:fe969607836ce7100e38b88dcb598aacb733d895e6e9401894dd603e35623000" + "sha256:5536ceb63380f0d598c026b7c330c17d719a19d1a495e9397ee8f5259420a696", + "sha256:85ed0cb379e3b7414bdb6b484994beaf9bddc74472c8c35f743c16cf5fc0c314" ], "markers": "python_version >= '3.6'", - "version": "==13.3.2" + "version": "==13.3.3" }, "filelock": { "hashes": [ @@ -1770,11 +1726,11 @@ }, "jinja2": { "hashes": [ - "sha256:077ce6014f7b40d03b47d1f1ca4b0fc8328a692bd284016f806ed0eaca390ad8", - "sha256:611bb273cd68f3b993fabdc4064fc858c5b47a973cb5aa7999ec1ba405c87cd7" + "sha256:539835f51a74a69f41b848a9645dbdc35b4f20a3b601e2d9a7e22947b15ff119", + "sha256:640bed4bb501cbd17194b3cace1dc2126f5b619cf068a726b98192a0fde74ae9" ], - "markers": "python_version >= '3.6'", - "version": "==3.0.3" + "markers": "python_version >= '3.7'", + "version": "==3.1.1" }, "markupsafe": { "hashes": [ @@ -2149,11 +2105,11 @@ }, "virtualenv": { "hashes": [ - "sha256:c3e01300fb8495bc00ed70741f5271fc95fed067eb7106297be73d30879af60c", - "sha256:ce8901d3bbf3b90393498187f2d56797a8a452fb2d0d7efc6fd837554d6f679c" + "sha256:1e8588f35e8b42c6ec6841a13c5e88239de1e6e4e4cedfd3916b306dc826ec66", + "sha256:8e5b402037287126e81ccde9432b95a8be5b19d36584f64957060a3488c11ca8" ], "markers": "python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4'", - "version": "==20.13.4" + "version": "==20.14.0" }, "zipp": { "hashes": [ diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 2b00e12c8..6079d03df 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -e diff --git a/docker/management_script.sh b/docker/management_script.sh index e3aba1259..4e601f4a6 100755 --- a/docker/management_script.sh +++ b/docker/management_script.sh @@ -1,4 +1,4 @@ -#!/bin/bash +#!/usr/bin/env bash set -e diff --git a/requirements.txt b/requirements.txt index 365d2d1a3..0d3af9015 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,7 +48,7 @@ hyperlink==21.0.0 idna==3.3; python_version >= '3.5' imap-tools==0.53.0 img2pdf==0.4.3 -importlib-resources==5.4.0; python_version < '3.9' +importlib-resources==5.6.0; python_version < '3.9' incremental==21.3.0 inotify-simple==1.3.5; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' inotifyrecursive==0.3.5 @@ -65,14 +65,14 @@ pikepdf==5.1.0 pillow==9.0.1 pluggy==1.0.0; python_version >= '3.6' portalocker==2.4.0; python_version >= '3' -psycopg2-binary==2.9.3 +psycopg2==2.9.3 pyasn1-modules==0.2.8 pyasn1==0.4.8 pycparser==2.21 pyopenssl==22.0.0 pyparsing==3.0.7; python_version >= '3.6' python-dateutil==2.8.2 -python-dotenv==0.19.2 +python-dotenv==0.20.0 python-gnupg==0.4.8 python-levenshtein==0.12.2 python-magic==0.4.25 @@ -81,18 +81,18 @@ pytz==2022.1 pyyaml==6.0 redis==3.5.3 regex==2022.3.2; python_version >= '3.6' -reportlab==3.6.8; python_version >= '3.6' and python_version < '4' +reportlab==3.6.9; python_version >= '3.7' and python_version < '4' requests==2.27.1; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4, 3.5' scikit-learn==1.0.2 scipy==1.8.0; python_version < '3.11' and python_version >= '3.8' service-identity==21.1.0 -setuptools==60.10.0; python_version >= '3.7' +setuptools==61.1.1; python_version >= '3.7' six==1.16.0; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3' sniffio==1.2.0; python_version >= '3.5' sqlparse==0.4.2; python_version >= '3.5' threadpoolctl==3.1.0; python_version >= '3.6' tika==1.24 -tqdm==4.63.0 +tqdm==4.63.1 twisted[tls]==22.2.0; python_full_version >= '3.6.7' txaio==22.2.1; python_version >= '3.6' typing-extensions==4.1.1; python_version >= '3.6' @@ -101,7 +101,7 @@ tzlocal==4.1; python_version >= '3.6' urllib3==1.26.9; python_version >= '2.7' and python_version not in '3.0, 3.1, 3.2, 3.3, 3.4' and python_version < '4' uvicorn[standard]==0.17.6 uvloop==0.16.0 -watchdog==2.1.6 +watchdog==2.1.7 watchgod==0.8.1 wcwidth==0.2.5 websockets==10.2