Ansible 社区软件包集合移除流程
概述
有时,Ansible 社区会出于稳定性、法律或安全原因从 Ansible 软件包中移除集合。本文档描述了我们为何可能从 Ansible 社区软件包(构建数据)中移除集合的原因。
在紧急情况下(例如,集合中存在未修复的严重安全漏洞),Ansible 社区工程指导委员会可以投票决定紧急例外情况。在大多数情况下,我们遵循此页面上列出的规则。
一般流程
移除集合的一般流程遵循以下步骤
宣布即将移除集合。
移除集合。
在适当的时候,重新添加集合。
宣布即将移除
在 Ansible 变更日志中宣布即将移除(
https://github.com/ansible-community/ansible-build-data/blob/main/<X>/changelog.yaml
)。请参阅以下链接,了解如何在 Ansible 变更日志中添加变更日志条目的示例。如果可能,请在集合的问题跟踪器中宣布即将移除。
在 The Bullhorn 中宣布即将移除。
移除集合
要从 Ansible 版本 X.0.0 中移除集合
从
ansible.in
中移除(https://github.com/ansible-community/ansible-build-data/blob/main/<X>/ansible.in
)。从
collection-meta.yaml
中移除(https://github.com/ansible-community/ansible-build-data/blob/main/<X>/collection-meta.yaml
)。在 Ansible 变更日志中记录 Ansible X.0.0 的第一个/下一个 alpha 版本的实际移除(
https://github.com/ansible-community/ansible-build-data/blob/main/<X>/changelog.yaml
)。请参阅以下链接,了解如何在 Ansible 变更日志中添加变更日志条目的示例。
重新添加集合
将集合重新添加到 Ansible 的工作方式与首次添加时相同。有关参考,请参阅将新集合添加到 Ansible 的过程。
将集合重新添加到
ansible.in
中(https://github.com/ansible-community/ansible-build-data/blob/main/<X>/ansible.in
)。将集合重新添加到
collection-meta.yaml
中(https://github.com/ansible-community/ansible-build-data/blob/main/<X>/collection-meta.yaml
)。如果已经在 Ansible 变更日志中宣布了某个尚未发布的版本的移除(
https://github.com/ansible-community/ansible-build-data/blob/main/<X>/changelog.yaml
),请删除该公告。
损坏的集合
如果集合已损坏,社区可以从 Ansible 社区软件包中移除该集合。
识别和移除损坏的集合
移除条件
如果满足以下条件之一,则认为集合已损坏
它依赖于 X.0.0 中包含的另一个集合,但无法与包含的实际版本一起工作,并且集合中没有仍然可以工作的内容。
在以下情况下,我们会从 Ansible (X+1).0.0 中移除损坏的集合
该集合似乎无人维护,并且没有人修复这些问题。
计划在下一个主要 Ansible 版本中移除该集合的计划在 (X+1).0.0 版本发布前至少两个月,并且在第一个 (X+1).0.0 beta 版本(功能冻结)之前至少一个月发布。
流程
下面提到的公告必须说明提议移除的原因,并提醒维护人员和 Ansible 社区,为了防止移除,该集合迫切需要可以修复问题的新维护人员。
取消移除损坏的集合
条件
必须在 Ansible X+1 功能冻结之前修复这些问题并发布新版本(错误修复、次要版本或主要版本)。
必须有人承诺维护该集合,并且至少在一段时间内防止出现类似情况。
流程
更新集合的问题跟踪器中的移除问题并关闭该问题。
在 The Bullhorn 中宣布取消移除。
将集合重新添加到 Ansible
条件
可以在不经过完整包含流程的情况下将集合重新包含到 Ansible 软件包中的条件
必须在 Ansible X+2 功能冻结之前修复这些问题并发布新版本。
必须有人承诺维护该集合,并且至少在一段时间内防止出现类似情况。
流程
无人维护的集合
移除已被其(前)维护者明确弃用或放弃的集合
流程
如果当前主要版本是 X,并且下一个主要版本 X+1 尚未发布功能冻结版本,则从 Y=(X+1).0.0 中移除该集合。如果下一个主要版本 X+1 已经发布了功能冻结版本,则从 Y=(X+2).0.0 中移除该集合。
请参阅 ansible-build-data
存储库中的示例拉取请求,了解如何移除集合。
识别和移除未经其维护者弃用且无人维护的集合
移除条件
如果满足以下多个条件,则认为集合无人维护
该集合仓库已数月没有维护者活动(例如,合并拉取请求和发布版本)。
CI(持续集成)已停止通过(甚至数月没有运行)。
Bug 报告和 Bug 修复 PR 开始堆积,但没有得到审查。
对于未维护的集合,没有完整的正式定义。
流程
该集合不再被维护并可能从 Ansible 包中移除的情况,必须在 The Bullhorn 和该集合的问题跟踪器中都进行公告。
在 The Bullhorn 和该集合的问题跟踪器中发布通知至少四周后,Ansible 社区工程指导委员会 (SC) 必须查看该集合,并投票认为它未被维护。投票必须公开至少一周。
如果 SC 没有投票认为该集合似乎未被维护,则流程停止。需要相应地更新问题。
如果下一个版本将发布 X.0.0,则设置 Y=X+1。如果 X.0.0 已经发布,但 (X+1).0.0 尚未发布,则设置 Y=X+2。
取消移除未维护的集合
条件
Ansible Y 尚未发布。
一个或多个维护者挺身而出或回归,清理该集合的状态。
新的维护者取得了具体的成果(例如,CI 已修复,集合已发布,拉取请求作者收到了有意义的反馈)。
流程
指导委员会投票决定结果是否可接受。
反对票必须附带充分的解释,说明为什么清理工作不足够。在这种情况下,此过程停止。
如果指导委员会没有投票反对仍然移除该集合(包括投票未达到法定人数的情况),请按如下步骤进行。
将集合重新添加到 Ansible
没有简化的流程。一旦集合已从 Ansible Y.0.0 中移除,它需要经过完整的包含流程才能重新添加到 Ansible 包中。只有在指导委员会投票决定时才有可能出现例外。指导委员会可以批准或拒绝快速重新进入,而无需经过完整的审查流程。
不满足集合要求的集合
如果一个集合违反了集合要求中的一项或多项,并且在允许的时间内没有解决违规问题,则可以将其从包中移除。
本节不适用于损坏或未维护的集合的情况。相反,请参阅本文档的相应段落。
识别和移除集合
移除条件
一个集合违反了集合要求中的一项或多项。
集合维护者没有修复违规行为,也没有在此文档规定的时间内发布该集合的修复版本。
流程
任何社区成员如果发现某个集合违反了集合要求中的一项或多项,可以针对该集合的仓库提出问题。如果报告者不确定某些情况是否构成违规,或者认为明显违反的准则不明确,他们应该在继续操作之前,通过提交社区话题咨询指导委员会。
针对集合的仓库提出的问题应包括以下信息
该集合违反的相应集合要求的参考。
集合维护者需要采取的行动,以使该集合符合要求。
解决问题的集合的默认期限是从问题创建之日起四周。它可能会因违反的要求、SC 的意见或其他情况而有所不同。
如果违规行为未得到修复,或者报告者和维护者之间存在分歧,则报告者或其他人会创建一个社区话题。
两位 SC 成员检查报告的情况,并在主题中确认从他们的角度来看,违规行为确实存在,并且必须修复。
社区和 SC 投票决定是否认为该集合违反要求并将其从包中移除。投票必须公开至少一周。
如果 SC 投票决定该集合没有违反要求,则流程停止。需要相应地更新问题。
如果下一个版本将发布 X.0.0,则设置 Y=X+1。如果 X.0.0 已经发布,但 (X+1).0.0 尚未发布,则设置 Y=X+2。
在集合仓库的原始问题中公告即将从 Ansible Y 中移除。
取消移除
条件
Ansible Y 尚未发布。
所有违规要求都已修复。
流程
SC 投票决定结果是否可接受。
反对票必须附带充分的解释,说明为什么集合维护者采取的行动不足够。
如果 SC 没有投票反对移除集合(包括投票未达到法定人数的情况),则将继续移除。
如果 SC 投票决定取消移除,将集合重新添加到 Ansible Y。
将集合重新添加到 Ansible
没有简化的流程。一旦集合已从 Ansible Y.0.0 中移除,它需要经过完整的包含流程才能重新添加到 Ansible 包中。只有在 SC 投票决定时才有可能出现例外。SC 可以批准或拒绝快速重新进入,而无需经过完整的审查流程。