Вопрос или проблема
Есть ли возможность запросить API Launchpad для получения списка всех LTS релизов?
В противном случае, я могу получить релизы и их статус следующим образом:
from launchpadlib.launchpad import Launchpad, STAGING_SERVICE_ROOT
cachedir = "/tmp/launchpadlib/cache/"
lp = Launchpad.login_anonymously('ppastats', 'edge', cachedir, version='devel')
launchpad = lp
[s.status for s in launchpad.distributions["ubuntu"].series]
Но как отфильтровать это по критерию LTS?
Заранее спасибо.
Боюсь, что Launchpad сам по себе не знает об этом в простой и машиночитаемой форме, поэтому он не может экспортировать эту информацию прямо сейчас. Ваш лучший вариант, вероятно, будет таким: фильтрация по описанию, хотя я считаю, что в большинстве скриптов, которым это нужно, список просто хардкодится, поскольку он изменяется редко.
Также, пожалуйста, не используйте “edge”, он давно устарел и существует только для совместимости. Вместо этого используйте “production”.
Есть ли причина, по которой вы не можете просто предположить, что самый старый активный релиз является самым старым LTS? LTS имеют самую длительную поддержку, поэтому никогда не будет не-LTS версий, переживающих LTS. Например:
>>> [s.name for s in lp.distributions['ubuntu'].series if s.active][-1]
'precise'
Также, LTS версии выпускаются в апреле четных лет, поэтому, чтобы получить ВСЕ текущие поддерживаемые LTS, вы могли бы использовать такой трюк:
>>> [s.name for s in lp.distributions['ubuntu'].series if s.active and s.version.endswith('.04') and not int(s.version.split('.')[0]) % 2]
['trusty', 'precise']
Сейчас существует сервис, который отслеживает аналогичные данные для широкого спектра проектов, endoflife.date,
https://endoflife.date/ubuntu
и упомянут в его нижнем колонтитуле,
https://endoflife.date/api/ubuntu.json
который содержит понятный и полезный json
[{
"cycle": "24.10",
"codename": "Oracular Oriole",
"lts": false,
"releaseDate": "2024-10-10",
"eol": "2025-07-11",
"latest": "24.10",
"latestReleaseDate": "2024-10-10",
"support": "2025-07-11",
"extendedSupport": false
},
{
"cycle": "24.04",
"codename": "Noble Numbat",
"lts": true,
"releaseDate": "2024-04-25",
"eol": "2029-04-25",
"latest": "24.04.2",
"latestReleaseDate": "2025-02-20",
"support": "2029-04-25",
"extendedSupport": "2036-04-25"
},
...]
Ответ или решение
Запрос последней версии LTS (долгосрочная поддержка) с использованием API Launchpad может быть не такой простой задачей, как ожидалось. Анализируя предоставленный код, можем сделать вывод, что API Launchpad напрямую не предоставляет информацию о том, какая версия является LTS. Однако есть несколько подходов и идей, которые мы можем использовать для достижения цели, учитывая все особенности и ограничения.
Теория
Launchpad — это платформа для управления проектами и системами отслеживания ошибок, поддерживающая взаимодействие через API. В случае с версиями Ubuntu, API может показать список всех серий (серийные версии), но информация о статусе LTS явно не выделена в автоматическом формате. Когда речь идет о LTS-версиях, они обычно выпускаются каждые два года в апреле (четные года), и поэтому их можно определить по этому критерию. Такие выпуски поддерживаются в течение пяти лет по стандарту, а иногда дольше благодаря расширенной поддержке.
Пример
Приведенный вами код позволяет получить список всех доступных серий Ubuntu:
from launchpadlib.launchpad import Launchpad
cachedir = "/tmp/launchpadlib/cache/"
lp = Launchpad.login_anonymously('ppastats', 'production', cachedir)
launchpad = lp
[s.status for s in launchpad.distributions["ubuntu"].series]
Чтобы отфильтровать список по LTS-критерию, вы можете использовать определенные условия, такие как проверка на окончание версии ".04" и четность года выпуска:
lts_series = [s.name for s in lp.distributions['ubuntu'].series if s.active and s.version.endswith('.04') and not int(s.version.split('.')[0]) % 2]
Приложение
Если вы хотите получить обновленный список всех поддерживаемых LTS версий Ubuntu, альтернативным и более надежным методом может быть использование сервиса endoflife.date. На этом ресурсе размещена информация о жизненных циклах различных программных обеспечений, в том числе и Ubuntu. Используя этот подход, вы можете получить данные в легко читаемом формате JSON:
[{
"cycle": "24.04",
"codename": "Noble Numbat",
"lts": true,
"releaseDate": "2024-04-25",
"eol": "2029-04-25",
"latest": "24.04.2",
"latestReleaseDate": "2025-02-20",
"support": "2029-04-25",
"extendedSupport": "2036-04-25"
}]
Для доступа к этой информации используйте следующий запрос по URL: https://endoflife.date/api/ubuntu.json
. Это предоставит вам детализированное представление о каждом релизе, включая информацию о том, является ли он LTS и о сроках окончания поддержки.
Заключение
Подытоживая, можно отметить, что, хотя Launchpad API не предоставляет прямого доступа к статусу LTS, есть альтернативные способы получить эту информацию. Вы можете использовать программные фильтры для проверки на соответствие шаблону выпусков, а также обращаться к внешним сервисам, таким как endoflife.date, для получения актуальных данных. Все эти методы имеют свои плюсы и могут быть выбраны в зависимости от ваших нужд и предпочтений в автоматизации процессов. Применяя знания и примеры из этой статьи, вы сможете адаптировать свой код для получения актуальной информации о LTS версиях Ubuntu, следуя современным подходам и инструментам.