NetMon — مراقب الشبكة: اتصالات مباشرة، عناوين IP، منافذ، دول، وإحصاءات مع AppImage وإصدارات تلقائية
  • JavaScript 92.3%
  • CSS 4.1%
  • HTML 3.6%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-24 20:56:36 +00:00
.forgejo/workflows fix(versioning): جلب الوسوم تلقائيًا قبل حساب الإصدار 2026-10-24 20:04:26 +03:00
build feat: إطلاق NetMon 1.0.0 — مراقب الشبكة العربي مع AppImage وإصدارات آلية 2026-10-24 19:54:38 +03:00
docs/screenshots docs: لقطات v3 للتنبيهات والبايتات والإعدادات 2026-10-24 22:55:31 +03:00
resources/geoip feat: إطلاق NetMon 1.0.0 — مراقب الشبكة العربي مع AppImage وإصدارات آلية 2026-10-24 19:54:38 +03:00
scripts fix(release): حماية الإصدار الجديد من الحذف وإصلاح ترتيب الاحتفاظ 2026-10-24 23:07:04 +03:00
src feat(alerts): فصل السماح عن التجاهل وإضافة الاستئناف والعرض 2026-10-24 23:55:52 +03:00
tests feat(alerts): فصل السماح عن التجاهل وإضافة الاستئناف والعرض 2026-10-24 23:55:52 +03:00
.editorconfig feat: إطلاق NetMon 1.0.0 — مراقب الشبكة العربي مع AppImage وإصدارات آلية 2026-10-24 19:54:38 +03:00
.gitattributes feat: إطلاق NetMon 1.0.0 — مراقب الشبكة العربي مع AppImage وإصدارات آلية 2026-10-24 19:54:38 +03:00
.gitignore feat(explorer): تطبيقات وASN وخريطة وتاريخ وتصدير مفلتر وقارات 2026-10-24 22:12:15 +03:00
CHANGELOG.md chore(release): v3.4.0 [skip ci] 2026-10-24 20:56:36 +00:00
electron-builder.yml feat(insights): تنبيهات ومراقبة وبايتات وجدار حماية وتقارير وخريطة أذكى 2026-10-24 22:52:34 +03:00
LICENSE feat: إطلاق NetMon 1.0.0 — مراقب الشبكة العربي مع AppImage وإصدارات آلية 2026-10-24 19:54:38 +03:00
package-lock.json chore(release): v3.4.0 [skip ci] 2026-10-24 20:56:36 +00:00
package.json chore(release): v3.4.0 [skip ci] 2026-10-24 20:56:36 +00:00
README.md feat(alerts): فصل السماح عن التجاهل وإضافة الاستئناف والعرض 2026-10-24 23:55:52 +03:00
THIRD_PARTY_NOTICES.md feat(explorer): تطبيقات وASN وخريطة وتاريخ وتصدير مفلتر وقارات 2026-10-24 22:12:15 +03:00
versioning.json feat: إطلاق NetMon 1.0.0 — مراقب الشبكة العربي مع AppImage وإصدارات آلية 2026-10-24 19:54:38 +03:00

أيقونة NetMon

NetMon — مراقب الشبكة

برنامج سطح مكتب عربي لمراقبة اتصالات الشبكة على جهازك: من يتصل بك، وما الاتصالات الخارجة، والعناوين والمنافذ والدول والتطبيقات — كل ذلك محليًا.

لوحة المعلومات

نبذة

NetMon يقرأ مقابس النظام مباشرة من /proc/net/{tcp,tcp6,udp,udp6}، يربطها بالعمليات عبر /proc/<pid>/fd، ويُثريها بمعلومات الدولة والمنظمة من قاعدة DB-IP Lite المضمّنة. لا يحتاج خادمًا ولا يرسل بياناتك إلى أي جهة.

  • صادر / وارد / داخلي: تمييز حقيقي للاتجاه اعتمادًا على المنافذ المستمعة والعناوين المحلية.
  • التطبيقات: اسم العملية و PID والمستخدم وسطر الأوامر (بقدر ما تسمح به الصلاحيات).
  • الدول والمنظمات: علم الدولة واسمها بالعربية، رقم ASN، والمنظمة، مع ذاكرة مؤقتة للعناوين.
  • المنافذ: كل ما يستمع على الجهاز، مع تمييز عام والشبكة المحلية ومحلي فقط، وإخفاء منافذ UDP العابرة افتراضيًا.
  • زر قراءة الأسماء الكاملة: يطلب صلاحيات المسؤول عبر نافذة Polkit، ويشغّل جامع معلومات صغيرًا فقط كـ root — الواجهة تبقى كمستخدم عادي، ويُوقف المساعد فورًا عند الإيقاف أو إغلاق البرنامج.
  • تبويب الدول + سيناريوهات: اعرض اتصالات دولة محددة (صادرة وواردة معًا)، واختر سيناريوهات جاهزة مثل «وارد من الخارج»، «منافذ إدارية»، و«منافذ غير شائعة».
  • إحصاءات مباشرة: سرعات التنزيل والرفع، اتصالات عبر الزمن، أعلى الدول والتطبيقات والمنافذ، وتفاصيل الجلسة.
  • مركز تنبيهات ومراقبة: قائمة مراقبة للدول/التطبيقات/ASN/المنافذ الإدارية، أحداث «ما الجديد» مع تأكيد/تجاهل/سماح، فترة تعلّم، وساعات كتم.
  • جدار حماية واستهلاك: حالة firewalld/ufw لكل منفذ، حظر مؤقت لعنوان عام، وبايتات لكل اتصال/تطبيق/دولة عبر ss.
  • هوية أعمق: exe وcwd وخدمة systemd والحاويات Flatpak/Docker/Podman، وواجهة VPN لكل اتصال.
  • خريطة أذكى: اختيار موقعك، تكبير/تحريك، خطوط من موقعك، وفلتر القارات.
  • تقارير وخصوصية: تقرير يومي Markdown، احتفاظ قابل للتعديل، مسح السجل، وضع خصوصية، وتشغيل في الخلفية مع tray.
  • التقاط DNS/SNI اختياري: أسماء نطاقات حقيقية من DNS وTLS عند تفعيله صراحةً بصلاحية المسؤول، دون حفظ الحزم.
  • اختبار مُحلّل DNS الفعلي: استعلامان اختياريان إلى Akamai/Google لعرض عنوان مُحلّل DNS كما يراه الإنترنت، مع تحذير عند وجود VPN.
  • استجابة تلقائية اختيارية: مساعد root محدود يضيف قواعد firewalld مؤقتة لمطابقات التهديدات، ولا ينفّذ أوامر حرة.
  • البحث والفلترة والتصدير: تصفية فورية، وصدّر النتائج المعروضة فقط بصيغة CSV أو JSON.
  • واجهة عربية RTL داكنة، AppImage واحد يعمل على أغلب توزيعات x86_64.

لقطات

الاتصالات التطبيقات وASN
الاتصالات بطاقة التطبيق
الدول والخريطة الإحصاءات
تبويب الدول والخريطة الإحصاءات

لقطات توضيحية من وضع العرض أو من تشغيل حقيقي، دون بيانات حساسة.

التشغيل

من الإصدارات (AppImage)

نزّل أحدث حزمة من صفحة الإصدارات: https://git.majlis7.net/debe/netmon/releases

chmod +x NetMon-*-x86_64.AppImage
./NetMon-*-x86_64.AppImage

إذا لم يعمل الملف بسبب FUSE (شائع في Fedora Atomic وبعض الأنظمة):

./NetMon-*-x86_64.AppImage --appimage-extract-and-run

من المصدر (تطوير)

المتطلبات: Linux x86_64، Node.js 22+، واتصال بالإنترنت للبناء الأول.

npm install
npm start            # تشغيل عادي
npm start -- --demo  # بيانات توضيحية بدون قراءة /proc

بعض إصدارات npm الحديثة تحجب سكربتات التثبيت. إذا لم يُنزّل Electron تلقائيًا فشغّل: node node_modules/electron/install.js

بناء AppImage

npm run geoip:fetch   # ينزّل قاعدة الدول والمنظمات (~18MB، غير مرفوعة إلى Git)
npm run dist          # ينتج dist/NetMon-<version>-x86_64.AppImage

الأيقونة تُولَّد من build/icon.svg عبر npm run icon (يتطلب ImageMagick أو rsvg-convert)، وbuild/icon.png مرفق جاهز.

كيف يعمل الاتجاه؟

  • وارد: منفذ محلي مسجّل في حالة LISTEN (أو UDP مرتبط) والاتصال ليس عبر loopback.
  • صادر: منفذ محلي عابر (ephemeral) وواجهة خارجية.
  • داخلي: أي طرف على loopback أو عنوان من عناوين الجهاز.
  • يستمع: مقبس لم يُنشئ اتصالًا بعد، ويظهر في تبويب المنافذ.

تُحدَّث اللقطة كل ثانية إلى 30 ثانية حسب الإعداد، ويُحتفظ بآخر 240 عيّنة للرسوم. اتجاه اتصالات UDP تقديري لأنها بلا حالة مصافحة مثل TCP.

استكشاف الدول والسيناريوهات

تبويب «الدول» يجمع كل الاتصالات بحسب الدولة البعيدة — سواء كانت صادرة من جهازك أو واردة إليه. اضغط بطاقة دولة (أو علمها في جدول الاتصالات، أو صفها في «أعلى الدول») لتنتقل فورًا إلى جدول مفلتر مع بطاقة ملخص تعرض:

  • عدد الاتصالات مع الدولة، والوارد/الصادر.
  • أكثر التطبيقات والمنافذ والمنظمة المرتبطة بها.
  • أزرار سريعة: الكل / وارد فقط / صادر فقط، وزر إلغاء الدولة.

يمكن دمج الدولة مع أي فلتر آخر من الشريط أعلى الجدول (الدولة + السيناريو + الاتجاه + البروتوكول + البحث).

سيناريوهات جاهزة

السيناريو الفائدة
صادر إلى الخارج كل ما يبدأه جهازك نحو عناوين عامة — مناسب لمراجعة الوجهات.
وارد من الخارج اتصالات تصل إلى جهازك من عناوين عامة — مناسب لفحص الخدمات المكشوفة.
منافذ إدارية اتصالات SSH وRDP وقواعد البيانات والخدمات الإدارية (صادرة أو واردة).
غير مشفرة (تقديري) HTTP وبروتوكولات نصية أخرى، لتحديد ما يمكن أن يكون مكشوفًا.
منافذ غير شائعة منافذ بعيدة خارج القائمة الشائعة، قد تستحق المراجعة.
دول ظهرت حديثًا دول تُسجل لأول مرة اليوم أو بعد بدء المراقبة.
تطبيق × دولة لأول مرة كشف تطبيق يتصل بدولة لم تسبق تسجيلها له.
منفذ إداري من دولة جديدة كشف منفذ إداري من دولة لم يسبق تسجيله مع هذا المنفذ.
مطابقة قائمة تهديدات اتصال يطابق IP أو CIDR أو ASN أو منظمة من قائمة محلية.

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

التطبيقات وASN — والعكس

من جدول الاتصالات:

  • اضغط اسم التطبيق → تُفتح بطاقة تطبيق تعرض كل الدول التي يتصل بها، ومنافذها، ومنظماتها، وواردها/صادرها.
  • اضغط اسم المنظمة/ASN → بطاقة منظمة تعرض دولها وتطبيقاتها.
  • اضغط علم الدولة → بطاقة دولة تعرض تطبيقاتها ومنظماتها؛ ومنها يمكنك القفز إلى أي تطبيق أو ASN.
  • يمكن أيضًا اختيار التطبيق أو المنظمة من قائمتي الفلترة أعلى الجدول، أو دمجها مع الدولة والسيناريو.

الخريطة العالمية

تبويب «الدول» يعرض خريطة SVG تتوهج فيها الدول النشطة بحسب عدد الاتصالات، مع:

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

التاريخ وأول ظهور وكشف الشذوذ

يحفظ البرنامج سجلًا محليًا في history.json داخل مجلد بيانات البرنامج (userData):

  • أول ظهور لكل دولة ومنفذ، ويظهر في بطاقة الدولة وتبويب المنافذ ونافذة التفاصيل.
  • مقارنة اليوم بأمس: اتصالات مرصودة، وارد/صادر، دول، عناوين عامة، منافذ إدارية، وذروة — مع رسم لآخر 7 أيام في تبويب الإحصاءات.
  • كشف الشذوذ: تطبيق يتصل بدولة لأول مرة، أو منفذ إداري من دولة لم يسبق تسجيله معه، مع تنبيه أعلى اللوحة وسيناريوهات جاهزة.

يُجمع السجل أثناء تشغيل البرنامج فقط، ويبقى على جهازك. في أول تشغيل ستُسجَّل كل الدول الحالية كـ«أول ظهور»؛ بعد ذلك تظهر الأشياء الجديدة فقط. كشف «تطبيق × دولة» يحتاج أسماء التطبيقات، لذا فعّل صلاحيات المسؤول للحصول على نتائج أدق.

القارات والتحديد المتعدد

  • أزرار القارات أعلى تبويب الدول تُجمّع البطاقات تحت آسيا، أوروبا، أفريقيا، أمريكا الشمالية، أمريكا الجنوبية، أوقيانوسيا، مع زر «عرض اتصالات القارة» لفلترة كل دول القارة بضغطة.
  • زر «تحديد عدة دول» يفعّل تحديد البطاقات بالضغط، ثم «عرض اتصالات المحدد» يجمعها في فلتر واحد. يمكنك أيضًا «تحديد كل الظاهر» أو «تحديد كل القارة».

تصدير النتائج المفلترة

زرّا CSV وJSON أعلى جدول الاتصالات يصدّران ما تراه الآن فقط بعد كل الفلاتر (الدولة، التطبيق، ASN، السيناريو، الاتجاه، البروتوكول، البحث)، وليس كل الاتصالات. ملف JSON يضم أيضًا وصف الفلاتر وعدد النتائج.

مركز التنبيهات والمراقبة

تبويب «التنبيهات» يجمع:

  • قائمة مراقبة لأي دولة أو تطبيق أو ASN/منظمة أو منفذ إداري. أضفها بالنجمة ☆ من بطاقة الدولة/التطبيق/المنظمة أو من نافذة التفاصيل.
  • أحداث ما الجديد: دولة جديدة، تطبيق × دولة جديد، منفذ إداري من دولة جديدة، تطبيق يطابق قائمة تهديدات، وأي عنصر في قائمة المراقبة.
  • لكل حدث:
    • تم: يعتبره مقروءًا ويبقيه في السجل مع تحديث عدده بصمت.
    • تجاهل: يخفيه ويوقف إنشاءه/تنبيهه مستقبلًا.
    • اسمح: يبقيه مرئيًا تحت فلتر «مسموح» ويحدّثه بصمت دون تنبيه؛ لا يغيّر الاتصالات أو جدار الحماية.
    • استئناف: يزيل التجاهل/السماح ويعيد الحدث للرصد.
  • فترة تعلّم افتراضية 3 أيام: تُسجَّل الأحداث لكن لا تُرسل إشعارات سطح مكتب، لتجنب ضجيج أول تشغيل. يمكن إنهاؤها فورًا من نفس الصفحة.
  • ساعات كتم مثل 23:00-07:00، وإشعارات سطح المكتب، وخيار «راقب الوارد فقط».
  • الأحداث والمراقبة تُحفظ محليًا في insights.json. زر عرض في أي تنبيه يفتح الاتصالات المرتبطة به مباشرة، وفلتر مسموح منفصل عن متجاهل.

مركز التنبيهات

البايتات وجدار الحماية

  • يقرأ البرنامج عدادات ss -tinapHei دوريًا ويعرض:
    • إجمالي البيانات لكل اتصال في عمود «البيانات» وفي نافذة التفاصيل.
    • إجمالي البيانات لكل تطبيق/دولة/منظمة في البطاقات.
    • أعلى المستهلكين في الإحصاءات.
  • حالة جدار الحماية تُقرأ من firewalld أو ufw (قراءة فقط دون صلاحيات عادة):
    • «مسموح» أو «محجوب» لكل منفذ استماع، بدل الاعتماد على «يستمع على عنوان عام» فقط.
    • فحص فوري من الإعدادات.
  • حظر مؤقت: من نافذة اتصال عام، زر «حظر مؤقت 15 دقيقة» عبر نافذة Polkit. يُضاف حظر firewalld ويُزال تلقائيًا بعد المدة. يتطلب firewall-cmd وpkexec.
  • قوائم تهديدات محلية: استورد TXT/CSV/JSON يحتوي IP أو CIDR أو ASN أو منظمة. تُطابق محليًا وتظهر كتنبيه وسيناريو، ولا تُجلب من الإنترنت.

الهوية والخريطة

  • كل اتصال يعرض — حيث تسمح الصلاحيات — الملف التنفيذي، مجلد العمل، خدمة systemd، ونوع الحاوية (Flatpak/Docker/Podman/Snap).
  • تمييز اتصالات VPN عبر أسماء الواجهات (tun/wg/tailscale/zt/ppp) وإظهار شارة VPN.
  • الخريطة: اختر «موقعك على الخريطة» لرسم الخطوط من دولتك بدل النقطة الثابتة، مع تكبير/تصغير وتحريك وفلتر قارات. الموقع المختار يُحفظ محليًا.
  • تحديد متعدد للتطبيقات وASN: زر «تطبيقات/ASN متعدد» يفتح قائمة اختيار، ويطبق اتحاد العناصر على الجدول.

التقارير والاحتفاظ والخصوصية

  • تقرير يومي Markdown من الإعدادات: الحالة الحالية، الليلة مقابل السابقة، أعلى الدول/التطبيقات بالبيانات، جدار الحماية، وأحدث التنبيهات.
  • الاحتفاظ بالسجل: 7/14/30/90 يومًا، وزر مسح كامل.
  • وضع الخصوصية: يطمس العناوين والأسماء في الواجهة (وليس البيانات المحفوظة) لالتقاط لقطات آمنة.
  • الخلفية: إبقاء البرنامج في tray عند الإغلاق، والبدء مصغرًا. توفير الطاقة يجعل التحديث 10 ثوانٍ على الأقل ويعطّل رسوم الخريطة.
  • التحديثات: فحص التحديثات، وتنزيل/تثبيت AppImage ذاتي مع التحقق من SHA256 وإعادة التشغيل.

التقاط DNS/SNI (اختياري)

من الإعدادات يمكن تشغيل التقاط سلبي عبر tcpdump (بصلاحية المسؤول وعبر pkexec) بفلتر ثابت:

  • DNS على المنفذ 53.
  • TLS على المنفذ 443 لاستخراج SNI من ClientHello.

بعد التفعيل تظهر أسماء النطاقات في عمود «المضيف» ونافذة التفاصيل والبحث. الخصوصية:

  • لا تُحفظ الحزم أو محتوى TLS؛ فقط أسماء النطاقات في الذاكرة.
  • لا يُرسل شيء إلى أي خادم.
  • الالتقاط اختياري وغير مفعّل افتراضيًا، ويتوقف عند إغلاق البرنامج أو بزر الإيقاف.
  • SNI يُقرأ من الحزمة الأولى للاتصال؛ إذا كان ClientHello مجزأً فقد يُفوَّت. DNS mapping تقريبي عند مشاركة IP بين عدة نطاقات.

الاستجابة التلقائية (اختيارية)

عند استيراد قائمة تهديدات، يمكن تفعيل الاستجابة التلقائية من إعدادات قائمة التهديدات:

  • بعد تأكيد صريح، يطلب pkexec صلاحية المسؤول مرة واحدة، ويشغّل مساعدًا محدودًا لهذه الجلسة.
  • لكل اتصال عام يطابق قائمة التهديدات، يُضاف حظر firewalld مؤقت 15 دقيقة (مصدر ووجهة).
  • المساعد يقرأ ملف طلبات يملكه المستخدم، ويتحقق من IP والمدة، ولا ينفّذ أوامر حرة.
  • لا يبدأ تلقائيًا بعد إعادة تشغيل البرنامج؛ يجب تفعيله في كل جلسة.
  • يمكن إيقافه من الإعدادات أو بإغلاق البرنامج. لا يُنصح به على شبكات مشتركة دون مراجعة.

الحدود التقنية (بصراحة)

  • SNI/eBPF: أضفت التقاط DNS/SNI اختياريًا عبر tcpdump (وليس eBPF)، مع حدود: لا إعادة تجميع TCP، ولا يرى SNI للاتصالات الواردة، وDNS mapping تقريبي.

  • فحص DNS: يقرأ /etc/resolv.conf وresolvectl دون استعلامات، وزر «اختبار المُحلّل الفعلي» يستعلم Akamai/Google اختياريًا. عند التقاط DNS عبر tcpdump، تُسجَّل واجهة خروج الاستعلامات إن توفر ifindex، ويظهر تحذير عند VPN. ليس ضمانًا لكل الحالات.

  • التحديث لا يستبدل الحزمة تلقائيًا؛ يفتح رابط AppImage. الاستبدال الذاتي يحتاج توقيعًا وتحققات إضافية.

  • الحظر المؤقت/التلقائي يعتمد على firewalld/pkexec. الاستجابة التلقائية محدودة بقائمة التهديدات ولا تعمل دون مساعد نشط.

  • قراءة أسماء عمليات مستخدمك تعمل دون صلاحيات. أسماء عمليات مستخدمين آخرين (وخدمات النظام) لا يمكن قراءتها إلا بصلاحيات مسؤول؛ يعرض البرنامج عددها في تنبيه أعلى اللوحة.

  • التفعيل من داخل البرنامج: من التنبيه أعلى اللوحة أو من الإعدادات → «أسماء العمليات الكاملة» اضغط تفعيل. ستظهر نافذة النظام (Polkit) لإدخال كلمة مرور sudo/المسؤول. بعدها يعمل مساعد صغير (pkexec + ss) بصلاحية root لقراءة الأسماء فقط، بينما تبقى واجهة Electron كمستخدم عادي. لا تُحفظ كلمة المرور، ويُوقف المساعد بزر الإيقاف أو عند إغلاق البرنامج. يتطلب وجود pkexec وss (من iproute2)، وهما مثبتان افتراضيًا في Fedora/Bazzite.

  • لا يشغّل البرنامج electron كـ root ولا يطلب تعطيل sandbox. وإن كان pkexec غير متوفر، يمكن تشغيل الحزمة كمسؤول يدويًا (غير موصى به).

  • كل التحليل محلي. لا تُرسل بيانات قياس عن بُعد ولا تتبّع. لا تُرسل عناوين IP أو أسماء التطبيقات إلى أي خادم.

  • الاتصالات الخارجية فقط عند طلبك: تنزيل GeoIP، فحص/تنزيل التحديث، واختبار مُحلّل DNS الفعلي (استعلامان). التقاط DNS/SNI محلي ولا يرسل بيانات.

  • قاعدة الدول والمنظمات من DB-IP Lite بترخيص CC BY 4.0 — التفاصيل في THIRD_PARTY_NOTICES.md.

الإصدارات التلقائية

يعتمد الإصدار على MAJOR.MINOR.PATCH (Semantic Versioning) مع قرار يُحسب من حجم تغييرات الكود بين آخر وسم و HEAD.

قواعد الترقية (قابلة للتعديل في versioning.json)

التغيّر في الكود القرار الناتج
لا تعديلات في مسارات الكود لا إصدار —
أقل من 150 سطرًا وأقل من 6 ملفات patch 1.0.0 → 1.0.1
150+ سطرًا أو 6+ ملفات أو وجود feat minor 1.0.0 → 1.1.0
1200+ سطرًا أو 24+ ملفًا أو BREAKING CHANGE major 1.0.0 → 2.0.0
  • تُحسب الأسطر من git diff --numstat ضمن مسارات محددة (src/, scripts/, tests/, وإعدادات البناء) مع استثناء CHANGELOG.md وقفل التبعيات والملفات الثنائية.
  • السكربت scripts/bump-version.mjs يحدّث package.json وpackage-lock.json ويضيف قسمًا في CHANGELOG.md، ثم يضع الوسم ويبني وينشر.
  • يمكن تجاوز القرار يدويًا: node scripts/bump-version.mjs patch|minor|major.

من الدفع إلى الإصدار

  1. ادفع تغييراتك إلى main.
  2. يعمل .forgejo/workflows/release.yml تلقائيًا: فحص + اختبارات → حساب الإصدار → بناء AppImage → التزام الإصدار والوسم → إنشاء الإصدار ورفع الحزمة.
  3. أي دفع يحتوي [skip ci] لا يعيد تشغيل النشر (تجنب الحلقات).

الاحتفاظ بآخر 3 حزم فقط

  • الإصدارات (tags + وصفها + CHANGELOG) تبقى إلى الأبد.
  • ملفات الحزم (*.AppImage و*.sha256) في أقدم الإصدارات تُحذف تلقائيًا بعد كل نشر، مع الإبقاء على حزم أحدث 3 إصدارات فقط — لتوفير مساحة الخادم.
  • الحذف يستهدف ملفات الحزمة فقط ولا يمسّ الإصدار أو نصه. يمكن تشغيل التنظيف يدويًا:
node scripts/prune-release-assets.mjs --dry-run   # معاينة
node scripts/prune-release-assets.mjs --keep 3

إصدار من جهازك

export FORGEJO_TOKEN=...   # أو ضع التوكن في .forgejo-token (مستثنى من Git)
# التزم تغييرات الكود أولًا؛ السكربت يرفض العمل مع تغييرات غير ملتزمة
git add -A && git commit -m "fix: ..."
npm run release            # فحص → اختبارات → بناء → التزام الإصدار → وسم → دفع → نشر → تنظيف

خيارات: --no-push, --no-build, --skip-tests, --keep 3, --dry-run.

التكامل المستمر

  • .forgejo/workflows/ci.yml: فحص الصياغة والاختبارات على الفروع وطلبات الدفع.
  • .forgejo/workflows/release.yml: إصدار تلقائي عند الدفع إلى main، أو يدويًا من تبويب Actions (publish_current=true لإعادة نشر نسخة حالية دون ترقية — مفيد للاستعادة بعد فشل رفع).
  • يحتاج سير العمل إلى صلاحية الكتابة على المستودع. يستخدم GITHUB_TOKEN تلقائيًا، ويدعم سرًّا اختياريًا باسم RELEASE_TOKEN (توكن مستخدم) إن كانت صلاحيات GITHUB_TOKEN محدودة.

بنية المشروع

src/main/        جامع /proc، ربط العمليات، GeoIP، DNS العكسي، الواجهات، الإعدادات، Electron
src/preload/     جسر IPC آمن (contextIsolation + sandbox)
src/renderer/    واجهة عربية RTL بدون أطر عمل (HTML/CSS/JS + رسوم SVG)
scripts/         الإصدارات، CHANGELOG، النشر، التنظيف، GeoIP، الفحص
tests/           اختبارات Node للـ parsers، القرار، الاتجاهات، وانتقاء الحزم
.forgejo/        CI وسير الإصدار

الترخيص

MIT © 2026 debe — راجع LICENSE وإشعارات الأطراف الثالثة.