治理
本文档描述了该项目的规则和治理方式。它旨在供项目的所有开发人员和 Prometheus 社区遵循。本治理文档中使用的常见术语列于下方:
-
团队成员 (Team members):私有 prometheus-team Google 群组的任何成员。
-
维护者 (Maintainers):维护者领导单个项目或其部分内容(参考
MAINTAINERS.md)。 -
项目 (Projects):Prometheus GitHub 组织 中的单个存储库被称为项目。
-
Prometheus 项目:本治理框架下进行的所有活动的总和,涉及一个或多个存储库或社区。
价值观
Prometheus 开发人员和社区应遵循 CNCF 章程 中定义的价值观,包括 CNCF 行为准则 。此外,Prometheus 社区致力于友善互助、有效反馈以及构建包容性的环境。Prometheus 开发人员通常以共识为决策依据,只有在无法达成共识时,才会通过多数投票来解决冲突。
项目
每个项目必须包含一个 MAINTAINERS.md 文件,且至少有一名维护者。如果项目有发布流程,则应确保访问权限和文档允许超过一人执行发布操作。发布信息应在 prometheus-users 邮件列表 上发布。任何新项目都应首先在 开发邮件列表 上根据下述投票流程进行提议。当某个项目不再相关时,应将其移至 prometheus-junkyard GitHub 组织。
决策制定
团队成员
对于至少 3 个月来一直为 Prometheus 项目做出持续贡献的人员,可以授予其团队成员身份。这通常体现为代码改进和/或在文档方面的重要工作,但也可能考虑组织活动或用户支持。
现有成员可以向 prometheus-team 发送电子邮件提议新成员。就接受新成员达成共识是非常理想的。然而,最终的提议将通过正式的 绝对多数投票 进行决定。
如果接受了新成员提议,应通过电子邮件私下联系拟定的团队成员,以确认或拒绝其团队成员身份。此电子邮件将抄送至 prometheus-team 以备记录。
如果他们选择接受,则遵循 入职 (onboarding) 流程。
团队成员可以随时通过发送电子邮件至 团队 退出团队。
可以通过在 团队邮件列表 上进行 绝对多数投票 来移除团队成员。对于此类投票,当事人无权投票,且不计入法定人数。任何移除投票只能针对单一个人。
成员去世后,他们将自动离开团队。
如果成员离开,则应用 离职 (offboarding) 流程。
当前的团队成员有
- Alex Greenbank (独立)
- Arianna Vespri (独立)
- Arthur Sens (Grafana Labs )
- Arve Knudsen (Grafana Labs )
- Augustin Husson (Amadeus )
- Ayoub Mrini (Red Hat )
- Bartłomiej Płotka (Google )
- Ben Kochie (Reddit )
- Ben Reedy (Indue Ltd )
- Bryan Boreham (Grafana Labs )
- Callum Styan (独立)
- Carrie Edwards (Grafana Labs )
- Chris Marchbanks (Grafana Labs )
- Chris Sinjakli (PlanetScale )
- Conrad Hoffmann (独立)
- Cristian Greco (Grafana Labs )
- Daniel Magliola (IndeedFlex )
- Daniel Swarbrick (独立)
- David Ashpole (Google )
- David Leadbeater (G-Research )
- Doug Hoard (Confluent )
- Fabian Stäber (Grafana Labs )
- Fiona Liao (Grafana Labs )
- Frederic Branczyk (Polar Signals )
- Ganesh Vernekar (Reddit )
- George Robinson (Grafana Labs )
- Goutham Veeramachaneni (Grafana Labs )
- Gregor Zeitlinger (Grafana Labs )
- György Krajcsovits (Grafana Labs )
- Jan Fajerski (Red Hat )
- Jan-Otto Kröpke (独立)
- Jesús Vázquez (Grafana Labs )
- Joe Adams (WebstaurantStore )
- Johannes Ziemke (5π Consulting )
- Josh Abreu (Grafana Labs )
- Julius Volz (PromLabs )
- Julien Pivotto (Grafana Labs )
- Kemal Akkoyun (独立)
- Matthias Loibl (Polar Signals )
- Matthias Rampke (Chronosphere )
- Max Inden (Protocol Labs )
- Owen Williams (Grafana Labs )
- Pedro Tanaka (Shopify )
- Richard Hartmann (Grafana Labs )
- Saswata Mukherjee (Red Hat )
- Sebastian Schubert (Grafana Labs )
- Simon Pasquier (Red Hat )
- Suraj Nath (Grafana Labs )
- Thomas Peitz (独立)
- Tobias Schmidt (独立)
- Tom Wilkie (Grafana Labs )
前成员
- Björn Rabenstein
- Brian Brazil
- Calle Pettersson
- Conor Broderick
- Fabian Reinartz
- Jessica Grebenschikov
- Krasi Georgiev
- Matt Layher
- Steve Durrheimer
- Stuart Nelson
请注意,在制定此治理文档以及正式确立团队成员身份之前,Prometheus 已从许多未列出的人员那里获得了重大贡献。
维护者
维护者领导一个或多个项目或其部分内容,并作为项目贡献者之间冲突解决的联系人。理想情况下,维护者也是团队成员,但对于因故尚未成为团队成员的合适人选,也可以有例外。
维护者身份的变更必须在 开发邮件列表 上宣布。它们由 惰性共识 (lazy consensus) 决定,并通过更改相应存储库的 MAINTAINERS.md 文件进行正式化。
维护者被授予 GitHub 组织 中所有项目的提交权限。
维护者或提交者可以通过通知 团队邮件列表 辞职。一年内没有项目活动的维护者被视为已辞职。鼓励希望辞职的维护者提名另一位团队成员接管该项目。
一个项目可以有多名维护者,只要他们之间明确商定职责即可。这包括协调谁负责处理哪些议题 (issue) 和拉取请求 (pull request)。
技术决策
仅影响单个项目的技术决策由该项目的维护者非正式地做出,并默认采用 惰性共识。跨越 Prometheus 项目多个部分的技术决策应在 Prometheus 开发者邮件列表 上进行讨论和决策。
决策通常通过 惰性共识 做出。如果无法达成共识,该事项可以通过 多数投票 解决。
治理变更
对本文档的实质性更改将在 开发者邮件列表 上公开讨论。任何更改都需要 绝对多数 支持。除非受到质疑,否则编辑性更改可通过 惰性共识 进行。
编辑性更改
编辑性更改是指修复拼写或语法、更新工作单位等;它们仅更新格式或反映外部且显而易见的事实。它们不会改变本文档中任何内容的意图或含义。它们必须通过 PR 提交,并经由 惰性共识 接受。
其他事项
任何需要决策的事项(包括但不限于财务事项)都可以由任何成员在认为必要时发起投票。对于财务、私密或人事事项,讨论和投票在 团队邮件列表 上进行;否则在 开发者邮件列表 上进行。
投票
Prometheus 项目通常通过非正式共识运行,但有时必须做出正式决策。
根据 上述 主题,将使用不同的投票方法。
所有投票必须至少持续一周。结束日期应在投票呼吁中明确说明。如果某一选项已获得足够多的投票,以至于后续投票无法改变最终结果,则投票可以提前结束。
在所有情况下,只有 团队成员 才有投票权,唯一的例外是强制移除一名团队成员,此时该成员无权投票。
关于人事事项(包括但不限于团队成员身份和维护者身份)的讨论和投票在 团队邮件列表 上私下进行。所有其他讨论和投票均在 开发者邮件列表 上公开进行。
对于公开讨论,鼓励所有感兴趣的人参与。正式的反对或投票权仅限于 团队成员。
共识
Prometheus 项目的默认决策机制是 惰性共识 。这意味着只要没有人反对,任何关于技术问题的决策都被视为得到 团队 的支持。
对任何共识决策的沉默即意味着默认同意,等同于明确同意。可以随时表示明确同意。任何人在任何时候都可以呼吁并将其提交到 开发者邮件列表 进行决策,但这并非必需。
共识决策绝不能覆盖或违背先前正式投票的精神。
如果有任何 团队成员 提出异议,团队成员将共同努力寻求一个各方都能接受的解决方案。该解决方案再次遵循惰性共识。
如果无法达成共识,但必须做出某种决策,则任何 团队成员 均可呼吁进行正式的 多数投票。
多数投票
多数投票必须在相应的邮件列表中通过单独的线程明确提出。主题必须以 [VOTE] 为前缀。在正文中,投票呼吁必须说明要投票的提议,并引用导致此点的任何讨论。
投票可以是单一提议(支持或反对),也可以是多种替代方案。
如果赞成票多于反对票,则单一提议的投票即视为成功。
如果有多种替代方案,成员可以投票支持一个或多个替代方案,或者投票“反对”以否决所有替代方案。不能投“弃权”票。如果某项替代方案获得的赞成票最多,且赞成票数超过投票总数的一半,则该方案视为胜出。如果没有任何方案达到此法定人数,则可分别呼吁对减少后的选项进行另一次投票。
绝对多数投票
绝对多数投票必须在相应的邮件列表中通过单独的线程明确提出。主题必须以 [VOTE] 为前缀。在正文中,投票呼吁必须说明要投票的提议,并引用导致此点的任何讨论。
投票可以是单一提议(支持或反对),也可以是多种替代方案。
如果至少有三分之二的合资格投票者投赞成票,则单一提议的投票即视为成功。
如果有多种替代方案,成员可以投票支持一个或多个方案,或者投票“反对”以否决所有方案。如果某项替代方案获得的赞成票最多,且获得至少三分之二合资格投票者的支持,则该方案视为胜出。如果没有任何方案达到此法定人数,则可分别呼吁对减少后的选项进行另一次投票。
入职 / 离职
入职/离职部分属于信息性内容,除非受到质疑,否则可以通过 惰性共识 进行更改。如果无法达成共识,该事项可通过 多数投票 解决。
入职
新成员将:
- 被添加到 团队成员 列表中。理想情况下,由他们自己提交 PR 并至少批准该 PR。
- 由现有团队成员在 开发者邮件列表 上宣布。理想情况下,新成员会在该线程中回复,确认团队成员身份。
- 作为 Owner 被添加到 GitHub 组织 中。
- 可选择性地添加到社区、junkyard 及相关组织和存储库中。
- 被添加到 团队邮件列表 中。
- 被添加到 prometheus.io GSuite 账户中,用户名由新成员选择。(最重要的是,这将获得一个
<chosen-username>@prometheus.io电子邮件地址,并提供对团队 GDrive 和日历的访问权限。新成员应将后者添加到自己的日历列表中。) - 向 CNCF 公告。
- 授予共享密码存储的访问权限。
离职
前成员将:
- 从 团队成员 列表中移除。理想情况下,由他们自己提交 PR 并至少批准该 PR。如果是强制移除,则无需批准。
- 从 GitHub 组织 及相关组织和存储库中移除。如果 团队 同意,他们可选择保留一个或多个存储库的维护权。
- 从 团队邮件列表 中移除,并降级为其他邮件列表(如 开发者 、用户 和 公告 )的普通成员。
- 向 CNCF 公告其已离职。我们将明确要求 CNCF 重新确认其已移除。
- 从共享密码存储中移除。所有密码、API 令牌等都会适时轮换(即在非自愿离职的情况下立即轮换,但在其他情况下可以与其他离职或常规轮换合并处理)。
- 从适用的组账户中移除。涉及此类组账户的服务包括但不限于 Digital Ocean、DockerHub、GSuite、Netlify、Twitter (通过 Tweetdeck)、Youtube。
- 不再被允许称自己为活跃的团队成员,也不得暗示此类情况。
- 如果他们愿意,可以被添加到前成员名单中。
如有必要,我们保留公开发布离职消息的权利。
常见问题
常见问题解答部分属于信息性内容,除非受到质疑,否则可以通过 惰性共识 进行更改。如果无法达成共识,该事项可通过 多数投票 解决。
如何提议决策?
向 开发者邮件列表 发送包含您的动议的电子邮件。如果在合理时间内没有异议,则视为决策已做出。如果有异议且无法达成共识,团队成员可以呼吁投票。
如何成为团队成员?
要成为正式团队成员,您应至少连续三个月为一个或多个项目做出持续贡献。届时,团队成员(通常是该项目的维护者)可能会提议您加入。相关讨论将私下进行,并在做出决定后私下通知您。一种可能但非强制的晋升路径是先成为维护者。
如果决定支持,您的新成员身份也会在 开发者邮件列表 上宣布。
如何添加一个项目?
作为团队成员,请在 开发者邮件列表 上提议新项目。如果没有异议,则在 GitHub 组织中创建该项目。至少添加一个解释项目目标的 README.md,以及一个包含项目维护者的 MAINTAINERS.md(此时,这可能意味着您自己)。
如何归档或移除一个项目?
向 开发者邮件列表 发送电子邮件提议退役某个项目。如果没有异议,请将其移动到 prometheus-junkyard GitHub 组织。
如何移除不活跃的维护者?
维护者可以通过通知 团队邮件列表 辞职。一年内没有项目活动的维护者将被视为已辞职。如果有紧急需要更换维护者,请在 团队邮件列表 上进行讨论。
如何移除团队成员?
团队成员可通过通知团队邮件列表 提出辞职。如果您认为某位团队成员应当在违背其意愿的情况下被除名,请向团队邮件列表 提出。相关讨论将会在那里私下进行。