التطوير
sh
cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test| تغطي الاختبارات | |
|---|---|
| المحلل والتحويل | على examples/telegram وexamples/whatsapp |
| روابط المشاركة | عزل الزوار، وقفل PIN، وقائمة الوسائط المسموح بها، والغرف، والأسماء، والحظر، وتجاوز المصادقة |
| عميل MCP | خوادم وهمية من كل حقبة للبروتوكول (HTTP، وSSE القديم، وstdio) |
| الترحيل | المحور، والأسماء، والتمرير |
حزمة سطح المكتب منفصلة: cd desktop && cargo check.
البنية
src/ الخادم (axum)، والمحللات، ووكيل LLM، وعميل MCP، وروابط المشاركة، والترحيل، وTelegram
server/ واجهة HTTP للمالك، ملف لكل مجال: الأصول، والرفع، والتصدير، والمحادثات،
والرسائل، والإعدادات، والوسائط؛ يبني mod.rs أجهزة التوجيه
share_api/ روابط المشاركة: owner.rs (إدارة الروابط والزوار)، وvisitor.rs (/s/…)
web/ الواجهة: index.html، وapp.css، وjs/ (يُقدَّم كملف app.js واحد، ومضمَّن في الملف الثنائي)
js/ ملف لكل مجال من الواجهة، مرقّم حسب ترتيب التحميل (نص برمجي واحد، ونطاق واحد)
desktop/ تطبيق Tauri حول الخادم نفسه
deploy/ Caddy + Docker Compose
examples/ تصديران خياليانلا توجد الوثائق والصفحة الترحيبية لـ iroof.top في هذا المستودع. توجد في irooftop/irooftop.github.io: docs/ (هذا الموقع) وlanding/.
الوثائق
توجد الوثائق في irooftop/irooftop.github.io. وهي تأخذ الصور وإصدار التطبيق من هذا المستودع: انسخ المستودعين جنبًا إلى جنب، ثم ابنِ من هناك.
sh
cd irooftop.github.io/docs
npm ci
ROOFTOP_SRC=../../rooftop npm run dev # http://localhost:5173/
ROOFTOP_SRC=../../rooftop npm run build # docs/.vitepress/distيُنشر الموقع على irooftop.github.io في كل دفع (push) إلى main في ذلك المستودع يغيّر docs/. يُنشأ demo.svg بالأمر python3 scripts/demo-svg.py في مستودع التطبيق (SVG وCSS خالصان، ليعرضهما GitHub).
الإصدار
ارفع Cargo.toml ─▶ الوسم vX.Y.Z ─┬─▶ Release: crates.io + صورة ghcr.io (amd64 + arm64، مشغّلات أصلية)
└─▶ desktop: المثبّتات ─▶ انشر الإصدار (الأحدث) ─▶ Homebrew: formula + cask- ارفع
versionفيCargo.toml(وفيdesktop/)، وثبّت التغييرات، وادفع الوسمvX.Y.Z. يجب أن يكون الوسم رقميًا لمثبّت Windows MSI. كل ما يلي يعمل دون نقرات إضافية. - يُصدر Release الحزمة (السر
CARGO_REGISTRY_TOKEN، والبيئةcrates-io) وصورة Docker: تدفع مهمة واحدة لكل بنية على مشغّل أصلي (ubuntu-latest، وubuntu-24.04-arm) بالـdigest، وتنشئ مهمةmergeالوسوم متعددة البنى. شغّلها يدويًا بـdry_runللتحقق من نشر الحزمة. - يبني desktop المثبّتات لـmacOS (arm64، x64)، وWindows، وLinux في إصدار مسودة. عندما تُرفق كلها، تضيف مهمة
publishملاحظات الإصدار المُولَّدة، وتنشر الإصدار، وتعلّمه كأحدث إصدار. - ثم تستدعي مهمة
homebrewHomebrew، الذي يدفعFormula/rooftop.rbوCasks/irooftop.rbإلىirooftop/homebrew-tap. يحتاج إلى السرHOMEBREW_TAP_TOKEN(رمز دقيق النطاق، وirooftop/homebrew-tap، وContents: قراءة وكتابة) أوHOMEBREW_TAP_DEPLOY_KEY؛ ومن دون أيٍّ منهما تتخطى المهمة مع إشعار. (لا يُطلق الإصدار المنشور بـGITHUB_TOKENالحدثrelease: published، لذلك يكون الاستدعاء صريحًا؛ نشر الإصدار يدويًا ما زال يُطلق Homebrew عبر ذلك الحدث.)
لإعادة تشغيل تحديث الـtap لوسم موجود، مثلًا بعد إضافة السر:
sh
gh workflow run homebrew.yml -f tag=v0.3.0يُنشئ scripts/homebrew-tap.sh vX.Y.Z <نسخة الـtap> الملفات نفسها محليًا. إذا فشلت مثبّتات وسم ما، فأعد تشغيل مهام desktop الفاشلة: تستمر publish وhomebrew عندما تنجح.