Но зачем тратить на всё это целых два часа, если можно потратить всего несколько дней на автоматизацию этого процесса. В результате появился pytoppa, он:
- формирует changelog из истории между изменениями version в setup.py;
- автоматически добавляет обязательные зависимости;
- имеет простой конфиг в yaml.
Установка
Ubuntu
В ubuntu пакет можно поставить из ppa:
sudo add-apt-repository ppa:nvbn-rm/ppa sudo apt-get update sudo apt-get install pytoppa
Другие дистрибутивы
Нужно вручную установить dh-make
и cdbs
, а после этого поставить pytoppa через pip:
pip install pytoppa
Использование
В корне репозитория с проектом нужно создать .pytoppa.yml, его формат:
section: секция # по умолчанию python, можно не указывать dependencies: - зависимость-1 - зависимость-2 releases: - релиз-1 - релиз-2
Например, для приложения series_list:
section: net dependencies: - python-requests - python-beautifulsoup - python-requests - python-gevent - python-decorator - python-libtorrent - python-pyside - subliminal releases: - saucy - precise - quantal - raring
И запустить:
pytoppa ключ-зарегистрированный-на-launchpad ppa
Например, я запускаю:
pytoppa 'Vladimir Iakovlev <nvbn.rm@gmail.com>' 'ppa:nvbn-rm/ppa'
Как оно работает
Немного нетривиальным оказалось считывание параметров из setup.py. Самым простым способом оказалось заменить setuptools.setup
и distutils.core.setup
на свой метод, просто сохраняющий параметры.
И формирование changelog, для него пришлось:
- получить все коммиты, в которых присутствует setup.py;
- для каждого из коммитов скопировать репозиторий во временную папку и переключиться на коммит. Изначально приложение проходило только по коммитам, где менялся setup.py, но часто версия импортируется из другого файла;
- считать версию из setup.py;
- взять изменения из лога коммитов между разными версиями.
На остальных этапах происходит просто копирование или запуск команд.
Ссылки
ссылка на оригинал статьи http://habrahabr.ru/post/204526/
Добавить комментарий