ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

深入解析 Backstage 增强提案(BEP)流程:从设计讨论到落地实施的协作机制

深入解析 Backstage 增强提案(BEP)流程:从设计讨论到落地实施的协作机制 深入解析 Backstage 增强提案BEP流程从设计讨论到落地实施的协作机制【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstageBackstage Enhancement ProposalBEPBackstage 增强提案是 Backstage 开源项目用于提出、沟通和协调框架级新功能设计的官方流程。本文将围绕 beps/README.md 这一流程文档完整讲解 BEP 的适用场景、操作步骤、模板结构与元数据规范、状态机与常见问题并结合仓库中 0001–0014 号真实 BEP 及 BEP 模板 给出可直接参照的实战指引。读完本文你将掌握如何为 Backstage 提交一份规范、可评审、可追踪实现进度的 BEP。什么是 BEP为框架级改动而生的设计提案机制BEPBackstage Enhancement Proposal是 Backstage 社区中一种正式的提案方式用于提出、沟通和协调 Backstage 项目的新工作。它不是一次性的讨论帖而是一份持续演进、随实现过程更新的活文档living document。BEP 机制的核心理念是在投入大量代码工作之前先把设计决策摆上桌面让社区、维护者和相关 Project Area 的负责人能够充分评审设计并为实现工作指定明确的负责人owner。当一份 BEP 被合并merge时意味着它已被批准进入实现阶段并且有明确的负责人对该实现负责在此之前推动 BEP 前进的责任在提案作者身上。从仓库的实际演进看BEP 覆盖了 Backstage 诸多核心方向通知系统0001、动态前端插件0002、认证架构演进0003、Scaffolder 任务幂等0004、后端发现拆分0005、事件审计器0011、指标服务0012直至最新的连接服务0014。这些目录共同构成了 BEP 流程的实践档案既可用于追溯历史设计决策也可作为新 BEP 的写作范本。BEP 与 RFC issue、ADR 的分工社区协作中常出现三种容易混淆的机制BEP 流程文档对此做了明确区分机制定位是否需批准产出形态RFC issue收集对某个想法的反馈不需要任何人均可发起讨论话题BEP迭代新功能设计、获得 Project Area 负责人批准、跟踪实现需要 owners 批准后方可合并持续更新的设计文档ADR架构决策记录记录项目内部已作出的开发决策—决策档案关键差异在于RFC issue 更像一个讨论论坛任何人都可以打开而BEP 合并前必须经过所属 Project Area 负责人的批准且 BEP 内保存的是最新达成一致的设计RFC issue 则更偏向发散讨论。实践中一个 BEP 常常先以 RFC issue 起步待想法获得 owner 和批准后再转化为 BEP。ADR 则见 docs/architecture-decisions 目录专门用于记录已经作出的开发决策不用于提出新功能或改动。BEP 的适用边界何时必须用、何时不该用流程文档明确了两条边界必须/推荐使用 BEP对 Backstage 框架或核心功能产生影响的较大改动、希望在多个 PR 中迭代设计决策的贡献。BEP 不是强制要求但强烈推荐。不适用于新增或修改普通 Backstage 插件除非该插件实现了 Backstage 的核心功能。BEP 流程只针对 Backstage 框架和核心功能的改动。BEP 快速上手完整的 8 步流程流程文档 给出了从想法到合并的标准操作路径每一步都有明确的动作与产出与社区和维护者讨论想法。可在 GitHub、Discord或社区会议 / SIG 会议中进行。先确认其他人认为该工作值得投入并愿意评审 BEP 及后续代码改动。复制 BEP 模板。将 NNNN-template 目录复制为beps/NNNN-short-descriptive-title其中NNNN是下一个可用编号需用前导零补齐位数例如0004-scaffolder-task-idempotency。尽可能填写 YAML 元数据字段说明见下文元数据规范小节。尽己所能填写模板正文。如果需要某个 Project Area 拥有该 BEP在 CODEOWNERS 文件中为该 BEP 目录添加条目。创建 PR。标题格式为BEP: title。这一阶段的目标是澄清高层目标不要纠缠于细节PR 可以持续迭代直到 BEP 达到可合并状态。由相关维护者评审并提供反馈。参加相关 SIG 会议讨论 BEP 有助于加快推进。通知维护者你认为 BEP 已可合并。此时 BEP 应已完整填写、可立即实现并有明确的工作负责人。流程文档还特别补充了两点实践原则在 BEP 的 PR 处于打开状态时负责人可以并行开启独立的 PR 来发布支持该 BEP 的实验性功能以推动设计落地这些 PR 按常规评审流程即可合并。但如果 BEP 最终被撤回withdrawn或拒绝rejected这些实验性功能通常应当被移除。BEP 模板解剖一份合格 BEP 必备的章节结构仓库中的 BEP 模板 是每个新 BEP 的起点其正文包含一套固定的章节骨架模板中以 HTML 注释给出了每节应当写什么的写作提示Summary摘要用几段话给出待实现功能的高层概览要求只读摘要就能理解 BEP 要做什么、对用户有什么影响。Motivation动机明确列出动机、目标与非目标说明改动为何重要、对用户有何益处。Goals目标BEP 试图达成什么如何判断成功。Non-Goals非目标明确不在范围内的事项有助于聚焦讨论、推进进度。Proposal提案提案的具体内容。细节要足够让评审者准确理解提议但不应包含 API 设计或实现细节。Design Details设计细节包含足以让人理解改动的信息可以包含 API 规格甚至代码片段实现方式存在歧义时在此讨论。Release Plan发布计划描述新功能的发布过程必须考虑版本策略如果影响现有稳定 API需要分阶段发布并说明发布期间要收集的反馈。Dependencies依赖列出该工作对其他 BEP 或功能的依赖。Alternatives备选方案考虑过哪些其他方案、为什么否决。不必像提案一样详细但要足以表达想法与不可接受的原因。以 0001 通知系统 BEP 为实例可以看到这套骨架如何落地其 Proposal 拆分为 Signals Plugin 与 Notifications Plugin 两个新组件Design Details 给出了NotificationService、SignalService的完整 TypeScript 接口与示例信号 payloadAlternatives 部分则详细论证了信号插件为何要与通知插件分离为何默认不开放用户到用户user-to-user通知等关键取舍。新 BEP 作者完全可以参照这种接口 数据模型 备选方案论证的写作深度。BEP 元数据规范YAML frontmatter 字段详解每份 BEP 的开头是一段 YAML 文档包含该 BEP 的元数据。流程文档给出的当前必需字段如下以模板中的 YAML 为例字段说明titleBEP 的通俗标题同时会用于 BEP 文件名。详见模板中的说明与细节。statusBEP 当前状态必须是下方BEP 状态一节列出的取值之一。authorsBEP 作者的 GitHub ID 列表。通常只包含原始作者若有重大贡献可追加作者。ownersBEP 负责人的 GitHub ID 列表。负责人对该 BEP 的实现负责BEP 进入implementable状态的前提条件之一。project-areas与该 BEP 紧密相关、需要批准它的 Project Area 列表。已有 Project Area 清单见 OWNERS.md。如果 BEP 与任何现有 Project Area 无关则使用core-maintainers。creation-dateBEP 首次以 PR 形式提交的日期格式为yyyy-mm-dd。模板文件 beps/NNNN-template/README.md 的 frontmatter 示例--- title: BEP Title status: implementable authors: - ghost owners: - ghost project-areas: - aaa - bbb creation-date: yyyy-mm-dd ---注意模板注释中的提示BEP 完成时应删除所有预置的 HTML 注释。BEP 状态机五种状态及其流转规则status字段对清晰传达每份 BEP 的进展至关重要。流程文档规定只能取以下五个值之一状态含义implementable已被所属 Project Area 维护者批准进入实现阶段。implemented已实现完成。deferred曾获批准但当前不再积极推进。任何人有兴趣都可以接手将其移回implementable状态。rejected批准者和作者已决定不再推进BEP 作为历史文档保留。replaced已被新的 BEP 取代。从仓库实际情况看这五种状态都有对应的实例通知系统0001、认证架构演进0003等已标记为implemented动态前端插件0002、Scaffolder 任务幂等0004等处于provisional而指标服务0012、Backstage AI0013、连接服务0014等新提案处于implementable正处于从批准走向实现的阶段。关于 provisional 状态流程文档特别解释了provisional状态这是旧版本 BEP 流程遗留的状态含义是已被批准为待办工作但具体设计尚未达成一致。处于该状态的 BEP 必须先迁移到implementable状态才能开始实现。仓库中的 0002、0004、0005 等 BEP 即处于此状态读者在阅读时需结合这一背景理解它们设计未定稿的性质。BEP 维护问答更新、协作与流程演进流程文档以 FAQ 形式回答了维护阶段最常遇到的问题能否更新现有 BEP可以但前提是 BEP 处于implementable状态且更新应基于实现阶段的新发现。若要对已批准的 BEP 做重大改动应开启一份新 BEP 来取代旧 BEP对应replaced状态。能否更新别人提交的 BEP可以。BEP 是活文档任何人都可以提出修改建议。社区鼓励挑战 BEP 中的设计决策并给出替代方案也可以帮助充实一份尚未完整成形的 BEP 的细节。FAQ 里没找到答案怎么办BEP 流程本身仍在演进中。若有缺失或未回答的问题可通过社区 Discord 联系若想修改 BEP 流程本身可直接开 PR 提交提案。从 BEP 到实现编号规范与仓库实践档案beps/目录本身就是一个完整的实践档案。目录命名遵循NNNN-short-descriptive-title规范例如0001-notifications-system、0004-scaffolder-task-idempotency。每个 BEP 目录下通常只有一个README.md即 BEP 正文部分 BEP 还附带架构图、配置文件等佐证材料例如 0001 通知系统 BEP 目录下的notifications-architecture.drawio.svg架构图以及 0005 后端发现拆分 BEP 目录下的多张时序图。结合 0001 通知系统 BEP 与仓库源码可以完整看到BEP 设计 → 代码实现的对应关系BEP 中设计的NotificationService接口仅一个send方法其实现为 plugins/notifications-node/src/service/DefaultNotificationService.ts 中的DefaultNotificationService它通过DiscoveryService解析通知后端地址、用AuthService获取插件间请求令牌再以 POST 请求将通知发送到notifications后端。BEP 中定义的NotificationPayload、Notification、NotificationSeverity等类型与 plugins/notifications-common/src/types.ts 中的公共类型一一对应严重级别critical | high | normal | low的有序列表定义在 plugins/notifications-common/src/constants.ts。BEP 提到的notification processors扩展点在 plugins/notifications-common/src/filters.ts 中有对应的处理器过滤配置解析逻辑minSeverity、maxSeverity、excludedTopics、includedTopics并带有配置值合法性校验。这类设计与实现对照正是 BEP 文档最大的价值所在它不仅是提案更是后续开发者理解某个框架特性为何如此设计的入口。前身与启发BEP 与 Kubernetes KEP 的关系流程文档在Prior Art一节明确说明BEP 流程深受 Kubernetes Enhancement ProposalKEP流程的启发。KEP 是 Kubernetes 社区中大规模、长周期功能设计的成熟提案机制BEP 借鉴了其提案 → 批准 → 跟踪实现的核心思想并针对 Backstage 单仓库、插件生态的实际情况做了裁剪——例如通过 Project Area 负责人机制代替独立的 SIG 审批链。结语用 BEP 推动 Backstage 框架演进BEP 机制为 Backstage 的框架级改动提供了一条清晰、可评审、可追踪的路径先用 RFC issue 收集想法再以beps/NNNN-xxx目录承载持续演进的完整设计文档经 Project Area 负责人批准后进入implementable状态并落地实现。对于希望深度参与 Backstage 框架开发的贡献者参照 BEP 模板 与仓库中 0001–0014 号真实案例遵循 流程文档 的 8 步操作路径即可规范地推动自己的设计从讨论走向实现。【免费下载链接】backstageBackstage is an open framework for building developer portals项目地址: https://gitcode.com/GitHub_Trending/ba/backstage创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表