******************
Project life-cycle
******************

This page documents the current rules to follow when adding and removing
a particular project to Simultaneous Release (SR).

List of states for projects in autorelease
==========================================

The state names are short negative phrases describing what is missing to
progress to the following state.

- **non-existent**
  The project is not recognized by Technical Steering Committee (TSC) to be
  part of OpenDaylight (ODL).
- **non-participating**
  The project is recognized by the TSC to be an ODL project, but the
  project has not confirmed participation in SR for given release cycle.
- **non-building**
  The recognized project is willing to participate, but its current codebase is
  not passing its own merge job, or the project artifacts are otherwise
  unavailable in Nexus.
- **not-in-autorelease**
  Project merge job passes, but the project is not added to
  autorelease (git submodule, maven module, validate-autorelease job passes).
- **failing-autorelease**
  The project is added to autorelease (git submodule, maven module, validate-autorelease job passes),
  but autorelease build fails when building project's artifact.
  Temporary state, timing out into not-in-autorelease.
- **repo-not-in-integration**
  Project is successfully built within autorelease, but integration/distribution:features-index
  is not listing all its public feature repositories.
- **feature-not-in-integration**
  Feature repositories are referenced, distribution-check job is passing,
  but some user-facing features are absent from integration/distribution:features-test
  (possibly because adding them does not pass distribution SingleFeatureTest).
- **distribution-check-not-passing**
  Features are in distribution, but distribution-check job is either not running,
  or it is failing for any reason. Temporary state, timing out into feature-not-in-integration.
- **feature-is-experimental**
  All user-facing features are in features-test, but at least one of the corresponding
  functional CSIT jobs does not meet Integration/Test requirements.
- **feature-is-not-stable**
  Feature does meet Integration/Test requirements, but it does not meed all requirements for stable features.
- **feature-is-stable**

.. note::

   A project may change its state in both directions, this list is to make sure
   a project is not left in an invalid state, for example distribution referencing
   feature repositories, but without passing distribution-check job.

.. note::

   Projects can participate in Simultaneous Release even if they are not included in autorelease.
   Nitrogen example: Odlparent.
   FIXME: Clarify states for such projects (per version, if they released multiple times within the same cycle).

.. todo::

   - Add links to documents concerning project life-cycle from TSC point of view.
   - Add links to M# templates, test requirements and other relevant info.
   - Mention other jobs involved in verification (verify, validate-autorelease, ... releng-check-poms).
   - Add back-references to this document (from integration/distribution, job definition templates, ...).
   - Do we need a special rules applicable at Release Review?
   - Mention that some rules do not make sense for Integration/Distribution project, provide substitute rules.