Repository Handling

Project Renames

If you rename a project to move out from “openstack” namespace to any other namespace, follow this OpenStack TC resolution.

For a project being added to existing official OpenStack project: Create an openstack/governance change and add a “Depends-On: project-change-url” of the change you make in the following steps to the commit message, and add a comment in the openstack/project-config change that references the governance change. You will also make sure the PTL has expressed approval for the addition in some way.

If you rename an existing official OpenStack project, add the openstack/governance change as dependency on the openstack/project-config change so that it can merge after the rename is done.

The detailed steps for renaming a project are documented in the section Project Renames of the OpenDev Manual.

Retiring a Repository

If you need to retire a project and no longer accept patches - for both master and stable branches -, it is important to communicate that to both users and contributors. The following steps will help you wind down a project gracefully.

Note

The following sections are really separate steps. If your project has jobs set up, you need to submit four different changes as explained below and in the OpenDev Manual. We recommend to link these changes with “Depends-On:” and “Needed-By:” headers.

Step 1: Retire Repository from the Governance Repository

First step is to get the agreement in the Technical Committee by retiring the repository from the reference/projects.yaml file and add it to the file reference/legacy.yaml in the openstack/governance repository. Note that if the project was recently active, this may have implications for automatic detection of ATCs.

This patch will not pass the zuul until repo content is removed in Steps 3-5. Once repo content removal patch is merged, ‘recheck’ the governance patch to trigger the test again.

Step 2: Stop requirements syncing (if set up)

Submit a review to the openstack/requirements project removing the project from projects.txt. This needs to happen for stable branches as well.

Use Depends-On on governance patch submitted in Step 1.

Steps 3-5: Follow all three steps from OpenDev Manual

Follow the steps about Retiring a Project in the OpenDev Manual.

In step 1 of OpenDev Manual, keep the template official-openstack-repo-jobs besides noop-jobs, this is needed to sync changes to GitHub. It will be removed in step 3 of OpenDev Manual.

In step 1-2 of OpenDev Manual (1. Stop gating and 2. repo content removal) patch needs to merge without any depends-on but you need to use Needed-By governance patch submitted in Step 1.

In step 3 of OpenDev Manual patches, use Depends-On on governance patch submitted in Step 1.

Step 6: Remove docs.openstack.org content

Inform users that reach the docs.openstack.org page of your repository that it is retired.

For this, add the name of your repository to the _RETIRED_REPOS list in the file tools/www-generator.py in the openstack/openstack-manuals repository. Once the change merged, the URL https://docs.openstack.org/openstack/<projectname>/latest will redirect to the repositories’ README.rst file.

Use Depends-On on governance patch submitted in Step 1.

Step 7: Mark the deliverables as retired

For maintained openstack series, on openstack/releases, amend the related deliverable files to tag the project with the retired flag.

Example with deliverables/train/puppet-panko.yaml:

---
launchpad: puppet-panko
release-model: cycle-trailing
team: Puppet OpenStack
type: other
repository-settings:
  openstack/puppet-panko:
    flags:
      - retired
...

Even if a project is retired, stable branches will continue to follow the existing series life cycle and this flag will allow us to ignore this deliverable in some specific cases.

Use Depends-On on governance patch submitted in Step 1.

Deprecating a Repository

If you only want to stop development of the master branch but keep stable branches, you need to do a slightly different approach.

Deprecating the project or repository is different than removal. If the project want to stop the development on master branch but support the stable branches with bug fixes, then project with the stable policy tag <https://governance.openstack.org/tc/reference/tags/stable_follows-policy.html> must be marked as deprecated. If project has no stable branch or does not follow the stable policy tag then you have option to go with removal process directly.

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

Mark the repository in the reference/projects.yaml file as deprecated with adding a line:

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

Step 2: Stop requirements syncing (if set up)

Submit a review to the openstack/requirements project removing the project from projects.txt.

Use Depends-On on governance patch submitted in Step 1.

Step 3: Retire master branch

Step 3a: Use only noop jobs

Add noop jobs for master only in project-config repository and remove all templates temporarily with exception of official-openstack-repo-jobs and pypi release template if any. If your project has publish-to-pypi template present, then change it to publish-to-pypi-stable-only. It should look something like this:

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

Adjust the project description. Find the entry for your project in gerrit/projects.yaml and look for the line which defines the description, prefix it with DEPRECATED, like this:

description: DEPRECATED, existing project description

Step 3b: Remove project content

Follow step 2 about Removing project content in the OpenDev Manual.

Step 3c: Remove noop jobs

Once the project content is retired, partially revert the change you merged earlier for project-config in step 2a and re-add templates and jobs you need so that you can merge content on stable branches. Please ensure you keep the DEPRECATED, prefix you added to project description in step 2a.

In all the patches, use Depends-On on governance patch submitted in Step 1.

Step 4: Remove docs.openstack.org content

Inform users that reach the docs.openstack.org page of your repository that it is deprecated.

For this, add the name of your repository to the _RETIRED_REPOS list in the file tools/www-generator.py in the openstack/openstack-manuals repository. Once the change merged, the URL https://docs.openstack.org/openstack/<projectname>/latest will redirect to the repositories’ README.rst file.

Also, remove the project from the list in the www/project-data/latest.yaml in the openstack/openstack-manuals repository if present. That will remove the project from the list of new releases.

Use Depends-On on governance patch submitted in Step 1.