فشل في أنظمة البناء بسبب التغييرات في المجاميع الاختبارية للأرشيف على GitHub

قام GitHub بتغيير الطريقة التي ينشئ بها أرشيفات ".tar.gz" و".tgz" التي يتم إنشاؤها تلقائيًا على صفحات الإصدار، مما أدى إلى تغييرات في المجاميع الاختبارية الخاصة بها وإخفاقات هائلة في أنظمة البناء الآلية التي تتحقق من الأرشيفات التي تم تنزيلها من GitHub ومقارنتها بالأرشيفات السابقة للتأكد من سلامتها على سبيل المثال، يتم وضع المجاميع الاختبارية المخزنة في بيانات تعريف الحزمة أو في البرامج النصية للإنشاء.

بدءًا من الإصدار 2.38، تضمنت مجموعة أدوات Git تطبيقًا مدمجًا لـ gzip افتراضيًا، مما جعل من الممكن توحيد الدعم لطريقة الضغط هذه عبر أنظمة التشغيل وتحسين أداء إنشاء الأرشيف. التقط GitHub التغيير بعد تحديث إصدار git في بنيته التحتية. كان سبب المشكلة هو حقيقة أن الأرشيفات المضغوطة التي تم إنشاؤها بواسطة تطبيق gzip المدمج القائم على zlib تختلف ثنائيًا عن الأرشيفات التي تم إنشاؤها بواسطة الأداة المساعدة gzip، مما أدى إلى مجاميع اختبارية مختلفة للأرشيفات التي تم إنشاؤها بواسطة إصدارات مختلفة من git عند تنفيذ أمر "أرشيف جيت".

وفقا لذلك، بعد تحديث GIT في GitHub، بدأ عرض أرشيفات مختلفة قليلا على صفحات الإصدار، والتي لم تنجح في التحقق باستخدام المجاميع الاختبارية القديمة. تجلت المشكلة في أنظمة البناء المختلفة، وأنظمة التكامل المستمر، وأدوات بناء الحزم من التعليمات البرمجية المصدر. على سبيل المثال، تم كسر تجميع حوالي 5800 منفذ FreeBSD، والتي تم تنزيل أكواد المصدر الخاصة بها من GitHub.

ردًا على الشكاوى الأولية حول مواطن الخلل، أشارت GitHub في البداية إلى حقيقة أن المجاميع الاختبارية الدائمة للأرشيفات لم تكن مضمونة أبدًا. بعد أن تبين أن هناك حاجة إلى قدر كبير من العمل لتحديث البيانات الوصفية في الأنظمة البيئية المختلفة لاستعادة وظائف أنظمة البناء المتأثرة، غير ممثلو GitHub رأيهم، وعادوا إلى التغيير وأعادوا الطريقة القديمة لإنشاء الأرشيفات.

لم يتوصل مطورو Git إلى قرار بعد ويناقشون فقط الإجراءات الممكنة. وشملت الخيارات التي تم النظر فيها العودة إلى استخدام الأداة المساعدة gzip الافتراضية؛ إضافة علامة "--stable" للحفاظ على التوافق مع الأرشيفات القديمة؛ ربط التنفيذ المدمج بتنسيق أرشيف منفصل؛ استخدام الأداة المساعدة gzip للالتزامات القديمة والتنفيذ المضمّن للالتزامات التي تبدأ من تاريخ معين؛ ضمان استقرار التنسيق فقط للأرشيفات غير المضغوطة.

يتم تفسير صعوبة اتخاذ القرار من خلال حقيقة أن التراجع عن استدعاء أداة مساعدة خارجية لا يحل تمامًا مشكلة ثبات المجموع الاختباري، نظرًا لأن التغيير في برنامج gzip الخارجي يمكن أن يؤدي أيضًا إلى تغيير في تنسيق الأرشيف. حاليًا، تم اقتراح مجموعة من التصحيحات للمراجعة والتي تُرجع السلوك القديم افتراضيًا (استدعاء أداة مساعدة gzip خارجية) وتستخدم التنفيذ المدمج في حالة عدم وجود أداة مساعدة gzip في النظام. تضيف التصحيحات أيضًا إلى الوثائق إشارة إلى أن استقرار إخراج "git archive" غير مضمون وأن التنسيق قد يتغير في المستقبل.

المصدر: opennet.ru

إضافة تعليق