RafineriaAI/aos-workflow-gate

GitHub: RafineriaAI/aos-workflow-gate

将 CI 检查、扫描器和 AI-agent 信号转化为确定性、可重放、防篡改的发布与 PR 门控决策记录的 GitHub Action 及 CLI 工具。

Stars: 0 | Forks: 0

# aos-workflow-gate 面向 CI、PR、扫描器和 AI-agent 信号的基于证据的工作流门控。 本仓库是围绕 `aos-kernel` 构建的工作流层。其职责是使 pull request 或发布门控变得可解释且可重放:收集工作流信号,应用显式策略,并基于证据生成 `PASS`、`WARN` 或 `BLOCK` 决策。 ## 当前状态 阶段 2:已实现本地 `evaluate` CLI 和咨询性 GitHub Action。阶段 3 已启动:已实现零配置 GitHub check-runs 收集器,因此该 action 无需任何手动编写的输入即可对 pull request 进行门控。门控会将收集到的信号和显式策略转化为确定性、可重放且防篡改的 `PASS`、`WARN` 或 `BLOCK` 决策记录。下一步计划开发更多的信号适配器(如 SARIF、Scorecard 摘要)。 决策记录带有 `UNSIGNED_NOT_OFFICIAL` 验证状态:它们可以进行结构和重放校验,但不是官方的签名裁决。 本仓库目前不作任何关于生产环境、合规性、签名、SLSA 或安全审计的声明。 ## 核心理念 普通的 CI 仪表盘只会告诉你哪些检查通过了。`aos-workflow-gate` 旨在回答一个更严格的问题: 这将门控行为从一堆分散的红绿检查结果转变为可重放的决策记录。 ## 实际用例 维护者希望:当必需的检查缺失时拦截发布候选版本;当非阻塞性扫描器报告已知风险时发出警告;并且只有在具备必需的证据时才予以通过。 在本地运行门控: ``` python -m pip install -e . aos-workflow-gate evaluate \ --input examples/github-pr-signal-bundle.json \ --policy policies/default.yml \ --out examples/gate-decision.json ``` 这将打印出裁决结果并写入完整的决策记录。对于已提交的示例,裁决结果为 `WARN`:必需的检查已通过,但仍存在一个咨询性扫描器警告。该记录保留了主体身份、策略身份及摘要、输入身份及摘要、解释说明以及用于防篡改的自摘要。已提交的副本存放于 [examples/gate-decision.json](examples/gate-decision.json)。 验证决策记录是否被篡改: ``` aos-workflow-gate verify \ --input examples/gate-decision.json \ --bundle examples/github-pr-signal-bundle.json ``` 将记录渲染为 Markdown(即 GitHub Action 发布的摘要): ``` aos-workflow-gate summarize --input examples/gate-decision.json ``` 将验证过的记录导出为未签名的 in-toto Statement,并使用 您自己的密钥对其进行签名(参见 [docs/DECISION_PREDICATE.md](docs/DECISION_PREDICATE.md)): ``` aos-workflow-gate export \ --input examples/aos-kernel-gate-decision.json \ --out gate-statement.json cosign sign-blob --yes gate-statement.json \ --output-signature gate-statement.sig ``` 草拟的输入和策略文件分别为 [examples/github-pr-signal-bundle.json](examples/github-pr-signal-bundle.json) 和 [policies/default.yml](policies/default.yml)。 ## GitHub Action 自测模式(零配置)——对您的 pipeline 进行咨询性自测, 无需编写任何 bundle 或策略。该 action 会收集 当前 commit 已完成的 check runs,据此生成显式的咨询性策略, 并向作业页面写入可重放的决策记录和 Markdown 摘要。 这是一个完整的工作流文件——只需将其复制为 `.github/workflows/aos-self-test.yml`。无需 checkout:自测 模式通过 API 读取 check runs,并直接从 action 自身进行安装: ``` name: AOS Self-Test on: pull_request: permissions: contents: read checks: read jobs: self-test: runs-on: ubuntu-latest steps: # Pinned from actions/setup-python@v6 on 2026-07-03. - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: "3.11" - name: AOS self-test (advisory) uses: RafineriaAI/aos-workflow-gate@v0.11.1 with: required-checks: "ci / validate" ``` 需要 `checks: read` 是因为 `permissions:` 块会将所有未列出的 范围设为 `none`,而零配置模式需要通过 workflow token 读取 commit 的 check runs。 公开仓库不配置此项也能正常运行;私有仓库则不行。 `required-checks` 是可选的;被指定的检查将成为必需项(缺失或 失败意味着 `BLOCK`),其他所有收集到的检查均为咨询性检查。设置 `wait-for-checks: "120"` 可轮询等待直到必需的检查完成(仅 等待必需的检查;若等待结束时检查未完成,则执行失败关闭策略 并记录在 bundle 的收集状态中)。生成的 bundle 和策略会被写入 `.aos-gate/` 目录,以确保决策保持可重放性。 若需完全控制,请提供显式的 bundle 和策略。该 action 是 只读的,不需要任何仓库密钥,它会向作业 页面写入 Markdown 摘要,并公开决策记录以便上传为 artifact: ``` permissions: contents: read steps: # Pinned from actions/checkout@v5 on 2026-07-03. - uses: actions/checkout@93cb6efe18208431cddfb8368fd83d5badbf9bfd with: persist-credentials: false # Pinned from actions/setup-python@v6 on 2026-07-03. - uses: actions/setup-python@ece7cb06caefa5fff74198d8649806c4678c61a1 with: python-version: "3.11" - name: Run gate (advisory) id: gate uses: RafineriaAI/aos-workflow-gate@v0.11.1 with: input: examples/github-pr-signal-bundle.json # Pinned from actions/upload-artifact@v7.0.1 on 2026-07-04. - name: Upload decision record uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a with: name: gate-decision path: gate-decision.json ``` 咨询模式下绝不会导致作业失败;裁决结果会在步骤摘要 和 `verdict` 输出中报告。设置 `enforce: "true"` 可在出现 `BLOCK` 裁决 时使步骤失败。本仓库在 [.github/workflows/aos-workflow-gate-self.yml](.github/workflows/aos-workflow-gate-self.yml) 中对自身运行了该 action。 ## 试点与设计合作伙伴 自助使用是免费的(Apache-2.0 协议,无功能限制)。正在为您的工作流 评估真实的发布门控?[引导式试点](docs/GUIDED_PILOT.md) 将为您的某个真实工作流设计策略,并交付可衡量的、 可重放的结果——策略的所有权始终归您所有。名额有限的 [设计合作伙伴版本](docs/GUIDED_PILOT.md#design-partner-variant) 允许通过提供结构化反馈来换取范围费用的减免。 **[请求范围评估 →](https://github.com/RafineriaAI/aos-workflow-gate/issues/new?template=guided-pilot-scoping.yml)** (双方均无强制承诺)。体验过该门控? 只需 [两分钟反馈](https://github.com/RafineriaAI/aos-workflow-gate/issues/new?template=feedback.yml) 即可助力路线图的制定。 ## 平台中立性 门控核心是平台中立的:纯 Python 编写,零运行时依赖, 输入输出均为 JSON。GitHub Enterprise Server 可开箱即用,GitLab CI 或 Jenkins 也可在显式提供的 bundle 上运行相同的评估—— 参见 [docs/CI_INTEGRATIONS.md](docs/CI_INTEGRATIONS.md)。按照设计,只有 check-runs 收集器和 Action 是 GitHub 专用的。 ## 项目定位 - 基于工作流证据的确定性门控。 - 针对 CI、PR、扫描器和 AI-agent 信号的策略与证据层。 - 连接 `aos-kernel` 裁决语义与真实仓库工作流的实用桥梁。 - 一种 GitHub Action 和本地 CLI,在真正拦截任何内容之前以咨询模式运行。 ## 非本项目定位 - 不声明仓库是安全的。 - 不是合规认证系统。 - 不替代代码审查、测试、威胁建模或发布工程。 - 不是工作流系统正确性的运行时证明。 - 不是签名或出处授权机构。 ## 文档导航 - [范围](docs/SCOPE.md) 定义了声明边界和非目标。 - [架构](docs/ARCHITECTURE.md) 定义了各个层级以及每个阶段的实现内容。 - [用例](docs/USE_CASES.md) 提供了首批实际的工作流场景。 - [采用指南](docs/ADOPTION_GUIDE.md) 消除术语和集成障碍。 - [标准兼容性](docs/STANDARDS_COMPATIBILITY.md) 将计划中的集成映射到 SLSA、SPDX、CycloneDX、SARIF、in-toto 和 OpenSSF Scorecard,但不声称合规。 - [决策记录断言](docs/DECISION_PREDICATE.md) 定义了 in-toto Statement 导出和操作员密钥签名方案。 - [CI 集成](docs/CI_INTEGRATIONS.md) 涵盖了 GitHub Enterprise Server、GitLab CI 和通用 shell 用法。 - [信任](docs/TRUST.md) 展示了如何自行验证每一个声明:只读权限、无遥测、零依赖、防篡改证据、离线重放。 - [买家 FAQ](docs/BUYER_FAQ.md) 解答安全审查人员的问题:数据流、权限、免费与付费、供应商风险、平台覆盖范围。 - [安全准备情况](docs/SECURITY_READINESS.md) 记录了私有仓库数据模型和已实施的输入强化,每一项均附带负面测试。 - [用户 FAQ](docs/USER_FAQ.md) 解答首次运行问题,并将每一个故障症状对应到其含义和修复方案。 - [价值](docs/VALUE.md) 阐明了门控的价值,但仅限证据所能达到的范畴。 - [一页纸介绍](docs/ONE_PAGER.md) 是一份可发送的摘要:涵盖问题、产品、证明和参与路径。 - [引导式试点](docs/GUIDED_PILOT.md) 定义了付费辅助路径和设计合作伙伴版本。 - [市场页面](docs/MARKETPLACE_LISTING.md) 包含可直接粘贴的展示文案和状态。 - [真实仓库重放案例研究](docs/case-studies/aos-kernel-release-surface-replay.md) 在指定的 commit 上对真实的工作流信号运行门控,并离线重放已提交的决策。 - [路线图](ROADMAP.md) 定义了分阶段的计划。 - [发布治理](docs/RELEASE_GOVERNANCE.md) 定义了分支、规则集、标签和发布策略。 - [草拟信号 bundle](examples/github-pr-signal-bundle.json) 和 [草拟策略](policies/default.yml) 使首个用例更加具体化。 - [安全策略](SECURITY.md) 定义了负责任的报告边界。 - [贡献](CONTRIBUTING.md) 定义了对贡献的期望。 ## 本地检查 使用以下命令运行本地基础规范检查: ``` python -m ruff check . python -m mypy python -m pytest python tools/check_public_surface.py ``` 或者仅运行公共表面检查: ``` python tools/check_public_surface.py ``` 此检查会验证文档索引、引导声明边界和草拟的示例文件。它不是产品审计。 ## 与 aos-kernel 的关系 `aos-kernel` 仍然是最小的公共内核和形式化表面。`aos-workflow-gate` 是操作层,负责将真实的工作流信号适配为门控决策记录。内核正确性声明不会自动延伸至本仓库。 ## 许可证 Apache-2.0。参见 [LICENSE](LICENSE)。 该许可证仅涵盖本仓库的源代码。不授予 关于 "AOS"、"AOS Kernel" 或 "RafineriaAI" 名称和标志的任何权利,亦不授予 独立的专有 AOS Core 技术的任何权利。参见 [NOTICE](NOTICE)。
标签:GitHub Action, Homebrew安装, Python, 无后门, 策略引擎, 网络安全挑战, 自动化门禁, 逆向工具