التثبيت
يستهدف DispatchAtlas الإصدار Python 3.12 أو أحدث، ويستخدم uv من أجل تطوير محلي
قابل لإعادة الإنتاج.
⚡ التثبيت بأمر واحد
تتطلب أوامر التثبيت قيمة DISPATCHATLAS_REF صريحة بحيث يبقى النص البرمجي الذي
يجري تنزيله مثبّتًا على مراجعة مصدر مستقرة. إن معرّف SHA الكامل المكوّن من 40 حرفًا
هو أقوى تثبيت — فهو غير قابل للتغيير، ويسمّي شجرة واحدة بعينها، ومُتحقَّق منه بحكم
بنيته — لذا فضّله كلّما وجب أن تكون المراجعة المثبَّتة قابلة للتحقّق. ووسم الإصدار
مقبول أيضًا، لكن بوصفه تثبيتًا للتيسير: فالوسم يمكن أن يتحرّك، والمثبّت لا يتحقّق من
توقيع الوسم، لذا فإن معرّف SHA هو التثبيت الذي ينبغي استخدامه في تثبيتٍ غير مراقَب.
وتغطّي توقيعات cosign ومنشأ البناء الصادرة عن سير عمل الإصدار مُنتَجات التوزيع
المنشورة — وهي سطح تحقّق منفصل لمن يثبّت تلك الأصول بدلًا من هذه النسخة المحلية
المستخرجة من المصدر. نزّل النص البرمجي، وراجعه، ثم شغّله. الأمر الأخير ذو الأنبوب
في كل كتلة هو البديل ذو الخطوة الواحدة: فهو ينفّذ التدفّق دون خطوة المراجعة، لذا
احتفظ به لمرجع سبق أن تحقّقت منه.
export DISPATCHATLAS_REF="<full-40-character-commit-sha>" # a release tag also works
curl -fsSL -o install.sh "https://raw.githubusercontent.com/ahmed-g-gad/dispatchatlas/${DISPATCHATLAS_REF}/scripts/installer/install.sh"
sh install.sh # run after reviewing install.sh
curl -fsSL "https://raw.githubusercontent.com/ahmed-g-gad/dispatchatlas/${DISPATCHATLAS_REF}/scripts/installer/install.sh" | sh # one-shot alternative$env:DISPATCHATLAS_REF = "<full-40-character-commit-sha>" # a release tag also works
iwr -OutFile install.ps1 "https://raw.githubusercontent.com/ahmed-g-gad/dispatchatlas/$($env:DISPATCHATLAS_REF)/scripts/installer/install.ps1"
.\install.ps1 # run after reviewing install.ps1
irm "https://raw.githubusercontent.com/ahmed-g-gad/dispatchatlas/$($env:DISPATCHATLAS_REF)/scripts/installer/install.ps1" | iex # one-shot alternativeيتحقق المثبّت من وجود git وuv، ويستنسخ النسخة المحلية أو يحدّثها، ثم يشغّل
uv sync --all-extras --group dev. عيّن DISPATCHATLAS_SKIP_SYNC=1 عندما تريد
تجسيد النسخة المحلية فقط.
🧱 تثبيت مساحة العمل
uv sync --all-extras --group devتثبّت مساحة العمل مساحة الأسماء الجذرية إضافةً إلى التوزيعات المركّزة:
| التوزيع | مساحة أسماء الاستيراد |
|---|---|
dispatchatlas | dispatchatlas |
dispatchatlas-core | dispatchatlas.core |
dispatchatlas-bench | dispatchatlas.bench |
dispatchatlas-solve | dispatchatlas.solve |
dispatchatlas-lab | dispatchatlas.lab |
dispatchatlas-analytica | dispatchatlas.analytica |
✅ التحقق
uv run python -c "import dispatchatlas, dispatchatlas.core"
uv run dispatchatlas --help
uv run pytest
npm --prefix site run build
npm --prefix site run checkتبقى عمليات تكامل الحلّالات الثقيلة الاختيارية خلف الإضافات (extras). وتظل مساحة العمل الأساسية خفيفة عند الاستيراد عندما تكون هذه الخلفيات غائبة.
⚙️ الإعداد
| المتغيّر | القيمة الافتراضية | الغرض |
|---|---|---|
DISPATCHATLAS_HOME | $HOME/.local/share/dispatchatlas على POSIX، و%LOCALAPPDATA%\DispatchAtlas على Windows | مسار النسخة المحلية المثبّتة. |
DISPATCHATLAS_REPO_URL | https://github.com/ahmed-g-gad/dispatchatlas.git | مستودع Git البعيد الذي يستخدمه المثبّت. |
DISPATCHATLAS_REF | مطلوب | وسم الإصدار أو معرّف SHA الكامل المكوّن من 40 حرفًا للتثبيت أو التحديث. |
DISPATCHATLAS_SKIP_SYNC | 0 | عيّنه إلى 1 لتخطّي مزامنة التبعيات بعد الاستنساخ. |
🔄 التحديث
نصوص التحديث للقراءة فقط ما لم تمرّر علم التطبيق. عيّن DISPATCHATLAS_REF إلى وسم
إصدار أو معرّف SHA كامل مكوّن من 40 حرفًا قبل فحص تحديث أو تطبيقه؛ فكما هو الحال
عند التثبيت، يكون معرّف SHA هو التثبيت غير القابل للتغيير والمُتحقَّق منه بحكم
بنيته، بينما الوسم تثبيتٌ مُيسِّر متحرّك لا يتحقّق المُحدِّث من توقيعه:
$env:DISPATCHATLAS_REF = "<release-tag>"
.\scripts\installer\update.ps1
.\scripts\installer\update.ps1 -Applyexport DISPATCHATLAS_REF="<release-tag>"
scripts/installer/update.sh
scripts/installer/update.sh --apply🗑️ إلغاء التثبيت
تطلب نصوص إلغاء التثبيت التأكيد قبل الإزالة، وترفض الأهداف غير الآمنة، وتنقل النسخة المحلية افتراضيًا إلى نسخة احتياطية موسومة بطابع زمني:
.\scripts\installer\uninstall.ps1 -Yesscripts/installer/uninstall.sh --yesاستخدم -Permanent أو --permanent فقط عندما لا تكون هناك حاجة إلى مسار النسخة
الاحتياطية.