diff --git a/.contrib/docker/Dockerfile.gulp b/.contrib/docker/Dockerfile.gulp deleted file mode 100644 index 925a48457..000000000 --- a/.contrib/docker/Dockerfile.gulp +++ /dev/null @@ -1,4 +0,0 @@ -FROM node:16 -WORKDIR /app -VOLUME /app -CMD ["bash","-c", "npm install && npm rebuild node-sass && npx gulp build"] diff --git a/.contrib/docker/Dockerfile.web b/.contrib/docker/Dockerfile.web deleted file mode 100644 index fb973238a..000000000 --- a/.contrib/docker/Dockerfile.web +++ /dev/null @@ -1,27 +0,0 @@ -# This is Dockerfile for development purposes only. -ARG PYTHON_VERSION='3' -FROM python:${PYTHON_VERSION}-slim -RUN pip install 'pip<20' -RUN mkdir /code /code/production -WORKDIR /code - -# Install python dependencies -ENV PYTHONUNBUFFERED 1 -RUN apt-get update \ -&& apt-get install -y --no-install-recommends \ - default-libmysqlclient-dev \ - gcc \ - build-essential \ - git \ - curl \ - gettext libgettextpo-dev wait-for-it \ -&& rm -rf /var/lib/apt/lists/* -COPY requirements/*.txt ./requirements/ -ARG DJANGO_VERSION='==2.22.*' -# TODO: Move to /requirements/base.txt after fixing following bug: -# https://github.com/readthedocs/readthedocs-docker-images/issues/158 -RUN pip install mysqlclient==2.0.3 -RUN bash -c "if [[ "${DJANGO_VERSION}" == 'master' ]]; then \ -pip install --no-cache-dir -r requirements/dev.txt https://github.com/django/django/archive/master.tar.gz; else \ -pip install --no-cache-dir -r requirements/dev.txt \"django${DJANGO_VERSION}\"; fi" -CMD ["bash", "-c", "python manage.py collectstatic --no-input && python manage.py migrate && python manage.py runserver 0.0.0.0:8000"] diff --git a/.github/workflows/frontend.yml b/.github/workflows/frontend.yml index 6f7f6c39f..149670e88 100644 --- a/.github/workflows/frontend.yml +++ b/.github/workflows/frontend.yml @@ -8,7 +8,7 @@ jobs: steps: - uses: actions/checkout@v2 - name: Build frontend - run: make wait_web regenerate_frontend + run: docker-compose up gulp - name: Show git status run: git status - name: Require rebuild content diff --git a/.github/workflows/web.yml b/.github/workflows/web.yml index 5632742c5..de7e003c9 100644 --- a/.github/workflows/web.yml +++ b/.github/workflows/web.yml @@ -9,6 +9,10 @@ on: jobs: django: runs-on: ubuntu-latest + env: + PYTHON_VERSION: ${{ matrix.python }} + DJANGO_VERSION: ${{ matrix.django }} + METADEFENDER_API_KEY: ${{ secrets.METADEFENDER_API_KEY }} strategy: matrix: python: @@ -23,18 +27,12 @@ jobs: lfs: true - name: Build application run: docker-compose build web - env: - PYTHON_VERSION: ${{ matrix.python }} - DJANGO_VERSION: ${{ matrix.django }} - METADEFENDER_API_KEY: ${{ secrets.METADEFENDER_API_KEY }} - - name: Run side services - run: make wait_mysql wait_elasticsearch wait_tika - name: Migration check run: make check - name: Show settings run: make settings - - name: Build test - run: make test + - name: Run test + run: make test-es # - name: Send coverage report # run: make coverage_send # env: @@ -51,4 +49,4 @@ jobs: if: failure() - name: Show docker process run: docker ps - if: always() + if: always() \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index 233716770..5022192a0 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,12 +1,10 @@ -# This is Dockerfile for development purposes only. -ARG PYTHON_VERSION='3' -FROM python:${PYTHON_VERSION}-slim +ARG PYTHON_VERSION='3.6' +FROM python:${PYTHON_VERSION}-slim as build RUN mkdir /code WORKDIR /code # Install python dependencies ENV PYTHONUNBUFFERED 1 -ENV DJANGO_SETTINGS_MODULE="config.settings.production" RUN apt-get update \ && apt-get install -y --no-install-recommends \ default-libmysqlclient-dev \ @@ -14,12 +12,21 @@ RUN apt-get update \ build-essential \ git \ curl \ - gettext libgettextpo-dev wait-for-it \ + gettext libgettextpo-dev \ && rm -rf /var/lib/apt/lists/* COPY requirements/*.txt ./requirements/ ARG DJANGO_VERSION='==2.22.*' +FROM build as development # TODO: Move to /requirements/base.txt after fixing following bug: # https://github.com/readthedocs/readthedocs-docker-images/issues/158 +RUN pip install mysqlclient==2.0.3 +RUN bash -c "if [[ "${DJANGO_VERSION}" == 'master' ]]; then \ +pip install --no-cache-dir -r requirements/dev.txt https://github.com/django/django/archive/master.tar.gz; else \ +pip install --no-cache-dir -r requirements/dev.txt \"django${DJANGO_VERSION}\"; fi" +COPY ./ /code/ +CMD python manage.py runserver 0.0.0.0:8000 +FROM build as production +ENV DJANGO_SETTINGS_MODULE="config.settings.production" RUN pip install --no-cache-dir mysqlclient==2.0.3 -r requirements/production.txt COPY ./ /code/ RUN DJANGO_SECRET_KEY=x \ diff --git a/Makefile b/Makefile index b6760a314..4ba0c042f 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,6 @@ clean: docker-compose down regenerate_frontend: - docker-compose run web python manage.py collectstatic -c --noinput docker-compose up gulp build: @@ -15,28 +14,17 @@ build: test: docker-compose run web coverage run manage.py test --keepdb --verbosity=2 ${TEST} +test-es: + docker-compose -f docker-compose.yml -f docker-compose.es.yml run python manage.py test --keepdb --verbosity=2 ${TEST} + coverage_html: docker-compose run web coverage html coverage_send: docker-compose run -e GITHUB_ACTIONS -e GITHUB_REF -e GITHUB_SHA -e GITHUB_HEAD_REF -e GITHUB_REPOSITORY -e GITHUB_RUN_ID -e GITHUB_TOKEN -e COVERALLS_REPO_TOKEN web coveralls -wait_web: wait_mysql wait_elasticsearch wait_tika - -wait_mysql: - docker-compose up -d db - docker-compose run web bash -c 'wait-for-it -t 30 db:3306' || (docker-compose logs db; exit -1) - -wait_elasticsearch: - docker-compose up -d elasticsearch - docker-compose run web bash -c 'wait-for-it -t 30 elasticsearch:9200' || (docker-compose logs elasticsearch; exit -1) - -wait_tika: - docker-compose up -d tika - docker-compose run web bash -c 'wait-for-it -t 60 tika:9998' || (docker-compose logs tika; exit -1) - migrate: - docker-compose run web python manage.py migrate + docker-compose up migration lint: # lint currently staged files pre-commit run diff --git a/docker-compose.es.yml b/docker-compose.es.yml new file mode 100644 index 000000000..0e74f6537 --- /dev/null +++ b/docker-compose.es.yml @@ -0,0 +1,29 @@ +version: '3.1' +# To play with this file use following command: +# $ docker-compose -f docker-compose.yml docker-compose.es.yml up + +services: + web: + environment: &webEnvironment + DATABASE_URL: mysql://root:password@db/feder + ELASTICSEARCH_URL: http://elasticsearch:9200/ + APACHE_TIKA_URL: 'http://tika:9998/' + VIRUSTOTAL_API_KEY: + ATTACHMENTSCANNER_API_KEY: + ATTACHMENTSCANNER_API_URL: + METADEFENDER_API_KEY: + + worker: + command: python manage.py process_tasks + environment: *webEnvironment + + elasticsearch: + image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 + environment: + discovery.type: single-node + cluster.routing.allocation.disk.threshold_enabled: 'false' + ports: + - "9200:9200" + + tika: + image: quay.io/watchdogpolska/apache-tika \ No newline at end of file diff --git a/docker-compose.yml b/docker-compose.yml index 6bfc61331..e8e38d9a4 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,6 +1,12 @@ -version: '2.1' +version: '3.1' # This is application’s services configuration for development purposes only. +x-node: &node + image: node:15 + working_dir: /app + volumes: + - .:/app + services: db: image: mysql:5.7 @@ -12,20 +18,32 @@ services: MYSQL_DATABASE: feder volumes: - mysql-data:/var/lib/mysql - + healthcheck: + test: ["CMD", "mysqladmin" ,"ping", "-h", "localhost"] + timeout: 20s + retries: 10 + # Services to regenerate frontend + # Regenerated front-end is stored in project directory on host + npm: + <<: *node + command: sh -c 'id && npm install --unsafe-perm && npm rebuild --unsafe-perm node-sass' gulp: - build: - context: . - dockerfile: .contrib/docker/Dockerfile.gulp + <<: *node + command: npx gulp build ports: - "35729:35729" - volumes: - - .:/app + depends_on: + npm: + condition: service_completed_successfully + collectstatic: + condition: service_completed_successfully + # Services for Django application web: build: &webBuild context: . dockerfile: .contrib/docker/Dockerfile.web + target: development args: # Match to production environment PYTHON_VERSION: '${PYTHON_VERSION:-3.6.9}' @@ -34,12 +52,17 @@ services: - .:/code environment: &webEnvironment DATABASE_URL: mysql://root:password@db/feder - ELASTICSEARCH_URL: http://elasticsearch:9200/ - APACHE_TIKA_URL: 'http://tika:9998/' VIRUSTOTAL_API_KEY: ATTACHMENTSCANNER_API_KEY: ATTACHMENTSCANNER_API_URL: METADEFENDER_API_KEY: + depends_on: + migration: + condition: service_completed_successfully + collectstatic: + condition: service_completed_successfully + db: + condition: service_healthy ports: - "8000:8000" # Following allows to execute `docker attach feder_web_1` @@ -52,17 +75,18 @@ services: build: *webBuild volumes: *webVolumes environment: *webEnvironment - - elasticsearch: - image: docker.elastic.co/elasticsearch/elasticsearch:7.6.2 - environment: - discovery.type: single-node - cluster.routing.allocation.disk.threshold_enabled: 'false' - ports: - - "9200:9200" - - tika: - image: quay.io/watchdogpolska/apache-tika - + collectstatic: + command: python manage.py collectstatic --no-input + build: *webBuild + volumes: *webVolumes + environment: *webEnvironment + migration: + command: python manage.py migrate + build: *webBuild + volumes: *webVolumes + environment: *webEnvironment + depends_on: + db: + condition: service_healthy volumes: mysql-data: diff --git a/package-lock.json b/package-lock.json index 71cdc7bcd..f0fbfa6cc 100644 --- a/package-lock.json +++ b/package-lock.json @@ -46,10 +46,6 @@ "fast-json-stable-stringify": "^2.0.0", "json-schema-traverse": "^0.4.1", "uri-js": "^4.2.2" - }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" } }, "node_modules/amdefine": { @@ -459,13 +455,6 @@ }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "postcss": "^8.1.0" } }, "node_modules/autoprefixer/node_modules/nanocolors": { @@ -698,10 +687,6 @@ }, "engines": { "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/buffer-equal": { @@ -774,9 +759,6 @@ "dependencies": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/camelcase": { @@ -808,10 +790,6 @@ "dev": true, "dependencies": { "nanocolors": "^0.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" } }, "node_modules/caseless": { @@ -840,7 +818,6 @@ "version": "2.1.8", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", - "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", "dev": true, "dependencies": { "anymatch": "^2.0.0", @@ -1037,7 +1014,6 @@ "version": "1.0.2", "resolved": "https://registry.npmjs.org/clone/-/clone-1.0.2.tgz", "integrity": "sha1-Jgt6meux7f4kdTgXX3gyQ8sZ0Uk=", - "deprecated": "XSS vulnerability fixed in v1.0.3", "dev": true, "engines": { "node": ">=0.8" @@ -1359,7 +1335,6 @@ "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "deprecated": "Debug versions >=3.2.0 <3.2.7 || >=4 <4.3.1 have a low-severity ReDos regression when used in a Node.js environment. It is recommended you upgrade to 3.2.7 or 4.3.1. (https://github.com/visionmedia/debug/issues/797)", "dev": true, "dependencies": { "ms": "^2.1.1" @@ -2115,10 +2090,6 @@ "dev": true, "engines": { "node": "*" - }, - "funding": { - "type": "patreon", - "url": "https://www.patreon.com/infusion" } }, "node_modules/fragment-cache": { @@ -2156,7 +2127,6 @@ "version": "1.2.13", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", - "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", "dev": true, "hasInstallScript": true, "optional": true, @@ -2226,9 +2196,6 @@ "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/get-stdin": { @@ -2273,9 +2240,6 @@ }, "engines": { "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" } }, "node_modules/glob-parent": { @@ -2465,21 +2429,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/gulp-clean-css/node_modules/string_decoder": { "version": "1.3.0", @@ -2704,21 +2654,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/gulp-livereload/node_modules/string_decoder": { "version": "1.3.0", @@ -2745,7 +2681,6 @@ "version": "1.2.4", "resolved": "https://registry.npmjs.org/gulp-minify-css/-/gulp-minify-css-1.2.4.tgz", "integrity": "sha1-thZJV2Auon+eWtiCJ2ld0gV3jAY=", - "deprecated": "Please use gulp-clean-css", "dev": true, "dependencies": { "clean-css": "^3.3.3", @@ -2821,9 +2756,6 @@ }, "engines": { "node": "^10 || ^12 || >=14" - }, - "peerDependencies": { - "postcss": "^8.0.0" } }, "node_modules/gulp-rename": { @@ -2959,27 +2891,12 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/gulp-util": { "version": "3.0.8", "resolved": "https://registry.npmjs.org/gulp-util/-/gulp-util-3.0.8.tgz", "integrity": "sha1-AFTh50RQLifATBh8PsxQXdVLu08=", - "deprecated": "gulp-util is deprecated - replace it, following the guidelines at https://medium.com/gulpjs/gulp-util-ca3b1f9f9ac5", "dev": true, "dependencies": { "array-differ": "^1.0.0", @@ -3053,7 +2970,6 @@ "version": "5.1.5", "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", - "deprecated": "this library is no longer supported", "dev": true, "dependencies": { "ajv": "^6.12.3", @@ -3115,9 +3031,6 @@ "dev": true, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-unicode": { @@ -3281,7 +3194,6 @@ "version": "1.3.5", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "deprecated": "Please update to ini >=1.3.6 to avoid a prototype pollution issue", "dev": true, "engines": { "node": "*" @@ -3370,9 +3282,6 @@ "dev": true, "dependencies": { "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-data-descriptor": { @@ -3447,9 +3356,6 @@ "dev": true, "engines": { "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/is-fullwidth-code-point": { @@ -4186,7 +4092,6 @@ "version": "0.5.1", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "deprecated": "Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)", "dev": true, "dependencies": { "minimist": "0.0.8" @@ -4334,7 +4239,6 @@ "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", "dev": true, - "hasInstallScript": true, "dependencies": { "async-foreach": "^0.1.3", "chalk": "^1.1.1", @@ -4614,9 +4518,6 @@ }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/object.defaults": { @@ -4782,9 +4683,6 @@ }, "engines": { "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { @@ -5000,10 +4898,6 @@ }, "engines": { "node": "^10 || ^12 || >=14" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" } }, "node_modules/postcss-load-config": { @@ -5018,18 +4912,6 @@ }, "engines": { "node": ">= 10" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - "peerDependencies": { - "ts-node": ">=9.0.0" - }, - "peerDependenciesMeta": { - "ts-node": { - "optional": true - } } }, "node_modules/postcss-value-parser": { @@ -5333,7 +5215,6 @@ "version": "2.88.2", "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", - "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", "dev": true, "dependencies": { "aws-sign2": "~0.7.0", @@ -5365,21 +5246,7 @@ "version": "5.2.1", "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] + "dev": true }, "node_modules/require-directory": { "version": "2.1.1", @@ -5404,9 +5271,6 @@ "dependencies": { "is-core-module": "^2.0.0", "path-parse": "^1.0.6" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, "node_modules/resolve-dir": { @@ -5447,7 +5311,6 @@ "version": "0.2.1", "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "deprecated": "https://github.com/lydell/resolve-url#deprecated", "dev": true }, "node_modules/ret": { @@ -6525,7 +6388,6 @@ "version": "0.1.0", "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "deprecated": "Please see https://github.com/lydell/urix#deprecated", "dev": true }, "node_modules/use": { @@ -6547,7 +6409,6 @@ "version": "3.4.0", "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", - "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", "dev": true, "bin": { "uuid": "bin/uuid" diff --git a/requirements/base.txt b/requirements/base.txt index c98bc6fe7..254444da9 100644 --- a/requirements/base.txt +++ b/requirements/base.txt @@ -29,7 +29,6 @@ pytz==2021.1 # Commands lxml==4.6.3 - # Your custom requirements go here cryptography==3.4.8 django-filter==21.1 @@ -50,6 +49,7 @@ tqdm==4.62.3 django-github-revision==0.0.3 django-extensions==3.1.3 django-cleanup==5.2.0 +whitenoise==5.3.0 # Ping commit due missing cached object in <=4.7.1 django-extra-views==0.13.0 diff --git a/requirements/production.txt b/requirements/production.txt index ea17ec331..036e14d88 100644 --- a/requirements/production.txt +++ b/requirements/production.txt @@ -9,4 +9,3 @@ sentry-sdk==1.4.2 # TODO: Move to /requirements/base.txt after fixing following bug: # https://github.com/readthedocs/readthedocs-docker-images/issues/158 mysqlclient==2.0.3 -whitenoise==5.3.0 \ No newline at end of file