Use uv for dependency management

This commit is contained in:
Sonny Bakker 2024-08-13 09:07:47 +02:00
parent e9e8fc351c
commit d05e29b5e0
10 changed files with 99 additions and 78 deletions

View file

@ -5,7 +5,7 @@ stages:
- release - release
variables: variables:
PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip" UV_CACHE_DIR: "$CI_PROJECT_DIR/.cache/uv"
DJANGO_SETTINGS_MODULE: "newsreader.conf.gitlab" DJANGO_SETTINGS_MODULE: "newsreader.conf.gitlab"
POSTGRES_HOST: "$POSTGRES_HOST" POSTGRES_HOST: "$POSTGRES_HOST"
POSTGRES_DB: "$POSTGRES_NAME" POSTGRES_DB: "$POSTGRES_NAME"
@ -17,7 +17,7 @@ cache:
key: "$CI_COMMIT_REF_SLUG" key: "$CI_COMMIT_REF_SLUG"
paths: paths:
- env/ - env/
- .cache/pip - .cache/uv
- node_modules/ - node_modules/
include: include:

View file

@ -3,22 +3,19 @@
# #
# Build dependencies # Build dependencies
build: build:
pip-compile \ uv pip compile \
--resolver=backtracking \
--output-file=requirements/base.txt \ --output-file=requirements/base.txt \
pyproject.toml pyproject.toml
# testing # testing
pip-compile \ uv pip compile \
--resolver=backtracking \
--extra=testing \ --extra=testing \
--output-file=requirements/testing.txt \ --output-file=requirements/testing.txt \
requirements/base.txt \ requirements/base.txt \
pyproject.toml pyproject.toml
# development # development
pip-compile \ uv pip compile \
--resolver=backtracking \
--extra=testing \ --extra=testing \
--extra=development \ --extra=development \
--output-file=requirements/development.txt \ --output-file=requirements/development.txt \
@ -27,8 +24,7 @@ build:
pyproject.toml pyproject.toml
# ci # ci
pip-compile \ uv pip compile \
--resolver=backtracking \
--extra=testing \ --extra=testing \
--extra=ci \ --extra=ci \
--output-file=requirements/ci.txt \ --output-file=requirements/ci.txt \
@ -37,8 +33,7 @@ build:
pyproject.toml pyproject.toml
# production # production
pip-compile \ uv pip compile \
--resolver=backtracking \
--extra=production \ --extra=production \
--output-file=requirements/production.txt \ --output-file=requirements/production.txt \
requirements/base.txt \ requirements/base.txt \

View file

@ -1,6 +1,6 @@
static: static:
stage: build stage: build
image: node:16-bullseye image: node:latest
before_script: before_script:
- npm install - npm install
script: script:

View file

@ -1,12 +1,16 @@
python-linting: python-linting:
stage: lint stage: lint
image: python:3.9-bullseye image: python:3.11
before_script: before_script:
- pip install -r requirements/ci.txt - uv pip install --requirement requirements/ci.txt
script: script:
- isort src/ --check-only - isort --check-only src/
- black src/ --line-length 88 --check - black --line-length 88 --check src/
- autoflake src/ --check --recursive --remove-all-unused-imports --ignore-init-module-imports - autoflake --check \
--recursive \
--remove-all-unused-imports \
--ignore-init-module-imports \
src/
only: only:
refs: refs:
- development - development
@ -14,7 +18,7 @@ python-linting:
javascript-linting: javascript-linting:
stage: lint stage: lint
image: node:16-bullseye image: node:latest
before_script: before_script:
- npm install - npm install
script: script:

View file

@ -4,15 +4,15 @@ python-tests:
services: services:
- postgres:15 - postgres:15
- memcached:1.5.22 - memcached:1.5.22
image: python:3.9-bullseye image: python:3.11
before_script: before_script:
- pip install -r requirements/ci.txt - uv pip install --requirement requirements/ci.txt
script: script:
- coverage run ./src/manage.py test newsreader - coverage run ./src/manage.py test newsreader
javascript-tests: javascript-tests:
stage: test stage: test
image: node:16-bullseye image: node:latest
before_script: before_script:
- npm install - npm install
script: script:

View file

@ -1,9 +1,5 @@
# # This file was autogenerated by uv via the following command:
# This file is autogenerated by pip-compile with Python 3.9 # uv pip compile --output-file=requirements/base.txt pyproject.toml
# by the following command:
#
# pip-compile --output-file=requirements/base.txt --resolver=backtracking pyproject.toml
#
amqp==5.1.1 amqp==5.1.1
# via kombu # via kombu
asgiref==3.7.2 asgiref==3.7.2
@ -16,8 +12,8 @@ bleach==6.0.0
# via newsreader (pyproject.toml) # via newsreader (pyproject.toml)
celery==5.3.1 celery==5.3.1
# via # via
# django-celery-beat
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# django-celery-beat
certifi==2023.5.7 certifi==2023.5.7
# via requests # via requests
charset-normalizer==3.1.0 charset-normalizer==3.1.0
@ -38,12 +34,12 @@ cron-descriptor==1.4.0
# via django-celery-beat # via django-celery-beat
django==3.2.19 django==3.2.19
# via # via
# newsreader (pyproject.toml)
# django-axes # django-axes
# django-celery-beat # django-celery-beat
# django-timezone-field # django-timezone-field
# djangorestframework # djangorestframework
# drf-yasg # drf-yasg
# newsreader (pyproject.toml)
django-axes==6.0.4 django-axes==6.0.4
# via newsreader (pyproject.toml) # via newsreader (pyproject.toml)
django-celery-beat==2.5.0 django-celery-beat==2.5.0
@ -104,6 +100,8 @@ requests==2.31.0
# requests-oauthlib # requests-oauthlib
requests-oauthlib==1.3.1 requests-oauthlib==1.3.1
# via newsreader (pyproject.toml) # via newsreader (pyproject.toml)
setuptools==72.1.0
# via django-axes
sgmllib3k==1.0.0 sgmllib3k==1.0.0
# via feedparser # via feedparser
six==1.16.0 six==1.16.0
@ -138,6 +136,3 @@ wcwidth==0.2.6
# prompt-toolkit # prompt-toolkit
webencodings==0.5.1 webencodings==0.5.1
# via bleach # via bleach
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View file

@ -1,9 +1,5 @@
# # This file was autogenerated by uv via the following command:
# This file is autogenerated by pip-compile with Python 3.9 # uv pip compile --extra=testing --extra=ci --output-file=requirements/ci.txt requirements/base.txt requirements/testing.txt pyproject.toml
# by the following command:
#
# pip-compile --extra=ci --extra=testing --output-file=requirements/ci.txt --resolver=backtracking pyproject.toml requirements/base.txt requirements/testing.txt
#
amqp==5.1.1 amqp==5.1.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -21,6 +17,7 @@ autoflake==2.2.0
beautifulsoup4==4.12.2 beautifulsoup4==4.12.2
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
billiard==4.1.0 billiard==4.1.0
# via # via
@ -34,12 +31,14 @@ black==23.3.0
bleach==6.0.0 bleach==6.0.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
celery==5.3.1 celery==5.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# django-celery-beat # -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# django-celery-beat
certifi==2023.5.7 certifi==2023.5.7
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -84,27 +83,32 @@ cron-descriptor==1.4.0
django==3.2.19 django==3.2.19
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml)
# django-axes # django-axes
# django-celery-beat # django-celery-beat
# django-timezone-field # django-timezone-field
# djangorestframework # djangorestframework
# drf-yasg # drf-yasg
# newsreader (pyproject.toml)
django-axes==6.0.4 django-axes==6.0.4
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-celery-beat==2.5.0 django-celery-beat==2.5.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-registration-redux==2.12 django-registration-redux==2.12
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-rest-framework==0.1.0 django-rest-framework==0.1.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-timezone-field==5.1 django-timezone-field==5.1
# via # via
@ -120,6 +124,7 @@ djangorestframework==3.14.0
drf-yasg==1.21.6 drf-yasg==1.21.6
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
factory-boy==3.2.1 factory-boy==3.2.1
# via # via
@ -132,6 +137,7 @@ faker==18.11.2
feedparser==6.0.10 feedparser==6.0.10
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
freezegun==1.2.2 freezegun==1.2.2
# via # via
@ -140,6 +146,7 @@ freezegun==1.2.2
ftfy==5.9 ftfy==5.9
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
idna==3.4 idna==3.4
# via # via
@ -163,6 +170,7 @@ kombu==5.3.1
lxml==4.9.2 lxml==4.9.2
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
mypy-extensions==1.0.0 mypy-extensions==1.0.0
# via # via
@ -195,6 +203,7 @@ prompt-toolkit==3.0.38
psycopg2==2.9.6 psycopg2==2.9.6
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
pyflakes==3.0.1 pyflakes==3.0.1
# via # via
@ -216,10 +225,12 @@ python-dateutil==2.8.2
python-dotenv==0.21.1 python-dotenv==0.21.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
python-memcached==1.59 python-memcached==1.59
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
pytz==2023.3 pytz==2023.3
# via # via
@ -237,12 +248,19 @@ pyyaml==6.0
requests==2.31.0 requests==2.31.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# requests-oauthlib # requests-oauthlib
requests-oauthlib==1.3.1 requests-oauthlib==1.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
setuptools==72.1.0
# via
# -r requirements/base.txt
# -r requirements/testing.txt
# django-axes
sgmllib3k==1.0.0 sgmllib3k==1.0.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -315,6 +333,3 @@ webencodings==0.5.1
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt # -r requirements/testing.txt
# bleach # bleach
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View file

@ -1,9 +1,5 @@
# # This file was autogenerated by uv via the following command:
# This file is autogenerated by pip-compile with Python 3.9 # uv pip compile --extra=testing --extra=development --output-file=requirements/development.txt requirements/base.txt requirements/testing.txt pyproject.toml
# by the following command:
#
# pip-compile --extra=development --extra=testing --output-file=requirements/development.txt --resolver=backtracking pyproject.toml requirements/base.txt requirements/testing.txt
#
amqp==5.1.1 amqp==5.1.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -21,6 +17,7 @@ autoflake==2.2.0
beautifulsoup4==4.12.2 beautifulsoup4==4.12.2
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
billiard==4.1.0 billiard==4.1.0
# via # via
@ -34,14 +31,16 @@ black==23.3.0
bleach==6.0.0 bleach==6.0.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
build==0.10.0 build==0.10.0
# via pip-tools # via pip-tools
celery==5.3.1 celery==5.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# django-celery-beat # -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# django-celery-beat
certifi==2023.5.7 certifi==2023.5.7
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -85,6 +84,8 @@ cron-descriptor==1.4.0
django==3.2.19 django==3.2.19
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml)
# django-axes # django-axes
# django-celery-beat # django-celery-beat
# django-debug-toolbar # django-debug-toolbar
@ -92,14 +93,15 @@ django==3.2.19
# django-timezone-field # django-timezone-field
# djangorestframework # djangorestframework
# drf-yasg # drf-yasg
# newsreader (pyproject.toml)
django-axes==6.0.4 django-axes==6.0.4
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-celery-beat==2.5.0 django-celery-beat==2.5.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-debug-toolbar==4.1.0 django-debug-toolbar==4.1.0
# via newsreader (pyproject.toml) # via newsreader (pyproject.toml)
@ -108,10 +110,12 @@ django-extensions==3.2.3
django-registration-redux==2.12 django-registration-redux==2.12
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-rest-framework==0.1.0 django-rest-framework==0.1.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
django-timezone-field==5.1 django-timezone-field==5.1
# via # via
@ -127,6 +131,7 @@ djangorestframework==3.14.0
drf-yasg==1.21.6 drf-yasg==1.21.6
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
factory-boy==3.2.1 factory-boy==3.2.1
# via # via
@ -139,6 +144,7 @@ faker==18.11.2
feedparser==6.0.10 feedparser==6.0.10
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
freezegun==1.2.2 freezegun==1.2.2
# via # via
@ -147,6 +153,7 @@ freezegun==1.2.2
ftfy==5.9 ftfy==5.9
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
idna==3.4 idna==3.4
# via # via
@ -170,6 +177,7 @@ kombu==5.3.1
lxml==4.9.2 lxml==4.9.2
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
mypy-extensions==1.0.0 mypy-extensions==1.0.0
# via # via
@ -191,6 +199,8 @@ pathspec==0.11.1
# via # via
# -r requirements/testing.txt # -r requirements/testing.txt
# black # black
pip==24.2
# via pip-tools
pip-tools==6.13.0 pip-tools==6.13.0
# via newsreader (pyproject.toml) # via newsreader (pyproject.toml)
platformdirs==3.8.0 platformdirs==3.8.0
@ -205,6 +215,7 @@ prompt-toolkit==3.0.38
psycopg2==2.9.6 psycopg2==2.9.6
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
pyflakes==3.0.1 pyflakes==3.0.1
# via # via
@ -228,10 +239,12 @@ python-dateutil==2.8.2
python-dotenv==0.21.1 python-dotenv==0.21.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
python-memcached==1.59 python-memcached==1.59
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
pytz==2023.3 pytz==2023.3
# via # via
@ -249,12 +262,20 @@ pyyaml==6.0
requests==2.31.0 requests==2.31.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# requests-oauthlib # requests-oauthlib
requests-oauthlib==1.3.1 requests-oauthlib==1.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# -r requirements/testing.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
setuptools==72.1.0
# via
# -r requirements/base.txt
# -r requirements/testing.txt
# django-axes
# pip-tools
sgmllib3k==1.0.0 sgmllib3k==1.0.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -332,7 +353,3 @@ webencodings==0.5.1
# bleach # bleach
wheel==0.40.0 wheel==0.40.0
# via pip-tools # via pip-tools
# The following packages are considered to be unsafe in a requirements file:
# pip
# setuptools

View file

@ -1,9 +1,5 @@
# # This file was autogenerated by uv via the following command:
# This file is autogenerated by pip-compile with Python 3.9 # uv pip compile --extra=production --output-file=requirements/production.txt requirements/base.txt pyproject.toml
# by the following command:
#
# pip-compile --extra=production --output-file=requirements/production.txt --resolver=backtracking pyproject.toml requirements/base.txt
#
amqp==5.1.1 amqp==5.1.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -27,8 +23,8 @@ bleach==6.0.0
celery==5.3.1 celery==5.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# django-celery-beat
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# django-celery-beat
certifi==2023.5.7 certifi==2023.5.7
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -64,12 +60,12 @@ cron-descriptor==1.4.0
django==3.2.19 django==3.2.19
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# newsreader (pyproject.toml)
# django-axes # django-axes
# django-celery-beat # django-celery-beat
# django-timezone-field # django-timezone-field
# djangorestframework # djangorestframework
# drf-yasg # drf-yasg
# newsreader (pyproject.toml)
django-axes==6.0.4 django-axes==6.0.4
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -180,6 +176,11 @@ requests-oauthlib==1.3.1
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
sentry-sdk==1.26.0 sentry-sdk==1.26.0
# via newsreader (pyproject.toml) # via newsreader (pyproject.toml)
setuptools==72.1.0
# via
# -r requirements/base.txt
# django-axes
# gunicorn
sgmllib3k==1.0.0 sgmllib3k==1.0.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -232,6 +233,3 @@ webencodings==0.5.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# bleach # bleach
# The following packages are considered to be unsafe in a requirements file:
# setuptools

View file

@ -1,9 +1,5 @@
# # This file was autogenerated by uv via the following command:
# This file is autogenerated by pip-compile with Python 3.9 # uv pip compile --extra=testing --output-file=requirements/testing.txt requirements/base.txt pyproject.toml
# by the following command:
#
# pip-compile --extra=testing --output-file=requirements/testing.txt --resolver=backtracking pyproject.toml requirements/base.txt
#
amqp==5.1.1 amqp==5.1.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -31,8 +27,8 @@ bleach==6.0.0
celery==5.3.1 celery==5.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# django-celery-beat
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
# django-celery-beat
certifi==2023.5.7 certifi==2023.5.7
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -68,12 +64,12 @@ cron-descriptor==1.4.0
django==3.2.19 django==3.2.19
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# newsreader (pyproject.toml)
# django-axes # django-axes
# django-celery-beat # django-celery-beat
# django-timezone-field # django-timezone-field
# djangorestframework # djangorestframework
# drf-yasg # drf-yasg
# newsreader (pyproject.toml)
django-axes==6.0.4 django-axes==6.0.4
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -199,6 +195,10 @@ requests-oauthlib==1.3.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# newsreader (pyproject.toml) # newsreader (pyproject.toml)
setuptools==72.1.0
# via
# -r requirements/base.txt
# django-axes
sgmllib3k==1.0.0 sgmllib3k==1.0.0
# via # via
# -r requirements/base.txt # -r requirements/base.txt
@ -257,6 +257,3 @@ webencodings==0.5.1
# via # via
# -r requirements/base.txt # -r requirements/base.txt
# bleach # bleach
# The following packages are considered to be unsafe in a requirements file:
# setuptools