diff --git a/README.md b/README.md new file mode 100644 index 0000000..49e7f9a --- /dev/null +++ b/README.md @@ -0,0 +1,271 @@ +# πŸš€ Python Project Template + +![Python](https://img.shields.io/badge/python-3.13-blue) +![Docker](https://img.shields.io/badge/docker-ready-blue) +![Pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen) +![License](https://img.shields.io/badge/license-MIT%20-green) + +Π£Π½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ шаблон для создания Python-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² с ΡƒΠΆΠ΅ настроСнной инфраструктурой Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ, тСстирования ΠΈ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΠΈ. + +Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ позволяСт Π½Π°Ρ‡Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ **Π·Π° нСсколько ΠΌΠΈΠ½ΡƒΡ‚**, Π½Π΅ тратя врСмя Π½Π° настройку инструмСнтов ΠΈ окруТСния. + +Π¨Π°Π±Π»ΠΎΠ½ Π·Π°Π΄Π°Ρ‘Ρ‚ Π΅Π΄ΠΈΠ½Ρ‹ΠΉ стандарт для Python-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²: + +- одинаковая структура ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° +- Π΅Π΄ΠΈΠ½Ρ‹Π΅ инструмСнты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ +- воспроизводимоС ΠΎΠΊΡ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ +- готовая инфраструктура для запуска ΠΈ дСплоя + +--- + +# πŸ“š Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅ + +- [Быстрый старт](#-быстрый-старт) +- [Π§Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² шаблон](#-Ρ‡Ρ‚ΠΎ-Π²Ρ…ΠΎΠ΄ΠΈΡ‚-Π²-шаблон) +- [Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°](#-структура-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π°) +- [Docker](#-docker) +- [ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ качСства ΠΊΠΎΠ΄Π°](#-ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ-качСства-ΠΊΠΎΠ΄Π°) +- [ВСстированиС](#-тСстированиС) +- [ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ…](#-ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ-Π±Π°Π·Ρ‹-Π΄Π°Π½Π½Ρ‹Ρ…) +- [Локализация](#-локализация) +- [Changelog](#-changelog) +- [Workflow Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ](#-workflow-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ) +- [Release процСсс](#-release-процСсс) +- [Для ΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚](#-для-ΠΊΠ°ΠΊΠΈΡ…-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²-ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚) + +--- + +# ⚑ Быстрый старт + +ΠšΠ»ΠΎΠ½ΠΈΡ€ΡƒΠΉΡ‚Π΅ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ: + +```bash +git clone +cd project +```` + +УстановитС зависимости: + +```bash +uv sync +``` + +ЗапуститС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅: + +```bash +python main.py +``` + +--- + +# 🐳 Docker + +Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€: + +```bash +docker compose up --build +``` + +Docker-конфигурация Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚: + +* production-ready `Dockerfile` +* multi-stage сборку +* ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ Ρ€Π°Π·ΠΌΠ΅Ρ€Π° ΠΎΠ±Ρ€Π°Π·Π° +* запуск ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° Π±Π΅Π· root +* healthcheck ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° + +--- + +# ✨ Π§Ρ‚ΠΎ Π²Ρ…ΠΎΠ΄ΠΈΡ‚ Π² шаблон + +Π’ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΈ ΡƒΠΆΠ΅ настроСны основныС инструмСнты Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. + +## ΠšΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€ΠΈΠ·Π°Ρ†ΠΈΡ + +* Docker +* Docker Compose +* оптимизированная сборка ΠΊΠΎΠ½Ρ‚Π΅ΠΉΠ½Π΅Ρ€Π° + +## ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΊΠΎΠ΄Π° + +* Ruff β€” Π»ΠΈΠ½Ρ‚Π΅Ρ€ ΠΈ Π°Π²Ρ‚ΠΎΡ„ΠΎΡ€ΠΌΠ°Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ +* mypy β€” статичСская типизация +* bandit β€” Π°Π½Π°Π»ΠΈΠ· бСзопасности +* detect-secrets β€” ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ сСкрСтов + +## АвтоматичСскиС ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ + +* pre-commit +* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ YAML ΠΈ JSON +* ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ merge ΠΊΠΎΠ½Ρ„Π»ΠΈΠΊΡ‚ΠΎΠ² +* ΠΎΠ±Π½Π°Ρ€ΡƒΠΆΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡŒΡˆΠΈΡ… Ρ„Π°ΠΉΠ»ΠΎΠ² + +--- + +# 🧹 ΠšΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ качСства ΠΊΠΎΠ΄Π° + +ΠŸΠ΅Ρ€Π΅Π΄ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΌ ΠΊΠΎΠΌΠΌΠΈΡ‚ΠΎΠΌ автоматичСски Π·Π°ΠΏΡƒΡΠΊΠ°ΡŽΡ‚ΡΡ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ: + +* Π»ΠΈΠ½Ρ‚ΠΈΠ½Π³ +* ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠΎΠ² +* Π°Π½Π°Π»ΠΈΠ· бСзопасности +* поиск сСкрСтов +* Π±Π°Π·ΠΎΠ²Ρ‹Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ рСпозитория + +Установка pre-commit: + +```bash +pre-commit install +``` + +--- + +# πŸ§ͺ ВСстированиС + +Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ **pytest**. + +ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ: + +* строгая конфигурация +* ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ° asyncio +* ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΡŒ ΠΏΡ€Π΅Π΄ΡƒΠΏΡ€Π΅ΠΆΠ΄Π΅Π½ΠΈΠΉ +* ΡƒΠ΄ΠΎΠ±Π½Ρ‹ΠΉ Π²Ρ‹Π²ΠΎΠ΄ ошибок + +ВСсты Ρ€Π°ΡΠΏΠΎΠ»Π°Π³Π°ΡŽΡ‚ΡΡ Π² ΠΊΠ°Ρ‚Π°Π»ΠΎΠ³Π΅: + +``` +tests/ +``` + +Запуск тСстов: + +```bash +pytest +``` + +--- + +# πŸ—„ ΠœΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… + +Π’ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π΅ настроСн **Alembic**. + +Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ для: + +* управлСния миграциями Π±Π°Π·Ρ‹ Π΄Π°Π½Π½Ρ‹Ρ… +* отслСТивания ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ схСмы +* бСзопасного обновлСния структуры Π‘Π” + +--- + +# 🌍 Локализация + +НастроСн **Babel** для ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΎΠ² ΠΈ ΠΈΠ½Ρ‚Π΅Ρ€Π½Π°Ρ†ΠΈΠΎΠ½Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ. + +Π­Ρ‚ΠΎ позволяСт Π»Π΅Π³ΠΊΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ многоязычныС прилоТСния. + +--- + +# πŸ“œ Changelog + +Π˜ΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ **git-cliff** для автоматичСской Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ `CHANGELOG`. + +Changelog формируСтся Π½Π° основС conventional commits. + +--- + +# πŸ“ Π‘Ρ‚Ρ€ΡƒΠΊΡ‚ΡƒΡ€Π° ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° + +РСкомСндуСмая структура: + +``` +project/ +β”‚ +β”œ src/ +β”‚ β”” app/ +β”‚ β”” main.py +β”‚ +β”œ tests/ +β”‚ +β”œ migrations/ +β”‚ +β”œ Dockerfile +β”œ docker-compose.yml +β”‚ +β”œ pyproject.toml +β”œ pytest.ini +β”‚ +β”” README.md +``` + +--- + +# πŸ”§ Workflow Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ + +Π’ΠΈΠΏΠΈΡ‡Π½Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‡ΠΈΠΉ процСсс: + +1. ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ Π²Π΅Ρ‚ΠΊΡƒ + +```bash +git checkout -b feature/my-feature +``` + +2. внСсти измСнСния + +3. Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠΈ + +```bash +pre-commit run --all-files +pytest +``` + +4. ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ ΠΊΠΎΠΌΠΌΠΈΡ‚ + +```bash +git commit -m "feat: add new feature" +``` + +5. ΠΎΡ‚ΠΏΡ€Π°Π²ΠΈΡ‚ΡŒ измСнСния + +```bash +git push +``` + +--- + +# πŸš€ Release процСсс + +Π Π΅Π»ΠΈΠ·Ρ‹ ΡΠΎΠ·Π΄Π°ΡŽΡ‚ΡΡ с использованиСм **conventional commits**. + +Π˜ΡΡ‚ΠΎΡ€ΠΈΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ гСнСрируСтся автоматичСски: + +```bash +git cliff +``` + +--- + +# 🧩 Для ΠΊΠ°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚ + +Π­Ρ‚ΠΎΡ‚ шаблон ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ для: + +* backend сСрвисов +* API +* Telegram-Π±ΠΎΡ‚ΠΎΠ² +* CLI инструмСнтов +* микросСрвисов +* Π°Π²Ρ‚ΠΎΠΌΠ°Ρ‚ΠΈΠ·Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… сСрвисов + +Он Π½Π΅ привязан ΠΊ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎΠΌΡƒ Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΡƒ ΠΈ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠ°ΠΊ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ Π±Π°Π·Π° для Python-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠΈ. + +--- + +# 🎯 ЦСль шаблона + +Π­Ρ‚ΠΎΡ‚ Ρ€Π΅ΠΏΠΎΠ·ΠΈΡ‚ΠΎΡ€ΠΈΠΉ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚: + +* ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ запуск Π½ΠΎΠ²Ρ‹Ρ… ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ² +* ΡΡ‚Π°Π½Π΄Π°Ρ€Ρ‚ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ структуру ΠΊΠΎΠ΄Π° +* ΡƒΠΏΡ€ΠΎΡΡ‚ΠΈΡ‚ΡŒ Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ ΠΈ Π΄Π΅ΠΏΠ»ΠΎΠΉ +* Π²Π½Π΅Π΄Ρ€ΠΈΡ‚ΡŒ Π΅Π΄ΠΈΠ½Ρ‹Π΅ ΠΈΠ½ΠΆΠ΅Π½Π΅Ρ€Π½Ρ‹Π΅ ΠΏΡ€Π°ΠΊΡ‚ΠΈΠΊΠΈ + +Π­Ρ‚ΠΎ **Ρ„ΡƒΠ½Π΄Π°ΠΌΠ΅Π½Ρ‚ для Python-ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ΠΎΠ²**, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ избавляСт ΠΎΡ‚ ΠΏΠΎΠ²Ρ‚ΠΎΡ€ΡΡŽΡ‰Π΅ΠΉΡΡ настройки инфраструктуры.