
وحدة تحكم في قبول التبعيات أصلية في Git. تقيّم إشارات الثقة عند كل تغيير في التبعية وتمنع الالتزامات أو البناءات عندما تفشل الحزم في سياسة فريقك. خطاف ما قبل الالتزام + بوابة CI مع سير عمل موافقة مدمج.
وحدة تحكم لقبول التبعيات أصيلة مع Git. تقوم بتقييم إشارات الثقة عند كل تغيير تابع.

يعمل trustlock كـ خطاف ما قبل الالتزام في Git (وضع استشاري) وفحص CI (وضع إجباري):
--enforce): يمنع المخالفات، يخرج برمز 1، ولا يحدث خط الأساس أبدًا.إشارات الثقة التي يتم تقييمها لكل حزمة:
npm install -g trustlock
يتطلب Node.js >= 18.3.
# 1. تهيئة trustlock في مشروعك
trustlock init
# 2. تثبيت خطاف ما قبل الالتزام في Git
trustlock install-hook
# 3. اختياري: مراجعة وضع التبعيات الحالي
trustlock audit
بعد init، يقوم trustlock بإنشاء:
.trustlockrc.json — إعدادات السياسة.trustlock/baseline.json — لقطة للتبعيات الموثوقة.trustlock/approvals.json — سجلات الموافقات.trustlock/.cache/ — ذاكرة تخزين مؤقت للسجل (مهملة في gitignore)قم بتضمين .trustlockrc.json و .trustlock/baseline.json إلى المستودع الخاص بك.
# تشغيل تثبيت التبعيات كالمعتاد
npm install [email protected]
# يقوم trustlock check بالتشغيل تلقائيًا عبر خطاف ما قبل الالتزام.
# للتشغيل يدويًا:
trustlock check
# الإخراج عند قبول جميع الحزم:
# ✔ [email protected] — مقبولة
عندما تنجح جميع الحزم، يقوم trustlock check بتحديث خط الأساس تلقائيًا (وضع استشاري فقط) ويخرج برمز 0.
# حزمة جديدة تفشل في قاعدة فترة التهدئة:
trustlock check
# ✖ [email protected] — محظورة
# exposure:cooldown نُشرت منذ ساعتين (السياسة تتطلب 72 ساعة)
# قم بالتشغيل للموافقة: trustlock approve [email protected] --override cooldown --reason "..." --expires 7d
# الموافقة على التجاوز، ثم إعادة الفحص:
trustlock approve [email protected] \
--override cooldown \
--reason "مطلوب للميزة X؛ تم التحقق من الأمان بواسطة مراجعة الفريق" \
--expires 7d
trustlock check
# ✔ [email protected] — مقبولة مع موافقة
# كشف انحراف الإصدارات وتناقضات الأصل عبر حزم المستودع الأحادي
trustlock audit --compare packages/frontend packages/backend packages/shared
يحتوي trustlock على ملفين تعريفيين مدمجين يمكن اختيارهما باستخدام --profile:
| الملف التعريفي | التأثير |
|---|---|
strict | فترة تهدئة 168 ساعة، أصل إلزامي لجميع الحزم |
relaxed | فترة تهدئة 24 ساعة، لا حظر على تراجع الأصل أو تغير الناشر |
# استخدام الملف التعريفي الصارم في CI
trustlock check --enforce --profile strict
يمكن للفرق مركزية السياسة في رابط URL مشترك وتوسيعها لكل مستودع:
{
"extends": "https://policy.example.com/trustlockrc.json",
"cooldown_hours": 96
}
يمكن لتكوينات المستودع فقط تشديد سياسة المنظمة — حيث يمنع الحد الأدنى التنفيذي المستودعات من تقليل العتبات التي تفرضها المنظمة.
.trustlockrc.jsonأضف trustlock إلى خط أنابيب CI الخاص بك:
# GitHub Actions — انظر examples/ci/github-actions.yml
- run: npx trustlock check --enforce
انظر examples/ لتكوينات GitHub Actions وLefthook وHusky.
يقوم trustlock بتقييم تغييرات ملف القفل في وقت الالتزام. لا يعترض أو يعزل تثبيت npm. إذا قامت حزمة ضارة بتشغيل نص ما بعد التثبيت، فإن ذلك يتم قبل أن يراه trustlock. يمنع trustlock إلتزام ملف القفل المخترق ودمجه، مما يحصر نصف قطر الانفجار على جهاز مطور واحد بدلاً من الفريق بأكمله والإنتاج. لحظر النصوص أثناء التثبيت، استخدم --ignore-scripts أو عناصر التحكم الافتراضية في دورة حياة pnpm.
--ignore-scripts لذلك.npm audit أو Snyk لقواعد بيانات الثغرات.license-checker أو ما شابه.تم بناء trustlock من الإحباط من سلبية سلسلة أدوات Node.js القياسية تجاه ما يتم سحبه فعليًا إلى مشروع. يقوم npm install بجلب أي شيء — حزمة نُشرت قبل دقيقتين، واحدة تشغل نصوصًا عشوائية أثناء التثبيت، واحدة تحولت من كرة مضغوطة في السجل إلى رابط Git بين ليلة وضحاها — والتغذية الراجعة الوحيدة التي تحصل عليها هي فرق ملف القفل.
نموذج التهديد الذي يعالجه trustlock ضيق لكنه حقيقي: الفترة الزمنية بين نشر إصدار ضار وسحبه أو وضع علامة عليه. تعمل ماسحات الثغرات بعد وقوع الحدث. يعمل trustlock عند نقطة القبول، قبل أن يصل أي شيء إلى مستودعك أو CI الخاص بك.
التصميم بسيط عمدًا. لا يحتوي trustlock على أي تبعيات وقت تشغيل — هو بحد ذاته أداة خالية من مخاطر سلسلة التوريد. لا يحل محل ماسح الثغرات أو تدقيق التبعيات؛ إنه يفرض استمرارية الثقة. بمجرد أن يكون الإصدار في خط الأساس الخاص بك، يتم الوثوق به. أي شيء جديد يجب أن يكسب القبول وفقًا للسياسة التي تعلنها.
سير عمل الموافقة موجود للفرق التي تحتاج إلى مخرج طوارئ دون فقدان قابلية التدقيق. كل تجاوز موقّع زمنيًا، ومقيّد بقواعد محددة، وينتهي. clean-approvals هو أمر من الدرجة الأولى، وليس فكرة لاحقة.
| ملف القفل | النظام البيئي | الإصدارات |
|---|
package-lock.json | npm | v1, v2, v3 |
pnpm-lock.yaml | pnpm | v5, v6, v9 |
yarn.lock | yarn | classic (v1), berry (v2/v3) |
requirements.txt | Python (pip) | — |
uv.lock | Python (uv) | — |
| الأمر | الوصف |
|---|
trustlock init | تهيئة trustlock في المشروع الحالي |
trustlock check | تقييم تغييرات التبعيات مقابل السياسة |
trustlock approve <pkg>@<ver> | الموافقة على حزمة محظورة |
trustlock audit | فحص شجرة التبعيات الكاملة لوضع الثقة |
trustlock audit --compare <dir...> | مقارنة وضع التبعيات عبر مشاريع متعددة |
trustlock clean-approvals | إزالة إدخالات الموافقة المنتهية |
trustlock install-hook | تثبيت خطاف ما قبل الالتزام في Git |