الوثائق
يبني والإصدارات
ملفات سايدكار خاصة بالهدف، وأصول التحديث الموقعة، وفهرس الإصدار المنشور بعد مثبتات النظام الأساسي.
مترجم تلقائيًا من الإنجليزية. عرض الأصل بالإنجليزية
نموذج التوزيع
يتضمن تصميم سطح المكتب واجهة Vite الأمامية، وسايدكار مجمعة على شكل Bun، وعمليات ترحيل SQLite تم إنشاؤها في تطبيق Tauri. يحدد المستودع إصدارات macOS Apple Silicon وIntel وWindows x64 وARM64 وLinux x64 وARM64. تم تكوين أتمتة الإصدار في .github/workflows/release.yml; يتم أيضًا تشغيل فحوصات بناء النظام الأساسي بشكل مستقل من خلال build-platforms.yml.
يصف تعريف سير العمل عملية النشر. يجب التأكد من توفر وصلاحية المثبت من أصول التشغيل والإصدار الخاصة به. كود المصدر وحده لا يثبت بيانات الاعتماد أو نتائج التوثيق أو التثبيت الناجح على الجهاز المستهدف.
بناء خط أنابيب
scripts/build.ts يقوم بتشغيل ست مراحل مرتبة ويتم إحباطه عند فشل المرحلة:
- ثَبَّتَ: تثبيت ملف القفل المتجمد، بما في ذلك التبعيات الاختيارية لجميع أنظمة التشغيل وبنيات وحدة المعالجة المركزية.
- يفحص: التحقق من نوع مساحة العمل. اختبارات الوحدة هي أمر CI منفصل.
- تجميع: بناء السايدكار مع
scripts/compile-sidecar.tsلهدف Rust الثلاثي. - موارد: منصة
packages/db/drizzleمثل الهجرات المجمعة. - باقة: قم ببناء الواجهة الأمامية، ثم قم باستدعاء Tauri باستخدام إعدادات الهدف والحزمة والتوقيع والمحدث.
- التحف: فهرس أصول أداة التثبيت، واكتب المجموع الاختباري SHA-256، وأنشئ ملاحظات الإصدار من سجل Git.
bun scripts/build.ts --help
bun scripts/build.ts --dry-run
bun run build:sidecar
bun scripts/build.ts --only=resources
bun scripts/build.ts --no-updater --only و --skip قبول أسماء المرحلة. --target, --bundles، و --out-dir حدد النواتج. الهدف الافتراضي هو المضيف الذي أبلغ عنه rustc -vV. تتم كتابة ثنائيات Sidecar إلى apps/desktop/src-tauri/binaries/sidecar-<triple>، مع .exe على ويندوز. يتم الاحتفاظ بالثنائيات المتطابقة وأشجار الترحيل دون تغيير لتجنب إعادة تشغيل التطوير غير الضرورية.
يستخدم compile-sidecar.ts من خلال المسار: يتم تطبيق تعديلات تجميع المضيف المضمن. لا يمثل أمر الترجمة العام المباشر نفس إجراء الإنشاء. دليل القطع الأثرية الافتراضي هو apps/desktop/src-tauri/target/release-artifacts.
ال resources نسخ الخطوة packages/db/drizzle/ داخل apps/desktop/src-tauri/resources/migrations/ وهو آمن للتكرار. ال artifacts يكتب الخطوة SHA256SUMS و RELEASE_NOTES.md، تم إنشاؤه من الالتزامات منذ العلامة الأخيرة. يتم قبول الأسماء المستعارة للخطوة بواسطة --only و --skip: deps, checks/test, sidecar, migrations، و notes/checksums/release. النص لا يقرأ أبدا .env* الملفات أو طباعة القيم السرية.
سي آي والنشر
| سير العمل | المسؤوليات التي تم تكوينها |
|---|---|
ci.yml | التثبيت المجمد، والتحقق من نوع/اختبارات مساحة العمل، والتدريج السايدكار/المورد، وقصاصة/اختبارات Rust، وفحوصات JavaScript المصاحبة. |
build-platforms.yml | دليل أو build/** يبني فرع لستة أبنية مستهدفة. استخدام الحزم --no-updater وتحميل العناصر المفهرسة دون نشر إصدار. |
release.yml | التحقق من صحة علامة الإصدار، وإصدارات النظام الأساسي الموقعة، وبيانات كل منصة، ودمج بيان ستة منصات، ونشر المثبت، ونشر الفهرس النهائي. |
ios.yml | بناء جهاز محاكاة غير موقع وإقرانه ذهابًا وإيابًا؛ لا يوجد منشور في App Store أو TestFlight. |
يتم تشغيل سير عمل الإصدار لـ v* العلامات أو علامة الإصدار الموجودة المحددة يدويًا في المستودع غير المتشعب. release-ref.ts يتحقق من العلامة وإصدار التطبيق ويحل الالتزام. يقوم كل إصدار بإنشاء إصدار للنظام الأساسي، مثل علامة إصدار ملحقة بـ macos-arm64 أو linux-x64. فقط بعد نشر جميع إصدارات النظام الأساسي، يقوم فهرس الإصدار بنشر الملف المدمج latest.json.
stage-release.ts يتحقق من العناصر المحددة وعلاقات المجموع الاختباري/التوقيع وروابط البيان قبل النشر. لا تتم الكتابة فوق الإصدارات المنشورة بالفعل. إصدار الفهرس مؤهل ليصبح الأحدث بالنسبة للإصدارات المستقرة؛ تظل الإصدارات الأولية مميزة على أنها إصدارات أولية.
تتطلب إصدارات التحديث وجود مفتاح خاص لتوقيع Tauri وتكوين كلمة المرور المتوافقة مع المفتاح العام الموجود tauri.conf.json. يستخدم توقيع/توثيق إصدار macOS شهادة Apple وإعدادات الحساب؛ يقوم Windows باستيراد شهادة توقيع وتمرير بصمة الإبهام الخاصة بها إلى أداة التجميع. يؤدي فقدان مدخلات توقيع الإصدار المطلوبة إلى فشل إنشاء الإصدار. قم بتكوينها من خلال مخزن CI السري.
تنشر مهمة إصدار منفصلة حزمة البرنامج الإضافي nikcli عند توفر رمز npm المميز. فهو يتخطى إصدارًا منشورًا بالفعل ويمكنه استخدام اسم الحزمة الاحتياطية التي تم تكوينها عندما لا يمكن نشر النطاق الأساسي. لا تقوم مهمة الحزمة هذه بتأسيس توفر مثبت سطح المكتب.
سلوك المحدث
نقطة نهاية المُحدِّث التي تم تكوينها هي أحدث إصدار من GitHub للمستودع تم تنزيله على latest.json. يقوم مُحدِّث Rust بالتحقق عند الإطلاق وكل أربع ساعات، مع وضع عمليات التحقق اليدوية في قائمة الانتظار من خلال خدمته. يستخدم كل طلب مهلة مدتها 30 ثانية. يحدد البيان الأصول والتوقيعات الخاصة بالمنصة؛ المفتاح العام هو جزء من تكوين التطبيق.
update://status يحمل حالات التحقق والتحديث والمتاحة والتنزيل والجاهزة والفاشلة. ملاحظات الإصدار تحتوي على [critical] وضع علامة على التحديث المتاح على أنه غير قابل للرفض. حالة الاستعداد لإعادة التشغيل غير قابلة للتجاهل أيضًا. يؤثر هذا على الموجه؛ التثبيت لا يزال يحترم حارس العمل غير المحفوظ.
install_update يسجل الإصدار المعلن ويعيد فحصه، ثم يقوم بتنزيل حزمة التحقق من التوقيع. يقوم المحرر بالحفظ قبل التنزيل ومرة أخرى قبل ذلك apply_update، حماية التعديلات التي تم إجراؤها أثناء التنزيل. العمل غير المحفوظ يمنع كلتا العمليتين؛ تحتفظ عمليات الحفظ الفاشلة بالبايتات التي تم التحقق منها لإعادة المحاولة. يتم استرداد الحالة الأصلية بعد الاشتراك، ولا يمكن لعمليات التحقق أن تحل محل التقدم النشط أو إعادة التشغيل المعلقة. يقوم Windows بتصريف السايدكار قبل أن يتولى المثبت التحكم بها؛ توفر الأنظمة الأساسية الأخرى إمكانية إعادة التشغيل بعد التثبيت.
حافظ على استقرار مفاتيح التحرير
يتحقق التطبيق من توقيعات التحديث باستخدام المفتاح العام المضمن الخاص به. الإصدار الموقع بمفتاح خاص مختلف غير قابل للتبديل. تحقق من أصول المثبت والمحدث المنتجة على النظام الأساسي المستهدف قبل الإعلان عن إصدار جاهز للمستخدمين.
توافق قاعدة البيانات
التطبيقات المعبأة مفتوحة cadcamfun.db ضمن دليل بيانات التطبيق الخاص بهم. يتم تطبيق عمليات الترحيل المعلقة بواسطة طبقة قاعدة البيانات عند بدء التشغيل باستخدام عمليات الترحيل المضمنة في الحزمة. لذلك، ترتبط ترقيات المخطط والتحديثات الثنائية على الرغم من أنها عناصر منفصلة.
تقارن ملاحظات الإصدار التي تم إنشاؤها أشجار الترحيل المتعقبة مع علامة الإصدار السابقة. يتم الإبلاغ عن الشجرة التي تم تغييرها على أنها غير آمنة للرجوع إلى إصدار أقدم؛ يتم الإبلاغ عن شجرة لم تتغير على أنها متوافقة مع الترحيل؛ يتم الإبلاغ عن السجل غير المتاح على أنه غير معروف. لا تتحقق هذه المقارنة التلقائية من صحة كل مشكلة التوافق المحتملة على مستوى التطبيق.
قبل استبدال الإصدار الثنائي بإصدار أقدم، احتفظ بالبيانات الحالية وافحص ملاحظات توافق الإصدار. لا يعني رمز الترحيل الأمامي عمليات ترحيل عكسية. اتبع إجراءات النسخ الاحتياطي واسترداد قاعدة البيانات لدليل البيانات الفعلي.
التحقق من الإصدار
bun test scripts
bun scripts/build.ts --only=artifacts --dry-run تتحقق الاختبارات المساعدة من صحة تعيين الهدف، ومتطلبات التوقيع، وتسمية العناصر، ومعالجة البيان، وقواعد التدريج. يطبع التشغيل التجريبي العمليات المخططة دون تجميع أو توقيع. لا توجد بدائل لحزمة أصلية فعلية، ولا اختبار تنزيل/تثبيت المُحدِّث، ولا قبول الجهاز الفعلي للرفيق.
بالنسبة للإصدار التشغيلي، احتفظ بالعلامة/الالتزام الدقيق، ونتيجة سير العمل، والمثبت الخاص بالهدف وأصول التحديث، وملفات المجموع الاختباري/التوقيع، والبيان المنشور. تحقق من أن التطبيق المثبت يبدأ تشغيله السايدكار وعمليات الترحيل المجمعة وأن المُحدِّث يحدد أصل النظام الأساسي المقصود.
الهدف ومرجع الأصول
| منصة | هدف Rust | مفتاح البيان | الأصول المحدثة |
|---|---|---|---|
| ماك أو إس أبل سيليكون | aarch64-apple-darwin | darwin-aarch64 | .app.tar.gz |
| ماك إنتل | x86_64-apple-darwin | darwin-x86_64 | .app.tar.gz |
| Windows ARM64 | aarch64-pc-windows-msvc | windows-aarch64, windows-aarch64-msi | .exe, .msi |
| ويندوز x64 | x86_64-pc-windows-msvc | windows-x86_64, windows-x86_64-msi | .exe, .msi |
| Linux ARM64 | aarch64-unknown-linux-gnu | linux-aarch64-deb, linux-aarch64-rpm | .deb, .rpm |
| لينكس x64 | x86_64-unknown-linux-gnu | linux-x86_64-deb, linux-x86_64-rpm | .deb, .rpm |
يتطلب المولد أصلًا واحدًا بالضبط لكل تنسيق أعلاه، وهو الأصل المجاور له .sig الملف، وملاحظات الإصدار. تستخدم أسماء الأصول أ <triple>-- بادئة؛ يتم رفض الأسماء المكررة والتوقيعات اليتيمة. يقوم محدث Tauri 2.13.1 بتحديد نوع الحزمة المثبتة تلقائيًا؛ يستخدم Linux حزم Debian/RPM الموقعة بدون AppImage.
يجب أن توافق البيانات المدمجة على الإصدار وتاريخ النشر والملاحظات. يتطلب النشر جميع المفاتيح العشرة المذكورة أعلاه. تحتفظ مفاتيح Windows الأساسية بتوافق NSIS للعملاء الأقدم؛ تحافظ مفاتيح MSI على عمليات تثبيت MSI. يجب أن تستخدم عناوين URL HTTPS بدون بيانات اعتماد أو استعلام أو جزء. يتحقق التدريج من كل بادئة مستهدفة ولاحقة الحزمة والتوقيع وعنوان URL للإصدار.
خيارات البناء المحلية ومدخلات التوقيع
bun --no-env-file scripts/build.ts --only=compile,resources --target=aarch64-apple-darwin --dry-run
bun --no-env-file scripts/build.ts --skip=install,check --target=x86_64-unknown-linux-gnu --bundles=deb,rpm --no-updater --dry-run يزيل --dry-run فقط عند تثبيت سلسلة الأدوات المستهدفة والمتطلبات الأساسية الأصلية. لا يوفر التجميع المشترك للملف القابل للتنفيذ Bun في حد ذاته رابطًا ومجمعًا عبر الأنظمة الأساسية لـ Tauri. --only و --skip متنافيان؛ --skip-install هو اسم مستعار مناسب. --no-updater يحذف إنشاء أرشيف/توقيع المُحدِّث وبوابة التوقيع الخاصة به.
| مدخل | تستخدم ل |
|---|---|
TAURI_SIGNING_PRIVATE_KEY, TAURI_SIGNING_PRIVATE_KEY_PASSWORD | توقيعات التحديث المفاتيح التي توفرها البيئة لها الأسبقية على تكوين التوقيع المحلي. |
تجاهل المحلية tauri-signing.json | مفتاح التحديث المحلي الاحتياطي عند عدم توفير مفتاح البيئة. يجب أن يساوي المفتاح العام المُعلن عنه المفتاح العام للمُحدِّث الذي تم تكوينه. |
CADCAM_RELEASE=1 | تمكين متطلبات توقيع إصدار النظام الأساسي في التحقق من صحة البناء. |
APPLE_CERTIFICATE, APPLE_CERTIFICATE_PASSWORD, APPLE_ID, APPLE_PASSWORD, APPLE_TEAM_ID | شهادة إصدار macOS وتكوين التوثيق. |
WINDOWS_CERTIFICATE, WINDOWS_CERTIFICATE_PASSWORD، بصمة الشهادة المستوردة | توقيع إصدار Windows؛ يقوم CI باستيراد الشهادة وإزالتها لاحقًا. |
يقوم الإصدار بتحميل بيانات اعتماد المحدث المحلي فقط لخطوة التجميع، ويمرر قيم التوقيع عبر البيئة إلى تلك العملية الفرعية. لا تقم بطباعة ملفات التوقيع المحلية أو وضع مواد رئيسية حقيقية في مثال التوثيق. لا يمكن للمفتاح الخاص الذي لا يتطابق مع المفتاح العام لأحد التطبيقات المثبتة أن ينتج تحديثًا مقبولاً لهذا التطبيق.
الافراج عن تشخيص الفشل
| فشل | التفسير والفحص التالي |
|---|---|
| إصدار العلامة/التطبيق غير موافق | المحدد vالعلامة -البادئة لا تتطابق مع الإصدار الموجود في تكوين Tauri. يتوقف التحقق من صحة الإصدار قبل إنشاء النظام الأساسي. |
| هدف غير مدعوم | استخدم تخطيطًا مدعومًا للبنية/النظام الأساسي وهدف Rust المثبت؛ يدعم النشر الواضح المفاتيح الستة المذكورة أعلاه. |
| مفتاح توقيع المحدث مفقود | قم بتوفير إدخال التوقيع من خلال المتجر السري/التكوين المحلي أو حدد خيارًا متعمدًا --no-updater بناء التنمية. |
| أصول التحديث صفر أو متعددة | فحص الدليل الهدف المفهرس. الأرشيفات القديمة أو غير المتطابقة تجعل الاختيار غامضًا. |
| البيانات الوصفية الواضحة لا توافق | يجب أن تستخدم جميع وظائف النظام الأساسي نفس الإصدار/التاريخ/الملاحظات والالتزام. |
| تم نشر الإصدار بالفعل | سير العمل يرفض تعديله. إعادة التشغيل ليست آلية الكتابة الفوقية. |
| فشل التحقق من التحديث على التطبيق المثبت | افحص إمكانية الوصول إلى نقطة النهاية ومفتاح الهدف الظاهر وعنوان URL للتنزيل وتوقيع الأصول والمفتاح العام المضمن. |
| تم رفض التثبيت مع العمل غير المحفوظ | احفظ العمل النشط أو تجاهله من خلال المحرر، ثم أعد محاولة التحديث المعلق. |
يسجل تقرير الإصدار المفيد المرحلة التي فشلت والهدف الذي تم بناءه. قم بتضمين أسماء المنتجات غير السرية وأخطاء التحقق من الصحة ومعرفات سير العمل. احتفظ بالإصدار المثبت السابق والنسخة الاحتياطية للبيانات التي تم التحقق منها أثناء عملية التحديث؛ يتم التحقق من توافق الترحيل بشكل منفصل عن صلاحية التوقيع.
مراسي التنفيذ: scripts/release-helpers.ts, signing-config.ts, updater-manifest.ts, stage-release.ts، و apps/desktop/src-tauri/src/updater.rs.
خطوات البناء الستة
| # | خطوة | الأسماء المستعارة | ماذا يفعل |
|---|---|---|---|
| 1 | install | إقلاع | bun install --frozen-lockfile |
| 2 | check | الشيكات، الاختبار، الاختبارات | bun run typecheck |
| 3 | compile | سايدكار | تجميع apps/sidecar/src/main.ts إلى src-tauri/binaries/sidecar-<triple> |
| 4 | resources | الموارد، الهجرات | ينسخ packages/db/drizzle/ إلى src-tauri/resources/migrations/ |
| 5 | bundle | تجميع | تطبيق سطح المكتب vite build، ثم bunx tauri build |
| 6 | artifacts | المصنوعات اليدوية، والملاحظات، والمجاميع الاختبارية، والإفراج | SHA256SUMS و RELEASE_NOTES.md من الالتزامات منذ العلامة الأخيرة |
يتم تشغيل الخطوات دائمًا بهذا الترتيب، وتؤدي الخطوة الفاشلة إلى إيقاف التشغيل. النص لا يقرأ أبدا .env الملفات ولا يطبع القيم السرية أبدًا.
| خيار | Effect |
|---|---|
--only=a,b / --skip=a,b | تشغيل الخطوات أو تخطيها (الأسماء أو الأسماء المستعارة) |
--skip-install | نفس --skip=install |
--target=<triple> | هدف Rust الافتراضي هو المضيف الثلاثي من rustc -vV |
--bundles=<list> | إحالتها إلى tauri build --bundles |
--no-updater | المثبتات بدون أرشيفات وتوقيعات التحديث |
--out-dir=<path> | حيث تكتب الخطوة 6؛ تقصير apps/desktop/src-tauri/target/release-artifacts |
--dry-run | طباعة الخطة اكتب ولا تغير شيئا |
bun scripts/build.ts --dry-run # whole plan, no side effects
bun scripts/build.ts --only=resources # restage migrations (idempotent)
bun scripts/build.ts --only=compile,resources # rebuild the sidecar and migrations
bun scripts/build.ts --only=notes --dry-run # preview release notes
bun scripts/build.ts --target=aarch64-apple-darwin يستخدم توقيع المحدث المحلي ملف تم تجاهله tauri-signing.json عندما لا يتم تعيين مفتاح التوقيع في البيئة. لا تزال شهادات النظام الأساسي مطلوبة عندما CADCAM_RELEASE=1.
الافراج عن المصفوفة
| هدف | عداء | حزم | الافراج عن سبيكة |
|---|---|---|---|
aarch64-apple-darwin | ماكوس-14 | التطبيق، دي إم جي | ذراع-ماكوس64 |
x86_64-apple-darwin | ماكوس-14 | التطبيق، دي إم جي | ماكوس-x64 |
x86_64-pc-windows-msvc | أحدث النوافذ | مسي، نسي | ويندوز-x64 |
aarch64-pc-windows-msvc | نوافذ-11-ذراع | مسي، نسي | ذراع النوافذ64 |
x86_64-unknown-linux-gnu | أوبونتو-22.04 | ديب، دورة في الدقيقة | لينكس-x64 |
aarch64-unknown-linux-gnu | أوبونتو-22.04-arm | ديب، دورة في الدقيقة | ذراع لينكس64 |
- تقوم المهمة الموثوقة بالتحقق من صحة علامة الإصدار مقابل إصدار التطبيق.
- يتم تشغيل كل وظيفة مصفوفة
bun --no-env-file scripts/build.ts --target=… --bundles=… --out-dir=release، يوقع ويبني بيانًا لتنسيقات الحزم الخاصة به. يقوم Windows باستيراد شهادة التوقيع الاختيارية ثم يقوم بإزالتها بعد ذلك. - تقوم مهمة الدمج بالتحقق من صحة جميع بيانات البنية الستة وإدخالات الحزمة العشرة الخاصة بها في واحد
latest.json. - تتحقق مهمة إكمال واحدة من جميع عناصر التثبيت والتوقيعات والمجاميع الاختبارية والملاحظات قبل إنشاء أو استئناف إصدار الإصدار الفردي ونشره.
يقوم CI في كل دفعة بتشغيل وظيفتين: التثبيت والتحقق من الكتابة والاختبار (والمراحل ثنائيات السايدكار وعمليات الترحيل)، ومهمة Rust مع clippy و src-tauri الاختبارات.