logo
0
0
WeChat Login

cnbexec

基于 llms-full.txt.cnb.yml / CNB 流水线规则实现的一个 Go 本地执行器原型

当前已实现

配置解析

  • 读取 .cnb.yml
  • include:支持字符串 / 对象 / config 内联形式
  • include 合并规则:
    • 数组 + 数组 => 追加
    • 对象 + 对象 => 递归合并
    • 对象 + 数组 / 数组 + 对象 => 数组优先
  • !reference:支持跨文件引用,最多递归 10 层
  • 兼容 YAML 锚点、别名、对象合并 <<

触发与选择

  • 分支匹配:普通分支 / glob / $ fallback
  • 事件匹配:从分支下选择对应事件的流水线
  • 同一事件下多条 pipeline 并行执行

Pipeline / Stage / Job 语义

  • stages 串行
  • Stage 内 jobs
    • 数组 => 串行
    • 对象 => 并行
  • 支持脚本任务、插件任务、内置任务
  • 支持 retry
  • 支持 allowFailure
  • 支持 lock(本进程内锁)
  • 支持 failStages / endStages
  • 支持 exit 78 中断流水线

环境变量

  • env / imports
  • imports 支持 YAML / JSON / key=value / 证书文件
  • 深层属性平铺
  • $VAR / ${VAR} 变量替换
  • exports 导出后续 Job 可见的环境变量
  • 解析 ##[set-output key=value]

Docker 运行

  • pipeline.docker.image
  • pipeline.docker.build
    • 根据 Dockerfile + versionBy + buildArgs 计算本地缓存 tag
    • by 控制 build context 可见文件
  • stage.image / job.image
  • 插件任务将 settings 转为 PLUGIN_*
  • 支持 docker.volumes 的基础映射与 copy-on-write 模式

已实现内置任务

  • cnb:await
  • cnb:resolve
  • cnb:read-file
  • cnb:destroy-token(本地近似实现)
  • cnb:apply(同仓本地递归触发)
  • cnb:trigger(仅支持当前仓本地近似实现)
  • docker:cache(noop 占位)

尚未完全复刻 / 当前为近似实现

  • CNB 平台级权限模型:CNB_TOKEN、可信/不可信事件隔离、密钥仓库 allow 校验
  • PR 预合并 checkout、tag/web/api/cron 的平台侧真实取代码逻辑
  • service:docker / service:vscode 的完整平台注入行为
  • await/resolve 的死锁检测仅做了基础等待,未实现完整拓扑检测
  • breakIfModify / skipIfModify 还没有接真实 SCM 源分支更新检测
  • Docker 容器生命周期目前以 每个 job 独立 docker run 近似,不是平台内同一长生命周期容器
  • devcontainer 仅保留配置位,未完整展开
  • 所有官方内置任务未全部覆盖

使用

go run ./cmd/cnbexec \ --config .cnb.yml \ --workspace . \ --branch main \ --event push \ --changed package.json \ --changed src/main.go \ -e FOO=bar

如果你希望没有 pipeline.docker.image 时也默认放进某个容器中执行:

CNB_EXEC_DEFAULT_IMAGE=alpine:3.20 go run ./cmd/cnbexec --config .cnb.yml

执行结果会输出一份 JSON 摘要。

模板与回归基线

仓库内已经提供一套模板基线,位于 templates/

  • templates/minimal:最小可运行示例
  • templates/builtin:内置任务回归模板
  • templates/control-flow:流程控制模板
  • templates/full-supported:当前执行器综合能力展示模板

模板总览见:templates/README.md

这些模板已经加入自动化回归测试,适合在后续重构执行器时用来防回归。

测试

go test ./...

About

这是一个基于自定义工作流自动创建的临时仓库

Language
Go99.8%
Dockerfile0.2%