نظرة عامة
بمجرد أن يكون تطبيقك مبنيًا ومختبرًا محليًا، لديك مساران لتوزيعه:- نشر أرشيف tar — ارفع تطبيقك مباشرةً إلى خادم Twenty محدد للاستخدام الداخلي أو الخاص.
- النشر على npm — أدرج تطبيقك في سوق Twenty ليتسنى لأي مساحة عمل اكتشافه وتثبيته.
بناء تطبيقك
شغّل أمر build لتجميع تطبيقك وإنشاء ملفmanifest.json جاهز للتوزيع:
.twenty/output/. أضِف --tarball لإنتاج حزمة .tgz أيضًا للتوزيع اليدوي أو لأمر publish.
النشر إلى خادم (tarball)
بالنسبة للتطبيقات التي لا تريد إتاحتها للعامة — مثل الأدوات المملوكة، أو عمليات التكامل الخاصة بالمؤسسات فقط، أو الإصدارات التجريبية — يمكنك نشر tarball مباشرةً إلى خادم Twenty.المتطلبات الأساسية
قبل النشر، تحتاج إلى remote مُعدّ يشير إلى خادم الهدف. تُخزّن remotes عنوان URL للخادم وبيانات اعتماد المصادقة محليًا في~/.twenty/config.json.
أضِف remote:
النشر
بناء تطبيقك ورفعه إلى الخادم في خطوة واحدة:مشاركة تطبيق منشور
تطبيقات tarball لا تُدرَج في السوق العامة، لذا لن تكتشفها مساحات العمل الأخرى على الخادم نفسه عبر الاستعراض. بمجرد أن تصبح مساحة العمل لديك ضمن خطة Enterprise، يمكنك مشاركة تطبيق تم نشره كما يلي:- اذهب إلى الإعدادات > التطبيقات > التسجيلات وافتح تطبيقك
- في علامة التبويب التوزيع، انقر نسخ رابط المشاركة
- شارك هذا الرابط مع المستخدمين في مساحات عمل أخرى — سيأخذهم مباشرةً إلى صفحة تثبيت التطبيق
إدارة الإصدارات
عند تحديث تطبيق tarball منشور مسبقًا، يشترط الخادم أن تكون قيمةversion في package.json أعلى قطعًا (وفق ترتيب الإصدار الدلالي) من الإصدار المنشور حاليًا. إعادة نشر الإصدار نفسه، أو دفع إصدار أدنى، يُرفَض قبل تخزين ملف tarball — سترى خطأ VERSION_ALREADY_EXISTS من CLI.
لطرح تحديث:
- قم بزيادة الحقل
versionفي ملفpackage.json(مثلًا:1.2.3→1.2.4،1.3.0، أو2.0.0) - شغّل
yarn twenty app:publish --private(أوyarn twenty app:publish --private --remote production) - مساحات العمل التي تم تثبيت التطبيق فيها وتم تفعيل الترقية التلقائية له (في علامة تبويب الإعدادات الخاصة بالتطبيق) سيتم ترقيتها تلقائيًا في الخلفية؛ أما المساحات الأخرى فسترى أن الترقية متاحة في إعداداتها
علامات ما قبل الإصدار تعمل كما هو متوقع: زيادة
1.0.0-rc.1 → 1.0.0-rc.2 مسموح بها، ويُعترَف بالإصدار النهائي مثل 1.0.0 على أنه أعلى من 1.0.0-rc.5. يجب أن يكون الإصدار في package.json بنفسه سلسلة semver صالحة.توافق إصدار الخادم
إذا كان تطبيقك يستخدم ميزة تم تقديمها في إصدار معيّن من خادم Twenty (على سبيل المثال، موفّرو OAuth الذين أضيفوا في v2.3.0)، فيجب عليك التصريح بأدنى إصدار من الخادم يتطلبه تطبيقك باستخدام الحقلengines.twenty في package.json:
ماذا يحدث وقت النشر والتثبيت:
- إذا تم تعيين
engines.twentyولم يستوفِ إصدار الخادم الهدف النطاق، فسيتم رفض النشر (tarball upload) أو التثبيت بخطأSERVER_VERSION_INCOMPATIBLEورسالة تُشير إلى كلٍ من النطاق المطلوب وإصدار الخادم الفعلي. - إذا كان
engines.twentyغير مُعين، فسيُقبل التطبيق على أي إصدار من الخادم (متوافق مع الإصدارات السابقة للتطبيقات الحالية). - إذا لم يكن لدى الخادم قيمة
APP_VERSIONمُكوَّنة، فسيتم تخطي الفحص.
الخادم هو الجهة المرجعية للفحص — إذ يتحقق من
engines.twenty عند كلٍ من رفع tarball وتثبيت مساحة العمل. إذا قمت بنشر tarball خارج القناة المعتادة أو التثبيت من السوق، فسيظل الخادم يفرض التوافق.CI/CD المؤتمتة (مهام سير عمل مُولَّدة بالقوالب)
التطبيقات المُولَّدة باستخدامcreate-twenty-app تأتي افتراضيًا مع ثلاث مهام سير عمل من GitHub Actions ضمن .github/workflows/. يعمل CI بدون أي إعداد، بينما يتطلّب CD سرًّا واحدًا فقط، ويتطلّب النشر إلى npm إعدادًا لمرة واحدة لـ npm trusted-publisher.
CI — ci.yml
يشغّل اختبارات التكامل عند كل دفع إلى main وعند كل طلب سحب.
ماذا يفعل:
- يجلب مصدر تطبيقك.
- ينشئ مثيلاً اختبارياً معزولاً من Twenty باستخدام الإجراء المركّب
twentyhq/twenty/.github/actions/spawn-twenty-app-dev-test@main(المكافئ في CI للأمرyarn twenty docker:start --test). - يُفعِّل Corepack، ويُعدّ Node.js من ملف
.nvmrcلديك، ويثبّت التبعيات بواسطةyarn install --immutable. - يشغّل
yarn test، ويمرّرTWENTY_API_URLوTWENTY_API_KEYمن المثيل الذي تم إنشاؤه بحيث تتمكّن اختباراتك من التواصل مع خادم حقيقي.
TWENTY_VERSION(متغيّر بيئة، القيمة الافتراضيةlatest) — ثبّت نسخة خادم Twenty المستخدمة في CI عبر تعديل هذا فيci.yml.- يتم تجميع التشغيل المتزامن حسب
github.refويلغي التشغيلات قيد التقدّم عند أي دفع جديد.
CD — cd.yml
ينشر تطبيقك إلى خادم Twenty مُهيّأ عند كل دفع إلى main، وبشكل اختياري من طلب سحب عند تطبيق الوسم deploy.
ماذا يفعل:
- يجلب رأس طلب السحب (للطلبات الموسومة) أو الالتزام المدفوع.
- يشغّل
twentyhq/twenty/.github/actions/deploy-twenty-app@main— وهو المكافئ في CI للأمرyarn twenty app:publish --private. - يشغّل
twentyhq/twenty/.github/actions/install-twenty-app@mainبحيث تُثبَّت النسخة المُنشَرة حديثًا في مساحة العمل المستهدفة.
القيمة الافتراضية لـ
TWENTY_DEPLOY_URL وهي http://localhost:3000 مجرد عنصر نائب — لن تصل إلى أي شيء من مُشغِّل مستضاف لدى GitHub. حدّثها إلى عنوان URL العام لخادمك (أو استخدم مُشغِّلًا مستضافًا ذاتيًا مع وصول شبكي) قبل تمكين CD.deploy إلى طلب سحب. الشرط if: في cd.yml سيشغّل المهمّة لذلك الطلب مستخدمًا التزام رأس الطلب، مما يتيح لك التحقّق من التغيير على الخادم المستهدف قبل الدمج.
النشر — publish.yml
ينشر تطبيقك إلى npm مع إثبات المصدر (provenance) عند دفع وسم إصدار (مثلًا: v1.0.0)، أو عند تشغيل سير العمل يدويًا من علامة التبويب Actions.
ماذا يفعل:
- يجلب شيفرة تطبيقك، ويُعد Node.js، ويُحدِّث npm (يتطلّب النشر الموثوق npm 11.5.1 أو أحدث).
- يشغّل
yarn twenty app:publish، الذي يبني التطبيق وينشر.twenty/outputإلى npm. في بيئة CI يضيف تلقائيًا--provenanceو--access public، لذا لا حاجة إلى أي أعلام في سير العمل.
publish.yml (راجع وثائق النشر الموثوق من npm). يُصادِق النشر مع بيانات provenance على مستودع GitHub الذي بنى الحزمة، وهو أيضًا ما يتيح لك المطالبة بملكية تطبيقك في سوق Twenty.
تثبيت الإجراءات القابلة لإعادة الاستخدام
يشير سيرَا العملci.yml وcd.yml إلى إجراءات قابلة لإعادة الاستخدام عند @main، لذا تُلتقط تحديثات الإجراءات في مستودع twentyhq/twenty تلقائيًا. إذا كنت تريد بناءات حتمية، فاستبدِل @main بقيمة SHA لالتزام أو بوسم إصدار في كل سطر uses:.
النشر على npm
يُتيح النشر على npm إمكانية العثور على تطبيقك في سوق Twenty. يمكن لأي مساحة عمل في Twenty استعراض تطبيقات السوق وتثبيتها وترقيتها مباشرةً من واجهة المستخدم.المتطلبات
- حساب على npm
- الكلمة المفتاحية
twenty-appفي مصفوفةkeywordsفيpackage.json(أضفها يدويًا — فهي غير مضمنة افتراضيًا في قالبcreate-twenty-app)
بيانات التعريف لسوق التطبيقات
يدعم إعدادdefineApplication() حقولًا اختيارية تتحكم في كيفية ظهور تطبيقك في السوق. استخدم logo وgalleryImages للإشارة إلى الصور من مجلد public/:
src/application-config.ts
author وcategory وaboutDescription وwebsiteUrl وtermsUrl وغيرها).
أبعاد صور المعرض الموصى بها
يعرض السوقgalleryImages داخل حاوية ثابتة بنسبة 8:5 (على سبيل المثال، 1600×1000 px).
تُعرض صور المعرض بأي نسبة عرض إلى ارتفاع بالكامل ولن يتم اقتطاعها مطلقًا، ولكن أي شيء أطول أو أضيق بكثير من
8:5 سيظهر مساحات فارغة على الجانبين.الحد الأقصى لحجم الصورة
يجب ألّا يتجاوز حجم ملفlogo وكل ملف من galleryImages 10 MB. سيتم تخطي الملفات الأكبر حجمًا عندما يقوم سوق النشر بإعادة استضافة أصولك المنشورة، وبالتالي لن يتم عرضها.
النشر
beta أو next):
كيف تعمل آلية الاكتشاف في السوق
يقوم خادم Twenty بمزامنة كتالوج السوق من سجل npm كل ساعة. يمكنك تشغيل المزامنة فورًا بدلًا من الانتظار:defineApplication() الخاصة بك — راجع قسم البيانات الوصفية في سوق التطبيقات أعلاه.
إذا لم يحدد تطبيقك
aboutDescription في defineApplication()، فسيستخدم السوق تلقائيًا ملف README.md الخاص بحزمتك من npm كمحتوى لصفحة حول. هذا يعني أنه يمكنك الاحتفاظ بملف README واحد لكل من npm وسوق Twenty. إذا كنت تريد وصفًا مختلفًا في السوق، فقم بتعيين aboutDescription بشكل صريح.النشر عبر CI
ينشر سير عملpublish.yml المُنشأ تلقائيًا والموصوف أعلاه إلى npm تلقائيًا عند علامات الإصدارات، مع بيانات provenance. نظرًا لأن yarn twenty app:publish يضيف --provenance و--access public نيابةً عنك عند تشغيله في CI، فلا يحتاج سير العمل إلى أي أعلام npm — فقط إعداد الناشر الموثوق لمرة واحدة.
بالنسبة لأنظمة CI الأخرى (GitLab CI وCircleCI وغيرها)، شغّل yarn install ثم yarn twenty app:publish. يُصدِر بيانات provenance عندما تتمكّن البيئة من إصدار رمز OIDC، ويتم تخطيه تلقائيًا خلاف ذلك.
تضيف npm provenance شارة ثقة إلى إدراجك على npm، مما يتيح للمستخدمين التحقّق من أن الحزمة تم بناؤها من التزام محدد ضمن خط أنابيب CI عام. وهي أيضًا ما يتيح لك المطالبة بملكية تطبيقك في سوق Twenty. راجع وثائق npm provenance للتفاصيل.
تثبيت التطبيقات
بعد نشر التطبيق (npm) أو نشره (tarball)، يمكن لمساحات العمل تثبيته عبر واجهة المستخدم. اذهب إلى صفحة الإعدادات > التطبيقات في Twenty، حيث يمكن استعراض تطبيقات السوق والتطبيقات المنشورة عبر tarball وتثبيتها. يمكنك أيضًا تثبيت التطبيقات من سطر الأوامر:يفرض الخادم اعتماد إصدارات semver عند التثبيت، بما يعكس القواعد المطبّقة عند النشر:
- تثبيت الإصدار نفسه المثبّت بالفعل في مساحة عملك يُرفَض بخطأ
APP_ALREADY_INSTALLED. - تثبيت إصدار أدنى من الإصدار المثبّت حاليًا يُرفَض بخطأ
CANNOT_DOWNGRADE_APPLICATION.
yarn twenty app:install.