العودة إلى التحديثات
New releaseJul 21, 2026

secretlint v13.0.3

أداة فحص قابلة للتوصيل لمنع ارتكاب بيانات الاعتماد.

مشاركة

Secretlint Actions Status

Secretlint هي أداة فحص قابلة للتوصيل لمنع ارتكاب بيانات الاعتماد.

Secretlint هي أداة فحص قابلة للتوصيل لمنع ارتكاب بيانات الاعتماد.

الميزات

  • ماسح ضوئي: العثور على بيانات الاعتماد في المشروع والإبلاغ عنها
  • ودود للمشروع: سهولة إعداد مشروعك ودمج خدمات CI
  • خطاف ما قبل الالتزام: منع ارتكاب ملفات بيانات الاعتماد
  • قابل للتوصيل: يسمح بإنشاء قواعد مخصصة وتكوين مرن
  • التوثيق: يصف سبب اكتشاف القاعدة له باعتباره سريًا

عرض سريع

يمكنك عرض نتيجة فحص secretlint على https://secretlint.github.io/.

بداية سريعة

يمكنك تجربة استخدام Secretlint على مشروعك بأمر واحد.

إذا كنت قد قمت بالفعل بتثبيت Docker:

docker run -v `pwd`:`pwd` -w `pwd` --rm -it secretlint/secretlint secretlint "**/*"

إذا كنت قد قمت بالفعل بتثبيت Node.js:

npx @secretlint/quick-start "**/*"

بعد التشغيل، إذا حصلت على نتيجة فارغة وحالة الخروج 0، فإن مشروعك آمن. خلاف ذلك، حصلت على تقرير خطأ، فإن مشروعك يتضمن بيانات اعتماد كبيانات خام.

مثال على نتائج secretlint

تريد الحصول على أمان مستمر، يرجى الاطلاع على دليل التثبيت التالي وإعداد خطاف ما قبل الالتزام و CI.

التثبيت

باستخدام Docker

المتطلبات الأساسية: يتطلب Docker

استخدم حاوية Docker الخاصة بنا للحصول على بيئة مع Node.js و secretlint تعمل بأسرع ما يمكنك تنزيلهما.

يمكنك فحص جميع الملفات في الدليل الحالي باستخدام secretlint بالأمر التالي:

docker run -v `pwd`:`pwd` -w `pwd` --rm -it secretlint/secretlint secretlint "**/*"

حاوية secretlint/secretlint docker تعمل بدون تكوين حسب التصميم.

تحتوي صورة Docker هذه على حزم مدمجة:

لمزيد من التفاصيل، يرجى الاطلاع على Dockerfile الخاص بـ secretlint.

باستخدام Node.js

المتطلبات الأساسية: يتطلب Node.js 22+.

Secretlint مكتوب بلغة JavaScript. يمكنك تثبيت Secretlint باستخدام npm:``` npm install secretlint @secretlint/secretlint-rule-preset-recommend --save-dev

يجب عليك بعد ذلك إعداد ملف تكوين:```
npx secretlint --init

أخيرًا، يمكنك تشغيل Secretlint على أي ملف أو دليل كما يلي:``` npx secretlint "**/*"

:memo: يدعم Secretlint [نمط glob](https://github.com/mrmlnc/fast-glob#basic-syntax) ويجب أن يُلف نمط glob بين علامتي اقتباس مزدوجتين.

من الممكن أيضًا تثبيت Secretlint عالميًا باستخدام `npm install --global`. لكننا لا نوصي بذلك، فقد تتعطل بعض القواعد عالميًا.

### استخدام الملف الثنائي القابل للتنفيذ المفرد

**المتطلبات الأساسية:** لا شيء

يمكنك استخدام أمر `secretlint` بدون Node.js عن طريق استخدام ملف ثنائي قابل للتنفيذ مفرد.

1. قم بتنزيل أحدث ملف ثنائي من [صفحة الإصدارات](https://github.com/secretlint/secretlint/releases)
2. غيّر صلاحية الملف ليكون قابلاً للتنفيذ: `chmod +x ./secretlint`
3. قم بتشغيل `./secretlint --init` لإنشاء ملف تكوين
4. قم بتشغيل `./secretlint "**/*"` لفحص مشروعك

لمزيد من التفاصيل، يُرجى الاطلاع على ملف README الخاص بـ [publish/binary-compiler](https://github.com/secretlint/secretlint/blob/HEAD/publish/binary-compiler).

## الاستخدام

يُظهر `secretlint --help` طريقة الاستخدام.

    Secretlint CLI that scan secret/credential data.
    
    Usage
    $ secretlint [file|glob*]
    
    Note
    supported glob syntax is based on picomatch (the engine used by micromatch)
    https://github.com/micromatch/picomatch#globbing-features
    https://github.com/micromatch/micromatch#matching-features
    
    Options
    --init             setup config file. Create .secretlintrc.json file from your package.json
    --format           [String] formatter name. Default: "stylish". Available Formatter: checkstyle, compact, github, jslint-xml, junit, pretty-error, stylish, tap, unix, json, mask-result, table
    --output           [path:String] output file path that is written of reported result.
    --secretlintrc     [path:String] path to .secretlintrc config file. Default: .secretlintrc.*
    --secretlintignore [path:String] path to .secretlintignore file. Default: .secretlintignore
    --stdinFileName    [String] filename to process STDIN content. Some rules depend on filename to check content.
    --no-color         disable ANSI-color of output.
    --no-terminalLink  disable terminalLink of output.
    --no-maskSecrets   disable masking of secret values; secrets are masked by default.
    --no-glob          disable glob pattern interpretation; treat all inputs as literal file paths.
    --no-gitignore     disable .gitignore cascade respect; .gitignore files are
                       respected by default (since v13).
    
    Options for Developer
    --profile          Enable performance profile.
    --secretlintrcJSON [String] a JSON string of .secretlintrc. use JSON string instead of rc file.
    
    Experimental Options
    --locale            [String] locale tag for translating message. Default: en
    
    Examples
    # Scan a single file
    $ secretlint ./README.md

    # Scan all files (wrap glob in double quotes to avoid shell expansion)
    $ secretlint "**/*"
    $ secretlint "source/**/*.ini"

    # Treat inputs as literal paths (for SvelteKit (group) / Next.js [param] etc.)
    $ secretlint --no-glob "src/(auth)/login.ts"

    # Lint STDIN content (filename hint affects which rules apply)
    $ echo "SECRET" | secretlint --stdinFileName=secret.txt

    # Use a custom config file
    $ secretlint "**/*" --secretlintrc=.secretlintrc.custom.json

    # Scan files ignored by .gitignore (e.g. to verify build artifacts)
    $ secretlint --no-gitignore "dist/**/*"

    # Mask secrets in a file in-place
    $ secretlint .zsh_history --format=mask-result --output=.zsh_history

    # Output JSON for programmatic parsing
    $ secretlint "**/*" --format=json --output=secretlint-report.json

    # Output GitHub Actions annotations in CI
    $ secretlint "**/*" --format=github
    
    Exit Status
    Secretlint exits with the following values:
    
        - 0:
          - Linting succeeded, no errors found.
          - Found lint error but --output is specified.
        - 1:
          - Linting failed, errors found.
        - 2:
          - Unexpected error occurred, fatal error.


## التكوين

يحتوي Secretlint على ملف تكوين `.secretlintrc.{json,yml,js}`.

- الوثائق: [تكوين Secretlint](https://github.com/secretlint/secretlint/blob/HEAD/docs/configuration.md)

بعد تشغيل `secretlint --init`، سيكون لديك ملف `.secretlintrc.json` في دليلك.

سترى بداخله بعض القواعد المهيأة هكذا:```json
{
  "rules": [
    {
      "id": "@secretlint/secretlint-rule-preset-recommend"
    }
  ]
}

خاصية id هي اسم حزمة قاعدة secretlint.

لا تحتوي Secretlint على قواعد مدمجة. تريد إضافة بعض القواعد، ويجب عليك تثبيت الحزمة و إضافة القاعدة إلى ملف .secretlintrc.

كل قاعدة لها نفس نمط التهيئة:

  • options: تعريف الخيارات للقاعدة. لمزيد من التفاصيل، راجع وثائق كل قاعدة.
  • disabled: إذا كانت disabled هي true، فقم بتعطيل القاعدة.
  • allowMessageIds: allowMessageIds هي مصفوفة من معرفات الرسائل التي تريد إخفاء تقارير الأخطاء عنها.
    • يتم تعريف معرف الرسالة في كل قاعدة، يُرجى مراجعة وثائق القاعدة.

مثال: options

على سبيل المثال، @secretlint/secretlint-rule-example يحتوي على allows في options. يُعرّف خيار allows هذا قائمة من سلاسل تشبه التعبير المنتظم التي تريد تجاهلها.```json { "rules": [ { "id": "@secretlint/secretlint-rule-example", "options": { "allows": [ "/dummy_secret/i" ] } } ] }

عند استخدام إعداد مسبق مثل `@secretlint/secretlint-rule-preset-recommend`، يجب وضع الخيار في `rules`.

على سبيل المثال، خيار لـ `@secretlint/secretlint-rule-preset-recommend > @secretlint/secretlint-rule-aws````json5
{
  "rules": [
    {
      "id": "@secretlint/secretlint-rule-preset-recommend",
      "rules": [
        {
          "id": "@secretlint/secretlint-rule-aws",
            "options": {
              "allows": [
	            // it will be ignored
                "xxxx-xxxx-xxxx-xxxx-xxxx"
              ]
            }
        }
      ]
    }
  ]
}

مثال: allowMessageIds

على سبيل المثال، حصلت على تقرير الخطأ التالي عن طريق تشغيل secretlint:``` $ secretlint "**/*"

SECRET.txt 1:8 error [EXAMPLE_MESSAGE] found secret: SECRET @secretlint/secretlint-rule-example

✖ 1 problem (1 error, 0 warnings)

معرف رسالة هذا الخطأ هو `EXAMPLE_MESSAGE` في `@secretlint/secretlint-rule-example`.

إذا كنت ترغب في تجاهل هذا الخطأ، فيرجى استخدام `allowMessageIds`.```json
{
  "rules": [
    {
      "id": "@secretlint/secretlint-rule-example",
      "allowMessageIds": ["EXAMPLE_MESSAGE"]
    }
  ]
}

عند استخدامك لقالب مثل @secretlint/secretlint-rule-preset-recommend، تحتاج إلى وضع الخيار في rules.

على سبيل المثال، إذا كنت تريد تجاهل "AWSAccountID" و "AWSAccessKeyID" من @secretlint/secretlint-rule-aws، يمكنك كتابة ما يلي.

{
    "rules": [
        {
            "id": "@secretlint/secretlint-rule-aws",
            "options": {
                "allows": [
                    "AWSAccountID",
                    "AWSAccessKeyID"
                ]
            }
        }
    ]
}
``````json5
{
  "rules": [
    {
      "id": "@secretlint/secretlint-rule-preset-recommend",
      "rules": [
        {
          "id": "@secretlint/secretlint-rule-aws",
          "allowMessageIds": ["AWSAccountID", "AWSAccessKeyID"]
        }
      ]
    }
  ]
}

تجاهل الملفات عبر .gitignore و .secretlintignore

يتنقل Secretlint في نظام الملفات بنفس طريقة Git، مع احترام ملفات .gitignore المتداخلة. يتم تخطي أي ملف أو دليل يتطابق مع أي .gitignore على طول المسار من دليل العمل إلى الملف.

يعمل .secretlintignore بنفس طريقة .gitignore ويتم استشارته بالإضافة. ترتيب الحل هو:

  1. التجاهلات المضمنة: .git و node_modules وعائلة .secretlintrc*.
  2. الملف المشار إليه بواسطة --secretlintignore (الافتراضي: .secretlintignore).
  3. .gitignore لكل دليل (متسلسل).

لفحص الملفات التي يتم تجاهلها بواسطة git — على سبيل المثال، ملف .env في مشروع حيث يتم تجاهل .env — استخدم --no-gitignore:``` secretlint --no-gitignore "**/*"

> **الانتقال إلى الإصدار v13:**
> - يتم الآن احترام ملف `.gitignore` افتراضيًا. في السابق، كان secretlint يفحص جميع الملفات المتطابقة بغض النظر عن `.gitignore`. استخدم الخيار `--no-gitignore` لاستعادة السلوك السابق.
> - أنماط التضمين تتبع تركيب glob الخاص بـ picomatch (التوسيع بالأقواس المتعرجة، `**`، فئات الأحرف، …). مكدس التجاهل المتسلسل (`.gitignore`، `.secretlintignore`، وقائمة التجاهل المضمنة) يتبع دلالات `.gitignore` القياسية، والتي **لا تدعم** التوسيع بالأقواس المتعرجة — اكتب `**/.cache` بدلاً من `**/{cache,tmp}` لأنماط التجاهل.
> - يتم تفسير الأنماط على أنها globs بشكل افتراضي. عندما يتطابق نمط مع مسار موجود على القرص، يعامله الباحث حرفيًا حتى لو كان الاسم يحتوي على أحرف glob وصفية (`[`، `(`، `{`، `?`)، مما يعكس السلوك القديم `convertPathToPattern` الخاص بـ globby. استخدم الخيار `--no-glob` لفرض المعالجة الحرفية للمسارات التي لا توجد بعد على القرص.
> - يتم اتباع الروابط الرمزية للدلائل أثناء البحث (مطابقة للسلوك السابق المعتمد على globby) لكن مسار الرابط الرمزي — وليس الهدف الذي تم حله — هو ما تراه قواعد `.gitignore` و `.secretlintignore`. يتم اكتشاف الدورات عبر `realpath` بحيث يتم الدخول إلى كل هدف فريد مرة واحدة على الأكثر.

### التجاهل عبر التعليقات

يدعم [@secretlint/secretlint-rule-filter-comments](https://www.npmjs.com/package/@secretlint/secretlint-rule-filter-comments) التعليقات المهملة مثل `secretlint-disable`.```
// secretlint-disable

THIS IS SECRET, BUT IT WILL BE IGNORED

// secretlint-enable

لمزيد من التفاصيل، يرجى الاطلاع على Configuring Secretlint.

حالات الاستخدام

إخفاء الأسرار في رسائل خطأ lint (السلوك الافتراضي)

تقوم Secretlint بإخفاء الأسرار في رسائل خطأ lint بشكل افتراضي. وهذا مفيد لمنع التعرض العرضي للأسرار في سجلات CI أو مخرجات الطرفية أو عند استخدام أدوات وكلاء الذكاء الاصطناعي.```bash

Secrets are masked by default

$ secretlint "**/*"

لعرض القيم السرية الفعلية في المخرجات، استخدم `--no-maskSecrets`:```bash
$ secretlint --no-maskSecrets "**/*"

إصلاح الأسرار

لا يمكن لـ Secretlint إصلاح الأسرار تلقائيًا. ومع ذلك، من المفيد أن --format=mask-result يقوم بإخفاء الأسرار في ملف الإدخال.

على سبيل المثال، يمكنك إخفاء أسرار ملف .zsh_history واستبداله.```bash $ secretlint .zsh_history --format=mask-result --output=.zsh_history

## حزم القواعد

تم تنفيذ قواعد Secretlint كوحدات منفصلة.

- [@secretlint/secretlint-rule-npm](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-npm)
- [@secretlint/secretlint-rule-aws](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-aws)
- [@secretlint/secretlint-rule-gcp](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-gcp)
- [@secretlint/secretlint-rule-github](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-github)
- [@secretlint/secretlint-rule-gitlab](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-gitlab)
- [@secretlint/secretlint-rule-privatekey](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-privatekey)
- [@secretlint/secretlint-rule-basicauth](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-basicauth)
- [@secretlint/secretlint-rule-slack](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-slack)
- [@secretlint/secretlint-rule-sendgrid](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-sendgrid)
- [@secretlint/secretlint-rule-shopify](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-shopify)
- [@secretlint/secretlint-rule-stripe](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-stripe)
- [@secretlint/secretlint-rule-openai](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-openai)
- [@secretlint/secretlint-rule-anthropic](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-anthropic)
- [@secretlint/secretlint-rule-grafana](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-grafana)
- [@secretlint/secretlint-rule-groq](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-groq)
- [@secretlint/secretlint-rule-linear](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-linear)
- [@secretlint/secretlint-rule-1password](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-1password)
- [@secretlint/secretlint-rule-database-connection-string](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-database-connection-string)
- [@secretlint/secretlint-rule-databricks](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-databricks)
- [@secretlint/secretlint-rule-hashicorp-vault](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-hashicorp-vault)
- [@secretlint/secretlint-rule-vercel](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-vercel)
- [@secretlint/secretlint-rule-azure](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-azure)
- [@secretlint/secretlint-rule-docker](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-docker)
- [@secretlint/secretlint-rule-figma](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-figma)
- [@secretlint/secretlint-rule-cloudflare](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-cloudflare)
- [@secretlint/secretlint-rule-tailscale](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-tailscale)
- [@secretlint/secretlint-rule-huggingface](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-huggingface)
- [@secretlint/secretlint-rule-notion](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-notion)
- [@secretlint/secretlint-rule-secp256k1-privatekey](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-secp256k1-privatekey)
- [@secretlint/secretlint-rule-no-k8s-kind-secret](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-no-k8s-kind-secret)
- [@secretlint/secretlint-rule-pattern](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-pattern)
- [@secretlint/secretlint-rule-no-homedir](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-no-homedir)
- [@secretlint/secretlint-rule-no-dotenv](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-no-dotenv)
- [@secretlint/secretlint-rule-filter-comments](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-filter-comments)

أيضًا، توفر Secretlint مجموعة قواعد مسبقة تتضمن مجموعة القواعد الموصى بها.

- [@secretlint/secretlint-rule-preset-recommend](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-rule-preset-recommend)
    - مجموعة القواعد الموصى بها

## قواعد مخصصة

يمكنك إنشاء قواعد secretlint الخاصة بك.

إذا كنت ترغب في الحصول على قاعدة secretlint مناسبة لمشروعك، فيمكنك إنشاؤها!
قاعدة secretlint هي مجرد حزمة npm.

إذا كنت تريد معرفة كيفية إنشاء قاعدة secretlint، فيرجى الاطلاع على [docs/secretlint-rule.md](https://github.com/secretlint/secretlint/blob/HEAD/docs/secretlint-rule.md).

## التكاملات

### خطاف ما قبل الالتزام لكل مشروع

يمكنك استخدام Secretlint مع بعض أدوات ما قبل الالتزام.
يمكن أن يمنع ذلك ارتكاب البيانات السرية عن طريق التحليل باستخدام Secretlint.

تطبيق secretlint على المشروع وتحسين الأمان في تطوير الفريق.

#### [Husky](https://github.com/typicode/husky) + [lint-staged](https://github.com/okonet/lint-staged)

**حالة الاستخدام:** إذا كنت ترغب في إدخال secretlint في مشروع Node.js، فهذا المزيج مفيد.

قم بتثبيت [Husky](https://github.com/typicode/husky) و[lint-staged](https://github.com/okonet/lint-staged):```
npx husky-init && npm install lint-staged --save-dev

أضف الخطافات إلى .husky/pre-commit:``` npx husky add .husky/pre-commit "npx --no-install lint-staged"

تعديل `package.json`:```json5
{
  // add "lint-staged" field
  "lint-staged": {
    "*": [
      "secretlint --no-glob"
    ]
  }
}

ملاحظة: العلم --no-glob مطلوب لأن lint-staged يمرر مسارات ملفات حرفية قد تحتوي على أحرف خاصة glob (مثل أنماط التوجيه (group) أو [param] المستخدمة في Next.js وSvelteKit وما إلى ذلك).

هذا يعني فحص كل ملف تمت مراحلته بواسطة Secretlint قبل الالتزام.

pre-commit

حالة الاستخدام: لديك مشروع قيد التطوير باستخدام Docker. سهل التكامل مع secretlint.

تثبيت pre-commit

# macOS. see also https://pre-commit.com/#install
brew install pre-commit

أنشئ .pre-commit-config.yaml:```

  • repo: local hooks:
    • id: secretlint name: secretlint language: docker_image entry: secretlint/secretlint:latest secretlint
مثال لتهيئة المستودع:

- https://github.com/azu/secretlint-pre-commit-example

#### نص Bash

بدلاً من ذلك، يمكنك حفظ هذا النص باسم `.git/hooks/pre-commit` ومنحه صلاحية التنفيذ (`chmod +x .git/hooks/pre-commit`):```bash
#!/bin/sh
FILES=$(git diff --cached --name-only --diff-filter=ACMR | sed 's| |\\ |g')
[ -z "$FILES" ] && exit 0

# Secretlint all selected files
echo "$FILES" | xargs ./node_modules/.bin/secretlint --no-glob
# If you using docker
# echo "$FILES" | xargs docker run -v `pwd`:`pwd` -w `pwd` --rm secretlint/secretlint secretlint
RET=$?
if [ $RET -eq 0 ] ;then
    exit 0
else
    exit 1
fi

خطاف ما قبل الالتزام عالميًا

حالة الاستخدام: إذا كنت تريد فحص أي مشروع باستخدام secretlint، فيمكنك استخدام خطافات git العالمية.

Git 2.9+ يدعم core.hooksPath. إنه يتيح دمج secretlint عالميًا.

لقد أنشأنا مشروع خطافات git نموذجيًا باستخدام secretlint + Docker.

يمكنك الإعداد باتباع الخطوات التالية:```shell script

clone this repository

git clone https://github.com/secretlint/git-hooks git-hooks cd git-hooks

integrate secretlint to git hook globally

git config --global core.hooksPath $(pwd)/hooks

بعد إعداد `core.hooksPath`، يقوم secretlint بفحص أي ملف قبل تنفيذ الالتزام به.

لمزيد من التفاصيل، راجع مشروع [secretlint/git-hooks](https://github.com/secretlint/git-hooks).

يمكن استخدام إصدار Node.js أيضًا لتطبيق git hook العام.
إذا كنت مهتمًا بذلك، فالرجاء مراجعة [@azu/git-hooks](https://github.com/azu/git-hooks).

### CI

#### GitHub Actions

إذا كنت قد قمت بالفعل بإعداد secretlint [باستخدام Node.js](#using-nodejs)، فيمكنك تشغيل secretlint باستخدام إعداداتك على [GitHub Actions](https://github.co.jp/features/actions).

ضع ملف `.github/workflows/secretlint.yml` في المستودع الخاص بك.```yaml
name: Secretlint
on: [push, pull_request]
permissions:
  contents: read
jobs:
  test:
    name: "Secretlint"
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v3
      - name: setup Node.js
        uses: actions/setup-node@v3
        with:
          node-version: 22
      - name: Install
        run: npm ci
      - name: Lint with Secretlint
        run: npx secretlint "**/*"
--format github لتوضيحات طلبات السحب

يمكنك استخدام --format github لعرض أخطاء الـ lint كتوضيحات على ملفات طلبات السحب. يُخرج هذا المُنسق أوامر سير عمل GitHub Actions التي تعرض توضيحات الأخطاء مباشرةً على الملفات المُعدّلة في طلب السحب الخاص بك.```yaml - name: Lint with Secretlint run: npx secretlint --format github "**/*"

يقوم هذا الإعداد بدمج تعليقات مراجعة طلبات السحب.

![github-actions.png](https://assets.kitploit.com/production/public/readmes/6649/c4558d395907512504eb827499bbb28e442b4dd57164ca6bd64b836a0e2988eb.png)

- المستودع النموذجي: https://github.com/secretlint/secretlint-github-actions-example
- طلب السحب النموذجي: https://github.com/secretlint/secretlint-github-actions-example/pull/1/files

إذا كنت ترغب في فحص الملفات المختلفة فقط، يُرجى الاطلاع على المثال التالي:```yaml
name: test-diff
on:
  push:
  pull_request:
jobs:
  test-diff:
    permissions:
      contents: read
    name: "Run secretlint to diff files"
    runs-on: ubuntu-latest
    steps:
      - name: checkout
        uses: actions/checkout@v4
        with:
          # fetch history to get all changed files on push or pull_request event
          fetch-depth: 0
      - name: Get changed files
        id: changed-files
        uses: tj-actions/changed-files@v44
        with:
          quotepath: "false"
      - name: setup Node ${{ matrix.node-version }}
        uses: actions/setup-node@v4
        with:
          node-version: 22
      - name: Show changed files
        run: echo "${{ steps.changed-files.outputs.all_changed_files }}"
      - name: Install
        if: steps.changed-files.outputs.any_changed == 'true'
        run: npm ci
      - name: Run secretlint
        if: steps.changed-files.outputs.any_changed == 'true'
        run: npx secretlint --no-glob ${{ steps.changed-files.outputs.all_changed_files }}

Mega-Linter

Mega-Linter هو مُجمّع أدوات التدقيق اللغوي (linters) متوافق أصلاً مع أي أداة CI، ويضم أكثر من 80 تطبيق تدقيق لغوي، بما في ذلك secretlint بشكل افتراضي.

يمكنك تثبيته على أي مشروع مستودع باستخدام الأمر التالي (يجب تثبيت Node.js مسبقاً)```shell npx mega-linter-runner --install

![megalinter-secretlint-failure.png](https://assets.kitploit.com/production/public/readmes/6649/3db15386c6559c762029a095a5f3c0d83bb55255d261809254296d55fa6d6748.png)

### المتصفح

[Secretlint WebExtension](https://github.com/secretlint/webextension) يعمل على متصفحك.

- Firefox: <https://addons.mozilla.org/ja/firefox/addon/secretlint/>
- Chrome: <https://chrome.google.com/webstore/detail/secretlint/hidpojbnemkajlnibhmeilpgoddkjjkf>

تهدف هذه الإضافة للمتصفح إلى العثور على بيانات الاعتماد المضمنة في طلبك/استجابتك.

![Secretlint WebExtension](https://assets.kitploit.com/production/public/readmes/6649/ecb458b32d60007d85b13d2c238cb235e0ac856c7cbea6590fde520e3bcf07f0.png)

تتكامل إضافة Secretlint WebExtension مع DevTools في Chrome/Firefox.
تساعد هذه الإضافة مطوري الويب على ملاحظة بيانات الاعتماد المكشوفة.

### macOS

[SecureClipboard](https://github.com/secretlint/secure-clipboard) هو تطبيق شريط قوائم لنظام macOS يستخدم Secretlint لاكتشاف وإخفاء الأسرار في الحافظة الخاصة بك قبل لصقها في مكان آخر.

### أخرى

#### SARIF format support

يرجى استخدام [@secretlint/secretlint-formatter-sarif](https://github.com/secretlint/secretlint/blob/HEAD/packages/@secretlint/secretlint-formatter-sarif).```
npm install @secretlint/secretlint-formatter-sarif --dev
secretlint --format @secretlint/secretlint-formatter-sarif "**/*"

سياسة الإصدار الدلالي

يتبع مشروع Secretlint الإصدار الدلالي(secretlint-rule-preset-canary هو استثناء).

  • الإصدار التصحيحي (Patch release) (المقصود به عدم كسر بناء lint الخاص بك)
    • إصلاح علة في CLI أو النواة (بما في ذلك المنسقات).
    • تحسينات في التوثيق.
    • تغييرات غير موجهة للمستخدم مثل إعادة الهيكلة.
    • إعادة الإصدار بعد إصدار فاشل (أي نشر إصدار لا يعمل لأي شخص).
  • الإصدار الثانوي (Minor release) (قد يكسر بناء lint الخاص بك)
    • خيار جديد.
    • إهمال قاعدة موجودة.
    • إنشاء قدرة جديدة في CLI.
    • إضافة واجهات برمجة تطبيقات عامة جديدة (فئات جديدة، طرق جديدة، وسيطات جديدة للطرق الموجودة، إلخ).
      • قد يكسر تعريفات TypeScript
    • إنشاء منسق جديد.
  • الإصدار الرئيسي (Major release) (يكسر بناء lint الخاص بك)
    • خيار جديد لقاعدة موجودة يؤدي إلى قيام secretlint بالإبلاغ عن المزيد من الأخطاء افتراضيًا.
    • إزالة منسق موجود.
    • إضافة قاعدة افتراضية جديدة إلى مجموعة القواعد.
    • إزالة جزء من واجهة برمجة التطبيقات العامة أو تغييره بطريقة غير متوافقة.

الدافع

الفلسفة

  • تقليل الإيجابيات الكاذبة في الفحص
  • التكامل مع سير عمل التطوير
  • تمكين المستخدمين من المساهمة

الاشتراك الإيجابي بدلاً من الاشتراك الخروجي

يتبنى Secretlint نهج الاشتراك الإيجابي (opt-in).

في تجربتنا، أدوات الفحص التي تبلغ عن أخطاء متنوعة افتراضيًا يصعب استخدامها. يساعد نهج الاشتراك الإيجابي في تقديم Secretlint بشكل تدريجي.

سيساعد ذلك في تقليل الإيجابيات الكاذبة من خلال التكوين.

القاعدة كتوثيق

نعتبر القاعدة كتوثيق. لذلك، يجب أن تحتوي كل قاعدة على توثيق معقول.

نحتاج إلى وصف سبب كون هذا الملف خطأ. القاعدة التي لا تحتوي على توثيق هي مجرد رأي.

وصف سبب الخطأ سيؤدي إلى تقليل الأخطاء الإيجابية الكاذبة.

أيضًا، يدعم كل من Secretlint CLI الارتباطات التشعبية في الطرفية (Terminal). هذا يعني أنه يمكنك الانتقال مباشرة إلى توثيق القاعدة من رسالة الخطأ في الفحص.

رابط قابل للنقر في المخرجات

مثال على iTerm 2: Cmd + اضغط على messageId الخطأ وافتح AWSSecretAccessKey في متصفحك.

إذا كنت تريد معرفة الطرفية المدعومة، يرجى الاطلاع على الارتباطات التشعبية في محاكيات الطرفية.

أيضًا، مرحبًا بالمساهمة في توثيق secretlint!

لماذا Node.js؟

  • مدير الحزم
    • يتطلب مدير حزم لتحقيق نظام إضافي مرن
    • Node.js لديه npm و pnpm كمدير حزم
    • يساعد مدير الحزم في تثبيت الإضافات/القواعد المخصصة من قبل المستخدم
  • توفر مرجع تنفيذ موجود
    • Node.js لديه بالفعل أدوات فحص قابلة للتوصيل مثل ESLint و textlint و stylelint إلخ
    • لذا فإن مستخدمي Node.js على دراية بأدوات الفحص القابلة للتوصيل
    • سابقًا، قمت بإنشاء textlint بنفس النهج، لذا أنا على دراية بـ Node.js
  • المستخدمون
    • JavaScript هي لغة شائعة
    • تمكن المستخدمين من المساهمة
    • يمكن للمستخدمين إنشاء قاعدة خاصة بهم بأيديهم

بالطبع، يدعم secretlint أيضًا Docker.

سجل التغييرات

انظر صفحة الإصدارات.

المساهمة

طلب السحب والنجوم مرحب بها دائمًا.

للأخطاء وطلبات الميزات، يرجى إنشاء مشكلة.

انظر أيضًا، CONTRIBUTING.md و CODE_OF_CONDUCT.md

إضافة قاعدة جديدة

يمكنك استخدام الأمر pnpm run gen:rule لإنشاء قاعدة جديدة.```shell script pnpm run gen:rule

لمزيد من التفاصيل، يرجى الاطلاع على [CONTRIBUTING.md](https://github.com/secretlint/secretlint/blob/HEAD/CONTRIBUTING.md)

### المعيار

يتم تشغيل سير عمل المعيار في كل commit.

- المعيار: https://secretlint.github.io/secretlint/dev/bench/

## المؤلف

- [github/azu](https://github.com/azu)
- [twitter/azu_re](https://twitter.com/azu_re)

## الترخيص

MIT © azu

الفئات