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

295
requirements.txt Normal file
View File

@@ -0,0 +1,295 @@
# This file was autogenerated by uv via the following command:
# uv pip compile pyproject.toml --output-file=requirements.txt
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
beautifulsoup4==4.12.3
# via mostovik-backend (pyproject.toml)
billiard==4.2.4
# via celery
celery==5.3.6
# via
# mostovik-backend (pyproject.toml)
# django-celery-beat
# django-celery-results
certifi==2026.1.4
# via
# requests
# selenium
cffi==2.0.0
# via cryptography
charset-normalizer==3.4.4
# via requests
click==8.1.7
# via
# celery
# click-didyoumean
# click-plugins
# click-repl
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
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
django==3.2.25
# via
# mostovik-backend (pyproject.toml)
# django-celery-beat
# django-celery-results
# django-cors-headers
# 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-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)
drf-yasg==1.21.10
# via mostovik-backend (pyproject.toml)
filelock==3.20.3
# via tldextract
h11==0.16.0
# via wsproto
hyperlink==21.0.0
# via twisted
idna==3.11
# via
# hyperlink
# requests
# tldextract
# trio
incremental==24.11.0
# via twisted
inflection==0.5.1
# via drf-yasg
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
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
model-bakery==1.17.0
# via mostovik-backend (pyproject.toml)
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
# drf-yasg
# incremental
# kombu
# parsel
# scrapy
pandas==2.0.3
# via mostovik-backend (pyproject.toml)
parsel==1.10.0
# via
# itemloaders
# scrapy
pillow==12.1.0
# via mostovik-backend (pyproject.toml)
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
pycparser==2.23
# via cffi
pydispatcher==2.0.7
# via scrapy
pyjwt==2.10.1
# via djangorestframework-simplejwt
pyopenssl==25.1.0
# via scrapy
pysocks==1.7.1
# via urllib3
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
# pandas
pyyaml==6.0.3
# via drf-yasg
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
# tldextract
requests-file==3.0.1
# via tldextract
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
sortedcontainers==2.4.0
# via trio
soupsieve==2.8.2
# via beautifulsoup4
sqlparse==0.5.5
# via django
tldextract==5.3.1
# via scrapy
trio==0.32.0
# via
# selenium
# trio-websocket
trio-websocket==0.12.2
# via selenium
twisted==25.5.0
# via scrapy
typing-extensions==4.15.0
# via
# cron-descriptor
# pyopenssl
# selenium
# twisted
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
w3lib==2.3.1
# via
# parsel
# scrapy
wcwidth==0.2.14
# via prompt-toolkit
wsproto==1.3.2
# via trio-websocket
zope-interface==8.2
# via
# scrapy
# twisted