المستوى: مبتدئ
لو فريقك بيستخدم 87 dependency في الـ package.json، وفيه 23 منهم بيصدّر تحديث كل أسبوع، وانت بتعمل npm update يدوي كل تلت شهور وبتلاقي 14 breaking change مرة واحدة، انت بتحرق وقت كتير ومعرّض لـ CVE خطيرة. Renovate Bot بيفتح PR منفصل لكل تحديث، يجرّب الـ tests، ويـ merge أوتوماتيكياً لو الـ patch آمن. على mono-repo فيه 312 dependency، عدد ثغرات CVE العالية نزل من 31 لـ 2 في تلت شهور.
Renovate Bot: نهاية كابوس تحديث الـ Dependencies اليدوي
المشكلة باختصار
أي مشروع برمجي حديث بيعتمد على كود ناس تانية. مشروع Node.js متوسط فيه 1,200 indirect dependency تقريباً. كل واحد فيهم بيصدّر تحديثات security وbug fixes وأحياناً breaking changes. عندك تلت اختيارات وكلهم وحشين:
- تحدّث كل حاجة مرة واحدة كل تلت شهور: تطبيقك بيكسر وفريقك بيصرف 3 أيام يصلّحه.
- متحدّثش خالص: technical debt بيتراكم، وفي يوم بتصحى على CVE خطيرة في dependency عمرها سنتين.
- تحدّث يدوي كل أسبوع: 6 ساعات إنتاجية ضايعة بشكل ثابت.
الحل التاني الشائع غير المنطقي هو إنك تستخدم Dependabot الـ default من GitHub. هيشتغل، بس مش هيحلّ المشكلة كاملة كما هنبيّن.
إيه هو Renovate Bot بمثال بسيط
تخيّل عندك سكرتير شخصي شغلته الوحيدة إنه يتابع كل dependency في مشروعك. كل ما يطلع تحديث، السكرتير بيقرا الـ changelog، يشوف هل التحديث patch (إصلاح bug) ولا minor (feature جديدة) ولا major (breaking change)، وبيكتبلك memo: "في تحديث من 4.2.1 لـ 4.2.3 في مكتبة Lodash. التحديث patch فقط، بيصلح bug في حالة معينة، ومافيهوش breaking changes. أبعتلك PR وأشغّل الـ CI؟". انت بتقول آه، السكرتير بيفتح PR، يشغّل الـ tests، ولو نجحت بيـ merge لوحده. السكرتير ده هو Renovate Bot.
من ناحية علمية: Renovate Bot هو تطبيق مفتوح المصدر مكتوب بـ TypeScript، شركة Mend (سابقاً WhiteSource) بتطوّره. بيشتغل على schedule محدد، بيقرأ ملفات الـ manifest (package.json, requirements.txt, go.mod, Dockerfile, helm chart values) في الـ repo، بيقارن النسخ الحالية بآخر نسخة على الـ registry (npm, PyPI, Docker Hub, Maven Central)، وبيفتح PR منفصل لكل تحديث مع release notes كاملة و changelog و score من معامل semantic versioning.
ليه مش بس Dependabot؟
سؤال منطقي. GitHub Dependabot مدمج في GitHub وبيعمل نفس الفكرة الأساسية. الفرق الحقيقي بينهم:
- عدد المدراء المدعومين: Renovate بيدعم 90+ package manager، Dependabot 30 تقريباً.
- التجميع: Renovate بيقدر يـ group كل dev dependencies في PR واحد. Dependabot بيفتح PR لكل واحد منفصل.
- الـ auto-merge: Renovate فيه سياسات auto-merge مخصصة (مثلاً: merge كل patch updates، عدا dependency معينة). Dependabot الـ auto-merge محدود وبيحتاج GitHub Actions يدوي.
- Custom managers: Renovate بيقدر يطلع versions من أي ملف نصي بـ regex. Dependabot لا.