أحمد حايس
الرئيسيةمن أناالدوراتالمدونةالعروض
أحمد حايس

دورات عربية متخصصة في التقنية والبرمجة والذكاء الاصطناعي.

المنصة مبنية على الوضوح، التطبيق، والنتيجة النافعة: شرح مرتب يساعدك تفهم الأدوات، تكتب كودًا أفضل، وتستخدم الذكاء الاصطناعي بوعي داخل العمل الحقيقي.

تعلم أسرعوصول مباشر للدورات والمسارات من الموبايل.
تنقل أوضحالروابط الأساسية والدعم في مكان واحد بدون تشتيت.

المنصة

  • الرئيسية
  • من أنا
  • الدورات
  • العروض
  • المدونة

الدعم

  • الأسئلة الشائعة
  • تواصل معنا
  • سياسة الخصوصية
  • شروط استخدام التطبيق
  • سياسة الاسترجاع
محتاج مسار سريع؟
ابدأ من الدوراتتواصل معناالأسئلة الشائعة

© 2026 أحمد حايس. جميع الحقوق محفوظة.

الرئيسيةالدوراتالعروضالمدونةالدخول

أتمتة تحديث Dependencies بـ Renovate — إنهي صداع الـ package.json في 15 دقيقة

📅 ٢٠ أبريل ٢٠٢٦⏱ 5 دقائق قراءة
أتمتة تحديث Dependencies بـ Renovate — إنهي صداع الـ package.json في 15 دقيقة

أتمتة تحديث Dependencies بـ Renovate — إنهي صداع الـ package.json

لو فتحت مشروع فيه 50 dependency ولقيت 30 منهم متأخرين 6 شهور، معناه إن شخص لازم يقعد يفتح كل واحد يدوي، يقرأ الـ changelog، ويعمل PR. Renovate بيعمل ده أسبوعيًا من غير تدخّلك، بـ PRs صغيرة مرتّبة حسب الأولوية، وبتكلفة صفر على المشاريع العامة والخاصة.

ذراع روبوتية صناعية ترمز إلى أتمتة تحديث التبعيات في مشاريع البرمجة

المشكلة باختصار

الـ dependencies اللي ما بتتحدّتش بتتراكم في صمت. بعد 6 شهور بتلاقي 3 ثغرات أمنية (CVE) في حزم زي axios أو lodash. أول ما تحاول ترقّي يد بإيد، بتكتشف إن الـ breaking changes في React 18 مش بس في react-dom، كمان في 12 library مترابطة. النتيجة: PR ضخم فيه 80 ملف متغيّر، محدش قادر يراجعه، وبيفضل مفتوح لحد ما يقدم.

الـ trade-off هنا واضح: يا إما تحدّث كل أسبوع بخطوات صغيرة، يا إما كل 6 شهور بكارثة. Renovate بيخلّيك في الخيار الأول من غير ما تفتكر.

إزاي يشتغل Renovate — بمثال بسيط جدًا

تخيّل إن عندك فريق نظافة بيمرّ على مكتبك كل صبح اتنين. الفريق ده مش بيرمي أي حاجة من عنده، بس بيقولّك: "الصندوق ده عنده موديل أحدث، تحبّ أغيّره؟". انت بتبص على المحتوى وبتقول: آه أو لأ. لو قلت آه، هو بيعمل التغيير لوحده.

Renovate بيشتغل بنفس المنطق بالظبط. كل أسبوع بيفتح GitHub Pull Request لكل dependency عنده إصدار جديد. إنت بتفتح الـ PR، تلاقي فيه الـ release notes كاملة، تشوف الـ tests نجحت ولا لأ، وتعمل merge أو تقفل.

المفهوم بشكل تقني

Renovate هو GitHub App (ومتاح كمان على GitLab و Bitbucket و Azure DevOps) بيفحص ملفات الـ dependencies عندك دوريًا. بيدعم أكتر من 90 نوع ملف: package.json، requirements.txt، go.mod، Cargo.toml، Dockerfile، Terraform، GitHub Actions، وغيرهم. لمّا يلاقي إصدار جديد على npm أو PyPI أو Docker Hub، بيفتح branch، يعدّل الملف، يحدّث الـ lockfile بشكل سليم، ويفتح PR بالـ release notes داخل الوصف.

الأداة مجانية بالكامل لأي مشروع (public أو private). الشركة وراها Mend.io، ومشروع Renovate نفسه open-source تحت رخصة AGPL-3.0.

الإعداد خطوة بخطوة

  1. افتح https://github.com/apps/renovate واضغط Install.
  2. اختَر الـ repositories اللي عايز Renovate يشتغل عليها. ابدأ بـ repo تجريبي واحد، مش كلهم مرة واحدة.
  3. Renovate هيفتحلك PR اسمه "Configure Renovate" فيه ملف renovate.json افتراضي. اعمله merge.
  4. استنى من 6 لـ 24 ساعة. هيفتح أول دفعة PRs بالـ updates المتاحة.

ملف renovate.json عملي

الإعداد الافتراضي بيفتح PRs كتير جدًا ومش منظّم. دي نسخة معقولة لمشروع متوسط، جرّبناها على مشروع Next.js إنتاج:

JSON
{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["config:recommended"],
  "schedule": ["before 6am on monday"],
  "timezone": "Africa/Cairo",
  "prConcurrentLimit": 5,
  "prHourlyLimit": 2,
  "packageRules": [
    {
      "matchUpdateTypes": ["minor", "patch"],
      "matchCurrentVersion": "!/^0/",
      "automerge": true,
      "automergeType": "pr",
      "platformAutomerge": true
    },
    {
      "matchPackagePatterns": ["^@types/"],
      "groupName": "type definitions",
      "automerge": true
    },
    {
      "matchUpdateTypes": ["major"],
      "dependencyDashboardApproval": true
    }
  ],
  "vulnerabilityAlerts": {
    "enabled": true,
    "labels": ["security"]
  }
}

المهم في الإعداد ده:

  • schedule: الـ PRs بتفتح يوم اتنين قبل الساعة 6 الصبح بتوقيت القاهرة. مش كل ساعة.
  • prConcurrentLimit: 5: أقصى عدد PRs مفتوحة في نفس الوقت. بيمنع inbox الفريق من الإنفجار.
  • automerge على minor و patch: لو الـ CI عدى، Renovate بيعمل merge تلقائيًا. الشرط !/^0/ بيستثني الحزم اللي إصدارها بادئ بـ 0.x (لأن semver مش بيضمن استقرار فيها).
  • حزم @types/* متجمّعة في PR واحد، لأنها مترابطة.
  • أي major update محتاج موافقة يدوية منك عبر الـ Dependency Dashboard.
  • لو Renovate لقى ثغرة أمنية (CVE)، بيفتح PR فورًا، من غير انتظار الـ schedule.
شاشة كمبيوتر تعرض كود وسطور GitHub Pull Requests أسبوعية من Renovate Bot

رقم فعلي — تجربة على مشروع Next.js

مشروع حقيقي فيه 147 dependency. قبل Renovate: الترقية كانت بتحصل مرتين بس في 6 شهور، في PR ضخم بـ 80+ ملف متغيّر، محدش بيراجعه، وأحيانًا بيكسر الـ production.

بعد Renovate بالإعداد اللي فوق: متوسط 12 PR أسبوعي، كل PR أقل من 5 ملفات، 85% منهم بيتعمل لهم merge أوتوماتيك بعد ما الـ CI يعدي. الوقت المصروف على الـ dependencies هبط من 4 ساعات شهريًا لـ 25 دقيقة شهريًا تقريبًا. الـ CVE alerts اتحلّت في نفس اليوم بدل ما تفضل 3 أسابيع.

trade-offs — ما هتخسره

Renovate مش مجاني من غير تكلفة خفية:

  • PRs أكتر في inbox الفريق. لو ما حطّتش prConcurrentLimit، هتلاقي 40 PR مفتوح في أسبوعين.
  • استهلاك CI: كل PR بيشغّل الـ pipeline بالكامل. لو الـ CI بتدفع فيه بالدقيقة (زي GitHub-hosted runners على الخطة الـ Team)، راقب الفاتورة أول شهر. متوسط مشروع متوسط: 15-30 دولار زيادة شهريًا.
  • الـ automerge خطير لو الـ tests ضعيفة. الافتراض إن عندك test suite بتغطّي على الأقل 60% من الـ critical paths. لو الـ coverage أقل من 40%، فعّل الـ automerge على حزم الـ types بس.

متى لا تستخدم Renovate

  • مشروع مهجور مش بتحدّثه خالص. ما فيش لازمة ترقّيات.
  • Monorepo ضخم فيه 200 service. Renovate ممكن يفتحلك 1000 PR في أول أسبوع. استخدم Dependabot بـ group mode، أو Renovate مع إعداد مخصوص لكل workspace.
  • لو ما عندكش CI pipeline يكشف الـ regressions. PRs الـ minor ممكن تكسر production لو ما فيش تغطية اختبارات فعلية.
  • مشاريع مقفولة بالكامل على إصدارات بعينها بسبب requirements تنظيمية (مثل FIPS أو HIPAA)، الترقية التلقائية ممكن تكسر الامتثال.

الخطوة التالية

اختار repo تجريبي صغير دلوقتي، ركّب Renovate، وامسح ملف renovate.json الافتراضي وحطّ مكانه النسخة اللي فوق. استنى أسبوع واحد، بعدها افتح الـ Insights في الـ repo واقيس: كام PR اتفتح؟ كام اتعملهم merge تلقائي؟ كام محتاج تدخّلك؟ لو النتيجة مرضية، وسّع على باقي الـ repos. لو PRs كتير بتفشل في الـ CI، رجّع الـ automerge إلى false وراجع الـ tests عندك الأول.

المصادر

  • Renovate Official Documentation
  • Renovate GitHub Repository
  • Renovate Configuration Options Reference
  • Renovate Shareable Config Presets
  • Automerge in Renovate — Key Concepts

هل استفدت من المقال؟

اطّلع على المزيد من المقالات والدروس المجانية من نفس المسار المعرفي.

تصفّح المدونة