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

    После поста про смотрелку сериалов пришло пожелание добавить 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-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, для него пришлось:
    1. получить все коммиты, в которых присутствует setup.py;
    2. для каждого из коммитов скопировать репозиторий во временную папку и переключиться на коммит. Изначально приложение проходило только по коммитам, где менялся setup.py, но часто версия импортируется из другого файла;
    3. считать версию из setup.py;
    4. взять изменения из лога коммитов между разными версиями.

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

    Ссылки


    github проекта;
    ppa с проектом.
    Метки:
    Поделиться публикацией
    Реклама помогает поддерживать и развивать наши сервисы

    Подробнее
    Реклама
    Комментарии 11
    • 0
      Всё это круто, но, надеюсь, Вы понимаете, что обычно такие пакеты весьма далеки от того, что нужно по полиси. Хотя бы невалидным debian/copyright. Так что лучше потратить дополнительное время, причесать пакеты, пропихнуть их в Debian, а потом наслаждаться.
      • +1
        Да, конечно, это способ для тех случаев, когда нужно просто быстро добавить свежую версию пакета в ppa.
        • +2
          Кстати, нет желания майнтейнить эти пакеты в Debian? Могу проспонсировать ;)
          • 0
            Связанное с этим проектом пока нет, он ещё в активной разработке, а вот everpad можно было бы =)
            • 0
              В любом случае, если захотите — обращайтесь. Поменторю и поспонсорю :)
        • 0
          Так что лучше потратить дополнительное время, причесать пакеты, пропихнуть их в Debian, а потом наслаждаться.

          Ещё нужна машина времени. Чтобы пропихнуть пакеты в текущую версию debian нужна машина времени, иначе только в версию которая будет стабильной через пару лет.
          • 0
            В текущую версию ничего пропихивать не надо. Пропихивать надо в unstable (откуда, кстати, убунта потом подтягивает пакеты).
        • +2
          Но зачем тратить на всё это целых два часа, если можно потратить всего несколько дней на автоматизацию этого процесса.
          Вот оно, описание всей сути программирования.
          А по теме, спасибо! Программа может оказаться очень полезной в определенных ситуациях.
          • +1
            dependencies:
            — python-requests
            — python-beautifulsoup
            — python-requests

            requests дважды?
            • 0
              Спасибо, поправил.
            • 0
              Разделяю вашу боль =) сам в таких случаях пользовался py2dsc. Удобно тем, что генерит исходники для пакета, в которых можно вручную что-то поправить перед тем, как сделать debuild.

              Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.