Add team:single-vendor tag

Objectively communicates when project teams are driven by a single
organization, so that this fact can be taken into account in project
adoption decisions.

Change-Id: I399046ab7c3266b08c2a48382abfb89c33aab146
This commit is contained in:
Joe Gordon 2015-08-30 19:26:46 -07:00 committed by Thierry Carrez
parent 63bc1219bd
commit 00c03a24c5
6 changed files with 140 additions and 4 deletions

View File

@ -9,6 +9,8 @@ astara:
load balancing, vpn) for connecting and security multi-tenant OpenStack
environments.
url: https://wiki.openstack.org/wiki/Astara
tags:
- team:single-vendor
deliverables:
astara:
repos:
@ -316,6 +318,8 @@ cloudkitty:
is to fit in-between the raw metrics from OpenStack and the billing system
of a provider for chargeback purposes.
url: https://wiki.openstack.org/wiki/CloudKitty
tags:
- team:single-vendor
deliverables:
cloudkitty:
repos:
@ -380,6 +384,8 @@ congress:
services in order to monitor, enforce, and audit policy over
dynamic infrastructure.
url: https://wiki.openstack.org/wiki/Congress
tags:
- team:single-vendor
deliverables:
congress:
repos:
@ -410,6 +416,8 @@ cue:
To provide a multi-tenant service that offers scalable and reliable
provisioning and management capabilities for off-the-shelf message brokers.
url: https://wiki.openstack.org/wiki/Cue
tags:
- team:single-vendor
deliverables:
cue:
repos:
@ -556,6 +564,8 @@ freezer:
This is achieved by supporting multiple and parallel media
to store backups.
url: https://wiki.openstack.org/wiki/Freezer
tags:
- team:single-vendor
deliverables:
freezer:
repos:
@ -1765,6 +1775,8 @@ monasca:
services that can be used by both operators and tenants to gain
operational insight and visibility, ensuring availability and stability.
url: https://wiki.openstack.org/wiki/Monasca
tags:
- team:single-vendor
deliverables:
monasca:
repos:
@ -2113,6 +2125,8 @@ OpenStackAnsible:
Deploying OpenStack from source in a way that makes it scalable
while also being simple to operate, upgrade, and grow.
url: https://wiki.openstack.org/wiki/OpenStackAnsible
tags:
- team:single-vendor
deliverables:
openstack-ansible:
repos:
@ -2455,6 +2469,8 @@ Packaging-deb:
email: zigo@debian.org
mission: >
Maintain packages for Debian (and other deb based distributions) as a community.
tags:
- team:single-vendor
deliverables:
deb-openstack-pkg-tools:
repos:

View File

@ -19,6 +19,7 @@ Team Description Tags
:maxdepth: 1
team_diverse-affiliation
team_single-vendor
Project Assertions Tags
=======================

View File

@ -0,0 +1,90 @@
::
This work is licensed under a Creative Commons Attribution 3.0
Unported License.
http://creativecommons.org/licenses/by/3.0/legalcode
.. _`tag-team:single-vendor`:
==================
team:single-vendor
==================
This tag communicates that a given project team is currently driven by a
single organization.
This tag exists in the 'team' category, which as the name implies,
covers information about the team itself.
Application to current projects
===============================
It's worth pointing out that the criteria used for this tag is applied across
all git repositories managed by a team.
.. tagged-projects:: team:single-vendor
Script used to apply this tag:
http://git.openstack.org/cgit/openstack/governance/tree/tools/validate_tags.py
Rationale
=========
Knowing that a given project is produced by a team essentially from a single
organization is a critical factor in the decision to deploy a project, as it
changes the dynamics of who you trust to continue to deliver this project.
In particular, such a project could be abandoned due to the budgeting
decisions of a single party. Additional steps (like engaging early on with
that single party) could be taken before investing significantly on such a
project.
Requirements
============
The tag applies to any project team where one organization represents >=90% of
any of the following over the prior six months:
* the sum of all commits merged into any of the git repositories managed by the
team
* the sum of all reviews done against patches submitted to any of the git
repositories managed by the team
* the sum of all reviews done by core reviewers against patches submitted to any
of the git repositories managed by the team
* the union of the memberships of the core review teams associated with the git
repositories managed by the team
The application of this tag to new projects should be updated around the same
time as the 6 month release. But the removal of this tag should happen shortly
after it does not apply to a given project.
Based on how requirements are defined, this tag is only applicable for projects
where their primary deliverables are represented by commits and reviews in git.
Tag application process
=======================
The criteria for this tag is objective. The TC could approve any future
updates to the tag definition and otherwise defer application of the tag. A
method for delegating this is TBD, so in the meantime, we default back to the
following process:
Anyone may propose adding or removing this tag to a set of projects by
proposing a change to the openstack/governance repository. The change is
reviewed by the Technical Committee and approved using standard resolution
approval rules, including discussion at at least one Technical Committee
public IRC meeting.
Deprecation
===========
There is no deprecation period required for this tag. It can be added or
removed at any time.

View File

@ -2,3 +2,4 @@
sphinx>=1.1.2,!=1.2.0,<1.3
oslosphinx>=2.2.0 # Apache-2.0
PyYAML>=3.1.0
requests-cache

View File

@ -17,10 +17,14 @@ import sys
import time
import requests
import requests_cache
import yaml
import base
# Since the stackalytics is slow and we can call it twice, cache the results
requests_cache.install_cache(backend='memory', expire_after=60)
s = requests.session()
six_months = int(time.time() - 30*6*24*60*60) # 6 months ago
@ -136,9 +140,9 @@ def get_diversity_stats(project):
return team_stats
def get_diversity(team):
def is_diverse(team):
team_stats = get_diversity_stats(team)
is_diverse = all((
diversity = all((
(team_stats['commits_top'] <= 50),
(team_stats['reviews_top'] <= 50),
(team_stats['core_reviews_top'] <= 50),
@ -148,7 +152,18 @@ def get_diversity(team):
(team_stats['core_reviews_top2'] <= 80),
(team_stats['core_reviewers_top2'] <= 80),
))
return is_diverse
return diversity
def is_single_vendor(team):
team_stats = get_diversity_stats(team)
multi_vendor = all((
(team_stats['commits_top'] < 90),
(team_stats['reviews_top'] < 90),
(team_stats['core_reviews_top'] < 90),
(team_stats['core_reviewers_top'] < 90),
))
return not multi_vendor
def print_diversity(team):
@ -173,13 +188,25 @@ class ValidateDiversity(base.ValidatorBase):
@staticmethod
def validate(team):
"""Return True of team should have 'team:diverse-affiliation'"""
return get_diversity(team)
return is_diverse(team)
@staticmethod
def get_tag_name():
return "team:diverse-affiliation"
class ValidateSingleVendor(base.ValidatorBase):
@staticmethod
def validate(team):
"""Return True of team should have 'team:single-vendor'"""
return is_single_vendor(team)
@staticmethod
def get_tag_name():
return "team:single-vendor"
def main():
filename = os.path.abspath('reference/projects.yaml')
with open(filename, 'r') as f:

View File

@ -34,6 +34,7 @@ import urllib
# List of modules to validate team based tags
team_validators = [
teamstats.ValidateDiversity,
teamstats.ValidateSingleVendor,
]
# List of modules to validate repository based tags