Как программно определить, что мой процесс сборки панели запуска завершен?

Я работаю над Snap! Проект C++, который управляет множеством пакетов со сложным набором зависимостей (см. рисунок ниже).

В результате мне нужно, чтобы сборка пакета A была завершена, прежде чем я смогу запустить сборку пакета B. Я хотел бы хотя бы частично автоматизировать процесс сборки, и для этого мне нужно было бы программно знать этот пакет. Закончено строительство. Затем я могу убедиться, что сборка работает (что я знаю, как это сделать), и если это так, я могу отправить исходники пакета B и начать сборку.

Я нашел страницы об API Launchpad и скачал скрипты Python, которые они предлагают для доступа к серверу. Однако я не очень хорошо разбираюсь в python и не совсем уверен, какой вызов API мне нужно использовать. Я нашел эту огромную страницу со всеми вызовами, как я полагаю, но мне не удалось найти простой пример того, как получить текущий статус сборки для конкретного проекта. Может быть getBuildQueueSizes? Но глядя на launchpadlibФайлы проекта Python, я не смог найти такое имя в коде. Так что я не слишком уверен, как это работает.

Не могли бы вы поделиться с нами примером кода, который делает хотя бы столько же? Или место, где был бы пример на сайте Launchpad.net?

В этот момент мой скрипт подключается... что мне делать дальше?

      # See API here
# https://launchpad.net/+apidoc/devel.html

from launchpadlib.launchpad import Launchpad
from os.path import expanduser

home = expanduser('~')
cachedir = home + '/.launchpadlib/cache/'
launchpad = Launchpad.login_anonymously('snapcpp', 'production', cachedir, version='devel')

Если возможно, просто URI было бы здорово. Из того, что я вижу здесь и там, можно было бы просто отправить HTTP GETна URI и получить взамен JSON со всей необходимой информацией. Чего я не вижу, так это того, каким будет этот URI. Я попробовал несколько из того, что я видел в документах (с очень тяжелыми примерами... НЕ):

      https://api.launchpad.net/devel/snapcpp?ws.op=getBuildRecords&source_name=libtld

Этот говорит мне, что getBuildRecordsэто не команда. Однако в большинстве случаев я получаю 400 или 404. URL-адрес проекта работает, но все ссылки, показанные в JSON, не помогают:

      https://api.launchpad.net/devel/snapcpp

Протестировав еще несколько, я обнаружил, что могу искать некоторые сборки с помощью:

      https://api.launchpad.net/devel/ubuntu/bionic?ws.op=getBuildRecords&source_name=lib

Но если я попытаюсь использовать имена своих проектов в качестве source_name=...параметр (также известный как «libtld» или «snapcpp») возвращает пустой список. Этот последний URL также работает только с /ubuntu?...или с архитектурой /ubuntu/bionic/amd64?.... Но это не помогает.

Я думаю, что это может быть ошибка, поэтому я сообщил об этом на Launchpad.

1 ответ

представляет собой относительно тонкий слой поверх лежащего в основе Launchpad API, и фактические операции реализуются в Launchpad. Таким образом, вы обычно не найдете упоминания об отдельных методах API в исходном коде.

Ваша проблема в том, что вы задаете Launchpad вопросы о /snapcpp(проект, формально не относящийся к вашему PPA в том, что касается Launchpad), или о /ubuntu/bionic(серия Ubuntu, которая расскажет вам только о сборках, которые являются частью официальной ОС), а не о вашем PPA. Правильный URL будет:

      https://api.launchpad.net/devel/~snapcpp/+archive/ubuntu/ppa?ws.op=getBuildRecords&source_name=libtld

Или в launchpadlibкод на основе, что-то вроде этого:

      archive = launchpad.load('/~snapcpp/+archive/ubuntu/ppa')
for build in archive.getBuildRecords(source_name='libtld'):
    # do something with each build in turn
Другие вопросы по тегам