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

تشغيل أداة بناء النقل الخلفي ضمن مسار إصدار

هذه أدوات بناء وليست اعتمادية لوقت التشغيل. توضّح هذه الصفحة كيفية تشغيل مسار الإصدار الذي ينتج النقل الخلفي. يعمل المسار في التكامل المستمر (⁨CI⁩)؛ ولا يعمل أبدًا داخل تطبيق نهائي.

يستخدم مسار الإنتاج مساري عمل. يفحص 0-ci.yml كل تغيير على كل فرع دائم. ويشغّل إصدار المصدر build.yml، الذي يبني التوزيعة ويصدرها. يُتحقق من مساري العمل كليهما مقابل .github/workflows/.

يعمل 0-ci.yml عند أحداث الدفع وطلب السحب للفرعين PHP74 وPHP81. ويشغّل ثلاث مهام بالترتيب:

  1. ⁨PHPStan⁩ (أدوات البناء)composer analyse، المستوى 10 لـ rector/rules وscripts.
  2. ⁨PHPUnit⁩ (قواعد ⁨Rector⁩)composer test، مجموعات التجهيزات للقواعد المخصصة الثلاث.
  3. تشغيل البناء التجريبيcomposer build:dry، ولا يبدأ إلا بعد المهمتين الأوليين.

تستخدم الأحداث الموثوقة منفّذات ⁨PHP⁩ ذاتية الاستضافة. أما طلبات السحب من النُسخ المتفرّعة و⁨Dependabot⁩ فتستخدم منفّذات مستضافة على ⁨GitHub⁩ مع إعداد ⁨PHP⁩ 8.5. يُتحقق من هذا مقابل 0-ci.yml (تعبير runs-on وخطوة setup-php الشرطية). ويفحص نموذج الفرعين المزدوج التغييرات التي تمسّ كلا الهدفين بشكل مستقل في طلب السحب لكل فرع.

build.yml هو بناء الإنتاج. يعمل عند حدث repository_dispatch من النوع source-release، أو يدويًا عبر workflow_dispatch مع إدخال وسم. يوجّه وسم الإصدار المسار. ويكون رقم الإصدار بصيغة MAJOR.MINOR.PATCH وفق واجهة برمجة تطبيقات عامة مُعلَنة (⁨Semantic Versioning 2.0.0⁩ §2).

  1. ⁨build-php81⁩ — يسحب أدوات البناء، ويجهّز ⁨PHP⁩ 8.5، ويثبّت اعتماديات البناء، ويستنسخ مستودعات المصدر عند وسم الإصدار، ويشغّل scripts/build.php، ويبدّل المنفّذ إلى ⁨PHP⁩ 8.1، ويتحقق من صحة بنية output/src على ⁨PHP⁩ 8.1، ثم يثبّت الحزمة المُنتَجة باستخدام --no-dev. ويرفع المُخرَج بوصفه أثر بناء.
  2. ⁨validate-php81⁩ — ينزّل أثر البناء، ثم يثبّته ويختبره على مصفوفة من ⁨PHP⁩ 8.1 و8.2 و8.3 و8.4.
  3. ⁨release-php81⁩ — ينزّل أثر البناء، ويسجّل الشجرة المُولَّدة ويضع لها وسمًا، وينشئ أرشيف ⁨zip⁩ يستثني vendor/ و.git/، وينشر إصدار ⁨GitHub⁩ مع إرفاق الأرشيف.
  1. ⁨build-php74⁩ — يسحب أدوات البناء على الفرع PHP74، ويجهّز ⁨PHP⁩ 8.5، ويستنسخ مستودع المصدر الأساسي فقط عند الوسم، ويشغّل scripts/build.php --target=php74، ويبدّل إلى ⁨PHP⁩ 7.4، ويتحقق من صحة بنية المُخرَج على ⁨PHP⁩ 7.4.
  2. ⁨validate-php74⁩ — يثبّت ويختبر على مصفوفة من ⁨PHP⁩ 7.4 و8.0.
  3. ⁨release-php74⁩ — ينشئ أرشيف ⁨zip⁩ من المُخرَج الأساسي فقط ويرفقه بالإصدار نفسه بصفته أرشيفًا ثانيًا.

يُتحقق من هذا التدفق مقابل تعريفات المهام والمصفوفات في build.yml.

يشترك المساران في إصدار ⁨GitHub⁩ واحد. ينشئ مسار ⁨PHP⁩ 8.1 الإصدار، ويرفق مسار ⁨PHP⁩ 7.4 أرشيفه بالوسم نفسه. تجعل مجموعة concurrency المسماة backport-build مع cancel-in-progress: false عمليات البناء تعمل واحدة تلو الأخرى، بحيث لا يمكن أن يتسابق إصدارا مصدر.

تبدأ عملية البناء عادةً تلقائيًا عندما تنشر مؤسسة المصدر إصدارًا. لإعادة بناء وسم معيّن يدويًا، أرسِل build.yml مع إدخال الوسم، مثل v2.0.0. رمز الإرسال هو secrets.BACKPORT_TRIGGER_TOKEN، وهو يسمح باستنساخ مستودع المصدر. يُتحقق من هذا مقابل build.yml (workflow_dispatch.inputs.tag، GH_TOKEN).

يتوقف نص البناء عند أول مرحلة فاشلة ويطبع اسم المرحلة والخطأ. المراحل الخمس هي الدمج، و⁨Rector⁩، وتوليد composer.json، ونسخ الأصول، والتحقق. إذا فشلت خطوة التحقق من صحة البنية بعد البناء، فهذا يعني أن ⁨Rector⁩ أنتج مُخرَجًا يرفضه وقت تشغيل الهدف. تحمي هذه الخطوة الإصدار. اربط الفشل بسببه في /⁨integrations/backport/troubleshooting/.⁩

يتضمن الإصدار أرشيفات توزيع مضغوطة. تُوزَّع الحزمة بوصفها وسوم إصدار، لا فروعًا. يثبّت المستهلكون nextpdf/backport (واختياريًا nextpdf/backport-pro) من قناة الإصدار. يستثني الأرشيف vendor/ و.git/. يُتحقق من هذا مقابل build.yml (zip -r ... -x '*/vendor/*' '*/.git/*').

يحمل composer.json المُنتَج الإصدار المُمرَّر في سطر الأوامر (--version، أو وسم الإرسال بعد إزالة v البادئ). تثبّت حزمة ⁨Pro⁩ nextpdf/backport عند قيد علامة الإقحام ⁨major.minor⁩ المطابق. يُتحقق من هذا مقابل scripts/adjust-composer.php (majorMinor()، generateProComposer()). حافظ على توافق وسم إصدار المصدر وإصدار النقل الخلفي حتى تبقى خريطة replace متسقة.

  • /⁨integrations/backport/security-and-operations/⁩ — حدود الثقة في المسار ووضع سلسلة التوريد.
  • /⁨integrations/backport/troubleshooting/⁩ — مرجع الأعطال لكل مرحلة.