Repository Handling

Project Renames

如果您将项目重命名以移出“openstack”命名空间到任何其他命名空间,请遵循 此 OpenStack TC 决议

对于添加到现有官方 OpenStack 项目的项目:创建一个 openstack/governance 变更,并在您在以下步骤中进行的变更的提交消息中添加一个“Depends-On: project-change-url”,并在 openstack/project-config 变更中添加一个引用治理变更的注释。您还需要确保 PTL 已经以某种方式表达了对添加的批准。

如果您重命名现有的官方 OpenStack 项目,请将 openstack/governance 变更作为对 openstack/project-config 变更的依赖项,以便在重命名完成后可以合并。

不要忘记更新 Zuul 作业定义。这对于保持 Zuul 作业定义的正确性以及更好地利用 CI/CD 基础设施资源非常重要。您需要查找退休仓库是否在 master 和 stable 分支的 Zuul 作业定义中作为 required-projects 或任何其他地方使用。通过 codesearch 在 master 作业中搜索很容易,但在 stable 分支中搜索比较棘手。确保清理所有 stable 分支,包括处于 Extended Maintenance 状态的分支。否则会导致 Zuul 配置错误,这些错误可以在 Zuul 配置错误列表 中找到

重命名项目的详细步骤记录在 OpenDev 手册的 Project Renames 部分。

Retiring a Repository

如果您需要退休一个项目并且不再接受补丁 - 对于 master 和 stable 分支 -,重要的是同时通知用户和贡献者。以下步骤将帮助您优雅地结束一个项目。

注意

以下部分实际上是单独的步骤。如果您的项目设置了作业,您需要按照以下说明和 OpenDev 手册提交 *四个* 不同的变更。我们建议使用“Depends-On:” 和 “Needed-By:” 标头链接这些变更。

Step 1: End Project Gating

遵循 OpenDev 手册中的 End Project Gating 关于步骤 1。

注意

请保留 official-openstack-repo-jobs 模板,以同步退休到 GitHub 镜像。

Step 2: Remove Project Content

遵循 OpenDev 手册中的 Remove Project Content 关于步骤 2。

Step 3: Retire Repository from the Governance Repository

此步骤是通过从 reference/projects.yaml 文件中退休仓库并将其添加到 reference/legacy.yaml 文件中,在技术委员会获得同意。请注意,如果该项目最近处于活动状态,这可能会对 ATC 的自动检测产生影响。

我们需要等待此补丁首先合并,然后再继续。这里的关键目标是获得技术委员会的同意,并使用治理脚本来检查正确的退休,这将帮助我们避免任何重新退休的工作。

注意:在步骤 2 中提交的 Remove Project Content 补丁上使用 Depends-On。

Step 4: Stop requirements syncing (if set up)

提交对 openstack/requirements 项目的审查,从 projects.txt 中删除该项目。这同样需要发生在 stable 分支上。

注意:在步骤 3 中提交的 governance 补丁上使用 Depends-On。

Step 5: Remove repository references

确保已正确删除对退休仓库的所有引用。需要审计和更新的几个地方是

  1. 检查所有项目的源代码和文档,看看是否有对退休仓库的任何引用。使用 codesearch 进行检查。

  2. Zuul job definitions

    这对于保持 Zuul 作业定义的正确性以及更好地利用 CI/CD 基础设施资源非常重要。您需要查找退休仓库是否在 master 和 stable 分支的 Zuul 作业定义中作为 required-projects 或任何其他地方使用。通过 codesearch 在 master 作业中搜索很容易,但在 stable 分支中搜索比较棘手。确保清理所有 stable 分支,包括处于 Extended Maintenance 状态的分支。否则会导致 Zuul 配置错误,这些错误可以在 Zuul 配置错误列表 中找到

注意:在步骤 3 中提交的 governance 补丁上使用 Depends-On。

Steps 6: Remove Project from Infrastructure Systems

遵循 OpenDev 手册中的 Remove Project from Infrastructure System 关于步骤 3,但使用 /home/gerrit2/acls/openstack/retired.config 而不是那里提到的 ACL 文件,以便技术委员会将来仍然可以对内容进行调整。

注意:在步骤 3 中提交的 governance 补丁上使用 Depends-On。

Step 7: Remove docs.openstack.org content

通知访问您的仓库的 docs.openstack.org 页面的用户,该页面已退休。

为此,将您的仓库名称添加到 tools/www-generator.py 文件中的 _RETIRED_REPOS 列表中,该文件位于 openstack/openstack-manuals 仓库中。一旦变更合并,URL https://docs.openstack.org/openstack/<projectname>/latest 将重定向到仓库的 README.rst 文件。

注意:在步骤 3 中提交的 governance 补丁上使用 Depends-On。

Step 8: Retire deliverables in releases repository

鉴于该项目正在退休,将不再有任何发布。因此,您必须在 openstack/releases 仓库中执行两项任务。

首先,完全删除当前开发周期目录中的交付物的 yaml 文件。例如,如果您的交付物是 puppet-panko,而当前的开发周期是 Ussuri,则必须删除 deliverables/2025.2/puppet-panko.yaml

接下来,如果您的交付物具有受支持或未维护的 stable 分支,例如 stable/train,则必须使用该 stable 分支上存在的最新哈希值将其 EOL。

示例,EOL Magnum up to Xena

  ---
- version: xena-eol
  projects:
    - repo: openstack/magnum
      hash: c5f8c78ef3ad93c830b5dc49ab6053252333b077
  ...

注意:在步骤 3 中提交的 governance 补丁上使用 Depends-On。

Step 9: Update openstack-map to remove the retired project

如果退休的仓库/项目列在 openstack-map 中,您需要将其从那里删除。

例如:https://review.opendev.org/c/openinfra/openstack-map/+/764544

在步骤 1 中提交的 governance 补丁上使用 Depends-On。

Deprecating a Repository

如果您只想停止 master 分支的开发,但保留 stable 分支,您需要采取略有不同的方法。

弃用项目或仓库与删除不同。如果项目希望停止 master 分支的开发,但支持 stable 分支的 bug 修复,则必须将项目标记为已弃用。如果项目没有 stable 分支,则可以选择直接进行删除过程。

Step 1: Mark the Repository as Deprecated in the Governance Repository

openstack/governance 仓库的 reference/projects.yaml 文件中将仓库标记为已弃用,并添加一行

deprecated: <deprecated-cycle-name>
release-management: deprecated

Step 2: Stop requirements syncing (if set up)

提交对 openstack/requirements 项目的审查,从 projects.txt 中删除该项目。

注意:在步骤 1 中提交的 governance 补丁上使用 Depends-On。

Step 3: Stop deliverables from the current development branch

我们将要退休项目的 master 分支,并且不会从该分支进行任何发布。假设当前的开发周期是 2999.2,发布别名是“Xylophone”。提交对 openstack/releases 仓库的审查,从 deliverables/xylophone/ 目录中删除交付物的 yaml 文件。

最近的一个例子是,gerrit 审查在 Caracal 开发周期期间弃用了 cinderlib 的交付物:https://review.opendev.org/c/openstack/releases/+/904862

注意:在步骤 1 中提交的 governance 补丁上使用 Depends-On。

Step 4: Retire master branch

如果仓库是无分支的(例如,Tempest 及其插件),并且其 master 分支内容需要支持其他交付物的 stable 分支直到它们退休或达到 EOL,那么您可以跳过此步骤 3,并仅更新 README.rst 文件以反映弃用说明。

Step 4a: Use only noop jobs

noop-jobs 模板添加到 project-config 仓库中的 zuul.d/projects.yaml 中,仅用于 master 分支,并暂时删除所有其他模板,但 official-openstack-repo-jobs 和 pypi 发布模板除外。如果您的项目有 publish-to-pypi 模板,则将其更改为 publish-to-pypi-stable-only。它应该如下所示

- project:
  name: openstack/<projectname>
  templates:
    - official-openstack-repo-jobs
    - publish-to-pypi-stable-only
    - noop-jobs

调整项目描述。在 gerrit/projects.yaml 中找到您的项目的条目,并查找定义描述的行,在其前面加上 DEPRECATED,,如下所示

description: DEPRECATED, existing project description

Step 4b: Remove project content

遵循 OpenDev 手册中的 Removing project content 关于步骤 2。

Step 4c: Remove noop jobs

一旦项目内容退休,部分撤销您之前在步骤 3a 中合并的 project-config 的更改,并重新添加您需要的模板和作业,以便您可以合并 stable 分支上的内容。请确保保留您在步骤 3a 中添加到项目描述中的 DEPRECATED, 前缀。

注意:在所有补丁中,在步骤 1 中提交的 governance 补丁上使用 Depends-On。

Step 5: Remove docs.openstack.org content

通知访问您的仓库的 docs.openstack.org 页面的用户,该页面已弃用。

为此,将您的仓库名称添加到 tools/www-generator.py 文件中的 _RETIRED_REPOS 列表中,该文件位于 openstack/openstack-manuals 仓库中。一旦变更合并,URL https://docs.openstack.org/openstack/<projectname>/latest 将重定向到仓库的 README.rst 文件。

此外,如果存在,请从 openstack/openstack-manuals 仓库中的 www/project-data/latest.yaml 中的列表中删除该项目。这将从新发布列表中删除该项目。

注意:在步骤 1 中提交的 governance 补丁上使用 Depends-On。