- Π Π°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
- Π‘ΡΡΠΊ
- ΠΠ°ΠΏΡΡΠΊ ΡΠ΅ΡΡΠΎΠ²
- ΠΠ°ΠΏΡΡΠΊ flake8
- ΠΠ°ΠΏΡΡΠΊ mypy
- Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ°
- docker
- docker compose
- python 3.8+ (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° pytest/flake8/mypy)
- poetry (ΠΎΠΏΡΠΈΠΎΠ½Π°Π»ΡΠ½ΠΎ, Π΄Π»Ρ Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° pytest/flake8/mypy)
ΠΠ΅ΡΠ΅Π΄ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ ΡΠ±Π΅Π΄ΠΈΡΡΡΡ, ΡΡΠΎ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ docker ΠΏΡΠΈΡΡΡΡΡΠ²ΡΠ΅Ρ ΡΠ°ΠΉΠ» .env, Π² ΠΊΠΎΡΠΎΡΠΎΠΌ Π·Π°ΠΏΠΎΠ»Π½Π΅Π½Ρ Π²ΡΠ΅ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ.
ΠΠ°Π·Π²Π°Π½ΠΈΡ ΡΡΠΈΡ
ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΠΌΠΎΡΡΠ΅ΡΡ Π² .env.example
ΠΠΎΠ΄ΡΠΎΠ±Π½ΠΎΠ΅ ΠΎΠΏΠΈΡΠ°Π½ΠΈΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
Π‘ΡΡΠ»ΠΊΠ° Π½Π° container registry. ΠΠ΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ Π·Π°ΠΏΠΎΠ»Π½ΠΈΡΡ, Π΅ΡΠ»ΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ compose ΡΠ°ΠΉΠ» Ρ ΡΠΊΠ°Π·Π°Π½Π½ΡΠΌΠΈ image Π΄Π»Ρ ΠΊΠ°ΡΡΠΎΠΌΠ½ΡΡ ΡΠ±ΠΎΡΠΎΠΊ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, docker-compose.main.yml)
ΠΠΊΡΡΠΆΠ΅Π½ΠΈΠ΅ (development, production, testing, etc). ΠΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΎ Π΄Π»Ρ ΡΠ°Π·Π»ΠΈΡΠ½ΡΡ Π½ΡΠΆΠ΄ Π² ΡΠ°ΠΌΠΊΠ°Ρ ΠΏΡΠΎΠ΅ΠΊΡΠ°
ΠΠ°Π·Π²Π°Π½ΠΈΠ΅ ΠΏΡΠΎΠ΅ΠΊΡΠ°
Π‘Π΅ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΊΠ»ΡΡ Π΄Π»Ρ FastAPI
Π Π΅ΠΆΠΈΠΌ ΠΎΡΠ»Π°Π΄ΠΊΠΈ
0 - Π²ΡΠΊΠ»ΡΡΠ΅Π½
1 - Π²ΠΊΠ»ΡΡΠ΅Π½
ΠΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠ΅Π½, ΡΠΎ:
- 500 ΠΎΡΠΈΠ±ΠΊΠΈ ΡΠ΅ΡΠ²Π΅ΡΠ° Π½Π΅ Π±ΡΠ΄ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ
- Π Π»ΠΎΠ³Π°Ρ Π±ΡΠ΄ΡΡ ΠΎΡΠΎΠ±ΡΠ°ΠΆΠ°ΡΡΡΡ Π·Π°ΠΏΡΠΎΡΡ Π² ΠΠ, Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅ΠΌΡΠ΅ Π² ΡΠ°ΠΌΠΊΠ°Ρ Π·Π°ΠΏΡΠΎΡΠ°
Π Π΅ΠΆΠΈΠΌ ΠΏΡΠΎΠ΄ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΡ
0 - Π²ΡΠΊΠ»ΡΡΠ΅Π½
1 - Π²ΠΊΠ»ΡΡΠ΅Π½
ΠΡΠ»ΠΈ Π²ΡΠΊΠ»ΡΡΠ΅Π½, ΡΠΎ:
- ΠΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ½Π° Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΡ swagger-ui/redoc
- Π Π°Π±ΠΎΡΠ° Ρ ΠΏΠ»Π°ΡΠ΅ΠΆΠ½ΡΠΌΠΈ ΡΠΈΡΡΠ΅ΠΌΠ°ΠΌΠΈ Π±ΡΠ΄Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π² Π±ΠΎΠ΅Π²ΠΎΠΌ ΡΠ΅ΠΆΠΈΠΌΠ΅
- Π§ΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅ Π±ΡΠ΄ΡΡ ΠΈΡΠΊΠ»ΡΡΠ΅Π½Ρ ΠΈΠ· Π»ΠΎΠ³ΠΎΠ²
ΠΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°Π½ΡΡΡΡ ΠΌΠ΅Π΄ΠΈΠ°-ΡΠ°ΠΉΠ»Ρ
ΠΡΠ΅ΡΠΈΠΊΡ Π² ΡΡΡΠ»ΠΊΠ΅ Π΄Π»Ρ ΠΌΠ΅Π΄ΠΈΠ°-ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°Π½ΡΡΡΡ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°ΠΉΠ»Ρ
ΠΡΠ΅ΡΠΈΠΊΡ Π² ΡΡΡΠ»ΠΊΠ΅ Π΄Π»Ρ ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΡ -ΡΠ°ΠΉΠ»ΠΎΠ²
ΠΡΡΡ ΠΊ Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΠΈ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°Π½ΡΡΡΡ Π»ΠΎΠ³-ΡΠ°ΠΉΠ»Ρ
Π€Π»Π°Π³, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅Ρ, Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π»ΠΈ ΠΏΡΠΎΠ΅ΠΊΡ ΡΠ΅ΡΠ΅Π· gunicorn
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ DB_NAME, DB_USER, DB_PASSWORD ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π»ΡΠ±ΡΠΌΠΈ
ΠΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ
Π·Π°ΠΏΡΡΠΊΠ°Ρ
DB_NAME, DB_USER, DB_PASSWORD Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅
DB_HOST Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ° ΠΠ ΠΈΠ· compose ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
DB_PORT Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ ΠΏΠΎΡΡΡ ΠΠ ΠΈΠ· compose ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
NGINX_OUTER_PORT - ΠΏΠΎΡΡ, ΡΠ΅ΡΠ΅Π· ΠΊΠΎΡΠΎΡΡΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΡ nginx
NGINX_INNER_PORT - ΠΏΠΎΡΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π±ΡΠ΄ΡΡ ΠΏΠ΅ΡΠ΅Π°Π΄ΡΠ΅ΡΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π²Π½ΡΡΡΠΈ ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ° nginx
ASGI_PORT - ΠΏΠΎΡΡ, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ asgi ΡΠ΅ΡΠ²ΠΈΡΡ
RABBITMQ_HOST Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ° RabbitMQ ΠΈΠ· compose ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
RABBITMQ_PORT - Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π½Π° Ρ
ΠΎΡΡΠ΅ ΠΏΠΎΡΡ
ΠΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ RABBITMQ_USER, RABBITMQ_PASSWORD ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π»ΡΠ±ΡΠΌΠΈ
ΠΡΠΈ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠΈΡ
Π·Π°ΠΏΡΡΠΊΠ°Ρ
RABBITMQ_USER, RABBITMQ_PASSWORD Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°ΠΊΠΈΠΌΠΈ ΠΆΠ΅, ΠΊΠ°ΠΊ ΠΏΡΠΈ ΠΏΠ΅ΡΠ²ΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅
CELERY_BROKER_URL - ΡΡΡΠ»ΠΊΠ° Π΄Π»Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ Π±ΡΠΎΠΊΠ΅ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ
CELERY_RESULT_BACKEND - Π±ΡΠΊΠ΅Π½Π΄ Π΄Π»Ρ Ρ
ΡΠ°Π½Π΅Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π·Π°Π΄Π°Ρ
REDIS_HOST Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΎΠ²Π°ΡΡ Π½Π°Π·Π²Π°Π½ΠΈΡ ΡΠ΅ΡΠ²ΠΈΡΠ° Redis ΠΈΠ· compose ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΈ
REDIS_PORT - Π»ΡΠ±ΠΎΠΉ Π΄ΠΎΡΡΡΠΏΠ½ΡΠΉ Π½Π° Ρ
ΠΎΡΡΠ΅ ΠΏΠΎΡΡ
REDIS_PASSWORD - ΠΏΠ°ΡΠΎΠ»Ρ ΠΎΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ default
LOGGING_SENSITIVE_FIELDS - ΡΡΠ²ΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΏΠΎΠ»Ρ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΈΠ³Π½ΠΎΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΈ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³Π°. ΠΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ, Π±Π΅Π· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²
LOGGING_LOGGERS - Π½Π°Π·Π²Π°Π½ΠΈΡ Π»ΠΎΠ³Π΅ΡΠΎΠ². ΠΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠ°Π·Π΄Π΅Π»Π΅Π½Ρ ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ, Π±Π΅Π· ΠΏΡΠΎΠ±Π΅Π»ΠΎΠ²
LOGGING_MAX_BYTES - ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ Π±Π°ΠΉΡ Π½Π° ΠΎΠ΄ΠΈΠ½ Π»ΠΎΠ³ ΡΠ°ΠΉΠ»
LOGGING_BACKUP_COUNT - ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎΠ΅ ΠΊΠΎΠ»-Π²ΠΎ Π±ΡΠΊΠ°ΠΏ ΡΠ°ΠΉΠ»ΠΎΠ² Π΄Π»Ρ Π»ΠΎΠ³ΠΎΠ²
RESTART_POLICY - ΠΏΠΎΠ»ΠΈΡΠΈΠΊΠ° ΡΠ΅ΡΡΠ°ΡΡΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ²
NGINX_VERSION - Π²Π΅ΡΡΠΈΡ Nginx
POSTGRES_VERSION - Π²Π΅ΡΡΠΈΡ PostgreSQL
REDIS_VERSION - Π²Π΅ΡΡΠΈΡ Redis
RABBITMQ_VERSION - Π²Π΅ΡΡΠΈΡ Rabbitmq
ASGI_TARGET - ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ asgi ΡΠ΅ΡΠ²ΠΈΡΠ°
CELERY_TARGET - ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ celery worker ΡΠ΅ΡΠ²ΠΈΡΠ°
BEAT_TARGET - ΠΎΠ±ΡΠ°Π· Π΄Π»Ρ ΡΠ±ΠΎΡΠΊΠΈ celery beat ΡΠ΅ΡΠ²ΠΈΡΠ°
*_CPUS - Π»ΠΈΠΌΠΈΡ ΡΠ΄Π΅Ρ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
*_MEM_LIMIT - Π»ΠΈΠΌΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
*_MEM_RESERVATION - Π·Π°ΠΏΠ°Ρ ΠΏΠ°ΠΌΡΡΠΈ Π½Π° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
docker-compose -f docker/docker-compose.yml -f docker/docker-compose.local.yml upΠΈΠ»ΠΈ
make localupΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΡΠΎΠ΅ΠΊΡ Π±ΡΠ΄Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://localhost:.../
docker-compose upΠΈΠ»ΠΈ
make updocker-compose -f docker/docker-compose.yml -f docker/docker-compose.main.yml upΠΈΠ»ΠΈ
make mainupΠΡΠΎΠ΅ΠΊΡ ΡΡΠ°Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ΅Π½ ΠΏΠΎ ΠΏΠΎΡΡΡ ${NGINX_OUTER_PORT}
Π Π»ΠΎΠΊΠ°Π»ΡΠ½ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ ΠΏΠ΅ΡΠ΅ΠΉΡΠΈ ΠΏΠΎ Π°Π΄ΡΠ΅ΡΡ http://localhost:${NGINX_OUTER_PORT}/
Π Π΄ΡΡΠ³ΠΎΠΌ ΠΎΠΊΡΡΠΆΠ΅Π½ΠΈΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎ Π½Π°ΡΡΡΠΎΠΈΡΡ Π΄ΠΎΠΌΠ΅Π½, ΠΏΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ Π²Π΅Π±-ΡΠ΅ΡΠ²Π΅Ρ (Nginx/Apache) Π±ΡΠ΄Π΅Ρ ΠΏΡΠΎΠΊΡΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠ΅ Π·Π°ΠΏΡΠΎΡΡ Π½Π° ΠΏΠΎΡΡ ${NGINX_OUTER_PORT}
ΠΡΠ»ΠΈ Π½Π° Ρ ΠΎΡΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Π° docker compose Π²Π΅ΡΡΠΈΠΈ >2, ΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΡΡΡ ΠΎΡΠΈΠ±ΠΊΠ° ΡΠΈΠ½ΡΠ°ΠΊΡΠΈΡΠ° ΠΊΠΎΠΌΠ°Π½Π΄Ρ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π² ΠΊΠΎΠΌΠ°Π½Π΄Π°Ρ Π²ΡΡΠ΅ Π½ΡΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ
docker-composeΠ½Π°
docker compose- ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΠ·ΡΠΊ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΡ β
Python ... - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ ΡΡΠ΅ΠΉΠΌΠ²ΠΎΡΠΊ β
FastAPI ... - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π‘Π£ΠΠ β
PostgreSQL ... - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π΄Π»Ρ ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ NoSQL ΠΠ β
Redis ... - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΠΉ Π±ΡΠΎΠΊΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ β
RabbitMQ ... - ΠΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠ°Ρ Π°ΡΠΈΠ½Ρ
ΡΠΎΠ½Π½Π°Ρ ΠΎΡΠ΅ΡΠ΅Π΄Ρ Π·Π°Π΄Π°Ρ β
Celery ...
uvicorn (...)β HTTP-ΡΠ΅ΡΠ²Π΅Ρ Π΄Π»Ρ FastAPIpsycopg (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ PostgreSQL Π² Pythonredis (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ Redis Π² PythonCelery (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Π°ΡΠΈΠ½Ρ ΡΠΎΠ½Π½ΡΡ ΠΎΡΠ΅ΡΠ΅Π΄Π΅ΠΉ Π·Π°Π΄Π°Ρamqp (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ amqp-ΠΏΡΠΎΡΠΎΠΊΠΎΠ»ΠΎΠΌJSON-log-formatter (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π»ΠΎΠ³ΠΎΠ² Π² JSON-ΡΠΎΡΠΌΠ°ΡΠ΅dependency-injector (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ Π²Π½Π΅Π΄ΡΠ΅Π½ΠΈΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ (DI)pytest (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡpytest-cov (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΡΠ΅Π½ΠΊΠΈ ΠΏΠΎΠΊΡΡΡΠΈΡ ΠΊΠΎΠ΄Π° ΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ΅ΡΠ΅Π· pytestpytest-mock (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΌΠΎΠΊΠ° Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ ΡΠ΅ΡΠ΅Π· pytestpytest-timeout (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· pytestconcurrent-log-handler (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠΉ Π·Π°ΠΏΠΈΡΠΈ Π»ΠΎΠ³ΠΎΠ² Π² ΡΠ°ΠΉΠ»Ρ ΠΏΡΠΈ Π·Π°ΠΏΡΡΠΊΠ΅ Π²Π΅Π± ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ ΡΠ΅ΡΠ΅Π· Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΠΎΡΠΊΠ΅ΡΠΎΠ² (ΠΊΠ°ΠΊ Π² uvicorn)mypy (...)β ΡΡΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ Π°Π½Π°Π»ΠΈΠ·Π°ΡΠΎΡ ΡΠΈΠΏΠΎΠ²flake8 (...)β ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π»ΠΈΠ½ΡΠΈΠ½Π³Π° Π΄Π»Ρ Pythonblack (...)β Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΊΠΎΠ΄Π° Π½Π° ΡΠ·ΡΠΊΠ΅ Pythonisort (...)- Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° Π΄Π»Ρ ΡΠΎΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠΌΠΏΠΎΡΡΠΎΠ²
-
ΠΠ°ΠΉΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
asgiΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρdocker exec -it ${PROJECT_NAME}-asgi bash
-
ΠΠ°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
pytest
ΠΈΠ»ΠΈ
make testΠΡΠΈ ΡΠ°ΠΊΠΎΠΌ Π·Π°ΠΏΡΡΠΊΠ΅ ΡΠ΅ΡΡΡ, Π² ΠΊΠΎΡΠΎΡΡΡ
ΡΠ΅ΡΡΠΈΡΡΠ΅ΡΡΡ ΡΠ°Π±ΠΎΡΠ° Ρ ΠΠ, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡ Ρ ΠΎΡΠΈΠ±ΠΊΠΎΠΉ
ΠΡΠΈ ΠΎΡΠΈΠ±ΠΊΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ Π·Π°ΠΏΡΡΡΠΈΡΠ΅ ΡΠ΅ΡΡΡ Π²Π½ΡΡΡΠΈ Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
-
ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ
-
ΠΠ°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΠΎΠ² ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
poetry run pytest
-
ΠΠ°ΠΉΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
asgiΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρdocker exec -it ${PROJECT_NAME}-asgi bash
-
ΠΠ°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ flake8 ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
flake8 .
ΠΈΠ»ΠΈ
make flake8-
ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ
-
ΠΠ°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ flake8 ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
poetry run flake8 .
-
ΠΠ°ΠΉΡΠΈ Π² ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅Ρ
asgiΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρdocker exec -it ${PROJECT_NAME}-asgi bash
-
ΠΠ°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ mypy ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
mypy .
ΠΈΠ»ΠΈ
make mypyΠΡΠΈ Π²ΠΎΠ·Π½ΠΈΠΊΠ½ΠΎΠ²Π΅Π½ΠΈΠΈ ΠΎΡΠΈΠ±ΠΎΠΊ Π·Π°ΠΏΡΡΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ΅Π½ ΡΠΎΠ»ΡΠΊΠΎ Π²Π½ΡΡΡΠΈ Docker-ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠ°
-
ΠΠ΅ΡΠ΅ΠΉΡΠΈ Π² Π΄ΠΈΡΠ΅ΠΊΡΠΎΡΠΈΡ Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΡΠΌ ΡΠ°ΠΉΠ»ΠΎΠΌ
-
ΠΠ°ΡΠ°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ mypy ΡΠ΅ΡΠ΅Π· ΠΊΠΎΠΌΠ°Π½Π΄Ρ
poetry run mypy .
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ black, ΡΡΠΎΠ±Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΡΠΈΡΡΠΎΡΡ ΠΊΠΎΠ΄Π° ΠΈ ΠΈΠ·Π±Π΅Π³Π°ΡΡ Π»ΠΈΡΠ½ΠΈΡ
ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ Π³ΠΈΡΠΎΠΌ.
ΠΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π° Π΄Π»Ρ Visual Studio Code .vscode/settings.json:
{
"[python]": {
"editor.defaultFormatter": "ms-python.black-formatter",
"editor.formatOnSave": true
}
}ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pre-commit, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΠ ΠΊΠΎΠ΄ Π±ΡΠ» ΡΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΈ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· flake8)
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ dev-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
poetry run pre-commit installΠ£Π΄Π°Π»Π΅Π½ΠΈΠ΅
poetry run pre-commit uninstallΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Ρ
ΡΠΊΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² (stages: [commit])
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
poetry run pre-commit install --hook-type pre-pushΠ£Π΄Π°Π»Π΅Π½ΠΈΠ΅
poetry run pre-commit uninstall -t pre-pushΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Ρ
ΡΠΊΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΡΡΠ΅ΠΉ (stages: [push])
ΠΡΠΈ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ΅ ΡΠ΅ΠΊΠΎΠΌΠ΅Π½Π΄ΡΠ΅ΡΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ pre-commit, ΡΡΠΎΠ±Ρ ΠΏΠ΅ΡΠ΅Π΄ ΡΠΎΡΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΠ ΠΊΠΎΠ΄ Π±ΡΠ» ΡΠΆΠ΅ ΠΏΠΎΠ΄Π³ΠΎΡΠΎΠ²Π»Π΅Π½Π½ΡΠΌ ΠΈ ΠΏΠΎΠ²Π΅ΡΡ
Π½ΠΎΡΡΠ½ΠΎ ΠΏΡΠΎΠ²Π΅ΡΠ΅Π½Π½ΡΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΠ΅ΡΠ΅Π· flake8)
ΠΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½Ρ dev-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠΈ
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
poetry run pre-commit installΠ£Π΄Π°Π»Π΅Π½ΠΈΠ΅
poetry run pre-commit uninstallΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΊΠΎΠΌΠΌΠΈΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Ρ
ΡΠΊΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΊΠΎΠΌΠΌΠΈΡΠΎΠ² (stages: [commit])
Π£ΡΡΠ°Π½ΠΎΠ²ΠΊΠ°
poetry run pre-commit install --hook-type pre-pushΠ£Π΄Π°Π»Π΅Π½ΠΈΠ΅
poetry run pre-commit uninstall -t pre-pushΠΠΎΡΠ»Π΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ, ΠΏΡΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ ΠΏΡΡΠ΅ Π±ΡΠ΄ΡΡ ΠΎΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Ρ
ΡΠΊΠΈ ΠΈΠ· ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠ³ΠΎ ΡΠ°ΠΉΠ»Π°, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠ΅ Π΄Π»Ρ ΠΏΡΡΠ΅ΠΉ (stages: [push])
ΠΠ»Ρ ΡΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΡΠΊΠ° ΠΊΠΎΠ½ΡΠ΅ΠΉΠ½Π΅ΡΠΎΠ², ΠΈΡ ΡΠ±ΠΎΡΠΊΠΈ, Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ² ΠΈ Ρ.ΠΏ. Π² ΠΏΡΠΎΠ΅ΠΊΡΠ΅ Π΅ΡΡΡ Makefile
ΠΠ»Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΈ, Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ Π·Π°ΠΏΡΡΠΊΠ° ΡΠ΅ΡΡΠΎΠ², Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Ρ
make testΠΡΠ½ΠΎΠ²Π½ΡΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΡΠ°Π±ΠΎΡΡ Ρ Π²Π΅ΡΠΊΠ°ΠΌΠΈ Π½Π° ΠΏΡΠΎΠ΅ΠΊΡΠ΅:
developβ Π²Π΅ΡΠΊΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ.- Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° dev-ΡΠ΅ΡΠ²Π΅ΡΠ΅;
feature/{feature-slug}β feature-Π²Π΅ΡΠΊΠ°.- Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΠΊΠΈ develop;
- ΠΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ MR Π² Π²Π΅ΡΠΊΡ develop.
bugfix/{bug-slug}β bugfix-Π²Π΅ΡΠΊΠ°.- Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΠΊΠΈ develop;
- ΠΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ MR Π² Π²Π΅ΡΠΊΡ develop.
release/{major}.{minor}β release-Π²Π΅ΡΠΊΠ°.- Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΠΊΠΈ develop;
- Π‘ΡΠΈΡΠ°Π΅ΡΡΡ ΠΊΠ°ΠΊ release-candidate;
- Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° stage-ΡΠ΅ΡΠ²Π΅ΡΠ΅ (ΠΏΠΎΠΊΠ° Π½Π΅ ΡΡΠ²Π΅ΡΠΆΠ΄Π΅Π½ΠΎ, ΠΊΠ°ΠΊ Π²Π°ΡΠΈΠ°Π½Ρ);
- ΠΡΡΠΌΠΎ Π² Π²Π΅ΡΠΊΠ΅ ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΏΠΎΡΠΈΠΊΡΠ΅Π½Ρ Π±Π°Π³ΠΈ, Π±Π΅Π· MR;
- ΠΡΠ΅ ΠΏΠΎΡΠΈΠΊΡΠ΅Π½Π½ΡΠ΅ Π² Π²Π΅ΡΠΊΠ΅ Π±Π°Π³ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ ΡΠΌΠ΅ΡΠΆΠ΅Π½Ρ Π² develop, ΠΆΠ΅Π»Π°ΡΠ΅Π»ΡΠ½ΠΎ ΡΡΠ°Π·Ρ ΠΏΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ Π±Π°Π³Π°, ΡΡΠΎΠ±Ρ Π½Π΅ ΡΠΏΡΡΡΠΈΡΡ ΡΠΈΠΊΡ;
- ΠΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ MR Π² Π²Π΅ΡΠΊΡ main.
- ΠΡΠ°Π²ΠΈΠ»Π° ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ Π²Π΅ΡΡΠΈΠΈ ΡΠ΅Π»ΠΈΠ·Π°:
minorΠ²Π΅ΡΡΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ , Π½Π΅ Π½Π°ΡΡΡΠ°ΡΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ. Π’.Π΅. ΠΏΡΠΈ ΡΡΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΠΈ API ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ ΡΠ°Π±ΠΎΡΡ Π±Π΅Π· Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ Π²Π½ΠΎΡΠΈΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡ;majorΠ²Π΅ΡΡΠΈΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΡΡ , Π½Π°ΡΡΡΠ°ΡΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ.- Π ΠΈΠ΄Π΅Π°Π»Π΅, major Π²Π΅ΡΡΠΈΡ Π΄ΠΎΠ»ΠΆΠ½Π° ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ Ρ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ API, Ρ.ΠΊ. Π½ΠΎΠ²Π°Ρ Π²Π΅ΡΡΠΈΡ API Π²Π½Π΅Π΄ΡΡΠ΅ΡΡΡ ΠΏΠΎ ΡΠ°ΠΊΠΎΠΌΡ ΠΆΠ΅ ΠΏΡΠΈΠ½ΡΠΈΠΏΡ - ΠΏΡΠΈ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, Π½Π°ΡΡΡΠ°ΡΡΠΈΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΡ ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ.
hotfix/{bug-slug}β hotfix-Π²Π΅ΡΠΊΠ°.- Π‘ΠΎΠ·Π΄Π°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΈΠ· Π²Π΅ΡΠΊΠΈ main;
- ΠΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ MR Π² Π²Π΅ΡΠΊΡ main.
mainβ ΠΏΡΠΎΠ΄ Π²Π΅ΡΠΊΠ°.- Π‘ΠΎΠ±ΠΈΡΠ°Π΅ΡΡΡ ΠΈ ΡΠ°Π·Π²ΠΎΡΠ°ΡΠΈΠ²Π°Π΅ΡΡΡ Π½Π° prod-ΡΠ΅ΡΠ²Π΅ΡΠ΅;
- ΠΠΎΡΠ»Π΅ ΡΠ»ΠΈΡΠ½ΠΈΡ MR Π² ΡΡΡ Π²Π΅ΡΠΊΡ ΡΠΎΠ·Π΄Π°Π΅ΡΡΡ tag ΠΈ release ΠΏΠΎ ΡΡΠΎΠΉ Π²Π΅ΡΠΊΠ΅ (Ρ.Π΅. ΠΏΠΎ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅ΠΌΡ ΠΊΠΎΠΌΠΌΠΈΡΡ ΡΡΠΎΠΉ Π²Π΅ΡΠΊΠΈ).
TBD
TBD
TBD
TBD
ΠΠ°ΠΌΠ΅ΡΠΊΠΈ ΠΎ ΡΠ΅Π»ΠΈΠ·Π°Ρ
Π²Π΅Π΄ΡΡΡΡ Π½Π°ΡΠΈΠ½Π°Ρ Ρ Π²Π΅ΡΡΠΈΠΈ 1.0.0
ΠΠΎ Π³ΠΎΡΠΎΠ²Π½ΠΎΡΡΠΈ ΡΠ΅Π»ΠΈΠ·Π° Π² release/* Π²Π΅ΡΠΊΠ΅ ΠΈΠ»ΠΈ ΠΏΡΠΈ Ρ
ΠΎΡΡΠΈΠΊΡΠ΅ Π² hotfix/* Π²Π΅ΡΠΊΠ΅, Π½ΡΠΆΠ½ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡΡ ΡΠ°ΠΉΠ» CHANGELOG.md.
ΠΠ°ΠΌΠ΅ΡΠΊΠΈ ΠΎ Π½ΠΎΠ²ΠΎΠΌ ΡΠ΅Π»ΠΈΠ·Π΅ Π΄ΠΎΠ±Π°Π²Π»ΡΡΡΡΡ Π² Π½Π°ΡΠ°Π»ΠΎ ΡΠ°ΠΉΠ»Π°, Ρ.Π΅. Π΄ΠΎ ΠΏΡΠ΅Π΄ΡΠ΄ΡΡΠ΅Π³ΠΎ ΡΠ΅Π»ΠΈΠ·Π°. Π¨Π°Π±Π»ΠΎΠ½ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΎ ΡΠ΅Π»ΠΈΠ·Π΅
## 1.1.0 (2024-01-01)
Security:
-
Features:
-
Bugfixes:
-
ΠΡΠΈ Π½Π΅ΠΎΠ±Ρ
ΠΎΠ΄ΠΈΠΌΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅ΡΡΠΈ Π·Π°ΠΌΠ΅ΡΠΊΠΈ ΠΎ Π±ΡΠ΄ΡΡΠ΅ΠΌ ΡΠ΅Π»ΠΈΠ·Π΅ ΠΏΡΡΠΌΠΎ Π² Π²Π΅ΡΠΊΠ΅ develop. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π²ΠΌΠ΅ΡΡΠΎ Π΄Π°ΡΡ ΡΠ΅Π»ΠΈΠ·Π° Π½ΡΠΆΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ unreleased, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΠΎΡΠΎΠΌ ΡΠ»Π΅Π΄ΡΠ΅Ρ Π·Π°ΠΌΠ΅Π½ΠΈΡΡ Π½Π° ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΡΡ Π΄Π°ΡΡ ΡΠ΅Π»ΠΈΠ·Π°
## 1.2.0 (unreleased)
Security:
-
Features:
-
Bugfixes:
-