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

إقلاع الإصدار المتوافق مع الأنظمة القديمة في NextPDF واكتشافه

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

لا تستخدم أداة البناء إطار عمل، ولا حاوية لحقن الاعتماديات، ولا اكتشافًا تلقائيًا لمزوّدي الخدمات. بدلًا من ذلك، تُربط نصوص ⁨PHP⁩ البرمجية الخاصة بواجهة سطر الأوامر (⁨CLI⁩) باستخدام require_once ومُحمّل ⁨PSR-4⁩ التلقائي من ⁨Composer.⁩ في هذه الصفحة، لكلمة “الاكتشاف” معنيان محدّدان: أي مستودعات المصدر تقرؤها مرحلة الدمج، وكيف يختار المُنسِّق إعداد ⁨Rector⁩ للهدف.

المُنسِّق هو scripts/build.php. يبدأ البناء، ثم يشغّل خمس مراحل بالترتيب. كل مرحلة محكومة ببوابة، لذلك يوقف أول إخفاق عملية البناء:

  1. دمج المصادر — نسخ مستودعات المصدر في شجرة واحدة.
  2. تشغيل خفض إصدار ⁨Rector⁩ — تشغيل مرور واحد لإصدار ⁨PHP 8.1⁩، وتشغيل مرورين مع إصلاحات لإصدار ⁨PHP 7.4.⁩
  3. توليد composer.json — كتابة بيان الحزمة المُولَّد مع خريطة replace الخاصة به.
  4. نسخ الأصول الثابتة — نسخ الترخيص وسجل تغييرات مُولَّد.
  5. التحقق من المُخرَجات — إحصاء ملفات ⁨PHP⁩ الصادرة؛ تُشغَّل بوابة بناء الجملة المعتمدة لاحقًا في ⁨CI.⁩

جرى التحقق مقابل scripts/build.php (run()، step()). راجع /⁨integrations/backport/configuration/⁩ لتفاصيل اختيار القواعد، و/⁨integrations/backport/production-usage/⁩ لمعرفة بوابة ⁨CI.⁩

لا يعتمد اكتشاف المصدر على ملف بيان. يستخدم scripts/merge-sources.php خريطة ثابتة يكون مفتاحها اسم المستودع ويحدّدها الهدف.

للهدف ⁨PHP 8.1⁩، تتضمّن الخريطة nextpdf (النواة)، وnextpdf-Artisan، وnextpdf-compat-legacy، وnextpdf-Laravel، وnextpdf-Symfony، وnextpdf-CodeIgniter، وnextpdf-Pro عندما يكون ⁨Pro⁩ مُضمَّنًا. للهدف ⁨PHP 7.4⁩، تُختصر الخريطة إلى nextpdf فقط. تحلّ أداة البناء كل مستودع بوصفه مجلدًا شقيقًا تحت جذر --source-dir. تتحقق من كل مستودع متوقَّع قبل نسخ أي شيء. إذا كان أحدها مفقودًا، يُجهَض الدمج ويُبلَّغ عن اسمه ومساره. جرى التحقق مقابل scripts/merge-sources.php (MergeSources::__construct()، run()).

يضع الدمج النواة في src/، ويضع كل مُحوّل تحت مجلده الفرعي ذي مساحة الاسم (src/Artisan/، وsrc/Laravel/، وهكذا). يذهب ⁨Pro⁩ إلى شجرة pro/src/ منفصلة كي يتمكّن البناء من إصداره بوصفه حزمة مستقلة. جرى التحقق مقابل MergeSources (mergeCore()، mergeArtisan()، mergePro()).

  1. يعمل scripts/build.php ضمن واجهة برمجة تطبيقات خادم ⁨CLI⁩ ‏(⁨SAPI⁩). يستدعي عبر require_once كلًّا من merge-sources.php وadjust-composer.php.
  2. تقرأ نقطة دخول ⁨CLI⁩ الخيارات باستخدام getopt()--version، و--source-dir، و--output-dir، و--target، و--dry-run، و--no-pro.
  3. تُنشأ نسخة من Build. يتحقق المُنشئ من --target مقابل ['php74', 'php81']، ويطلق InvalidArgumentException لأي قيمة غير صالحة قبل بدء أي عمل. للهدف ⁨PHP 7.4⁩، يفرض إخراج النواة فقط ويعطّل ⁨Pro.⁩
  4. ينفّذ Build::run() المراحل الخمس ويخرج بالحالة 0 عند النجاح، أو 1 عند أول إخفاق.

جرى التحقق مقابل scripts/build.php (نقطة دخول ⁨CLI⁩، وBuild::__construct()، وrun()).

غير منطبق. أداة البناء هي أداة ⁨CLI.⁩ ليست لها حاوية حقن اعتماديات ولا حاوية خدمات إطار عمل. يستخدم الربط استدعاءات require_once صريحة، إضافةً إلى التحميل التلقائي ⁨PSR-4⁩ من ⁨Composer⁩ لـNextPDF\Backport\ (القواعد) وNextPDF\Backport\Scripts\ (النصوص البرمجية). جرى التحقق مقابل composer.jsonautoload وعبارات require_once في scripts/build.php.

لا يوجد ملف إعداد. يأتي الإعداد من رايات ⁨CLI⁩ بعد حلّها مقابل القيم الافتراضية المدمجة في النص البرمجي:

  1. راية ⁨CLI⁩، إن كانت موفّرة.
  2. القيمة الافتراضية في كتلة تحليل getopt() (على سبيل المثال، الهدف افتراضيًا php81، والإصدار افتراضيًا 2.0.0).
  3. السلوك الذي يشتقّه المُنشئ من الهدف (⁨PHP 7.4⁩ يفرض النواة فقط ولا ⁨Pro⁩، بصرف النظر عن --no-pro).

جرى التحقق مقابل scripts/build.php (نقطة دخول ⁨CLI⁩ وBuild::__construct()). تجد المرجع الكامل للرايات في /⁨integrations/backport/configuration/.⁩

يوفّر المُنسِّق تشخيصاته الخاصة. شغّل تشغيلًا تجريبيًا (composer build:dry) لطباعة مستودعات المصدر التي ستُقرأ ونيّة كل مرحلة، دون كتابة أي شيء. تطبع كل مرحلة علامة صحٍّ عند النجاح أو إخفاقًا مُسمَّى. لا يوجد أمر فرعي منفصل للتشخيص ولا نقطة دخول bin/. تعمل أداة البناء عبر scripts/build.php أو أسمائها المستعارة لنصوص ⁨Composer⁩ البرمجية. جرى التحقق مقابل scripts/build.php (step()، وفروع dryRun)، وscripts/merge-sources.php (مسار التشغيل التجريبي في run())، وcomposer.jsonscripts.

  • /⁨integrations/backport/overview/⁩ — ما أداة البناء وما الذي تنتجه.
  • /⁨integrations/backport/integration/⁩ — عقد تكامل مضيف البناء.
  • /⁨integrations/backport/configuration/⁩ — إعدادات ⁨Rector⁩ ومرجع الرايات.
  • /⁨integrations/backport/troubleshooting/⁩ — مرجع الإخفاقات مرحلةً بمرحلة.