GitHub отменил изменения метода формирования генерируемых архивов после сбоя

GitHub внедрил метод формирования автоматически генерируемых архивов ».tar.gz» и ».tgz» на страницах с релизами, но это привело к изменению их контрольных сумм и массовым сбоям в автоматизированных системах сборки. Платформа откатила изменения.

45e9144270a0207c971ef03474cd80f3.jpg

Системы сборки для подтверждения целостности проводят сверку загружаемых с GitHub архивов с ранее сохранёнными контрольными суммами, например, размещёнными в метаданных пакетов или в сборочных сценариях.

GitHub с выпуском 2.38 в инструментарии Git включила по умолчанию встроенную реализацию gzip, которая позволяла унифицировать поддержку этого метода сжатия в разных операционных системах и повысить производительность создания архивов. Но сжатые архивы, генерируемые встроенной реализацией gzip на базе zlib, бинарно отличаются от архивов, созданных утилитой gzip. Это привело к отличию контрольных сумм для архивов, созданных разными версиями git при выполнении команды «git archive».

В итоге на страницах релизов стали отдаваться архивы, не проходящие проверку по старым контрольным суммам. Проблема проявилась в разных сборочных системах, системах непрерывной интеграции и в инструментариях сборки пакетов из исходных текстов. Так, нарушилась сборка около 5800 портов FreeBSD, исходные тексты для которых загружались из GitHub.

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

Разработчики Git пока обсуждают возможные дальнейшие действия. В качестве опций рассматриваются откат использования утилиты gzip по умолчанию, добавление флага »--stable» для сохранения совместимости со старыми архивами, привязка встроенной реализации к отдельному формату архива, использование утилиты gzip для старых коммитов и встроенной реализации для коммитов, начиная с определённой даты, а также гарантирование стабильности формата только для несжатых архивов.

Сам по себе откат на вызов внешней утилиты полностью не решает проблему неизменности контрольных сумм, поскольку изменение во внешней программе gzip также может привести к изменению формата архива. Пока для рецензирования предложили набор патчей, возвращающий по умолчанию старое поведение (вызов внешней утилиты gzip) и использующий встроенную реализацию при отсутствии в системе утилиты gzip. Патчи включают добавление в документации упоминания, что стабильность вывода «git archive» не гарантируется, а формат может быть изменён в будущем.

© Habrahabr.ru