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

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

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

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

Не могли бы вы поделиться с нами образцом кода, который выполняет хотя бы такую ​​работу? Или место, где был бы пример на веб-сайте 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 .

enter image description here

3
задан 20 May 2021 в 21:51

1 ответ

launchpadlib является относительно тонким слоем по сравнению с базовым API Launchpad, а фактические операции реализованы в Launchpad . Таким образом, в исходном коде launchpadlib вы, как правило, не найдете никаких упоминаний об отдельных методах 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
2
ответ дан 28 July 2021 в 11:40

Другие вопросы по тегам:

Похожие вопросы: