ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

Authelia 贡献者测试指南:从覆盖策略到 SAST/DAST 与 Lint 全链路解析

Authelia 贡献者测试指南:从覆盖策略到 SAST/DAST 与 Lint 全链路解析 Authelia 贡献者测试指南从覆盖策略到 SAST/DAST 与 Lint 全链路解析【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia本篇技术指南以 Authelia 官方贡献指南中的 Testing 测试规范 为骨架系统讲解 Authelia 在代码贡献过程中的测试要求、覆盖策略、测试工具矩阵Go Test、React Testing Library、SonarQube、CodeQL、Codecov、Grype 等以及基于 lefthook 的 Linting 体系。读完本文你将理解 Authelia 社区如何定义有效测试、如何组织测试命名、如何让 bug 修复与测试绑定提交并能在本地复现其测试与静态检查流水线。一、测试的核心要求追求覆盖但不迷信覆盖Authelia 对代码贡献的测试要求可以概括为三个必须、两个允许追求 100% 覆盖率但不强制项目希望新增或修改的每一行代码都被测试覆盖但不强制在不切实际的场景下追求覆盖率。文档明确指出一个仅仅标记某行被执行的测试例如只调用一次函数、不断言任何结果不一定是有效测试effectual test某些代码路径客观上难以测试强行写测试反而无效时允许不覆盖。测试命名必须反映意图测试名称要清晰说明在测试什么行为以及测试的是哪部分代码便于失败时快速定位。Bug 修复必须附带回归测试贡献者必须创建修复前失败、修复后通过的测试并随修复一并提交。缺少该测试的修复很可能被拒绝除非得到 core team 明确豁免。新功能鼓励充分测试凡可测试的行都应测试如果某行代码无法被测试这通常是需要重构的信号例如职责过重、耦合过深导致难以注入桩件。这套理念在仓库的测试组织方式中得到印证Go 侧每个包都带有对应的*_test.go文件例如 internal/configuration/validator 目录下每个实现文件都有配套测试前端在 web/src 中同样以测试文件与组件一一对应。二、测试方法论与执行频率多框架、多平台、SAST DASTAuthelia 在每次提交到master之前以及每次提交到master时都会执行多套测试工具同时配合定时任务运行漏洞扫描。官方给出的理由很务实多工具虽然会带来更多噪音但能提供更多数据来支撑判断从而提升信心。工具用途说明Go Test覆盖率、静态与动态代码分析分析 Go 代码以go test -cover、go test -race、go test -fuzz在每次提交到master前后执行React Testing Library覆盖率、静态与动态代码分析分析 React 代码在每次提交到master前后执行SonarQube静态代码分析分析全部代码在每次提交到master前后执行CodeQL静态代码分析分析全部代码在每次提交到master前后执行并按计划定时执行Codecov覆盖率统计为 Go 与 TypeScript 生成覆盖率统计在每次提交到master前后执行Grype漏洞管理仅做 SBOM 扫描在每次提交到master前后执行Renovate漏洞与依赖管理按计划定时执行golangci-Lint静态代码分析分析 Go 代码在每次提交到master前后执行GitGuardian机密信息管理在每次提交到master前后分析泄露的密钥/机密Code Rabbit质量与安全评估在每次提交到master前对普通 Pull Request 进行分析OpenSSF Scorecard安全实践评估在每次提交到master时自动执行OpenSSF Best Practices安全实践评估手动评估用于提升安全实践水平StepSecurity Harden-RunnerCI Agent 安全作为 GitHub CI Job Runner 中任何 Job 的一部分运行zizmorGitHub Action 静态代码分析防止 GitHub Actions 工作流本身存在安全问题2.1 本地复现 Go 测试三件套上述表中的go test -cover、go test -race、go test -fuzz可直接在仓库根目录执行# 覆盖率分析统计每个包的测试覆盖率 go test -cover ./... # 竞态检测排查数据竞争常用于 session、storage 等并发敏感模块 go test -race ./... # 模糊测试对接受随机输入的解析/解码函数做模糊测试 go test -fuzz ./...仓库中大量*_test.go文件例如 internal/configuration/validator/definitions_test.go、internal/configuration/validator/identity_providers_test.go采用 Go 标准t.Run子测试组织方式便于对一组用例做细分断言与定向调试这也是命名反映测试意图的具体落地。2.2 CodeQL 与 Harden-Runner 的仓库级实现在仓库的 .github/workflows/codeql-analysis.yml 中可以找到 CodeQL 的真实执行配置触发时机master分支的 push、针对master的 pull request以及每周三 13:25UTCcron 表达式25 13 * * 3的定时扫描语言矩阵同时分析go与javascript两种语言对应 Authelia 的 Go 后端与 React/TypeScript 前端权限收敛contents: read的最小权限声明security-events: write仅授予分析 JobHarden-Runner每个 Job 第一步都使用step-security/harden-runner并配置egress-policy: audit即官方表格中CI Agent 安全的落地实现用于审计出站网络访问、降低被投毒攻击面。除此之外.github/workflows 目录下还包含scorecard.yml对应 OpenSSF Scorecard 自动评估、slsa.yml软件供应链签名与pr-labels.yml共同构成 CI 侧的自动安全与质量防线。三、Linting 体系基于 lefthook 的 Git Hook 全量检查除 SAST/DAST 工具外Authelia 还通过 lefthook 是这套机制的实际配置。工具作用域用途golangci-LintGoGo 代码的质量与一致性ESLintJavaScript 与 TypeScriptJS/TS 代码的质量与一致性ShellCheckShell 脚本Shell 代码的质量与一致性yamllintYAML 文件统一的 YAML 格式commitlintGit确保提交信息符合 Commit Message 规范TruffleHog全部防止密钥被意外提交typos全部防止拼写与一般性错别字REUSE全部许可证与版权合规REUSE 规范3.1 剖析 .lefthook.yml 的实际执行细节从 .lefthook.yml 可以看到具体的 hook 编排pre-commit 阶段先执行一个工具自检 Job依次探测golangci-lint、pnpm、reuse、shellcheck、trufflehog、typos、yamllint、zizmor是否已安装缺失即报错并中止提交。随后并行执行一组 linter Jobdocs在docs/根目录运行pnpm lint检查文档eslint对*.{js,jsx,ts,tsx}运行 ESLintgolangci-lint对*.go运行golangci-lint run --fix可自动修复可修复项reuse / reuse-project对暂存文件运行reuse lint-file并在修改REUSE.toml或LICENSES/*时触发全项目reuse lint --linesshellcheck按 MIME 类型识别 shell 脚本并检查trufflehog扫描整个文件系统-x .trufflehog排除项防止密钥泄漏typostypos -w自动修正拼写yamllint对*.{yml,yaml}执行格式检查zizmor对.github/workflows/*.{yml,yaml}做 GitHub Action 静态安全分析。commit-msg 阶段通过pnpm commitlint --edit校验提交信息与 commit-message.md 中规定的type(scope): summary头部格式、body 至少 20 字符、footer 中BREAKING CHANGE:与Fixes #issue等要求一一对应。3.2 Lint 在 CI 与 PR 评审中的位置Pull Request 指南 明确要求合并前所有相关 linting 与质量自动化必须通过并且至少两名 maintainer 批准。也就是说本地 lefthook 钩子 CI 侧的 CodeQL/Scorecard/SLSA 工作流共同构成了提交前自检 → CI 自动检查 → 人工评审三层防线。四、给贡献者的实操清单结合以上规范向 Authelia 提交代码前请按以下清单自查安装本地工具链确保golangci-lint、pnpm、reuse、shellcheck、trufflehog、typos、yamllint、zizmor可用并安装 lefthook 以激活 Git Hook补测试再提交修复 bug 时先写一个修复前失败、修复后通过的回归测试并随 PR 提交新功能尽量覆盖所有可测分支无法测试的行往往提示需要重构命名与组织测试命名要能说明测什么、测哪里Go 测试优先使用t.Run子测试前端测试与组件一一对应本地执行核心命令go test -cover ./...、go test -race ./...、go test -fuzz ./...并在web/、docs/目录分别运行前端与文档的 lint提交信息合规通过commitlint校验type(scope): summary格式避免被 pre-commit 钩子拦截许可证与版权合规确保新增文件带 SPDX 头部并通过reuse lint仓库采用 REUSE 规范见 REUSE.toml等待 CI 全绿push 后等待 CodeQL、Scorecard、SLSA 等工作流通过再请求 maintainer 评审。五、总结Authelia 的测试体系是一条从有效测试理念到本地 Git Hook 强制约束再到CI 多工具自动扫描的完整链路覆盖策略上追求 100% 但不教条工具选择上 Go/React 双栈 SAST/DAST 多工具交叉验证落地机制上以 lefthook 与 GitHub Actions 双保险。理解并遵循这套规范是贡献代码被顺利合并的前提也是 Authelia 长期保持安全与质量基线的基础。【免费下载链接】autheliaThe Single Sign-On Multi-Factor portal for web apps. OpenID Certified™ and Post-Quantum Cryptography Ready.项目地址: https://gitcode.com/GitHub_Trending/au/authelia创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表