feat: implement CI/CD pipeline with Gitea Actions

- Add Gitea Actions workflow with 4 stages: lint, test, build, push
- Configure ruff linting and formatting checks
- Set up Django tests with PostgreSQL and Redis services
- Implement Docker image building for web and celery services
- Add requirements.txt and requirements-dev.txt generation
- Fix ipdb compatibility issues in test runner
- Update ruff configuration for Django compatibility
- Add comprehensive CI/CD documentation
This commit is contained in:
2026-01-19 14:24:48 +01:00
parent cbfbd8652d
commit 06b30fca02
26 changed files with 1769 additions and 726 deletions

435
requirements-dev.txt Normal file
View File

@@ -0,0 +1,435 @@
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml --extra dev --output-file=requirements-dev.txt
alabaster==0.7.16
# via sphinx
amqp==5.3.1
# via kombu
asgiref==3.11.0
# via
# django
# django-cors-headers
attrs==25.4.0
# via
# outcome
# service-identity
# trio
# twisted
automat==25.4.16
# via twisted
babel==2.17.0
# via sphinx
beautifulsoup4==4.12.3
# via mostovik-backend (pyproject.toml)
billiard==4.2.4
# via celery
black==23.12.1
# via mostovik-backend (pyproject.toml)
celery==5.3.6
# via
# mostovik-backend (pyproject.toml)
# django-celery-beat
# django-celery-results
# flower
certifi==2026.1.4
# via
# requests
# selenium
cffi==2.0.0
# via cryptography
cfgv==3.5.0
# via pre-commit
charset-normalizer==3.4.4
# via requests
click==8.1.7
# via
# mostovik-backend (pyproject.toml)
# black
# celery
# click-didyoumean
# click-plugins
# click-repl
# typer
click-didyoumean==0.3.1
# via celery
click-plugins==1.1.1.2
# via celery
click-repl==0.3.0
# via celery
constantly==23.10.4
# via twisted
coreapi==2.3.3
# via
# mostovik-backend (pyproject.toml)
# django-rest-swagger
# openapi-codec
coreschema==0.0.4
# via coreapi
coverage==7.4.0
# via
# mostovik-backend (pyproject.toml)
# pytest-cov
cron-descriptor==2.0.6
# via django-celery-beat
cryptography==42.0.5
# via
# mostovik-backend (pyproject.toml)
# pyopenssl
# scrapy
# service-identity
cssselect==1.3.0
# via
# parsel
# scrapy
defusedxml==0.7.1
# via scrapy
distlib==0.4.0
# via virtualenv
django==3.2.25
# via
# mostovik-backend (pyproject.toml)
# django-celery-beat
# django-celery-results
# django-cors-headers
# django-debug-toolbar
# django-extensions
# django-filter
# django-redis
# django-timezone-field
# djangorestframework
# djangorestframework-simplejwt
# drf-yasg
# model-bakery
django-celery-beat==2.6.0
# via mostovik-backend (pyproject.toml)
django-celery-results==2.5.1
# via mostovik-backend (pyproject.toml)
django-cors-headers==4.3.1
# via mostovik-backend (pyproject.toml)
django-debug-toolbar==4.2.0
# via mostovik-backend (pyproject.toml)
django-extensions==3.2.3
# via mostovik-backend (pyproject.toml)
django-filter==23.5
# via mostovik-backend (pyproject.toml)
django-redis==5.4.0
# via mostovik-backend (pyproject.toml)
django-rest-swagger==2.2.0
# via mostovik-backend (pyproject.toml)
django-timezone-field==7.2.1
# via django-celery-beat
djangorestframework==3.14.0
# via
# mostovik-backend (pyproject.toml)
# django-rest-swagger
# djangorestframework-simplejwt
# drf-yasg
djangorestframework-simplejwt==5.3.1
# via mostovik-backend (pyproject.toml)
docutils==0.20.1
# via
# sphinx
# sphinx-rtd-theme
drf-yasg==1.21.10
# via mostovik-backend (pyproject.toml)
factory-boy==3.3.0
# via mostovik-backend (pyproject.toml)
faker==40.1.2
# via factory-boy
filelock==3.20.3
# via
# tldextract
# virtualenv
flake8==6.1.0
# via mostovik-backend (pyproject.toml)
flower==2.0.1
# via mostovik-backend (pyproject.toml)
gevent==23.9.1
# via mostovik-backend (pyproject.toml)
greenlet==3.3.0
# via gevent
gunicorn==21.2.0
# via mostovik-backend (pyproject.toml)
h11==0.16.0
# via wsproto
humanize==4.15.0
# via flower
hyperlink==21.0.0
# via twisted
identify==2.6.16
# via pre-commit
idna==3.11
# via
# hyperlink
# requests
# tldextract
# trio
imagesize==1.4.1
# via sphinx
incremental==24.11.0
# via twisted
inflection==0.5.1
# via drf-yasg
iniconfig==2.3.0
# via pytest
isort==5.13.2
# via mostovik-backend (pyproject.toml)
itemadapter==0.13.1
# via
# itemloaders
# scrapy
itemloaders==1.3.2
# via scrapy
itypes==1.2.0
# via coreapi
jinja2==3.1.6
# via
# coreschema
# sphinx
jmespath==1.0.1
# via
# itemloaders
# parsel
kombu==5.6.2
# via celery
lxml==6.0.2
# via
# parsel
# scrapy
markupsafe==3.0.3
# via
# jinja2
# werkzeug
mccabe==0.7.0
# via flake8
model-bakery==1.17.0
# via mostovik-backend (pyproject.toml)
mypy-extensions==1.1.0
# via black
nodeenv==1.10.0
# via pre-commit
numpy==1.24.4
# via
# mostovik-backend (pyproject.toml)
# pandas
openapi-codec==1.3.2
# via django-rest-swagger
outcome==1.3.0.post0
# via
# trio
# trio-websocket
packaging==25.0
# via
# black
# drf-yasg
# gunicorn
# incremental
# kombu
# parsel
# pytest
# scrapy
# sphinx
pandas==2.0.3
# via mostovik-backend (pyproject.toml)
parsel==1.10.0
# via
# itemloaders
# scrapy
pathspec==1.0.3
# via black
pillow==12.1.0
# via mostovik-backend (pyproject.toml)
platformdirs==4.5.1
# via
# black
# virtualenv
pluggy==1.6.0
# via pytest
pre-commit==3.6.0
# via mostovik-backend (pyproject.toml)
prometheus-client==0.24.1
# via flower
prompt-toolkit==3.0.52
# via click-repl
protego==0.5.0
# via scrapy
psycopg2-binary==2.9.9
# via mostovik-backend (pyproject.toml)
pyasn1==0.6.2
# via
# pyasn1-modules
# service-identity
pyasn1-modules==0.4.2
# via service-identity
pycodestyle==2.11.1
# via flake8
pycparser==2.23
# via cffi
pydispatcher==2.0.7
# via scrapy
pyflakes==3.1.0
# via flake8
pygments==2.19.2
# via sphinx
pyjwt==2.10.1
# via djangorestframework-simplejwt
pyopenssl==25.1.0
# via scrapy
pysocks==1.7.1
# via urllib3
pytest==7.4.4
# via
# mostovik-backend (pyproject.toml)
# pytest-cov
# pytest-django
pytest-cov==4.1.0
# via mostovik-backend (pyproject.toml)
pytest-django==4.7.0
# via mostovik-backend (pyproject.toml)
python-crontab==3.3.0
# via django-celery-beat
python-dateutil==2.8.2
# via
# mostovik-backend (pyproject.toml)
# celery
# pandas
python-decouple==3.8
# via mostovik-backend (pyproject.toml)
python-dotenv==1.0.1
# via mostovik-backend (pyproject.toml)
python-json-logger==2.0.7
# via mostovik-backend (pyproject.toml)
pytz==2024.1
# via
# mostovik-backend (pyproject.toml)
# django
# djangorestframework
# drf-yasg
# flower
# pandas
pyyaml==6.0.3
# via
# drf-yasg
# pre-commit
queuelib==1.8.0
# via scrapy
redis==5.0.3
# via
# mostovik-backend (pyproject.toml)
# django-redis
requests==2.31.0
# via
# mostovik-backend (pyproject.toml)
# coreapi
# requests-file
# sphinx
# tldextract
requests-file==3.0.1
# via tldextract
ruff==0.1.14
# via mostovik-backend (pyproject.toml)
scrapy==2.11.2
# via mostovik-backend (pyproject.toml)
selenium==4.17.2
# via mostovik-backend (pyproject.toml)
service-identity==24.2.0
# via scrapy
setuptools==80.9.0
# via scrapy
simplejson==3.20.2
# via django-rest-swagger
six==1.17.0
# via python-dateutil
sniffio==1.3.1
# via trio
snowballstemmer==3.0.1
# via sphinx
sortedcontainers==2.4.0
# via trio
soupsieve==2.8.2
# via beautifulsoup4
sphinx==7.2.6
# via
# mostovik-backend (pyproject.toml)
# sphinx-rtd-theme
# sphinxcontrib-jquery
sphinx-rtd-theme==2.0.0
# via mostovik-backend (pyproject.toml)
sphinxcontrib-applehelp==2.0.0
# via sphinx
sphinxcontrib-devhelp==2.0.0
# via sphinx
sphinxcontrib-htmlhelp==2.1.0
# via sphinx
sphinxcontrib-jquery==4.1
# via sphinx-rtd-theme
sphinxcontrib-jsmath==1.0.1
# via sphinx
sphinxcontrib-qthelp==2.0.0
# via sphinx
sphinxcontrib-serializinghtml==2.0.0
# via sphinx
sqlparse==0.5.5
# via
# django
# django-debug-toolbar
tldextract==5.3.1
# via scrapy
tornado==6.5.4
# via flower
trio==0.32.0
# via
# selenium
# trio-websocket
trio-websocket==0.12.2
# via selenium
twisted==25.5.0
# via scrapy
typer==0.9.0
# via mostovik-backend (pyproject.toml)
typing-extensions==4.15.0
# via
# cron-descriptor
# pyopenssl
# selenium
# twisted
# typer
tzdata==2025.3
# via
# celery
# django-celery-beat
# kombu
# pandas
uritemplate==4.2.0
# via
# coreapi
# drf-yasg
urllib3==2.6.3
# via
# requests
# selenium
vine==5.1.0
# via
# amqp
# celery
# kombu
virtualenv==20.36.1
# via pre-commit
w3lib==2.3.1
# via
# parsel
# scrapy
watchdog==3.0.0
# via mostovik-backend (pyproject.toml)
wcwidth==0.2.14
# via prompt-toolkit
werkzeug==3.0.1
# via mostovik-backend (pyproject.toml)
wsproto==1.3.2
# via trio-websocket
zope-event==6.1
# via gevent
zope-interface==8.2
# via
# gevent
# scrapy
# twisted