GitHub изменил метод формирования автоматически генерируемых архивов «.tar.gz» и «.tgz» на страницах с релизами, что привело к изменению их контрольных сумм и массовым сбоям в автоматизированных системах сборки, которые для подтверждения целостности осуществляют сверку загружаемых с GitHub архивов с ранее сохранёнными контрольными суммами, например, размещёнными в метаданных пакетов или в сборочных сценариях.
Начиная с выпуска 2.38 в инструментарии Git была включена по умолчанию встроенная реализация gzip, которая позволяла унифицировать поддержку данного метода сжатия в разных операционных системах и повысить производительность создания архивов. GitHub подхватил изменение после обновления версии git в своей инфраструктуре. Проблему вызвало то, что сжатые архивы, генерируемые встроенной реализацией gzip на базе zlib, бинарно отличаются от архивов, созданных утилитой gzip, что привело к отличию контрольных сумм для архивов, созданных разными версиями git при выполнении команды «git archive».
Si rezultat, pas azhurnimit të git në GitHub, në faqet e komenteve filluan të jepen pak a shumë arkiva të ndryshme, që nuk kalonin verifikimin sipas checksum-eve të vjetra. Problemi u shfaq në sisteme të ndryshme ndërtimi, në sistemet e integrimit të vazhdueshëm dhe në mjetet për ndërtimin e paketave nga kodet burimor. Për shembull, ndërtimi i rreth 5800 porteve të FreeBSD u prish, për të cilat kodet burimor ishin shkarkuar nga GitHub.
Në përgjigje të ankimeve të para për dështimet e shfaqura, përfaqësuesit e GitHub në fillim cituan se checksum-et e qëndrueshme për arkivat nuk ishin kurrë të garantuara. Pas demonstrimit se për të rikthyer funksionalitetin e sistemeve që u ndikuan nga ndryshimi, do të nevojitet një punë kolosale për azhurnimin e metadata në ekosistema të ndryshme, përfaqësuesit e GitHub ndryshuan mendimin e tyre, e anuluan ndryshimin dhe rikthejnë metodën e vjetër të gjenerimit të arkivave.
Разработчики Git пока не пришли к какому-то решению и лишь обсуждают возможные действия. Рассматривались такие варианты, как откат на использование утилиты gzip по умолчанию; добавление флага «—stable» для сохранения совместимости со старыми архивами; привязка встроенной реализации к отдельному формату архива; использование утилиты gzip для старых коммитов и встроенной реализации для коммитов, начиная с определённой даты; гарантирование стабильности формата только для несжатых архивов.
Сложность принятия решения объясняется тем, что откат на вызов внешней утилиты полностью не решает проблему неизменности контрольных сумм, так как, изменение во внешней программе gzip также может привести к изменению формата архива. В настоящее время для рецензирования предложен набор патчей, возвращающий по умолчанию старое поведение (вызов внешней утилиты gzip) и использующий встроенную реализацию при отсутствии в системе утилиты gzip. Патчи также добавляют в документацию упоминание, что стабильность вывода «git archive» не гарантируется и формат может быть изменён в будущем.
Burimi: opennet.ru
