-
Notifications
You must be signed in to change notification settings - Fork 0
packaging
كيف تُبنى النسخةُ الأولى وتُحزَّم وتُنشَر. اللغةُ عربيّةٌ فصحى. الملخّصُ في
../CLAUDE.md(قسم «النشر والتحزيم والرخصة»). الإصدارُ فيpackage.json(version)، وسجلُّ الإصدارات في../../CHANGELOG.md.
أساسُ التطبيق PWA (Vite + vite-plugin-pwa) يُبنى إلى dist/. مِن نفسِ مخرجِ
npm run build تُشتَقُّ كلُّ صور التوزيع:
| الهدف | الأداة | المخرَج |
|---|---|---|
الويب (الموقع + /app) |
GitHub Actions (.github/workflows/deploy.yml) |
GitHub Pages |
| Linux: AppImage · DEB |
electron-builder (يَلُفُّ dist/ في Electron) |
release/*.AppImage · *.deb
|
| Linux: RPM | alien (تحويلُ DEB → RPM) | release/*.rpm |
| Android: APK |
Capacitor (cap add/sync + gradlew) |
release/*.apk |
كلُّها محلّيّةٌ تعمل offline. أحجامٌ تقريبيّة: AppImage ~245م · DEB ~205م · RPM ~243م · APK ~145م (كبيرةٌ لأنّ المقاطعَ الصوتيّةَ المُدمَجةَ ~60م + وقتُ تشغيل Electron/WebView).
cd GT-MK
npm run pkg:linux # AppImage + DEB + RPM
npm run pkg:apk # APK أندرويد (debug، غير موقَّع)
npm run pkg:all # الكلّ
bash scripts/build-packages.sh <هدف> # build|icons|appimage|deb|rpm|linux|apk|all|check-depsالسكربتُ scripts/build-packages.sh ينسّقُ كلَّ شيء: يبني الويب، يولّد الأيقونات، يُثبّت
الأدواتِ الثقيلةَ عند الطلب، ثمّ يحزّم. المخرجاتُ كلُّها في release/.
-
electron/main.cjs— عمليّةُ Electron الرئيسيّة: نافذةٌ تُحمّلdist/home.html(الفهرس/المُشغِّل)، بلا قائمة، الروابطُ الخارجيّةُ في المتصفّح. -
capacitor.config.json—appId: com.gnutux.gtmishkatkids،webDir: dist. (مدخلُ WebView =dist/index.htmlالذي يُحوّل تلقائيًّا إلىhome.html.) -
package.json→main+ قسمُbuild(electron-builder: appId، أهدافُ Linux، الأيقونةbuild/icons، مدخلُ سطح المكتب،appImage/deb/rpm.artifactName) +homepage/author(يتطلّبهما DEB/RPM). -
scripts/build-packages.sh— المنسّق. -
assets/— مصادرُ الأيقونة وشاشةِ البدء (انظر أدناه).
المصدرُ الفنّيُّ: public/logo-full.png (الآليُّ والطفلُ + العنوان، خلفيّتُه شفّافة؛ الأخضرُ يُضاف).
-
assets/icon-background.png— أخضرُ متدرّجٌ (radial) 1024. -
assets/icon-foreground.png— الشخصيّاتُ (شفّافةً) في ~74% للمنطقة الآمنة. -
assets/icon.png— المسطّحة (الشخصيّاتُ على الأخضر) → منهاpublic/icon.pngوicon-192/512/apple-touch/maskableوbuild/icons(electron). -
assets/splash.png/splash-dark.png— الشعارُ الكاملُ بالعنوان على الأخضر (2732²).
أندرويد: npx @capacitor/assets generate --android (يُستدعى داخل build_apk بعد cap sync)
يكتبُ كلَّ المقاسات في android/app/src/main/res: mipmap-* (أيقونةٌ متكيّفةٌ خضراء، بلا نصّ)
وdrawable-* (شاشةُ البدء بالعنوان، فاتح/داكن، طوليّ/عرضيّ). الأيقونةُ بلا نصّ (مناسبةٌ للمُشغِّل)،
والعنوانُ في شاشةِ البدء فقط. المصدرُ assets/ مُلتزَمٌ؛ مخرجاتُ android/ مُولَّدةٌ (في .gitignore).
-
في
package.json: حزمُ Capacitor الصغيرةُ (@capacitor/core/cli/android@^6) — لا تَنّاتٌ أصليّة، وثابتةٌ ليبقى مشروعُandroid/قابلاً للبناء. -
عند الطلب (
--no-save، يُثبّتُها السكربت):electron+electron-builder(~150م) و@capacitor/assets(يجرُّsharpالثقيل). -
عند الالتزام: اجعلْ
package-lock.jsonمطابقًا لـpackage.jsonفقط (npm install --package-lock-only) فلا يتسرّبَ electron/sharp إلىnpm ciفي النشر.
-
DEB: electron-builder يتطلّب
homepageفيpackage.jsonوإلّا يفشل. -
RPM:
fpmالمرفقُ في electron-builder (1.9.3) لا يوافقrpmbuildالحديث (4.20+) فيفشل توليدُه؛ لذا نبني DEB ثمّ نحوّله RPM بـalien(rpm_from_deb، يتطلّبalien+fakeroot). -
Capacitor
--no-saveيَحذِفُ سابقَه:npm install --no-save @capacitor/assetsحذفَ حزمَ Capacitor المثبّتةَ سابقًا بـ--no-save(لأنّها غيرُ مذكورةٍ فيpackage.json) فانهارَ بناءُ APK بخطأCould not resolve project :capacitor-android. الحلّ: Capacitor فيpackage.json؛ وassets --no-saveبعده لا يَضرُّها. حافِظْ على توافقِ إصدارات Capacitor (core/cli/androidنفسُ الـmajor). -
نسخةٌ قديمةٌ زائفةُ النجاح:
build_apkيَحذِفُapp-debug.apkقبلgradlewلئلّا يُنسَخَ APK قديمٌ ويُبلَّغَ نجاحًا عند فشلِ gradle. - مسارٌ بأحرفٍ عربيّةٍ ومسافات: يعملُ مع electron-builder/Capacitor، لكنّ بعضَ الأدوات حسّاسة — راقِبْ.
node+npm · ImageMagick (magick) · (Linux) electron-builder تلقائيّ + alien+fakeroot للـrpm ·
(Android) JDK 17+ وGradle وAndroid SDK (ANDROID_HOME). فحصٌ: bash scripts/build-packages.sh check-deps.
الدفعُ إلى main → Actions يبني (npm ci && npm run build داخل GT-MK/, Node 20) ويجمّع
_site/ (الموقعُ الرسميُّ على / + التطبيقُ على /app/) → Pages. لا تَبْنِ يدويًّا للنشر؛ ادفعْ فقط،
ولا ترفعْ حتى يَختبرَ المستخدمُ ويقولَ «ارفع و انشر».
الـAPK الحاليُّ debug غيرُ موقَّع. لإصدارِ متجرٍ: أنشئْ keystore، ووقّعْ assembleRelease (AAB/APK موقَّع).
📖 هذا الويكي مرآةٌ مولَّدةٌ من GT-MK/docs/ في المستودع — حرّرِ الملفَّ هناك ثمّ شغّلْ bash tools/publish-wiki.sh.
رخصةُ المشروعِ والوثائق: GPL-3.0.
البداية
المرجعُ التقنيّ
الخبرةُ المتراكمة