После поста про смотрелку сериалов пришло пожелание добавить subliminal для загрузки субтитров. Увидев его зависимости, из которых в репозитории присутствуют только два пакета, и то не подходящих версий. Я понял, что жизнь боль и мне придётся создать пять debian/control, сделать пять changelog'ов и создать 20 тасков в jenkins.
Но зачем тратить на всё это целых два часа, если можно потратить всего несколько дней на автоматизацию этого процесса. В результате появился 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;
- взять изменения из лога коммитов между разными версиями.
На остальных этапах происходит просто копирование или запуск команд.
Ссылки
github проекта;
ppa с проектом.
Автор: nvbn