مستوى المقال: متوسط — تحتاج تكون شغّال على مشروع فيه مكتبات خارجية (npm أو pip أو غيرهم) وتعرف أساسيات Git والـ Pull Requests.
أتمتة تحديث الاعتماديات بـ Renovate: مكتبات محدّثة بدون ما تكسر الإنتاج
لو بتأجّل تحديث مكتبات مشروعك لحد ما تتجمّع، انت بتحوّل شغل 5 دقايق أسبوعيًا إلى يوم كامل من إصلاح الأعطال كل 6 شهور. Renovate بيقلب المعادلة: بيفتح لك Pull Requests صغيرة ومنتظمة، ويدمج الآمن منها لوحده بعد ما الاختبارات تعدّي.
المشكلة باختصار
كل مكتبة بتعتمد عليها بتطلع إصدارات جديدة: إصلاحات أمان، تصحيح باجات، ومزايا. لو سِبتها، بيتراكم عندك دين تقني بيتحوّل لثغرة أمنية أو ترقية مؤلمة. المشكلة مش التحديث نفسه، المشكلة إنك بتعمله دفعة واحدة كبيرة في أسوأ وقت.
تخيّلها بالعربية: صيانة العربية
خلّينا نبسّطها بمثال. عربيتك محتاجة تغيير زيت كل فترة. لو غيّرت الزيت بانتظام (حاجة بسيطة كل شوية)، العربية بتفضل ماشية. لكن لو قلت "هأجّلها"، هتفضل تأجّل لحد ما الموتور يضرب، وساعتها التصليح بيكلّفك ضعف التمن ويوقّفك أيام.
تحديث المكتبات هو بالظبط تغيير الزيت ده. التحديثات الصغيرة المنتظمة (patch وminor) رخيصة وسهلة المراجعة. الترقية الكبيرة المؤجَّلة (major متراكمة) هي الموتور اللي ضرب.
التعريف العلمي
المكتبات بتتبع الإصدار الدلالي (Semantic Versioning) بصيغة MAJOR.MINOR.PATCH. زيادة الـ PATCH معناها إصلاح متوافق للخلف. زيادة الـ MINOR معناها ميزة جديدة متوافقة. زيادة الـ MAJOR معناها كسر محتمل في التوافق. Renovate بيقرأ ملفات الاعتماديات (زي package.json والـ lockfiles)، بيقارن إصداراتك بأحدث المتاح، وبيفتح PR لكل تحديث أو مجموعة تحديثات حسب قواعدك.
إزاي Renovate بيشتغل
- يفحص ملفات الاعتماديات والـ lockfiles في الريبو.
- يكتشف الإصدارات الأحدث ويجيب معاها ملاحظات الإصدار وسجل التغييرات.
- يجمّع ويفتح PR حسب قواعدك وفي المواعيد اللي حدّدتها (مثلًا فجر الاثنين بس).
- يشغّل الـ CI على الـ PR زي أي تغيير عادي.
- يدمج تلقائيًا التحديثات الآمنة (patch/minor) لو الاختبارات خضراء.
الإعداد العملي
حط ملف renovate.json في جذر الريبو. ده إعداد واقعي: يدمج الـ patch والـ minor تلقائيًا، يوقف الـ major للمراجعة اليدوية، ويعطي أولوية لتحديثات الأمان.