pilot-protocol/check-layers

GitHub: pilot-protocol/check-layers

一款通用的 Go 模块架构分层 linter,通过解析 layers.yaml 规则在 CI 中检测并阻止违反分层依赖约束的跨层 import。

Stars: 0 | Forks: 0

# check-layers [![ci](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/007d9f988c000921.svg)](https://github.com/pilot-protocol/check-layers/actions/workflows/ci.yml) [![codecov](https://codecov.io/gh/pilot-protocol/check-layers/branch/main/graph/badge.svg)](https://codecov.io/gh/pilot-protocol/check-layers) [![License: AGPL-3.0](https://img.shields.io/badge/License-AGPL_v3-blue.svg)](https://www.gnu.org/licenses/agpl-3.0) 通用的 Go-module 架构 linter。它会在仓库根目录读取 `layers.yaml` 文件,遍历 `go list -json ./...`,并在遇到任何违反声明的分层规则的 import 时以非零状态退出。只需将其放入任何带有 `layers.yaml` 的 Go 仓库中即可直接使用——它不包含任何特定于项目的逻辑。 ## 安装 ``` go install github.com/pilot-protocol/check-layers@latest ``` ## 运行 在目标仓库根目录下执行: ``` check-layers # P1 + P2 only check-layers --tests # also enforce P5 (tests stay within their layer) ``` ## 规则 - **P1** — 严格向下 import:每个 Go import 的目标层必须 `≤ source layer - 1`。 - **P2** — 每层仅有单一向上接口:当目标层在 `layers.yaml` 中声明了 `public:` 时,跨层 import 只能指向这些 package 中的一个;在 `packages:` 中列出但未包含在 `public:` 中的同级 package 属于层内部 package。 - **P5** — 测试仅限在其所在层内进行(通过 `--tests` 启用)。 在 `layers.yaml` 的 `known_transitional` 中列出的已知过渡期违规将被报告为警告而非失败——这样即使在重构期间存在违规,构建也能保持通过状态。 ## layers.yaml ``` layers: - id: 0 name: stdlib packages: [] - id: 1 name: protocol packages: - github.com/example/proj/pkg/protocol public: - github.com/example/proj/pkg/protocol - id: 2 name: driver packages: - github.com/example/proj/pkg/driver public: - github.com/example/proj/pkg/driver known_transitional: - from: github.com/example/proj/internal/legacy to: github.com/example/proj/internal/newer ``` ## 许可证 AGPL-3.0-or-later。详见 [LICENSE](LICENSE)。
标签:Apache Flink, EVTX分析, Go语言, 云安全监控, 代码规范检查, 日志审计, 架构治理, 程序破解, 静态分析