كيف تحمي GitHub Actions تبعك إذا حدا غيّر tag لـ action بتستعملها؟

أمر gh actions-lock بيكتب ملف actions.lock يلي بيثبّت كل action وتبعياتها على commit محدد، فبتشغّل GitHub Actions الـ commit المقفول حتى لو تحرّك الـ tag.

نُشر في 12 دقيقة قراءة#GitHub Actions#أمن سلسلة التوريد#CI/CD

إذا عندك مشروع مفتوح أو فريق صغير على <span dir="ltr">GitHub</span>، غالباً كل <span dir="ltr">workflow</span> عندك فيها سطور متل uses: actions/checkout@v7.0.1، وكل سطر منها معتمد على إنو الـ <span dir="ltr">tag</span> لسا بيأشّر على نفس الكود يلي شفته. يوم 14 تشرين الأول 2026 فتحت <span dir="ltr">GitHub</span> معاينة عامة لملف قفل بيثبّت هالكود، وهو متاح عالخطة المجانية كمان. هون بتقفل الـ <span dir="ltr">workflows</span> عندك، وبتضيف فحص بيفشل على الـ <span dir="ltr">pull request</span> إذا لمس الـ <span dir="ltr">workflows</span> وملف القفل صار قديم.

ليش الـ <span dir="ltr">tag</span> ممكن يشغّل كود ما راجعته؟

الـ <span dir="ltr">tag</span> اسم بيأشّر على <span dir="ltr">commit</span>، وأي حدا عنده صلاحية على ريبو الـ <span dir="ltr">action</span> بيقدر يحرّكه لـ <span dir="ltr">commit</span> تاني. <span dir="ltr">GitHub Actions</span> بتحوّل الاسم لـ <span dir="ltr">commit</span> وقت التشغيل، فالتشغيلة الجاية بتنفّذ الكود الجديد بلا أي تغيير بريبوك.

الاستثناء هو الـ <span dir="ltr">tag</span> التابع لـ <span dir="ltr">release</span> مفعّل عليه <span dir="ltr">immutable releases</span>: حسب التوثيق، هالـ <span dir="ltr">tag</span> بيضل على نفس الـ <span dir="ltr">commit</span>، وما بيتغيّر ولا بينحذف طول ما الـ <span dir="ltr">release</span> موجود. بس هالإعداد بينفعّل على ريبو الـ <span dir="ltr">action</span> أو منظمته، فالقرار عند صاحبها مش عندك.

حسب تنبيه <span dir="ltr">Aqua Security</span> الأمني <span dir="ltr">GHSA-69fq-xp46-6x23</span> (<span dir="ltr">CVE-2026-33634</span>) بقاعدة <span dir="ltr">GitHub Advisory Database</span>، يوم 19 آذار 2026 مهاجم استعمل بيانات دخول مسروقة وحرّك 76 من أصل 77 <span dir="ltr">tag</span> بريبو <span dir="ltr">aquasecurity/trivy-action</span> لـ <span dir="ltr">commits</span> فيها برنامج بيسرق الأسرار، وبدّل الـ 7 <span dir="ltr">tags</span> كلهن بريبو <span dir="ltr">aquasecurity/setup-trivy</span>. الكود الخبيث كان بيقرا ذاكرة الـ <span dir="ltr">runner</span> لحتى يطلّع الأسرار منها، وبيدوّر بالملفات على مفاتيح <span dir="ltr">SSH</span> وبيانات دخول السحابة. والتنبيه بيقول إنو الـ <span dir="ltr">tag</span> 0.35.0 تبع <span dir="ltr">trivy-action</span> ما تأثر بالهجوم، لأنو كان محمي بـ <span dir="ltr">immutable releases</span>.

حتى يلي كان مثبّت <span dir="ltr">trivy-action</span> على <span dir="ltr">SHA</span> قديم ما سلم دايماً. الـ <span dir="ltr">SHA</span> هو المعرّف الكامل للـ <span dir="ltr">commit</span>، والتثبيت عليه أعطى هالناس نسخة سليمة من <span dir="ltr">trivy-action</span>. بس إذا كان الـ <span dir="ltr">commit</span> أقدم من 9 نيسان 2025، <span dir="ltr">trivy-action</span> نفسها كانت بتنادي <span dir="ltr">setup-trivy</span> بلا تثبيت، فوصلهم الكود الخبيث من هالتبعية إذا اشتغلت الـ <span dir="ltr">workflow</span> بساعات الهجوم. يعني الـ <span dir="ltr">SHA</span> بملف الـ <span dir="ltr">workflow</span> بيحمي السطر يلي كتبته إنت، وما بيوصل للتبعيات غير المباشرة: الـ <span dir="ltr">actions</span> يلي بتناديها الـ <span dir="ltr">action</span> من جوّا.

شو هو ملف <span dir="ltr">actions.lock</span> وشو بيسجّل؟

ملف القفل actions.lock هو ملف بـ .github/workflows/ بيسجّل لكل <span dir="ltr">action</span> بتستعملها، ولكل تبعية إلها، الـ <span dir="ltr">commit</span> يلي كان الـ <span dir="ltr">tag</span> بيأشّر عليه وقت القفل. لما تكون الـ <span dir="ltr">workflow</span> مقفولة، <span dir="ltr">GitHub Actions</span> بتشغّل هالـ <span dir="ltr">commit</span> حتى لو الـ <span dir="ltr">tag</span> تحرّك.

بتضل كاتب الـ <span dir="ltr">tag</span> بالـ <span dir="ltr">workflow</span> متل العادة، والقفل بيحدد شو بيشتغل فعلاً. هاد مقطع من ملف القفل تبع ريبو <span dir="ltr">gh-actions-lock</span> نفسه، متل ما كان يوم 21 تشرين الأول 2026:

workflows:
    '.github/workflows/release.yml':
        - 'actions/checkout@v7.0.1'
        - 'cli/gh-extension-precompile@v2.2.0'
dependencies:
    'cli/gh-extension-precompile@v2.2.0':
        ref: 'v2.2.0'
        commit: 'sha1-76961aa3bd1123d0a6fd42d0a41aca0696937c39'
        owner_id: 59704711
        repo_id: 421583656
        uses:
            - 'actions/attest-build-provenance@a2bbfa25375fe432b6a289bc6b6cd05ecd0c4c32'
            - 'actions/setup-go@4a3601121dd01d1626a1e23e37211e3254c1c06c'

الـ <span dir="ltr">workflow</span> بتنادي cli/gh-extension-precompile بس، والقفل سجّل كمان الـ <span dir="ltr">actions</span> يلي هي بتناديها من جوّا، كل وحدة على <span dir="ltr">commit</span> كامل. وهاد نفس الطريق يلي وصل منه الكود الخبيث بحادثة <span dir="ltr">trivy</span>. كل تبعية بالملف فيها:

  • ref: الـ <span dir="ltr">tag</span> أو الفرع يلي كاتبه بالـ <span dir="ltr">workflow</span>.

  • commit: الكود يلي رح يشتغل.

  • owner_id وrepo_id: رقمين لهوية الريبو، و<span dir="ltr">GitHub Actions</span> بتتأكد فيهن وقت التشغيل إنو الريبو ورا الاسم لسا نفسه يلي قفلته.

وحسب صفحة الإضافة، الـ <span dir="ltr">runner</span> بيفحص كمان أول ما يبلّش الـ <span dir="ltr">job</span> إنو الـ <span dir="ltr">commit</span> المقفول لسا موجود، ولسا بتاريخ الـ <span dir="ltr">tag</span> أو الفرع يلي انسجّل بالقفل. إذا فشل واحد من هالفحوص، الـ <span dir="ltr">runner</span> بيرفض الـ <span dir="ltr">commit</span> والتشغيل بيوقف.

القفل بيوصل للتبعيات غير المباشرة، إلا تبعيات الـ <span dir="ltr">reusable workflows</span>: هدول بيغطيهن ملف القفل بالريبو يلي فيه الـ <span dir="ltr">reusable workflow</span> نفسها. وما بيثبّت صور الـ <span dir="ltr">Docker</span> يلي بتسحبها الـ <span dir="ltr">workflow</span>، فأي صورة مش مثبّتة بـ @sha256: بتطلع تنبيه container-image بلا ما يوقّف التشغيل.

توثيق <span dir="ltr">GitHub</span> عن ملفات القفل بيقول إنو الريبو يلي عنده ملف قفل ما عاد بيحتاج تثبيت الـ <span dir="ltr">SHA</span> جوّا ملفات الـ <span dir="ltr">workflow</span>، لأن القفل بيغطي التبعيات غير المباشرة وبيسجّل هوية الريبو، والملفات بتضل أسهل للقراية.

الميزة معاينة عامة لخطط <span dir="ltr">Free</span> و<span dir="ltr">Team</span> و<span dir="ltr">Enterprise Cloud</span> حسب الإعلان، و<span dir="ltr">GitHub</span> عدّلت قائمة الخطط فيه بنفس يوم النشر. بس صفحتي التوثيق عن قفل التبعيات وفرض القفل لسا كاتبين <span dir="ltr">GitHub Enterprise Cloud</span> لحاله بخانة «<span dir="ltr">Who can use this feature?</span>» يوم 21 تشرين الأول 2026، والإعلان هو الأحدث. والإضافة لسا قبل الإصدار 1.0، وصفحتها بتنبّه إنو شكل الملف والخيارات وطريقة الشغل ممكن يتغيروا بلا إنذار.

كيف تعمل أول ملف قفل لمشروعك؟

بتثبّت إضافة <span dir="ltr">gh actions-lock</span> لـ <span dir="ltr">GitHub CLI</span>، وبتشغّلها من جذر الريبو على <span dir="ltr">workflow</span> وحدة أو على الكل، وبتراجع الـ <span dir="ltr">diff</span> كله قبل الـ <span dir="ltr">commit</span>.

الخطوات بالترتيب، من صفحة قفل التبعيات بتوثيق <span dir="ltr">GitHub</span>:

  1. راجع كل سطر uses: وتأكد إنو بيأشّر على نسخة مدعومة وحديثة من الـ <span dir="ltr">action</span>، لأن القفل رح يثبّت يلي موجود هلق. إذا ما عندك <span dir="ltr">Dependabot</span> للـ <span dir="ltr">actions</span>، فعّله قبل (تحت بقسم <span dir="ltr">Dependabot</span>).

  2. ثبّت الإضافة، وبتصير عندك gh actions-lock:

     gh extension install github/gh-actions-lock
  3. جرّب الأمر على <span dir="ltr">workflow</span> وحدة بالأول، الأحسن يلي بتعمل <span dir="ltr">deploy</span> أو بتوصل لأسرار. بيطلع معك ملف actions.lock فيه هالـ <span dir="ltr">workflow</span> بس:

     gh actions-lock .github/workflows/ci.yml
  4. بعدها شغّل الأمر بلا مسار، فبيقفل كل الـ <span dir="ltr">workflows</span> بـ .github/workflows/. خلّص هالخطوة قبل ما تضيف فحص --verify (القسم الجاي)، لأنه بيفشل على أي <span dir="ltr">workflow</span> مش مقفولة:

     gh actions-lock
  5. افتح الـ <span dir="ltr">diff</span> وراجعه كله. الإضافة بتعدّل ملفات الـ <span dir="ltr">workflow</span> كمان: بتحوّل octo-org/deploy-action@v3 لنسخة محددة متل @v3.1.0 بلا ما يتغيّر الـ <span dir="ltr">commit</span>، وبتحوّل uses: ./… لـ uses: $/…، وهالمرجع دايماً بينحل للـ <span dir="ltr">commit</span> يلي عم يشتغل هلق.

  6. شوف قائمة الـ <span dir="ltr">actions</span> المسموحة إذا ريبوك أو منظمتك عندها وحدة. بعد القفل، القائمة بتنفحص على الـ <span dir="ltr">SHA</span> المقفول، فسطر متل actions/checkout@v6 ما عاد بيطابق، وبدّك <span dir="ltr">wildcard</span> أو الـ <span dir="ltr">SHA</span> الكامل.

  7. اعمل <span dir="ltr">commit</span> لملف القفل ولتعديلات الـ <span dir="ltr">workflow</span> سوا.

وقبل ما تقفل، هاد تحذير <span dir="ltr">GitHub</span> بالإعلان حرفياً:

«<span dir="ltr">Locking does not determine whether the dependency itself is safe, so review dependencies before locking them.</span>»

يعني القفل بيثبّت يلي موجود وقت ما تشغّل الأمر، سليم أو لأ.

كيف تتأكد إنو ملف القفل مش قديم قبل الدمج؟

أمر gh actions-lock --verify بيفحص ملف القفل بلا ما يعدّل ولا ملف، وبيطلع بخطأ إذا كان قديم. لهيك بينحط بـ <span dir="ltr">job</span> بيشتغل على الـ <span dir="ltr">pull requests</span>.

من الإصدار <span dir="ltr">v0.2.0</span> الفحص صار أشد. ملاحظات الإصدار بتقول إنو --verify بيفشل على أي <span dir="ltr">workflow</span> ما إلها سطر بالقفل، وعلى أي سطر بالقفل ما في <span dir="ltr">workflow</span> عم تستعمله، والحل إنك تشغّل gh actions-lock مرة وتعمل <span dir="ltr">commit</span> للنتيجة. فمكان هالـ <span dir="ltr">job</span> بعد ما تقفل كل الـ <span dir="ltr">workflows</span>، وإلا رح يفشل من أول <span dir="ltr">pull request</span>.

صفحة فرض القفل بالتوثيق بتوصف <span dir="ltr">job</span> اسمه <span dir="ltr">verify</span> بيشغّل هالأمر على الـ <span dir="ltr">pull requests</span>، وبيشتغل كل ما تغيّر شي بـ .github/workflows/** أو بأي action.yml. هيك ممكن يطلع ملفه:

name: actions-lock-verify

on:
  pull_request:
    paths:
      - ".github/workflows/**"
      - "**/action.yml"
      - "**/action.yaml"

permissions:
  contents: read

jobs:
  verify:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v7.0.1
      - run: |
          gh extension install github/gh-actions-lock --pin v0.2.0
          gh actions-lock --verify
        env:
          GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}

الـ <span dir="ltr">GitHub CLI</span> موجود أصلاً على الـ <span dir="ltr">runners</span> تبع <span dir="ltr">GitHub</span>، بس كل خطوة بتستعمله بدها GH_TOKEN. و--pin v0.2.0 بيثبّت الإضافة نفسها على آخر إصدار إلها لحد 21 تشرين الأول 2026، لحتى ما يتغيّر الفحص تحتك. هالـ <span dir="ltr">workflow</span> نفسها فيها uses:، فشغّل gh actions-lock مرة تانية بعد ما تضيفها، وحط ملفها مع القفل بنفس الـ <span dir="ltr">commit</span>، وإلا الفحص رح يفشل عليها هي.

بهالشكل الـ <span dir="ltr">job</span> بيشتغل بس على الـ <span dir="ltr">pull requests</span> يلي بتلمس الـ <span dir="ltr">workflows</span> أو ملفات الـ <span dir="ltr">action</span>، وما بيمنع الدمج إلا إذا خليته فحص إجباري (<span dir="ltr">required status check</span>) بقواعد حماية الفرع. إذا بدك تخليه إجباري، شيل paths: لحتى يشتغل على كل <span dir="ltr">pull request</span>: حسب توثيق <span dir="ltr">GitHub</span> عن الفحوص الإجبارية، الفحص الإجباري يلي انتخطى بفلتر المسارات بيضل بحالة <span dir="ltr">Pending</span> وبيوقّف الدمج. وبالحالتين جرّبه على <span dir="ltr">pull request</span> تجريبي قبل.

إذا بدك تلقط المشكلة قبل ما يصير في <span dir="ltr">commit</span>، حط gh actions-lock --verify-local --no-fix بـ <span dir="ltr">pre-commit hook</span>. هالأمر بيشتغل بلا إنترنت وبلا تسجيل دخول، وبيتأكد إنو كل تبعية إلها سطر بالقفل، فهو كمان بيفشل على أي <span dir="ltr">workflow</span> مش مقفولة. بس ما بيعيد فحص الـ <span dir="ltr">commits</span> مع <span dir="ltr">GitHub</span>، فالفحص الكامل بيضل --verify بالـ <span dir="ltr">CI</span>.

شو بتعمل إذا الفحص قال إنو <span dir="ltr">tag</span> تحرّك؟

افتح تاريخ ريبو الـ <span dir="ltr">action</span> أول شي، وشوف مين حرّك الـ <span dir="ltr">tag</span> وليش. إذا التحريك طبيعي، gh actions-lock --relock بيرجع يحل كل المراجع ويكتب الـ <span dir="ltr">commits</span> الجديدة. وإذا الـ <span dir="ltr">commit</span> القديم ما عاد موجود بالريبو أبداً، --relock لحاله بيضل يعطي خطأ، وبتقبل الجديد بـ gh actions-lock --relock --accept-moved.

وأي <span dir="ltr">pull request</span> بيغيّر ملف القفل بتراجعه متل أي تحديث تبعية. commit تغيّر يعني الكود يلي رح يشتغل تغيّر. أما owner_id أو repo_id تغيّر فنادر، ومعناه إنو الريبو ورا الاسم مش هو يلي قفلته، فوقّف وافحص قبل الدمج. التوثيق بيقترح كمان تحط .github/workflows/actions.lock بملف CODEOWNERS، لحتى يوصل كل تغيير فيه لمين مسؤول عن أمان البناء.

إمتى تفرض القفل على كل الـ <span dir="ltr">workflows</span>؟

بعد ما يصير فحص --verify شغّال وما عم يوقّف شغل حدا بلا سبب. سياسة <span dir="ltr">Require lockfile</span> بتمنع أي <span dir="ltr">workflow</span> فيها uses: من إنها تشتغل إذا مش مقفولة. بتلاقيها من <span dir="ltr">Settings</span>، تحت <span dir="ltr">Actions</span>، بصفحة <span dir="ltr">Policies</span>، وأدمن الريبو بيقدر يفعّلها.

حسب صفحة سياسات التشغيل، هالسياسات متاحة لكل الريبوهات العامة، وللريبوهات الخاصة على <span dir="ltr">Team</span> أو <span dir="ltr">Enterprise</span> بس. ووضع <span dir="ltr">Evaluate</span>، يلي بيورجيك شو كان رح ينحجب بلا ما يحجبه، لـ <span dir="ltr">Enterprise Cloud</span> بس. يعني إذا ما عندك <span dir="ltr">Enterprise Cloud</span>، السياسة بتشتغل على <span dir="ltr">Active</span> من أول يوم، فخلي القفل محدّث قبلها، وإلا بتوقف كل <span dir="ltr">workflow</span> استهدفتها السياسة وهي مش مقفولة.

شو بيعمل <span dir="ltr">Dependabot</span> مع ملف القفل؟

لما <span dir="ltr">Dependabot</span> بيفتح تحديث لـ <span dir="ltr">action</span> بـ <span dir="ltr">workflow</span> مقفولة، بيولّد سطرها بملف القفل بنفس الـ <span dir="ltr">pull request</span>، فالـ <span dir="ltr">workflow</span> والقفل بيضلوا متطابقين. بس <span dir="ltr">Dependabot</span> ما بيقفل <span dir="ltr">workflow</span> جديدة عنك.

إذا حدّث تبعية بـ <span dir="ltr">workflow</span> ما إلها سطر بالقفل، بيكتفي بإنو يقلّك إنها بدها <span dir="ltr">onboarding</span>، فالـ <span dir="ltr">workflow</span> الجديدة بتقفلها إنت بـ gh actions-lock. هاد ملف .github/dependabot.yml فيه مثال توثيق <span dir="ltr">Dependabot</span> للـ <span dir="ltr">actions</span>: تحديثات أسبوعية للـ <span dir="ltr">actions</span>، ومعها حزم <span dir="ltr">npm</span> مع انتظار 7 أيام قبل أي نسخة جديدة:

version: 2
updates:
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "weekly"
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    cooldown:
      default-days: 7

الـ cooldown هو عدد أيام بيستناهن <span dir="ltr">Dependabot</span> بعد نزول نسخة قبل ما يقترحها. حسب صفحة ضبط طلبات <span dir="ltr">Dependabot</span>، الرقم لازم يكون بين 1 و90، و<span dir="ltr">Dependabot</span> بيستنى 3 أيام بالأساس حتى بلا cooldown. الانتظار بيشمل تحديثات النسخ بس، وتحديثات الأمان ما بتستنى هالأيام.

<span dir="ltr">GitHub</span> بتقترح كمان مهارة لـ <span dir="ltr">Copilot</span> بتقلّه يولّد ملف القفل من جديد كل ما عدّل <span dir="ltr">workflow</span> أو <span dir="ltr">action</span> محلية، وما يلمس الملف بإيده. وبتقول عنها إنها بتسهّل الشغل وما بتنحسب حماية، لأنها بتغطي بس التعديلات يلي بيعملها <span dir="ltr">Copilot</span>. نفس السطر بينحط بأي مهارة لوكيل برمجة متل <span dir="ltr">Claude Code</span>، والمهارات يلي عم حضّرها لهالوكلاء بقسم مهارات <span dir="ltr">AI</span>.

شو هو <span dir="ltr">package firewall</span> وهل بيلزم فريقك؟

الـ <span dir="ltr">package firewall</span> خدمة جديدة من <span dir="ltr">GitHub</span> بتقعد بين الـ <span dir="ltr">runners</span> ووكلاء البرمجة وبين سجل الحزم، وبتفحص كل طلب وكل تنزيل حسب سياسة بيحطها الأدمن. هي معاينة عامة من 20 تشرين الأول 2026 لعملاء <span dir="ltr">Enterprise Cloud</span> وحدهم، وبتدعم حزم <span dir="ltr">npm</span> بس.

سبب الخدمة حسب إعلانها: هجمات كتير صارت تسرق الأسرار من أجهزة الـ <span dir="ltr">CI/CD</span> أو أجهزة المطوّرين وقت تثبيت الحزمة، حتى بلا ما ينشغّل كود الحزمة نفسه. والفحوص يلي بيقدر الأدمن يشغّلها، حسب صفحة الإعداد:

الفحص

شو بيعمل

الافتراضي

البرمجيات الخبيثة المعروفة

بيحجب أي حزمة إلها تنبيه <span dir="ltr">malware</span> بـ <span dir="ltr">GitHub Advisory Database</span>

شغّال

تنبيهات الثغرات

بيحجب النسخة إذا إلها تنبيه ثغرة من الخطورة يلي بتختارها أو أعلى

<span dir="ltr">Critical</span> بس

تراجع الـ <span dir="ltr">attestation</span>

إذا النسخ القديمة كان إلها <span dir="ltr">SLSA attestations</span> والنسخة المطلوبة لأ، بيحجبها، لأن غيابها ممكن يعني إنو النشر نفسه انخرق

شغّال

سكربتات تثبيت جديدة

بيحجب الحزمة إذا ضافت من وقت قريب سكربت preinstall أو postinstall

شغّال

أقل عمر للنسخة

فترة <span dir="ltr">cooldown</span>: بيحجب أي نسخة عمرها أقل من عدد أيام بين 1 و365

يوم واحد

إذا انحجبت حزمة بالغلط، رسالة <span dir="ltr">npm</span> أو سجل الـ <span dir="ltr">CI</span> بيعطيك رابط لطلب استثناء، وأدمن المؤسسة بيراجع الطلب. الخدمة مجانية بفترة المعاينة، ولما توصل للإصدار العام رح تنحسب حسب الاستهلاك، متل فاتورة <span dir="ltr">Actions</span>.

على <span dir="ltr">Free</span> أو <span dir="ltr">Team</span> ما عندك هالطبقة. الـ <span dir="ltr">cooldown</span> بـ <span dir="ltr">Dependabot</span> بيقرّبك من فحص العمر، بس هو بيأخّر اقتراحات <span dir="ltr">Dependabot</span> وحدها، وما بيوقّف npm install يلي بتكتبه إنت. الباقي عندك هو ملف القفل للـ <span dir="ltr">actions</span>، ومراجعة أي <span dir="ltr">pull request</span> بيغيّر package-lock.json أو actions.lock متل ما بتراجع الكود.

من وين تبلّش هلق؟

جرّب gh actions-lock اليوم على الـ <span dir="ltr">workflow</span> يلي بتعمل <span dir="ltr">deploy</span> أو بتوصل لأسرار، وراجع الـ <span dir="ltr">diff</span>. بعدها اقفل الكل بنفس الأمر بلا مسار، وضيف <span dir="ltr">job</span> الـ --verify بنفس الـ <span dir="ltr">pull request</span>.

ملف القفل بيحمي خط البناء، بس ما بيفحص تطبيقك نفسه: مين بيوصل لبيانات مين، وتسجيل الدخول، والملفات المخزّنة. إذا بدك حدا يجرّب منصتك متل ما بيجرّبها مهاجم، هاد شغل مُحَصَّن.

وللكود نفسه قبل ما يوصل للـ <span dir="ltr">CI</span>، حزمة المهارات الأمنية (لسا قيد التحضير) بتراجع كود مشروعك وبتنبّهك لثغرات <span dir="ltr">IDOR</span> والصلاحيات قبل النشر.

شو أول <span dir="ltr">workflow</span> رح تقفلها بمشروعك؟

أسئلة شائعة

هل ملف actions.lock متاح على خطة GitHub المجانية؟

إي. حسب إعلان GitHub يوم 14 تشرين الأول 2026، المعاينة العامة متاحة لخطط Free وTeam وEnterprise Cloud، مع إنو صفحات التوثيق لسا كاتبة Enterprise Cloud بس. وسياسة Require lockfile بتشتغل على كل الريبوهات العامة، أما الخاصة فبدها Team أو Enterprise.

إذا كنت مثبّت كل action على SHA كامل، لسا بحتاج ملف قفل؟

إي، إذا بدك تغطي التبعيات غير المباشرة. SHA بملف workflow بيثبّت السطر يلي كتبته إنت، وملف القفل بيثبّت كمان يلي بتناديه الـ action من جوّا وبيسجّل هوية الريبو. وتوثيق GitHub بيقول إنو الريبو يلي عنده ملف قفل ما عاد بيحتاج SHA pinning.

ليش فحص gh actions-lock --verify عم يفشل على workflows ما لمستها؟

لأن من الإصدار v0.2.0 الفحص بيفشل على أي workflow ما إلها سطر بالقفل، وعلى أي سطر بالقفل ما في workflow عم تستعمله. شغّل gh actions-lock مرة بلا مسار، واعمل commit للنتيجة.

بقدر عدّل ملف actions.lock بإيدي؟

لأ. GitHub بتقول إنو الملف بيتولّد بأمر gh actions-lock وما بيتعدّل يدوياً. إذا شكله غلط، صلّح ملفات workflow وولّده من جديد.

هل ملف القفل بيثبّت صور Docker يلي بتسحبها workflow؟

لأ. القفل بيثبّت commits تبع actions بس. أي صورة مش مثبّتة على sha256 digest بتطلع تنبيه container-image ما بيوقّف التشغيل، فثبّت الصور على digest بنفسك.

هل package firewall بيدعم pip أو Maven؟

لأ. لحد 20 تشرين الأول 2026 بيدعم حزم npm بس، وهو معاينة عامة لعملاء GitHub Enterprise Cloud، ومجاني لحد ما يوصل للإصدار العام.

مقالات أخرى