Пакетный менеджер Hex открыл публикацию из GitHub Actions без постоянных ключей и добавил ручное одобрение релизов. PyPI начал показывать предупреждения об изменениях происхождения файлов. Pixi разрешил точечные исключения из периода ожидания новых пакетов для проверенных обновлений.

Hex открыл публикацию без ключей и добавил одобрение релизов

6 ноября команда реестра пакетов для Erlang и Elixir Hex объявила общедоступными Workload Identity и отложенную публикацию. Задание GitHub Actions получает от Hex токен на 15 минут с правом публикации конкретного пакета. Хранить постоянный ключ в секретах CI больше не требуется. Пока поддерживается только GitHub Actions, а первый релиз публичного пакета нужно по-прежнему выпустить через учётную запись или ключ.

Отложенная публикация удерживает загруженные из CI пакет и документацию до ручного одобрения. При одобрении Hex запрашивает свежий код двухфакторной аутентификации. До этого релиз не попадает в реестр. На одобрение отведено семь дней. Для новых публичных пакетов одобрение включено по умолчанию, для существующих его нужно включить в настройках. Публикации через личную сессию с двухфакторной проверкой проходят напрямую.

Вышедший в тот же день Hex 2.7 добавил команду mix hex.publish --wait. Она ждёт одобрения и завершается с ошибкой при отказе или истечении срока. В Hex 2.6 успешный выход команды мог означать лишь загрузку релиза на одобрение, поэтому проверку результата в CI стоит обновить вместе с клиентом.

Если команда продолжает публиковать через ключ, то его права стоит ограничить одним пакетом. Ключ с правом менять владельцев позволяет добавить новую учётную запись, которая сможет публиковать напрямую с собственной двухфакторной проверкой.

PyPI начал предупреждать о смене происхождения файлов

6 ноября PyPI завершил обновление страниц проектов. На новой вкладке Security видны подтверждения происхождения каждого файла релиза. Отметка Full provenance появляется, когда они есть у всех файлов. Подтверждение PyPI Publish связывает файл с доверенным издателем, а SLSA Build Provenance указывает исходный коммит, платформу и инструкции сборки.

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

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

Pixi добавил исключения из периода ожидания для проверенных релизов

Вышедший 3 ноября Pixi 0.84 переработал настройку минимального возраста пакетов. Менеджер окружений для conda и PyPI теперь позволяет допустить проверенное обновление с исправлением уязвимости, сохранив период ожидания для остальных пакетов. Исключение для conda можно ограничить конкретной версией, сборкой или каналом.

Для исключения можно задать и предельную дату загрузки. Тогда разрешение охватит только уже проверенные файлы, а новые сборки той же версии снова должны будут пройти период ожидания. Исключения задаёт сама команда проекта. Для PyPI они пока разрешают все версии выбранного пакета, включая будущие, поэтому такой допуск требует более широкого доверия к издателю.

Настройки перенесены в раздел workspace манифеста. При изменении политики Pixi проверяет возраст уже зафиксированных conda-пакетов с учётом исключений. Для PyPI время загрузки в lock-файле не сохраняется, поэтому для применения нового ограничения к этим зависимостям нужно заново разрешить их версии командой pixi update.