تخطَّ إلى المحتوى

دليل المطوّر إلى Backport Builder

⁨Backport Builder⁩ مشروع لهندسة الإصدارات. تعامل مع مستودعات المصدر بوصفها مدخلات، ومع الأشجار المُولَّدة بوصفها مخرجات، ومع قواعد ⁨Rector⁩ المخصّصة بوصفها منطق بناء مختبَرًا.

استخدم هذا الدليل عند صيانة قواعد الخفض، أو البيانات الوصفية للحزم المُولَّدة، أو فحوص بيئة التشغيل الهدف، أو أتمتة إصدارات nextpdf/backport-builder.

الطبقةيملكهاالمسؤوليةلا تضع هنا
مستودعات المصدرمستودعات المنتجمصدر ⁨PHP⁩ الموثوق واختباراته.تعديلات الخفض المُولَّدة.
سكربتات البناءnextpdf/backport-builderدمج المصدر، وتشغيل التحويلات، وكتابة البيانات الوصفية، والتحقّق من المخرجات.منطق التطبيق في وقت التشغيل.
تهيئة ⁨Rector⁩nextpdf/backport-builderسياسة الخفض الخاصّة بالهدف.افتراضات عابرة للأهداف دون اختبارات.
قواعد ⁨Rector⁩ المخصّصةnextpdf/backport-builderتحويلات بنيوية خاصّة بالمشروع.إعادات كتابة واسعة غير مختبَرة.
الحزم المُولَّدةمخرجات البناءعناصر قابلة للتثبيت على بيئات التشغيل الأقدم.تصحيحات يدوية تُعدّ مصدر الحقيقة.
المرحلةالسلوكإجراء المطوّر
سحب المصدريسحب سير عمل الإصدار مستودعات المصدر عند الوسم الهدف.أبقِ مراجع المصدر متوائمة بين الحزم.
التحقّق من العقدValidateBuildContract::run() يفحص افتراضات البناء.تعامل مع فشل العقد بوصفه مانعًا للإصدار.
الدمجMergeSources::run() يجمّع شجرة الحزمة الهدف.تحقّق من نطاق الهدف قبل تشغيل ⁨Rector.⁩
التحويلتُخفّض تهيئات ⁨Rector⁩ والقواعد المخصّصة البنيةَ النحوية.أضف اختبارات تثبيتات لكل تغيير في القواعد.
تعديل ⁨Composer⁩AdjustComposer يكتب البيانات الوصفية للحزمة المُولَّدة وخرائط الاستبدال.تحقّق من أسماء الحزم والإصدارات والتراخيص والقيود.
التحقّق من وقت التشغيلتخضع المخرجات المُولَّدة لفحص البنية النحوية ولاختبارها على إصدارات ⁨PHP⁩ الهدف.تعامل مع فشل بيئة التشغيل الهدف بوصفه مانعًا للإصدار.
الإصدارتُرفَق الأرشيفات بالإصدار.لا تصحّح المخرجات المُولَّدة بوصفها مصدر الحقيقة.

سير عمل المستودع الموصى به

قسم بعنوان «سير عمل المستودع الموصى به»
عنصر العملمصدر الحقيقةسياسة المخرجات المُولَّدة
استخدام ميزة ⁨PHP⁩مستودع المصدر الرئيسي.تكيّف قواعد الخفض الميزةَ.
قيود الاعتمادياتالبيانات الوصفية لـ composer.json المصدر إضافةً إلى سكربت التعديل.يجب أن يكون composer.json المُولَّد قابلًا لإعادة الإنتاج.
خفض البنية النحويةتهيئة ⁨Rector⁩ والقواعد المخصّصة.يجب ألّا يُحرَّر المصدر المُولَّد يدويًا.
دعم وقت التشغيلالفرع الهدف ومصفوفة ⁨CI.⁩يجب أن ينجح البناء على ⁨PHP⁩ الهدف.
ملاحظات الإصدارالوثائق وأتمتة الإصدار.ينبغي أن تربط العناصر المُولَّدة بإصدار المصدر.

ينبغي أن يكون لكل قاعدة مخصّصة غرض محدّد وبيانات وصفية وتغطية تثبيتات.

دالّة القاعدةالغرضمتطلّب الجودة
getRuleDefinition()توثّق التحويل لأدوات ⁨Rector.⁩ضمّن عيّنة ⁨before/after⁩ تطابق الخفض الفعلي.
getNodeTypes()تحدّ من عقد ⁨AST⁩ التي تفحصها القاعدة.أبقِ قائمة العقد صغيرة قدر الإمكان.
refactor()يطبّق التحويل أو يعيد العقدة دون تغيير.اترك العقد غير ذات الصلة دون تغيير، وبسلوك حتمي.
اختبار التثبيتاتيتحقّق من مخرجات ⁨before/after.⁩غطِّ أصغر مدخل صالح وحالة تخطٍّ واحدة على الأقل.
<?php
final class ExampleDowngradeRector extends AbstractRector
{
public function getNodeTypes(): array
{
return [SomeNode::class];
}
public function refactor(Node $node): ?Node
{
if (!$node instanceof SomeNode) {
return null;
}
return $this->rewriteNode($node);
}
}

استخدم التشغيل الجاف أثناء التطوير وعند التحقّق من الإصدارات المرشّحة. لا تكتب المخرجات الحقيقية إلّا عندما تكون مراجع المصدر والفرع الهدف معروفين.

Terminal window
composer build:dry
php scripts/build.php --version=2.0.0 --target=php81 --dry-run
php scripts/build.php --version=2.0.0 --target=php74 --no-pro

شغّل التحقّق من الحزمة المُولَّدة على بيئة التشغيل الهدف، وليس على مضيف البناء الحديث فقط.

نقطة التوسيعاستخدمها من أجلالقيد
ملفات تهيئة ⁨Rector⁩سياسة الخفض الخاصّة بالهدف.أبقِ مسارَي ⁨PHP 8.1⁩ و ⁨PHP 7.4⁩ منفصلين.
قواعد ⁨Rector⁩ المخصّصةتحويلات بنيوية خاصّة بالمشروع.يجب أن تتضمّن بيانات وصفية واختبارات تثبيتات.
سكربت تعديل ⁨Composer⁩هوية الحزمة المُولَّدة.يجب أن يحافظ على ترقيم الإصدارات المتوائم مع ⁨SemVer.⁩
سكربت الدمجانتقاء مدخل حزمة المصدر وتشكيله.يجب أن يسجّل جذور المصدر وجذور المخرجات.
سير عمل البناءتنسيق الإصدار.يجب أن يتحقّق من المخرجات المُولَّدة على بيئة التشغيل الهدف.
  1. أعِد إنتاج البنية النحوية غير المدعومة في تثبيت بسيط.
  2. أضف قاعدة ⁨Rector⁩ مخصّصة أو حدّثها.
  3. أضف تثبيتات ⁨before/after⁩ للقاعدة.
  4. شغّل البناء الجاف.
  5. تحقّق من المخرجات المُولَّدة على بيئة تشغيل ⁨PHP⁩ الهدف.
  6. طبّق التغيير المنطقي نفسه على كل فرع هدف دائم عند الحاجة.
  7. أبقِ عناصر الإصدار قابلة لإعادة الإنتاج من أوسمة المصدر وسكربتات البناء.
الإخفاقحيث ينبغي معالجتهالاستجابة الموصى بها
مستودع مصدر مفقودمرحلة التحقّق من العقد أو الدمج.أوقف البناء وأصلح مدخلات السحب.
فشل تحليل ⁨Rector⁩مرحلة التحويل.اختزِل إلى تثبيت وحدّث القاعدة أو التهيئة.
عدم تطابق composer.json المُولَّدمرحلة تعديل ⁨Composer.⁩أصلح سكربت التوليد، لا البيانات الوصفية المُولَّدة.
فشل البنية النحوية للهدفالتحقّق من وقت التشغيل.امنع الإصدار حتى يُصحَّح التحويل.
مصدر ⁨Pro⁩ غير متاحتهيئة البناء.ابنِ العنصر العام فقط عندما يكون ذلك هو الهدف المقصود.

الإعدادات الافتراضية الآمنة

قسم بعنوان «الإعدادات الافتراضية الآمنة»
الشاغلالافتراضيمتى تتجاوزه
المخرجات المُولَّدةعنصر للقراءة فقط.لا تجعله أبدًا مصدر الحقيقة.
نموذج الفروعفروع هدف دائمة منفصلة.أبقِ التغييرات متزامنة عبر طلبات سحب مستقلة.
مضيف البناء⁨PHP⁩ حديث.يظلّ التحقّق من بيئة التشغيل الهدف هو ما يقرّر جاهزية الإصدار.
القواعد المخصّصةصغيرة ومدعومة بتثبيتات.تجنّب التحويلات الواسعة دون أمثلة ⁨before/after⁩ صريحة.
مسار ⁨PHP 7.4⁩النواة فقط ما لم يُدعَم خلاف ذلك صراحةً.لا تُدرج مخرجات ⁨Pro⁩ دون التحقّق من بيئة التشغيل الهدف.
  • تُنشئ اختبارات البيانات الوصفية لقواعد ⁨Rector⁩ نسخةً من كل قاعدة مخصّصة.
  • تغطّي اختبارات التثبيتات الكودَ قبل كل تحويل وبعده.
  • يُشغَّل البناء الجاف قبل مهام الإصدار.
  • تُجرى فحوص البنية النحوية لبيئة التشغيل الهدف واختبارات الحزمة على المخرجات المُولَّدة.
  • تؤكّد اختبارات البيانات الوصفية لـ ⁨Composer⁩ اسمَ الحزمة وإصدارها وقيودها وخريطة الاستبدال والترخيص.
  • تتضمّن سجلّات البناء مسارات المصدر، ومسار الهدف، وبيئة التشغيل الهدف، وحالة التشغيل الجاف، وحالة تضمين ⁨Pro.⁩