Глава 23 · Часть VI · Выпускаем первую версию

Итоги: полный путь проекта от идеи до релиза

От идеи до первого релиза — весь путь пройден один раз целиком, на настоящем проекте.

SafeSort · Часть 6 из 6Релиз

Полный путь проекта

В начале этой главы SafeSort был только идеей. Теперь это настоящий репозиторий на GitHub — Cartesian-School/safesort — с 14 закрытыми Issues, реальными Pull Request, зелёной проверкой CI и опубликованным релизом 0.1.0. Вот весь путь целиком, с тем, что появилось на каждом шаге:

Идеятребования: что программа делает и чего не делаетGit и GitHubустановка, аутентификация, настоящий репозиторий SafeSortGitHub Project14 Issues — задача сформулирована для каждой частиREADME.md, pyproject.tomlпервый коммит репозитория — команда safesort становится доступнойСканерscanner.py — Issue №1, PR №15Классификаторclassifier.py — Issue №2, PR №16План и коллизииplanner.py — Issues №3 и №6 вместе, PR №17Applyexecutor.py — Issue №5, PR №18Manifest и undomanifest.py — Issues №7 и №8 вместе, PR №19Дубликатыduplicates.py — размер → SHA-256 → байтовое подтверждение, Issue №9, PR №20Командная строкаargparse, пять подкоманд — Issue №4, PR №21 (последней, когда всё остальное уже было)Ошибки, config, тесты, CIIssues №10–13 — часть реализации соответствующих модулей, без отдельного PRВерсия 0.1.0CHANGELOG.md, editable install, wheel и sdist проверены заново — Issue №14Релизнастоящий тег v0.1.0 и GitHub Release
От идеи до опубликованного релиза — точная история: 9 из 14 Issues закрыты через 7 Pull Request (два PR закрыли по два Issue), остальные пять — без отдельного PR
Что уже есть
Git и GitHub настроены
Настоящий репозиторий SafeSort
GitHub Project и 14 Issues
Установленный пакет
Работающая командная строка
Безопасные перемещения с отменой
Поиск дубликатов
Автоматические тесты
GitHub Actions (CI)
Версия 0.1.0 — тег и GitHub Release опубликованы
Публикация в PyPI
Классификация по содержимому файла

Что уже умеет SafeSort

КомандаЧто делаетМеняет файлы?
scanнаходит и подсчитывает файлы по категориямнет
planпоказывает план перемещенийнет
duplicatesнаходит файлы с одинаковым содержимымнет
applyвыполняет перемещения из планада, только по явной команде
undoотменяет последнюю выполненную операциюда, только восстановление

Что дальше

Версия 0.1.0 сознательно не покрывает всё, что в принципе возможно: самый первый раздел этой главы заранее очертил границы. Дальнейшее развитие SafeSort — за рамками этой главы, но некоторые направления естественно продолжают уже сделанное: публикация пакета в PyPI, классификация не только по расширению, а с осторожной проверкой содержимого файла, интерфейс для настройки, отличный от редактирования TOML-файла вручную.

Приложение к этой главе повторяет тот же самый путь — от задачи до Pull Request — ещё шесть раз, уже самостоятельно, на шести небольших проектах: Дополнительная практика: шесть мини-проектов для GitHub.

Что мы узнали в этой главе

  • Прежде чем писать код, требования проекта описывают не только то, что программа делает, но и то, что она сознательно не делает.
  • Разделение на read-only планирование и две явные операции, прямую apply и обратную undo, защищает от случайных изменений файлов пользователя.
  • Поиск дубликатов дорогую операцию — хеширование — делает только там, где она действительно может изменить ответ: после отбора файлов по размеру.
  • Автоматические тесты работают только во временных каталогах — ни один тест не должен касаться настоящих файлов пользователя.
  • Git и GitHub — часть разработки с самого начала, а не финальный шаг: Issue формулирует задачу, ветка изолирует работу, Pull Request открывает её для проверки, GitHub Actions проверяет тесты автоматически.