PavelGuzenfeld/standard
GitHub: PavelGuzenfeld/standard
一套差异感知的可复用 GitHub Actions 质量门禁框架,覆盖 C++ 与 Python 的 lint、SAST、fuzzing、供应链安全及自动发布等全生命周期检查。
Stars: 0 | Forks: 4
# 标准
[](https://github.com/PavelGuzenfeld/standard/releases)
[](https://scorecard.dev/viewer/?uri=github.com/PavelGuzenfeld/standard)
[](https://www.bestpractices.dev/projects/12012)
用于 C++ 和 Python 质量门禁的可重用 GitHub Actions。支持差异感知的 linting、SAST、sanitizers、fuzzing —— 仅检查发生变更的内容。
## 它的功能
- **差异感知** — 仅检查 PR 中变更的文件;遗留代码绝不阻塞合并
- **C++ 质量** — 在你的 Docker 镜像中运行 clang-tidy、cppcheck、clang-format、flawfinder
- **基础设施 lint** — ShellCheck、Hadolint、cmake-lint、dangerous-workflow 审计、binary-artifact 扫描、Gitleaks 密钥检测(无需 Docker 镜像)
- **运行时分析** — ASan/UBSan、TSan、gcov/lcov 覆盖率、IWYU(均可选)
- **Python 质量** — 对变更行执行 ruff/flake8 + pytest + diff-cover
- **安全扫描** — Semgrep、CodeQL、Infer、pip-audit
- **SBOM 与供应链** — Syft 容器扫描、源码依赖扫描、Grype 漏洞扫描
- **禁用模式** — cout/printf、原生 new/delete、gtest(均可选)
- **命名强制检查** — snake_case 文件和 `include//` 目录,通过 clang-tidy 检查标识符命名
- **加固模板** — sanitizer 预设、多编译器 CI、fuzzing、生产环境 flags
- **PR 反馈** — 内联注解 + 自动更新的总结评论
- **自动发布** — 推送到 main 时执行 conventional-commit 版本号提升、git 标签、GitHub Releases 以及 SLSA provenance
## 质量记分牌
每个 PR 都会收到来自各个工作流的自动更新的表情符号记分牌评论:
| 类别 | 检查项 | 工作流 |
|----------|--------|----------|
| **C++ 质量** | clang-tidy、cppcheck、clang-format、flawfinder、ASan/UBSan、TSan、覆盖率、IWYU、加固、文件命名、禁用模式 | `cpp-quality.yml` |
| **Python 质量** | ruff/flake8 lint、pytest、diff-cover | `python-quality.yml` |
| **Python SAST** | Semgrep、pip-audit、CodeQL | `sast-python.yml` |
| **基础设施** | ShellCheck、Hadolint、cmake-lint、dangerous-workflow 审计、binary-artifact 扫描、Gitleaks 密钥 | `infra-lint.yml` |
| **供应链** | 容器 SBOM、源码 SBOM、Grype 漏洞、许可证合规性 | `sbom.yml` |
| **版本控制** | package.xml、CMakeLists.txt、pyproject.toml 中的 SemVer | `version-check.yml` |
| **发布** | 推送到 main 时自动标签 + GitHub Release | `auto-release.yml` |
| **趋势** | 每周质量趋势报告(通过率、最常失败的检查) | `trend-dashboard.yml` |
## 快速开始
### C++
```
# .github/workflows/quality.yml
name: Quality
on:
pull_request:
branches: [main]
jobs:
cpp:
uses: PavelGuzenfeld/standard/.github/workflows/cpp-quality.yml@main
with:
docker_image: ghcr.io/your-org/your-dev-image:latest
permissions:
contents: read
pull-requests: write
```
### Python
```
jobs:
python:
uses: PavelGuzenfeld/standard/.github/workflows/python-quality.yml@main
permissions:
contents: read
pull-requests: write
sast:
uses: PavelGuzenfeld/standard/.github/workflows/sast-python.yml@main
permissions:
contents: read
pull-requests: write
security-events: write
```
## 文档
| 文档 | 描述 |
|----------|------------|
| **[SDLC 流程](docs/SDLC.md)** | 完整生命周期:pre-commit、PR 门禁、SAST、测试、加固 |
| **[集成指南](docs/INTEGRATION.md)** | C++ 和 Python 项目的分步设置 |
| **[版本控制规则](docs/VERSIONING.md)** | SemVer 策略:初始版本、版本提升规则、git 标签 |
| **[路线图](docs/ROADMAP.md)** | 约定、编码标准和计划功能 |
| **[行业对比](docs/COMPARISON.md)** | 与 Google、Microsoft、JFrog、MegaLinter 等进行逐项功能对比 |
## 可重用工作流
| 工作流 | 语言 | 检查内容 |
|----------|----------|---------------|
| [`cpp-quality.yml`](.github/workflows/cpp-quality.yml) | C++ | clang-tidy、cppcheck、clang-format、flawfinder、sanitizers、TSAN、覆盖率、IWYU、加固、文件命名、禁用模式 |
| [`infra-lint.yml`](.github/workflows/infra-lint.yml) | Multi | ShellCheck(shell 脚本)、Hadolint(Dockerfiles)、cmake-lint(CMake 文件)、dangerous-workflow 审计、binary-artifact 扫描、Gitleaks 密钥检测 |
| [`python-quality.yml`](.github/workflows/python-quality.yml) | Python | ruff/flake8(差异感知)、pytest、diff-cover |
| [`sast-python.yml`](.github/workflows/sast-python.yml) | Python | Semgrep、pip-audit、CodeQL |
| [`sbom.yml`](.github/workflows/sbom.yml) | Multi | Syft 容器 SBOM、源码依赖扫描、Grype 漏洞扫描、许可证检查 |
| [`version-check.yml`](.github/workflows/version-check.yml) | Multi | package.xml、CMakeLists.txt、pyproject.toml 中的 SemVer 验证 |
| [`auto-release.yml`](.github/workflows/auto-release.yml) | Multi | 可重用的自动发布:conventional-commit 版本提升、git 标签、GitHub Releases、SLSA provenance |
| [`trend-dashboard.yml`](.github/workflows/trend-dashboard.yml) | Multi | 每周质量趋势报告:各项检查的通过率、趋势箭头、发布到 Slack/Discussions |
| [`release.yml`](.github/workflows/release.yml) | — | 推送到 main 时触发自动发布(标准仓库) |
## 工作流输入
## 全功能 C++ 示例
```
jobs:
cpp:
uses: PavelGuzenfeld/standard/.github/workflows/cpp-quality.yml@main
with:
docker_image: ghcr.io/your-org/your-dev-image:latest
compile_commands_path: build
source_mount: /workspace/src
source_setup: 'source /opt/ros/humble/setup.bash'
pre_analysis_script: .github/scripts/pre-analysis.sh
cppcheck_suppress: cppcheck.suppress
cppcheck_std: c++23
cppcheck_strict: true
enable_clang_format: true
enable_flawfinder: true
enable_sanitizers: true
sanitizer_script: .github/scripts/sanitizer-tests.sh
enable_tsan: true
tsan_script: .github/scripts/tsan-tests.sh
enable_coverage: true
coverage_script: .github/scripts/coverage-tests.sh
enable_hardening: true
enable_iwyu: true
iwyu_script: .github/scripts/iwyu-analysis.sh
enforce_doctest: true
ban_cout: true
ban_new: true
enable_file_naming: true
enable_sarif: true
runner: '[\"self-hosted\",\"X64\",\"Linux\"]'
permissions:
contents: read
pull-requests: write
security-events: write
sbom:
uses: PavelGuzenfeld/standard/.github/workflows/sbom.yml@main
with:
docker_image: ghcr.io/your-org/your-dev-image:latest
source_sbom_script: .github/scripts/generate_source_sbom.py
grype_fail_on: ''
license_policy_file: .license-policy.yml
permissions:
contents: read
pull-requests: write
packages: read
```
## 配置
| 配置 | 用途 |
|--------|---------|
| [`.clang-tidy`](configs/.clang-tidy) | clang-analyzer、cppcoreguidelines、modernize、bugprone、performance、readability |
| [`.clang-format`](configs/.clang-format) | C++23,120 列,4 空格缩进,Allman 大括号 |
| [`.clang-tidy-naming`](configs/.clang-tidy-naming) | 标识符命名:snake_case 函数,PascalCase 类型,私有成员以 `_` 结尾 |
| [`cppcheck.suppress`](configs/cppcheck.suppress) | 带有注释供应商示例的通用抑制 |
| [`naming-exceptions.txt`](configs/naming-exceptions.txt) | 文件命名例外模板(每行一个 regex) |
| [`.pre-commit-config.yaml`](configs/.pre-commit-config.yaml) | Pre-commit hooks:clang-format、clang-tidy、cppcheck |
| [`CMakePresets-sanitizers.json`](configs/CMakePresets-sanitizers.json) | CMake 预设:ASan、TSan、release-hardened |
| [`ci-multi-compiler.yml`](configs/ci-multi-compiler.yml) | 多编译器 CI:GCC-13 + Clang-21,ccache |
| [`ci-fuzz.yml`](configs/ci-fuzz.yml) | 带 corpus 缓存的 libFuzzer CI |
| [`ci-codeql.yml`](configs/ci-codeql.yml) | CodeQL SAST:C++ 200+ CWEs,Python 160+ |
| [`ci-infer.yml`](configs/ci-infer.yml) | Infer:Pulse、InferBO、RacerD 线程安全 |
| [`cmake-warnings.cmake`](configs/cmake-warnings.cmake) | 警告 flags:-Wall -Wextra -Wpedantic -Werror + 额外项 |
| [`test-checklist.md`](configs/test-checklist.md) | 强制测试边缘情况清单(11 个类别) |
| [`repo-structure-ros2.txt`](configs/repo-structure-ros2.txt) | ROS2 包结构验证模板 |
| [`AGENTS.md`](configs/AGENTS.md) | 适用于使用项目的 AI 代理指令模板 |
| [`SECURITY.md`](configs/SECURITY.md) | 适用于使用项目的安全策略模板 |
| [`dependabot.yml`](configs/dependabot.yml) | 适用于使用项目的 Dependabot 配置模板 |
## 脚本
### 差异感知检查
运行与 CI 相同的逻辑,仅针对相对于基础分支发生变更的文件:
| 脚本 | 用途 |
|--------|---------|
| `diff-clang-tidy.sh` | 对变更文件运行 clang-tidy |
| `diff-cppcheck.sh` | 对变更文件运行 cppcheck |
| `diff-clang-format.sh` | 对变更文件运行 clang-format |
| `diff-file-naming.sh` | 对变更文件检查 snake_case 命名 |
| `diff-iwyu.sh` | 对变更文件运行 Include-What-You-Use |
```
./scripts/diff-clang-tidy.sh origin/main build "cpp hpp h"
./scripts/diff-cppcheck.sh origin/main
./scripts/diff-clang-format.sh origin/main "cpp hpp h"
./scripts/diff-file-naming.sh origin/main naming-exceptions.txt
./scripts/diff-iwyu.sh origin/main build
```
### 设置生成器
根据标准生成项目脚手架:
| 脚本 | 用途 |
|--------|---------|
| `generate-workflow.sh` | 生成 `.github/workflows/` YAML 文件 |
| `generate-agents-md.sh` | 为你的仓库生成定制的 `AGENTS.md` |
| `generate-baseline.sh` | 生成抑制/基线文件,以便逐步采用 |
| `generate-badges.sh` | 生成 README 徽章 markdown |
| `install-hooks.sh` | 安装 git pre-commit hooks |
```
./scripts/generate-workflow.sh
./scripts/generate-agents-md.sh
./scripts/generate-baseline.sh
./scripts/generate-badges.sh
./scripts/install-hooks.sh
```
### 实用工具
| 脚本 | 用途 |
|--------|---------|
| `check-repo-structure.sh` | 根据模板验证仓库目录结构 |
| `check-dangerous-workflows.sh` | 审计工作流文件中的注入模式 |
| `check-hardening.sh` | 验证 ELF 二进制文件加固 (PIE、RELRO、NX、canary) |
| `filter-excludes.sh` | 根据排除模式过滤文件列表 |
```
./scripts/check-repo-structure.sh configs/repo-structure-ros2.txt .
./scripts/check-hardening.sh build-hardened/bin/*
```
## 项目结构
```
.github/workflows/
cpp-quality.yml Reusable C++ quality workflow (56 inputs, 14+ opt-in checks)
infra-lint.yml Reusable infrastructure lint workflow (ShellCheck, Hadolint, cmake-lint, dangerous-workflow audit, binary-artifact scan, Gitleaks secrets detection)
python-quality.yml Reusable Python quality workflow (ruff/flake8, pytest, diff-cover)
sast-python.yml Reusable Python SAST workflow (Semgrep, pip-audit, CodeQL)
sbom.yml Reusable SBOM & supply chain workflow (Syft, Grype, license check)
version-check.yml Reusable version validation workflow (SemVer in package.xml, CMakeLists.txt, pyproject.toml)
auto-release.yml Reusable auto-release (conventional commits → semver tag → GitHub Release → SLSA provenance)
trend-dashboard.yml Reusable trend dashboard (weekly quality trend report, Slack/Discussions posting)
release.yml Triggers auto-release on push to main
self-test.yml Dogfood: runs python-quality on this repo's demo code
gatekeeper-checks.yml Push checks for this repo
pull-request-feedback.yml PR feedback for this repo
scripts/
diff-clang-tidy.sh Diff-aware clang-tidy runner
diff-cppcheck.sh Diff-aware cppcheck runner
diff-clang-format.sh Diff-aware clang-format runner
diff-file-naming.sh Diff-aware snake_case naming check
diff-iwyu.sh Diff-aware Include-What-You-Use runner
generate-workflow.sh Generate workflow YAML files
generate-agents-md.sh Generate tailored AGENTS.md
generate-baseline.sh Generate suppression/baseline files
generate-badges.sh Generate README badge markdown
install-hooks.sh Install git pre-commit hooks
check-repo-structure.sh Validate repo directory structure
check-dangerous-workflows.sh Audit workflow files for injection patterns
check-hardening.sh Verify ELF binary hardening properties
filter-excludes.sh Filter file lists against exclusion patterns
configs/ Drop-in configs, CI templates, and agent instructions (17 files)
tests/
test_patterns.sh Pattern validation tests (176 tests)
test_calculator.py Python demo tests
docs/
SDLC.md Full software development lifecycle document
INTEGRATION.md Step-by-step integration guide
VERSIONING.md SemVer policy and bump rules
ROADMAP.md Conventions, coding standards, and planned features
COMPARISON.md Industry comparison (Google, Microsoft, JFrog, MegaLinter, etc.)
AGENTS.md AI agent instructions for contributing to this repo
src/calculator.py Python demo module
```
## 工作原理
所有工作流都使用 `git diff --name-only --diff-filter=ACMR` 针对 PR 的基础分支来检测变更文件。只有这些文件会被 lint/分析,因此未触及代码中的现有问题绝不会阻塞 PR。
每个工作流都会在 PR 上发布一条带有隐藏 HTML 标记的总结评论。在后续推送时,会更新同一条评论,而不是创建重复项。
C++ 工具在调用者的 Docker 镜像内运行,因此它们能看到项目使用的确切工具链、头文件和 `compile_commands.json`。
## 许可证
MIT License - 见 [LICENSE](LICENSE)。
C++ 输入 (56 个输入)
**核心:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `docker_image` | *required* | 包含 clang-tidy、cppcheck 和 compile_commands.json 的 Docker 镜像 | | `compile_commands_path` | `build` | 容器内 compile_commands.json 的路径 | | `source_mount` | `/workspace/src` | 仓库源码在容器内的挂载位置 | | `source_setup` | `''` | 在工具运行前 source 的 shell 命令(例如 ROS2 setup.bash) | | `runner` | `ubuntu-latest` | 作为 JSON 的 Runner 标签 | | `file_extensions` | `cpp hpp h cc cxx` | 以空格分隔的要检查的 C++ 文件扩展名 | | `exclude_file` | `''` | 列出排除路径的文件路径(每行一个,支持 `#` 注释) | | `pre_analysis_script` | `''` | 在 Docker 内分析前运行的脚本 | | `build_cache_key` | `''` | 构建产物的 cache key(为空 = 不缓存) | | `build_cache_paths` | `build install` | 以空格分隔的要缓存的路径 | | `checkout_submodules` | `false` | 传递给 actions/checkout 的 submodules(false、true、recursive) | | `select_jobs` | `all` | 以逗号分隔的要运行的作业 (all、clang-tidy、cppcheck、coverage、tsan、sanitizers、iwyu、clang-format、doctest、file-naming、cout-ban、new-delete-ban、flawfinder、hardening) | | `base_ref` | `''` | 用于 diff 的基础分支(当 github.base_ref 为空时回退使用) | **clang-tidy:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_clang_tidy` | `true` | 启用 clang-tidy 分析 | | `clang_tidy_config` | `''` | .clang-tidy 配置的路径(为空 = 使用仓库默认值) | | `clang_tidy_jobs` | `4` | Docker 内并行运行的 clang-tidy 作业数 | **cppcheck:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_cppcheck` | `true` | 启用 cppcheck 分析 | | `cppcheck_suppress` | `''` | cppcheck 抑制文件的路径 | | `cppcheck_includes` | `''` | 以空格分隔的 include 目录 | | `cppcheck_include_file` | `''` | 包含 include 目录的文件路径(每行一个) | | `cppcheck_std` | `c++23` | 用于 cppcheck 的 C++ 标准 | | `cppcheck_inconclusive` | `false` | 启用 --inconclusive 模式(可能产生误报) | | `cppcheck_strict` | `false` | 使用 --error-exitcode=1 进行原生 cppcheck 错误处理 | **clang-format:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_clang_format` | `false` | 启用 clang-format 检查(可选) | | `clang_format_config` | `''` | .clang-format 配置的路径 | **Flawfinder:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_flawfinder` | `false` | 启用 flawfinder CWE 词法扫描(可选) | | `flawfinder_min_level` | `2` | 最小的 flawfinder 发现级别 (1-5) | | `enable_sarif` | `false` | 将 SARIF 上传到 GitHub Security 标签页 | **Sanitizers (ASan/UBSan):** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_sanitizers` | `false` | 启用 ASan/UBSan 测试作业(可选) | | `sanitizer_script` | `''` | 使用 sanitizers 进行构建和测试的脚本 | | `sanitizer_suppressions` | `''` | LSAN 抑制文件的路径 | | `sanitizer_packages` | `''` | 以空格分隔的要测试的包(为空 = 全部) | **ThreadSanitizer:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_tsan` | `false` | 启用 TSan 测试作业(可选,与 ASan 互斥) | | `tsan_script` | `''` | 使用 TSan 进行构建和测试的脚本 | | `tsan_suppressions` | `''` | TSan 抑制文件的路径 | | `tsan_packages` | `''` | 以空格分隔的要使用 TSan 测试的包(为空 = 全部) | **覆盖率:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_coverage` | `false` | 启用 gcov/lcov 覆盖率报告(可选) | | `coverage_script` | `''` | 使用覆盖率进行构建和测试并收集 lcov 的脚本 | | `coverage_packages` | `''` | 以空格分隔的要测量的包(为空 = 全部) | | `coverage_threshold` | `0` | 最小总体行覆盖率 % (0 = 无阈值) | | `coverage_diff_threshold` | `0` | 通过 diff-cover 检查的变更行的最小覆盖率 % (0 = 禁用) | | `coverage_diff_report` | `false` | 生成 diff-cover markdown 报告作为 artifact | **加固:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_hardening` | `false` | 启用二进制加固验证(可选) | | `hardening_script` | `''` | 使用加固 flags 进行构建的脚本 | | `hardening_binary_paths` | `build-hardened/bin/*` | 以空格分隔的要检查的 ELF 二进制文件的 glob 匹配模式 | | `hardening_skip_checks` | `''` | 以空格分隔的要跳过的检查: pie relro bindnow canary fortify nx cet | **IWYU:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_iwyu` | `false` | 启用 Include-What-You-Use 分析(可选) | | `iwyu_script` | `''` | 运行 IWYU 分析的脚本 | | `iwyu_mapping_file` | `''` | IWYU 映射文件 (.imp) 的路径 | **命名与禁用模式:** | 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_file_naming` `false` | 启用 snake_case 文件命名检查(可选) | | `file_naming_exceptions` | `''` | 命名例外 regex 的路径 | | `file_naming_allowed_prefixes` | `_` | 文件名允许的前缀 | | `enforce_doctest` | `false` | 要求使用 doctest 而不是 gtest(可选) | | `test_file_pattern` | `test` | 用于识别测试文件的 grep 匹配模式 | | `ban_cout` | `false` | 在非测试文件中禁用 cout/cerr/printf(可选) | | `ban_new` | `false` | 在非测试文件中禁用原生 new/delete(可选) |基础设施 Lint 输入 (14 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `enable_shellcheck` | `false` | 为 shell 脚本启用 ShellCheck(可选) | | `shellcheck_severity` | `warning` | 最低严重级别:error、warning、info、style | | `enable_hadolint` | `false` | 为 Dockerfiles 启用 Hadolint(可选) | | `hadolint_config` | `''` | .hadolint.yaml 配置文件的路径 | | `enable_cmake_lint` | `false` | 为 CMake 文件启用 cmake-lint(可选) | | `cmake_lint_config` | `''` | .cmake-format.yaml 配置文件的路径 | | `enable_dangerous_workflows` | `false` | 启用 dangerous-workflow 模式审计(可选) | | `enable_binary_artifacts` | `false` | 在 PR 中启用 binary artifact 检测(可选) | | `enable_gitleaks` | `false` | 启用 Gitleaks 密钥检测(可选) | | `gitleaks_config` | `''` | .gitleaks.toml 配置文件的路径 | | `exclude_file` | `''` | 列出排除路径的文件路径(每行一个,支持 `#` 注释) | | `base_ref` | `''` | 用于 diff 的基础分支 | | `runner` | `ubuntu-latest` | 作为 JSON 的 Runner 标签 | | `select_jobs` | `all` | 以逗号分隔的要运行的作业 (all、shellcheck、hadolint、cmake-lint、dangerous-workflows、binary-artifacts、gitleaks) |Python 输入 (10 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `python_version` | `3.12` | 要使用的 Python 版本 | | `target_python` | `py38` | ruff 的目标 Python 版本 | | `python_linter` | `ruff` | Linter:`ruff` 或 `flake8` | | `source_dirs` | `src` | 源码目录 | | `test_dirs` | `tests` | 测试目录 | | `ruff_select` | `E,W,F,I` | Ruff 规则选择 | | `enable_tests` | `true` | 运行 pytest 并收集覆盖率(对于具有外部测试依赖(如 ROS2)的项目请禁用) | | `base_ref` | `''` | 用于 diff 比较的基础分支(依次回退到 github.base_ref、main) | | `fail_under` | `100` | 最小 diff-quality 得分 (0-100) | | `runner` | `ubuntu-latest` | Runner 标签 |Python SAST 输入 (9 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `python_version` | `3.12` | 要使用的 Python 版本 | | `enable_semgrep` | `true` | 启用 Semgrep 安全扫描 | | `semgrep_version` | `1.150.0` | Semgrep Docker 镜像版本(锁定以避免破坏性变更) | | `semgrep_rules` | `p/python p/owasp-top-ten` | Semgrep 规则集 | | `enable_pip_audit` | `true` | 启用 pip-audit CVE 扫描 | | `requirements_file` | `requirements.txt` | requirements 文件的路径 | | `enable_codeql` | `false` | 启用 CodeQL(对公开仓库免费) | | `codeql_queries` | `security-extended` | CodeQL 查询套件 | | `runner` | `ubuntu-latest` | Runner 标签 |SBOM 输入 (8 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `docker_image` | *required* | 要扫描的 Docker 镜像 | | `source_sbom_script` | `''` | 源码级 SBOM 生成脚本的路径(为空 = 跳过) | | `grype_fail_on` | `''` | 失败严重级别:"" = 仅报告,"critical"、"high"、"medium"、"low" | | `grype_ignore_file` | `''` | .grype.yaml 忽略文件的路径 | | `checkout_submodules` | `false` | 为源码 SBOM checkout 子模块 (true/false/recursive) | | `license_policy_file` | `''` | 许可证策略 YAML 的路径(为空 = 跳过许可证检查) | | `license_check_script` | `''` | 调用者仓库中许可证检查 Python 脚本的路径 | | `runner` | `ubuntu-latest` | 作为 JSON 的 Runner 标签 |版本检查输入 (3 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `exclude_file` | `''` | 列出排除路径的文件路径(每行一个,支持 `#` 注释) | | `base_ref` | `''` | 用于 diff 的基础分支(当 github.base_ref 为空时回退使用) | | `runner` | `ubuntu-latest` | 作为 JSON 的 Runner 标签 |自动发布输入 (2 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `default_bump` | `patch` | 未检测到 conventional commit 前缀时的默认版本提升级别 | | `enable_provenance` | `false` | 为发布启用 SLSA provenance 证明(可选) |趋势仪表板输入 (4 个输入)
| 输入 | 默认值 | 描述 | |-------|---------|-------------| | `lookback_days` | `28` | 要分析的历史天数 | | `slack_webhook_url` | `''` | 用于发布趋势报告的 Slack webhook URL(为空 = 跳过) | | `post_to_discussions` | `false` | 将趋势报告作为 GitHub Discussion 发布(可选) | | `runner` | `ubuntu-latest` | 作为 JSON 的 Runner 标签 |标签:C++, LLM防护, Python, 安全规则引擎, 数据擦除, 无后门, 请求拦截, 逆向工具, 静态应用安全测试