- PVSM.RU - https://www.pvsm.ru -

Отправка python пакетов в ppa без «жизнь боль»

Отправка python пакетов в ppa без «жизнь боль»После поста про смотрелку сериалов [1] пришло пожелание добавить subliminal [2] для загрузки субтитров. Увидев его зависимости [3], из которых в репозитории присутствуют только два пакета, и то не подходящих версий. Я понял, что жизнь боль и мне придётся создать пять debian/control, сделать пять changelog'ов и создать 20 тасков в jenkins.

Но зачем тратить на всё это целых два часа, если можно потратить всего несколько дней на автоматизацию этого процесса. В результате появился pytoppa [4], он:

  • формирует 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

Отправка python пакетов в ppa без «жизнь боль»
И запустить:

pytoppa ключ-зарегистрированный-на-launchpad ppa

Например, я запускаю:

pytoppa 'Vladimir Iakovlev <nvbn.rm@gmail.com>' 'ppa:nvbn-rm/ppa'

Как оно работает

Немного нетривиальным оказалось считывание параметров из setup.py. Самым простым способом оказалось заменить setuptools.setup и distutils.core.setup на свой метод, просто сохраняющий параметры.

И формирование changelog [5], для него пришлось:

  1. получить все коммиты, в которых присутствует setup.py;
  2. для каждого из коммитов скопировать репозиторий во временную папку и переключиться на коммит. Изначально приложение проходило только по коммитам, где менялся setup.py, но часто версия импортируется из другого файла;
  3. считать версию из setup.py;
  4. взять изменения из лога коммитов между разными версиями.

На остальных этапах происходит просто копирование или запуск команд.

Ссылки

github проекта [4];
ppa с проектом [6].

Автор: nvbn

Источник [7]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/linux/49776

Ссылки в тексте:

[1] смотрелку сериалов: http://habrahabr.ru/post/204134/

[2] subliminal: https://github.com/Diaoul/subliminal

[3] зависимости: https://github.com/Diaoul/subliminal/blob/master/requirements.txt

[4] pytoppa: https://github.com/nvbn/pytoppa

[5] формирование changelog: https://github.com/nvbn/pytoppa/blob/develop/pytoppa/parsers/git_parser.py

[6] ppa с проектом: https://launchpad.net/~nvbn-rm/+archive/ppa

[7] Источник: http://habrahabr.ru/post/204526/