ابدأ مجانًا
→ كل الأدلة

اربط الكود الخاص بك: غيّر، وتحقّق، ووافق، ونشر، وتراجع عن مشروع برمجي حقيقي

ربط الكود الخاص بك (/projects/connect/code) يربط مشروع aiKit بمستودع Git لديك بالفعل، مثل تطبيق Laravel على GitHub، وبالمكان الذي يعمل فيه: خادمك الخاص، أو استضافة aiKit. ومن ذلك الحين، تطلب التغييرات بكلمات بسيطة من تبويب الاستضافة في المشروع. يعدّل الذكاء الاصطناعي في aiKit نسخة من الكود، ويشغّل فحوصات المشروع، ويعرض لك الفرق والمعاينة، ولا ينشر إلا بعد موافقة أحد أفراد فريقك. كل نشر يصبح إصدارًا مرقمًا يمكنك التراجع عنه بنقرة واحدة. يبقى مستودعك المصدر الأساسي، ويواصل خادمك النشر كما كان دائمًا.

ربط الكود الخاص بك →
1

الخطوة 1 و2: سمِّ المشروع واربط المستودع

سمِّ المشروع، ثم الصق عنوان المستودع (من زر Code الأخضر في GitHub) والفرع الذي يعمل منه الموقع، وغالبًا main. اختر كيف يصل aiKit إليه. رمز GitHub: رمز مخصص تنشئه على GitHub لهذا المستودع فقط مع ضبط Contents على Read and write؛ ويُستخدم مع عنوان https://. مفتاح النشر: زوج مفاتيح خاص بهذا المستودع فقط، وتضيف نصفه العام ضمن Settings ثم Deploy keys في المستودع مع تفعيل Allow write access؛ ويُستخدم مع عنوان git@. مستودع عام: قراءة فقط، لذلك لا يوجد مكان لحفظ التغييرات المعتمدة؛ استخدمه فقط للاستكشاف.

تلصق الرمز أو المفتاح بنفسك. يُخزَّن مشفرًا على محرك aiKit ولا يُعرض مرة أخرى لأي شخص. تعرض الصفحة بصمة فقط. يقوم ربط المستودع بنسخ الكود إلى المحرك وتحديد نوع المشروع (Laravel أو JavaScript أو ملفات ثابتة). لا يتغير أي شيء في المستودع.

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

2

الخطوة 3: مكان التشغيل

خادمك الخاص: يبقى الموقع في مكانه تمامًا. أدخل عنوان الخادم، ومنفذ SSH (عادةً 22)، وتسجيل الدخول الذي يستخدمه aiKit (تنشئ خطوات الإعداد حسابًا اسمه aikit)، ومجلد الموقع (لموقع Laravel Forge، ‎/home/forge/your-site.com)، وأمر النشر الذي يستخدمه الموقع بالفعل (عادةً bash scripts/deploy.sh)، والصفحات التي يجب أن تستجيب بعد كل نشر، بعنوان كامل في كل سطر. الصق المفتاح الخاص لتسجيل دخول الخادم (الذي أنشأته في الخطوة 1 من الإعداد). احفظ وتحقق من الاتصال.

عندما يصل aiKit إلى الخادم لأول مرة، يعرض بصمة الخادم ويسألك: هل هذا خادمك؟ قارنها بما طبعه الخادم في الخطوة 6 من الإعداد. اضغط على «مطابق» فقط عندما تكون متطابقة، ثم على «ربط». من ذلك الحين، يُرفض أي خادم مختلف على هذا العنوان. عند نجاح الفحص، تذكر الصفحة الإصدار الذي يعمل عليه الخادم حاليًا.

استضافة aiKit: يبني aiKit الكود ويقدمه بنفسه، مع عنوان مجاني للبدء. الأفضل للمواقع وواجهات المستخدم الأمامية.

3

إعداد الخادم (يتم مرة واحدة، نحو 10 دقائق)

ضمن إعداد الخادم، تسرد الصفحة ثماني خطوات للنسخ واللصق، مُعبأة مسبقًا بقيمك؛ ولكل خطوة زر نسخ. تُنفَّذ الخطوتان 1 و8 على جهاز الكمبيوتر الخاص بك، والخطوات من 2 إلى 7 على الخادم بوصفك مستخدمًا لديه صلاحية sudo.

ما الذي تنشئه: تسجيل دخول بدون كلمة مرور وبدون واجهة سطر أوامر. مفتاحه الوحيد مقيّد بسكربت بوابة صغير (الخطوتان 3 و5) يقبل أمرين فقط: status (أي إصدار يعمل، وهل الموقع في وضع الصيانة) وdeploy لالتزام محدد بالضبط. يعمل النشر بوصفه مستخدم الموقع نفسه عبر قاعدة sudo واحدة، ويتحقق من أن الفرع على GitHub يشير إلى هذا الالتزام تحديدًا، ثم يشغّل سكربت النشر الحالي دون تغيير. تضبط الخطوة 4 صلاحيات المجلد بحيث يصل تسجيل الدخول إلى مجلد الموقع فقط: لا إلى المواقع الأخرى في مجلد المستخدم نفسه، ولا إلى ملف .env أبدًا. تختبر الخطوة 7 كل ذلك وتخبرك بما يجب أن تراه في كل سطر، وتختبر الخطوة 8 تسجيل الدخول من جهازك قبل أن تلصق مفتاحه في aiKit.

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

4

تبويب الاستضافة لمشروع الكود

أربع بطاقات في الأعلى: المستودع، ويعرض المستودع والفرع وأحدث التزام ونوع المشروع. يعمل على: خادمك الخاص (مع تسجيل الدخول ووقت آخر استجابة) أو استضافة aiKit. الإصدار المباشر: الإصدار الذي يعمل عليه الموقع، ومن أنشأه، ومتى. الصفحات: عدد الصفحات التي يجب أن تستجيب وقد استجابت في آخر فحص؛ يعيد زر فحص الآن زيارتها، وتظهر أسفلها أي صفحة لم تستجب مع ما أعادته.

أسفل البطاقات: طلب تغيير (أو التغيير المفتوح حاليًا)، والإصدارات، وسجل التغييرات، والملفات المحمية، وللمالك: الاتصال.

5

اطلب تغييرًا، وراجعه، ووافق عليه

اكتب ما يجب تغييره، مع تسمية الصفحة وما تريد رؤيته، ثم اضغط على «إجراء التغيير». تتحول البطاقة إلى التغيير رقم 1 مع تقدم مباشر: جلب أحدث الكود، والملفات التي يقرؤها الذكاء الاصطناعي ويعدّلها، ثم كل فحص. يعدّل الذكاء الاصطناعي الملفات فقط؛ ولا ينفذ أي أوامر. يُسمح بتغيير واحد مفتوح لكل مشروع في الوقت نفسه، ويُحتسب كل طلب ضمن حد الذكاء الاصطناعي للمشروع.

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

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

بعد نجاح الفحوصات خيار ضمن الاتصال، والفحوصات والمراجعة. الانتظار للموافقة هو الإعداد الافتراضي. النشر التلقائي ينشر التغيير وحده فقط عندما تنجح جميع الفحوصات ولا يتغير أي ملف محمي؛ وأي حالة أخرى تبقى بانتظار الموافقة.

6

الفحوصات والمعاينة

في مشروع Laravel تكون الفحوصات كالتالي: كل ملف PHP تغيّر يُحلَّل بنجاح (php -l)؛ وكل ملف Blade يُترجم بنجاح (php artisan view:cache)؛ وواجهة الأمامية تُبنى (npm run build)؛ ويبدأ التطبيق في تشغيل تجريبي بقاعدة بيانات SQLite مؤقتة، تُنشأ جداولها وتُملأ من المستودع، حيث يجب أن ترد كل صفحة في الصفحات التي يفتحها التشغيل التجريبي برمز 200. تعمل هذه الفحوصات على محرك aiKit، وليس على خادمك ولا على قاعدة بياناتك الحية أبدًا. لا يُنسخ ملف .env الخاص بالمشروع ولا يُقرأ أبدًا؛ ويحصل التشغيل التجريبي على إعدادات مؤقتة.

الفحص الفاشل يمنع الضغط على موافقة. يستطيع المالك وحده تحديد خيار النشر رغم فشل الفحوصات، وذلك لفحص فشل لسبب لا يؤثر على الموقع الحي.

المعاينة تفتح التطبيق المتغيّر من التشغيل التجريبي في تبويب جديد، مع بيانات تجريبية وإيقاف النماذج. تتوقف بعد 15 دقيقة من آخر استخدام، وتنتهي عند الموافقة على التغيير أو تجاهله.

7

الملفات المحمية

لا يلمس الذكاء الاصطناعي الملفات المحمية. تبدأ القائمة بما يلي: ترحيلات نُفّذت بالفعل على الموقع الحي (كل ترحيل في الإصدار الحي، لأن كل نشر يشغّلها)، والترحيلات الجديدة (لأنها ستغيّر قاعدة البيانات الحية عند النشر التالي)، وسكربت النشر، وملفات الاعتماديات (composer.json وcomposer.lock وpackage.json وpackage-lock.json). يذكر كل عنصر السبب. يضيف المالك ملفًا أو مجلدًا (مثل config/** وتعني كل ما داخل config) مع سبب، ويحذف العناصر، ويضغط حفظ الملفات المحمية.

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

ملفات .env والمفاتيح الخاصة وauth.json في فئة أكثر صرامة: لا تُقرأ ولا تُغيَّر ولا تدخل أبدًا ضمن الفروقات، ولا يستطيع أحد إيقاف ذلك.

8

الإصدارات والنشر والاسترجاع

في المرة الأولى التي يصل فيها aiKit إلى خادمك، يسجّل ما يعمل عليه الخادم كالإصدار 1، قبل aiKit، لذلك يمكن التراجع حتى عن أول نشر لـ aiKit. بعد ذلك، يصبح كل نشر إصدارًا مرقمًا: تغيير (تغيير موافَق عليه؛ اسمه يفتح ذلك التغيير)، أو إعادة نشر، أو استرجاع، مع الالتزام الخاص به، ومن قام به، وحالته (مباشر، سابق، مباشر لكن الصفحات تفشل، فشل النشر)، وعدد الصفحات التي ردّت، وسجل النشر. يحتفظ aiKit بآخر 5 إصدارات.

نشر أحدث كود يُنشر آخر ما هو موجود في الفرع الآن، بعد التأكيد، مثلًا عندما يدفع أحدهم إصلاحًا مباشرة.

استرجاع إلى هذا، على إصدار سابق، ينشئ التزامًا جديدًا تكون ملفاته مطابقة تمامًا لملفات ذلك الإصدار، ويدفعه وينشره بالطريقة المعتادة، ثم يتحقق من الصفحات. لا يُعاد كتابة السجل أبدًا، لذلك يمكن التراجع عن عملية الاسترجاع نفسها.

9

سجل التغييرات

كل طلب برقمه ونصه ومن طلبه ومن وافق عليه أو تجاهله ومتى وحالته الحالية. اضغط على أي صف لفتح ذلك التغيير مع فحوصاته وفروقاته؛ يحمل العنوان ?change=<id>، لذلك يمكنك مشاركة الرابط مع فريقك.

الدليل التالي حول Printer’s Helper: ما هو وما حدوده

عندك سؤال أسرع ومحدد؟ تصفح الأسئلة الشائعة.