@codacy/tools-opengrep-1

中文文档
0.28.0发布于 2026/11/09MITTypeScriptCommonJS近 30 天下载 1.2万

Opengrep 适配器—— CLI- mode 多语言 SAST 扫描器

中文使用文档
文档目录9 节
  1. 目录
  2. 概览
  3. 规则捆绑
  4. 保持与科达西图像同步
  5. 更新图案
  6. 更新规则
  7. 更新 Opengrep 版本
  8. 发展
  9. 维护者的注释

@codacy/tools-opgrep-1 (英语)

目录


概览

多语言的 SAST (Static 应用程序安全测试) 扫描仪 打开( O) 二进制. 通过YAML规则文件支持30+语言. 使用CLI执行策略.

财产数值
工具标识Semgrep (legacy,用于Codacy平台相容性)
显示名称Opengrep
编码 UUID6792c561-236d-41b7-ba5e-9d6bee0d548b
战略国 际
语文30+ (Python, JavaScript, TypeScript, Java, Go, Ruby, C, C++等)
二进制opengrep
文件图案由上述语言衍生出来的 ~70 扩展 Dockerfile
图案计数~2500 时
额外依赖性yaml (用于 YAML 规则配置解析/ 生成)

规则捆绑

Opengrep使用YAML规则文件进行检测. 适配器将~2500规则捆入 src/rules.yaml,来源于:

  1. 打开/打开规则 - 登记规则,与Codacy图像相同
  2. GitLab SAST 规则 麻省理工学院有执照,从 gitlab.com/gitlab-org/security-products/sast-rules
  3. 编码习惯规则 —— 说 docs/codacy-rules*.yaml 内 codacy/codacy-opengrep

捆绑起来 src/rules.yaml 实值 承诺保存库 为了一致性和可复制性.

保持与科达西图像同步

所有三个来源,他们的被钉住的承诺 和他们的文件过滤器都是从 codacy/codacy-opengrep是因为 internal/docgen/parsing.go。保持这样:图像是 参考执行情况,以及 scripts/fetch-rules.mjs 说每个部件的上游函数 是从哪来的.

镜像成本中的三个错误 2534种模式中的296种(12%)他们都沉默了.. 模式在 patterns.json, (中文(简体) ), init --auto 允许它, 配置 声称它是活跃的 它只是永远不要开火:

  • 规则 ID 来源于文件路径 . GitLab ids 在文件中写入, 必须是 逐字记录。 路径导出对顶层树的右侧(java/crypto/rule-X.yml 真的很坚持 java_crypto_rule-X),对于许可级别之一是错误的,其中 rules/lgpl-cc/properties/spring/accesscontrol/rule-Y.yml 持有 properties_spring_rule-Y编辑 最尖锐的情况是 rule-JwtDecodeWithoutVerify.yml,其编号使用下划线 文件名使用连字符 。 588 GitLab规则中的265条由此被丢失.
  • 登记册来源在上游 semgrep/semgrep-rules而不是Opengrep的叉子 两者之分 大部分的id,所以输出看起来是可信的,而个别规则却丢失了.
  • YAML被逐行读取并重写. 腐败的多线流出- 已生成文件已停止解析, 然后报告 opengrep 整个运行的零结果 而不是错误,它每逢 tests/ 目录,一些运出规则所在的地方.

test/rules-coverage.test.ts 是守护者:如果编目模式没有规则,则失败,如果 生成的文件不解析。 运行 pnpm fetch-rules ;脚本打印 孤儿身份证明.

更新图案

# Re-fetch pattern metadata from the Codacy API
pnpm prefetch

# Commit the result
git add src/patterns.json

模式 ID 遵循格式 Semgrep_python.lang.security.audit.exec-detected.exec-detected (dot-分出规则路径).

更新规则

# Re-fetch and bundle rules from all three sources
pnpm fetch-rules

# This clones the rule repos, extracts matching rules, and writes src/rules.yaml
# Only rules whose IDs match src/patterns.json are included — and the script now
# warns loudly about the reverse, a catalogued pattern with no rule to run.

# Commit the result
git add src/rules.yaml

这个 fetch-rules 脚本( e)scripts/fetch-rules.mjs:

  • 克隆 semgrep/semgrep-rules 在坚固的战火中
  • 克隆人GitLab SAST规则(最新)
  • 克隆 codacy/codacy-opengrep 习惯规则
  • 提取规则, 指定基于路径的ID
  • 过滤到只匹配规则 src/patterns.json
  • 将缩写 YAML 写入 src/rules.yaml

要更新被绑定的规则, 请编辑 SEMGREP_RULES_COMMIT 内 scripts/fetch-rules.mjs。 。 。 .

更新 Opengrep 版本

  1. 更新 preferredVersion 内 src/adapter.ts
  2. 运行 pnpm test 以验证兼容性
  3. 考虑重新运行 pnpm fetch-rules 如果新版本支持新的规则语法

发展

pnpm build        # Build with tsup
pnpm test         # Run tests (requires opengrep in PATH)
pnpm fetch-rules  # Re-bundle rules from upstream sources
pnpm prefetch     # Re-fetch pattern metadata from Codacy API

安装二进制 :

适配器自动安装打开grep ~/.codacy/tools/ 当运行时 --install-dependencies (不需要手工步骤):

codacy-analysis analyze . --tool opengrep --install-dependencies

install() 从 GitHub 发布时下载匹配的静态链接二进制 (无归档可解开)和 chmod +x因为它(不在Windows上). 这个 平台/arch/libc — 资产映射镜 opengrep 官方 install.sh 财务报告和审定财务报表 install.ps1数字 :

平台资产
macOS x64opengrep_osx_x86
马可斯臂64opengrep_osx_arm64
Linux x64 (glibc) (英语)opengrep_manylinux_x86
Linux arm64 (glibc) (英语)opengrep_manylinux_aarch64
Linux x64( 穆斯/ 阿尔卑斯)opengrep_musllinux_x86
Linux arm64(母马/高山)opengrep_musllinux_aarch64
视窗 x64opengrep_windows_x86.exe
Windows arm64(已装入)opengrep_windows_x86.exe

要手动安装 :

curl -fsSL https://raw.githubusercontent.com/opengrep/opengrep/main/install.sh | bash
# Windows (PowerShell)
irm https://raw.githubusercontent.com/opengrep/opengrep/main/install.ps1 | iex

维护者的注释

  • 预设绘图src/pattern-mappings.json(中文(简体) ): 前缀是上游规则路径 (单位:千美元)Semgrep_<lang>.<framework>.…)),它已经命名了框架,所以这个映射是 前缀只 —— Opengrep 的标签为主题(security, (中文(简体) ), audit并会过度竞争。 22个密钥 添加,从缺少框架的重置中取出 ~91 默认模式: Pyramid (16), PyCryptodome (12), Kubernetes/Helm (14,通过) yaml.kubernetes. + 键 codacy.k8s.; 数据 kubernetes 信号匹配 松动的列表 k8s/编号 :kubernetes/编号 :manifests/不仅仅是 kustomization.yaml,或 最常见的布局会失去全部 14), GitHub 动作 (5),AWS CDK (5),Jinja2 (2),以及较小的Boto3/Twilio/Android/Sequelize/Doctrine家族. YAML语言家庭最为重要:在此之前,他们发射任何含有单声道的回弹 .yaml 文档.

    这个 *.aws-lambda. 包( Python、 JavaScript、 Ruby 和 Go 三十四个默认) 以 页:1 键 - serverless-framework, (中文(简体) ), cloudformation, (中文(简体) ), aws-cdk, (中文(简体) ), boto3, (中文(简体) ), aws-sdk, (中文(简体) ), aws-sdk-go 财务报告和审定财务报表 lang:Terraform。掌上电脑代码没有自己的显示;唯一的 证据是它是如何部署的 或者它叫哪个SDK 任何七个都足够了. Terraform 赚了一把钥匙 因为布置了一辆Lambda aws_lambda_function 没有别的了 跟踪,SDK的分录 不得不学习npm的v2 aws-sdk,Go's v1 (英语) aws-sdk-go 还有PyPI的 botocore编号 :aws-lambda-powertools - 兰布达跑步时间 预装机器人3,所以它经常缺席 从 requirements.txt 完全没有.

    Semgrep_python.jinja2. 索赔人 jinja2 财务报告和审定财务报表 flask: 火焰硬依赖金贾2, 如此直视 jinja2 单是声明就放弃了两个错误- 严重性自定义规则 从最真实的火焰回放.

    蓄意地仍然普遍, 以测试为戒, 所以它保持这样: *.lang.* (通用每语包), csharp.dotnet. (平台,不是图书馆), terraform.* (已登入 Terraform 语言, problem-based-packs.* (各语种),和 apex. 编号 : generic.visualforce. - 顶级和视觉力量 仅限销售 语言,所以语言门 已经瞄准它们 并按键它们上 salesforce 只会增加一种方式 想念他们 在销售力回购 没有 sfdx-project.json。 。 。 .

  • 工具标识是 Semgrep 与 Codacy 平台的相容性。 这个 displayName 设置为 Opengrep 用于 CLI 显示。 不与Codacy平台团队协调,永远不要更改工具ID.

  • 配置化: 当指定codacy 模式时,适配器加载 src/rules.yaml,过滤以启用规则,并写入过滤后配置 .codacy/generated/opengrep-rules.yaml。 。 。 .

  • 检查为空规则 ID: 每张引用证 --no-rewrite-rule-ids。没有它 Opengrep 前缀 check_id 与配置文件的目录相对 cwd (.codacy/generated/x.yaml → codacy.generated.)),而适配器曾复制该路径数学以再次剥去前缀——从未在Windows上核实过,其中不匹配会在被启用的样板检查时默不作声地放下每个发现. 用旗子将规则ID映射到每个OS上直接显示的图案ID.

  • 配置文件搜索数字 : .semgrep.yaml, (中文(简体) ), .opengrep.yaml, (中文(简体) ), .semgrep.yml, (中文(简体) ), .opengrep.yml (按此顺序排列).

  • Opengrep 错误: 从 Opengrep 的 JSON 解析错误( 语法错误, 部分解析) errors 数组转换为结构 AnalysisError 对象为 filePath. Stderr (扫描状态表) 仅记录在调试级别上.

  • 规则标识格式: 使用Semgrep规则 {dir}.{filename}.{ruleId} GitLab 规则 {dir}_{filename} (下分数) Codacy自定义规则保留其原始ID.

  • 安装/ 二进制下载数字 : install() 从 https://github.com/opengrep/opengrep/releases/download/v{version}/{asset} 财务报告和审定财务报表 chmod +x如果它进入 ~/.codacy/tools/。释放标签带有 v 前缀( e)v1.30.0虽然 preferredVersion 没有。 在 Linux 上检测出 libc 味道 ldd /bin/sh 探测器musl → musllinux, else manylinux; 检测失败回落到glibc/manylinux. 在 Windows 上,二进制保存为 opengrep.exe; 上游仅建有 x64, 而 install.ps1 也安装在ARM64上(已装入),所以我们也这样做. 从opengrep 2.0.0开始 Windows 资产变成 opengrep_windows_x86.zip (exe + DLLs)——起落架 preferredVersion 超过2.0需要一个取出步骤。 argv 块预算下降至 MAX_ARGV_BYTES (30,000) 在Windows上,其命令行被封顶为32,767个字符. 与安装.sh不同,Codacy管理的安装确实 没有 校验联合签名 .cert编号 :.sig 签字——如果签字核查成为一种要求,则取出这些兄弟般的资产,并在chmod之前进行验证.

  • Argv 大小块( 没有目录行走):适配器总是通过 Opengrep a 清晰的文件列表 ——跑者已经被被git-ignored,排斥-被过滤的目标设定——因此Opengrep从不走寄存树本身. chunkFilesByArgvBudget() 将列表分割为 最少,最大的一个 每个适合的块 ARGV_BYTE_BUDGET (200KB,列在 ARG_MAX),每个块被扫描 opengrep scan 引用;发现和出错合并成块. 弹出 大小, 不计数:每次引用重新编译 rules.yaml,因此少/多块摊还固定成本。 先前的目录/“root”倒置被删除,因为大型倒置(Repo根的一个单一跟踪文件崩溃了最小覆盖的凹陷到 .它使Opengrep走出整个树——重新扫描排除/生成/复仇文件,并在跑者10分钟的限时时间出局.

  • 文件大小上限: 引用通过 --max-target-bytes 1000000 (~1 MB). 这还原了 Opengrep 的默认大小上限—— 适配器先前通过 0,哪个 禁用 如此巨大的生成/微缩的捆绑被扫描 并占据运行时间 上限适用于明确列出的文件(在v1.16.4上核实)。 说明: --exclude-minified-files 实值 没有 使用 —— 除非 --experimental (不同的引擎)也被通过,所以我们依靠大小盖来取而代之. (在文件到达适配器之前,跑者还集中执行每个文件更紧的150 KB限制,所以 --max-target-bytes 现在是一个二级防御。 )

  • 超时部分结果: 每堆循环检查 ctx.signal (跑者暂停比赛) 在块之间,并传递给 spawnTool因此,飞行中扫描被迅速杀死。 中止时,适配器将结果保存在完成的块上并添加一个 Timeout 出错(-) status: "partial"而不是失去所有的东西。 这就是为什么在ARG MAX之外块块的事物:这是在保留结果的情况下可以停止长扫描的颗粒性.

版本与发布记录

@codacy/tools-opengrep-1 共发布 36 个版本,首次发布于 2026/03/24;过去 12 个月发布了 36 个版本。

版本发布日期距今
0.28.0latest2026/11/09今天
0.27.12026/11/054 天前
0.27.02026/11/036 天前
0.26.02026/10/3010 天前
0.25.02026/10/1921 天前
0.24.02026/09/251 个月前

关于 @codacy/tools-opengrep-1 的常见问题

@codacy/tools-opengrep-1 是什么?

Opengrep 适配器—— CLI- mode 多语言 SAST 扫描器

如何安装 @codacy/tools-opengrep-1?

在项目目录运行 npm install @codacy/tools-opengrep-1,或使用 pnpm add / yarn add / bun add。

@codacy/tools-opengrep-1 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@codacy/tools-opengrep-1 支持 ESM 还是 CommonJS?

以 CommonJS 形式发布,可以直接 require();在 ES Module 项目中也可以用 import 引入(Node.js 会把 module.exports 作为默认导出)。

@codacy/tools-opengrep-1 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=20.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@codacy/tools-opengrep-1 可以商用吗?

@codacy/tools-opengrep-1 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@codacy/tools-opengrep-1 的下载量有多少?

根据 npm 官方下载统计,@codacy/tools-opengrep-1 在 2026/10/10 – 2026/11/08 这 30 天内被下载 12,106 次,日均约 404 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@codacy/tools-opengrep-1 还在维护吗?

最新版本 0.28.0 发布于 2026/11/09(今天);至今共发布 36 个版本,其中过去 12 个月发布了 36 个;首次发布于 2026/03/24。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。