MrBoodj011/HawkOps
GitHub: MrBoodj011/HawkOps
HawkOps 是一款 GitHub 原生的依赖智能分析与自主修复平台,帮助工程与安全团队在 GitHub 内实现依赖更新治理、PR 审查、零日响应和供应链安全管控。
Stars: 0 | Forks: 0
HawkOps
GitHub 原生的依赖智能分析、Pull Request 审查、自主修复、零日响应以及可信的 ChatOps。
由 MrBoodj011, Cybrense IT Services 的 CBS Team 成员 创建并维护。
快速开始 | 安装指南 | 迁移 | 迁移引擎 | 分发 | 跨仓库安全 | 项目记忆 | 权限 | 多组织测试 | P0 试点 | 威胁模型 | 安全审查 | 运维 | 路线图 | 更新日志 | Cybrense
## 概述 HawkOps 是一个独立维护、自托管的 GitHub App,基于经过验证的 [Renovate](https://github.com/renovatebot/renovate) 引擎构建。它为工程和安全团队提供了一个受控的系统,用于依赖更新、仓库治理、代码感知的 Pull Request 审查、有边界的自主修复、零日响应、入职引导以及运维命令。 它的设计围绕以下四条原则: 1. **仅使用短期凭证。** 每个工作流都会将 GitHub App 私钥换取为具有作用域且在任务结束后过期的安装 token。 2. **在广泛自动化之前确保安全。** 主要版本更新需要审批,全局自动合并被禁用,且写操作具有试运行模式。 3. **未知并不代表健康。** 缺失的安全可见性或仓库数据会被报告为未知,而不是被计为零。 4. **仅在 GitHub 上操作。** 筛选、审批、执行、历史记录和结果都保留在 GitHub 的 issues、Actions、checks 和 pull requests 中。 ## 当前验证 | 信号 | 状态 | | --- | --- | | 自动化测试 | 由锁定的 `Validate` 工作流运行 | | 运行时依赖审计 | 0 个已知漏洞 | | GitHub 原生命令 | apply, retry, cancel, status, explain, preview, doctor, snooze, freeze, remediate 和 rollback | | 仓库 Doctor | 只读的架构、性能、测试、CI、文档、安全性以及有边界的 SBOM 包分析 | | Pull Request 智能分析 | 每个 PR 都会接受 bug、漏洞、破坏性更新、测试、权限、密钥和不安全代码审查;依赖 PR 还将接受 Dependabot + OSV、EPSS、CISA KEV、可达性、Scorecard 和许可证分析,并给出明确的 Safe/Review required/Blocked 结论 | | 项目记忆 | 限定于仓库范围的已合并 PR 历史记录、认可的审查者、编码规范和测试命令,均从 GitHub 实时学习 | | 零日响应 | 组织 SBOM 扫描、漏洞利用优先级分类、限定于仓库范围的遏制措施,以及受审查把关的紧急 PR | | 租户边界 | 明确的组织允许列表、限定作用域的 token 以及派生自租户的加密 | | 事件可靠性 | 由 App 生成的幂等标记、有界的重试、速率限制、熔断机制以及工作流失败警报 | | 自主修复 | 失败检查诊断、已验证的目标或稳定回退选择、有边界的 JavaScript、TypeScript、PHP、Java、C#、Go、Rust、Ruby 和 Kotlin 源码/配置修复、受保护的缺失测试生成、确定性的多生态系统迁移、有界的故障修复、无 shell 的 npm/Composer 适配器、隔离的分支、仓库测试以及受审查把关的 PR | | 生产环境强化 | 确定性的宕机、过期 token、重放、速率限制、部分推出和回退失败模拟,以及一个受保护的次级组织试点工作流 | | 安全验证 | 威胁模型、不可变工作流审计、`fast-check` 属性模糊测试、私有漏洞报告,以及明确的独立渗透测试关卡 | | 发布证据 | SPDX、OpenVEX、SLSA 来源以及无密钥的 GitHub OIDC/Sigstore 证明,已通过 `gh attestation verify` 验证 | | 安装审计 | 权限和仓库范围验证 | | GitHub 事件工作器 | 即时仓库事件处理,配合五分钟的幂等恢复轮询器 | | 跨仓库安全 | 供应商优先的推出阶段、关联的 pull request、依赖循环阻断以及合并后的回归守护 | | 报告导出 | HTML、Markdown、JSON 和 CSV | | 操作员界面 | GitHub issues、Actions、checks 和 pull requests | [查看当前发布版本](https://github.com/MrBoodj011/HawkOps/releases/latest) 或打开公开的 [组织健康 issue](https://github.com/MrBoodj011/HawkOps/issues/1)。 ### 验证边界 - 外部的 `ViperQB/hawk-e2e` 测试夹具已于 2026-07-20 通过了受保护的 [次级组织试点](https://github.com/MrBoodj011/HawkOps/actions/runs/29747581778)。 该运行验证了被拒绝仓库的隔离性以及 `status`、`doctor`、`apply` 和 `retry` 命令路径。 - 签入的基准测试是一个工程基线,并非经过独立验证的对比。 - 不宣称进行过独立的渗透测试。所需的证据和重测关卡记录在 [独立安全审查](docs/SECURITY_REVIEW.md) 中。 ## GitHub 健康报告 每次每日健康运行和依赖 apply 运行都会更新一个核心 issue,并发布一个可下载的报告 artifact。该报告按风险对仓库进行排名,并公开每个得分背后的原因。 GitHub issue 和报告 artifact 包括: - 组织健康和治理得分; - 按风险排名的工程和安全队列; - 失败、待处理和陈旧的依赖 pull request; - 严重、高、中、低级别的 Dependabot 警报数量; - 基于严重程度的修复 SLA 违规情况; - 默认分支保护、CI、CODEOWNERS 和策略覆盖范围; - 核心 Renovate 策略偏差; - SPDX SBOM 覆盖率、包数量、未知许可证以及被阻止的许可证策略违规; - 仓库策略配置、包声誉和漏洞优先级证据; - 仓库检查失败和不可用的安全可见性; - 指向每个仓库 Dependency Dashboard 和源工作流运行的直接链接。 - 每周成功率、中位修复时间证据、被阻止的 PR、回退率以及安全 SLA 合规性。 ## 功能 | 领域 | HawkOps 提供的功能 | | --- | --- | | 依赖维护 | npm、Composer/PHP、Docker、GitHub Actions、Python、Maven、NuGet、lockfile 以及 Renovate 支持的每一个生态系统 | | 迁移修复 | 针对 React/Next/TypeScript、ESLint、PHP/Composer、Python、Docker、GitHub Actions 和数据库 schema 的可信方案,包含确切的文件和操作允许列表 | | 仓库发现 | 自动覆盖活跃的、非复刻(fork)的组织仓库 | | 更新策略 | 限定于仓库范围的严格、均衡或快速配置文件,带有需要审批的主要版本更新 | | 受保护的合并队列 | 仅在 canary/CI 检查通过且审查者批准后进行低风险更新 | | 安全 | OSV/Dependabot 关联、EPSS、CISA KEV、有界的语言感知可达性、语义兼容性、依赖项废弃/接管/仿冒/安装脚本证据、修复 SLA、自动化零日遏制以及明确的未知可见性 | | 治理 | 分支保护、CI、CODEOWNERS、安全策略、许可证、核心策略检查、逐组织配置、保留策略、委托管理员以及隔离测试 | | 供应链 | 直接/传递 SPDX 图谱、无密钥的 GitHub OIDC/Sigstore SLSA 来源和 SBOM 证明、OpenVEX、不可变的 Action 摘要、多生态系统 canary 以及包调研 | | 报告 | 每日健康 issue、每周摘要、已签名的合规性包、HTML、Markdown、JSON、CSV 以及可选的 Slack 警报 | | 入职引导 | 由 bot 创建的 pull request,将仓库连接到策略、无密钥的 canary 以及通过 commit 锁定的实时事件 | | ChatOps | 经过权限检查的 apply、retry、cancel、status、explain、preview、完整的仓库 doctor、snooze、freeze、修复和受保护的回退 | | Pull Request 检查 | 独立的由 App 创建的代码审查和依赖智能检查,带有精确到行的注解、风险、许可证、漏洞、测试、回退指南以及已签名的审计证据 | | 仓库上下文 | 合并的 PR 模式、已批准的审查者、CODEOWNERS、编码规范以及定义在 manifest 中的、限定于每个仓库范围的测试命令 | | 决策 | 一个权威的 Safe、Review required 或 Blocked 结论,带有明确的原因代码以及匹配的 GitHub Check 结论 | | 自动修复 | 高可信度的 JavaScript、TypeScript、PHP、Java、C#、Go、Rust、Ruby 和 Kotlin 编译器建议、配置迁移以及本地 ESLint 修复,仅限于诊断文件,并且只有在仓库测试通过后才被接受 | | 身份验证 | 限定作用域、短期的 GitHub App 安装 token | | 运维 | 安装审计、GitHub 工作流监控、失败警报以及已签名的端到端验证 | | 跨仓库协调 | SBOM 加上明确的契约图、有序的推出活动、前序依赖关卡以及关联的 GitHub pull request | | 合并后保护 | 相同 SHA 的检查、状态和部署监控,配合幂等的、受审查把关的回退 pull request | | 发布 | 自动化版本、changelog、tag 和发布 pull request | | 可扩展性 | 离线 CLI 以及带有能力允许列表、worker 隔离、超时和 JSON 验证的分析器和策略 Plugin SDK | ## 架构 ``` flowchart LR subgraph Entry["Control plane"] S["Scheduled workflows"] M["Manual workflow dispatch"] C["Trusted /hawk command"] end subgraph Controller["HawkOps repository"] T["Short-lived GitHub App token"] R["Renovate engine"] O["Repository onboarding"] H["Health and governance reporter"] end subgraph Targets["Cybrense repositories"] D["Dependency dashboards"] P["Focused update pull requests"] G["Governance and SBOM signals"] end subgraph Outputs["Operational outputs"] I["Central health issue"] A["HTML / MD / JSON / CSV artifact"] N["Actionable Slack alert"] end S --> T M --> T C --> T T --> R T --> O T --> H R --> D R --> P O --> P H --> G G --> I G --> A G --> N ``` ## 工作流图谱 | 工作流 | 触发器 | 目的 | 写入行为 | | --- | --- | --- | --- | | `validate.yml` | 推送和 Pull Request | 验证策略、工作流、测试和运行时依赖 | 无 | | `codeql.yml` | 推送、Pull Request 和定时任务 | 当仓库计划支持 CodeQL 时分析 JavaScript | 仅输出安全结果 | | `scorecard.yml` | 推送、定时任务、保护规则更改或手动 | 发布 OpenSSF Scorecard SARIF 和证据 | 仅输出安全结果 | | `benchmark.yml` | 基准测试更改或手动 | 生成可重现的比较指标 | 仅输出 Artifact | | `onboard.yml` | UTC 时间周一 03:47 或手动 | 开启由 bot 创作的策略引导 PR | 试运行或显式 apply | | `renovate.yml` | UTC 时间周一 04:17 或手动 | 发现仓库并维护依赖 | 试运行或显式 apply | | `health.yml` | UTC 时间每日 06:17 或手动 | 刷新组织健康和治理智能分析 | 仅限核心报告 issue | | `weekly-digest.yml` | UTC 时间周一 07:47 或手动 | 发布每周摘要和已签名的合规包 | 仅限每周报告 issue | | `impact.yml` | 手动 | 根据 SBOM 对跨仓库的依赖影响范围进行排名 | 仅输出 Artifact | | `cross-repo.yml` | 合并事件、定时任务或手动 | 调节供应商优先的更新活动,并仅分派第一个未完成的阶段 | 关联更新 PR;从不自动合并 | | `incident.yml` | 手动(在受保护环境中) | 冻结受影响的包并关闭可信的高风险 PR | 需要明确的生产批准 | | `zero-day.yml` | 每 15 分钟或手动 | 检测组织 SBOM 中的严重安全通报,遏制已确认的,并分派精确版本的紧急修复 | 作用域内的看板控制和受审查把关的 PR 工作流 | | `provenance.yml` | 发布或手动 | 生成 SPDX、OpenVEX、SLSA 和 DSSE 证据 | 仅输出 Artifact | | `merge-queue.yml` | 每 15 分钟或手动 | 合并已批准、通过的、低风险的更新 | 仅限受保护的 squash 合并 | | `remediate.yml` | 可信的 ChatOps 分派 | 收集失败检查的证据,选择稳定的回退版本,运行受保护的 npm/Composer 更改以及确定性的多生态系统迁移修复,重新运行仓库检查,仅在验证通过后才开启受审查的 PR | 从不自动合并 | | `rollback.yml` | 可信的 ChatOps 分派 | 为已合并的依赖更新开启一个受审查的回退 PR | 从不自动合并 | | `post-merge-guardian.yml` | 受信任的依赖合并 | 监控确切的合并 commit,并在发生回归时分派一个受保护的回退 | 仅限回退 PR;从不自动合并 | | `chatops.yml` | 受信任的 issue 评论 | 分派已批准的运维工作流 | 仅限确切的命令 | | `github-events.yml` | 每 5 分钟或手动 | 处理受信任的看板命令并审查每个准备就绪的 pull request | 仅限 App 范围内的写入 | | `secret-scan.yml` | 推送、Pull Request、定时任务或手动 | 使用不可变的扫描器镜像扫描已验证提交的密钥 | 无 | | `security-audit.yml` | Pull Request、推送、每周或手动 | 审计工作流和 App 权限策略,并对不受信任的解析器输入进行模糊测试 | 仅输出证据 Artifact | | `installation-audit.yml` | 每日或手动 | 审计 App 安装和权限 | 报告和警报 | | `e2e-apply.yml` | 手动 | 通过真实的 GitHub 看板评论和工作流验证 status、doctor、apply 和 retry | 仅限测试目标 | | `p0-pilot.yml` | 手动(在受保护环境中) | 模拟生产故障并验证次级组织的安装边界 | 仅限已授权的非生产测试目标 | | `release.yml` | 推送到 `main` | 维护发布 PR 并发布版本 | 发布 PR 或发布版本 | 并发控制可防止重叠的维护、引导、健康或 ChatOps 作业。 ## 快速开始 ### 要求 - Node.js 20 或更高版本 - 用于本地 Renovate 试运行的 Docker - 通过组织所有者或授权维护者身份验证的 GitHub CLI - 创建和安装 GitHub App 的权限 ### 1. 克隆并验证 ``` git clone https://github.com/MrBoodj011/HawkOps.git cd HawkOps npm ci npm run check ``` 通过已发布的包进行本地 CLI 访问: ``` npm install --global cybrense-hawk hawk --help ``` CLI 支持本地检查和操作员命令。组织范围内的自动化仍需安装下文所述的 GitHub App。 ### 2. 注册 GitHub App ``` gh auth login npm run register-app ``` 打开终端中显示的本地 URL,审查请求的权限,创建该 App,并将其安装到所有获批的组织仓库中。 设置向导会将 App ID 和 Client ID 写入 Actions 变量,并将私钥直接发送到 Actions Secrets。该密钥永远不会写入磁盘。 注册和手动设置的完整流程请参见 [docs/SETUP.md](docs/SETUP.md)。 ### 3. 通过只读运行进行验证 ``` gh workflow run onboard.yml --repo MrBoodj011/HawkOps \ -f mode=dry-run gh workflow run renovate.yml --repo MrBoodj011/HawkOps \ -f mode=dry-run \ -f log_level=info gh workflow run health.yml --repo MrBoodj011/HawkOps ``` 在启用 apply 模式之前,检查计划的仓库、依赖分支、pull request 以及生成的报告。 ### 4. 启用正常运行 在干净的试运行之后: ``` gh workflow run onboard.yml --repo MrBoodj011/HawkOps \ -f mode=apply gh workflow run renovate.yml --repo MrBoodj011/HawkOps \ -f mode=apply \ -f log_level=info ``` 定时工作流只有在 GitHub App 变量和 secret 存在时才会使用 apply 模式。 ## GitHub App 权限 该 App 仅请求依赖维护、治理检查、报告和由 bot 创建的 pull request 所需的权限。 完整的已审查权限契约、token 边界和审计流程记录在 [docs/GITHUB_APP_PERMISSIONS.md](docs/GITHUB_APP_PERMISSIONS.md) 中。 ### 仓库权限 | 权限 | 访问级别 | 用途 | | --- | --- | --- | | Administration | 读取 | 检查默认分支保护 | | Actions | 读取和写入 | 分派已批准的 HawkOps 工作流并检查其状态 | | Checks | 读取和写入 | 读取 CI 状态并维护更新检查 | | Commit statuses | 读取和写入 | 读取并发布更新状态 | | Contents | 读取和写入 | 检查 manifest 并创建更新分支 | | Dependabot alerts | 读取 | 安全严重性和 SLA 报告 | | Issues | 读取和写入 | Dependency Dashboard、健康 issue 和 ChatOps 回复 | | Metadata | 读取 | 仓库发现和身份识别 | | Pull requests | 读取和写入 | 开启并维护更新/引导 PR | | Workflows | 读取和写入 | 更新锁定的 workflow 依赖 | ### 组织权限 | 权限 | 访问级别 | 用途 | | --- | --- | --- | | Members | 读取 | 可信的组织成员授权 | 该 App 不需要 webhook 订阅。核心的 **HawkOps GitHub events** 工作流通过 GitHub API 读取受信任的 issue 评论和 pull request,然后为看板命令、由 App 创建的 **HawkOps PR Reviewer** 以及专注于依赖的 **HawkOps PR Check** 提供支持。 ## ChatOps 受信任的组织成员和仓库协作者可以通过此仓库中的 issue 评论来操作维护工具。 | 命令 | 结果 | | --- | --- | | `/hawk status` | 返回核心 GitHub 健康 issue 和工作流链接 | | `/hawk health` | 分派全新的组织健康审计 | | `/hawk onboard dry-run` | 在不写入仓库的情况下检查入职覆盖范围 | | `/hawk apply` | 从仓库 Dependency Dashboard 运行已批准的更新 | | `/hawk retry` | 在定向运行失败后重新运行已批准的更新 | | `/hawk cancel` | 取消排队中或正在运行的定向维护 | | `/hawk status` (在仓库看板上) | 列出该仓库的活跃更新状态 | | `/hawk explain标签:MITM代理, 暗色界面, 自定义脚本