Merge "drop support for driverfixes branches"

This commit is contained in:
Zuul 2018-10-11 11:50:28 +00:00 committed by Gerrit Code Review
commit a467622d66
3 changed files with 6 additions and 289 deletions

View File

@ -198,11 +198,7 @@ Prepare the branch request by submitting a patch to this repository.
``feature/`` -- for temporary feature branches ``feature/`` -- for temporary feature branches
``driverfixes/`` -- for long-term driver maintenance, beyond the end of * ``stable/`` branch names must match a valid series name.
the stable branch
* ``stable/`` and ``driverfixes/`` branch names must match a valid series
name.
* If you are not the release liaison or PTL, have the PTL of the * If you are not the release liaison or PTL, have the PTL of the
project acknowledge the request with a +1. project acknowledge the request with a +1.
@ -471,10 +467,6 @@ Each entry in the ``branches`` list is a mapping with keys:
mapping between the target repository name and the SHA of a commit mapping between the target repository name and the SHA of a commit
already in the target repository. already in the target repository.
If a branch name starts with driverfixes/ then the location must be
a mapping between the target repository name and the SHA of a commit
already in the target repository on the associated stable branch.
Examples Examples
======== ========
@ -517,41 +509,6 @@ and then for the subsequent release it would be updated to contain::
This release includes the change to stop importing This release includes the change to stop importing
from the 'oslo' namespace package. from the 'oslo' namespace package.
A driverfixes branch might be added to a project in a similar
way. This example shows the branch created in cinder for the newton
series. The branch was created from the HEAD of the stable/newton
branch at the time.
::
---
launchpad: cinder
team: cinder
type: service
release-model: cycle-with-milestones
release-notes: https://docs.openstack.org/releasenotes/cinder/newton.html
branches:
- name: stable/newton
location: 9.0.0.0rc1
- name: driverfixes/newton
location:
openstack/cinder: 08bfc7d817f313451e619b535299121b686d7bd8
releases:
# ...
- version: 9.0.0.0rc1
projects:
- repo: openstack/cinder
hash: 0ba267fbc1836722735102994b466ecd7803b10a
- version: 9.0.0.0rc2
projects:
- repo: openstack/cinder
hash: ab9518112137f3141739e873b19cdc0085963bc7
# ...
- version: 9.1.4
projects:
- repo: openstack/cinder
hash: 908def6bb993798146cccc1621a9cee18950629d
For deliverables with multiple repositories, the list of projects For deliverables with multiple repositories, the list of projects
would contain all of them. For example, the Neutron deliverable might would contain all of them. For example, the Neutron deliverable might
be described by ``deliverables/mitaka/neutron.yaml`` containing: be described by ``deliverables/mitaka/neutron.yaml`` containing:

View File

@ -78,7 +78,6 @@ _USES_PREVER = set([
_VALID_BRANCH_PREFIXES = set([ _VALID_BRANCH_PREFIXES = set([
'stable', 'stable',
'feature', 'feature',
'driverfixes',
]) ])
_NO_STABLE_BRANCH_CHECK = set([ _NO_STABLE_BRANCH_CHECK = set([
@ -1541,67 +1540,6 @@ def validate_feature_branches(deliv, context):
) )
def validate_driverfixes_branches(deliv, context):
"Apply the rules for driverfixes branches."
if deliv.type == 'tempest-plugin' and deliv.branches:
context.error('Tempest plugins do not support branching.')
return
known_series = sorted(list(
d for d in os.listdir('deliverables')
if not d.startswith('_')
))
for branch in deliv.branches:
try:
prefix, series = branch.name.split('/')
except ValueError:
context.error(
('driverfixes branch name expected to be driverfixes/name '
'but got %s') % (branch.name,))
continue
if prefix != 'driverfixes':
print('{} is not a driverfixes branch, skipping'.format(
branch.name))
continue
if series not in known_series:
context.error(
('driverfixes branches must be named for known series '
'but %s was not found in %s' % (
branch.name, known_series))
)
location = branch.location
if not isinstance(location, dict):
context.error(
('branch location for %s is '
'expected to be a mapping but got a %s' % (
branch.name, type(location)))
)
# The other rules aren't going to be testable, so skip them.
continue
for repo, loc in sorted(location.items()):
if not is_a_hash(loc):
context.error(
('driverfixes branches should be created from commits by '
'SHA but location %s for branch %s of %s does not look '
'like a SHA' % (
(loc, repo, branch.name)))
)
if not gitutils.commit_exists(context.workdir, repo, loc):
context.error(
('driverfixes branches should be created from merged '
'commits but location %s for branch %s of %s does not '
'exist' % (
(loc, repo, branch.name)))
)
_require_gitreview(repo, context)
def validate_branch_points(deliv, context): def validate_branch_points(deliv, context):
"Make sure the branch points given are on the expected branches." "Make sure the branch points given are on the expected branches."
@ -1619,22 +1557,14 @@ def validate_branch_points(deliv, context):
print('could not parse the branch name, skipping') print('could not parse the branch name, skipping')
continue continue
if prefix == 'feature': if prefix != 'stable':
print('these rules do not apply to feature branches, skipping') print('these rules do not apply to feature branches, skipping')
continue continue
elif prefix == 'stable': expected = set([
expected = set([ 'master',
'master', branch.name,
branch.name, ])
])
else:
# driverfixes
expected = set([
branch.name,
'stable/' + series,
])
location = branch.get_repo_map() location = branch.get_repo_map()
@ -1850,7 +1780,6 @@ def main():
validate_branch_prefixes, validate_branch_prefixes,
validate_stable_branches, validate_stable_branches,
validate_feature_branches, validate_feature_branches,
validate_driverfixes_branches,
validate_branch_points, validate_branch_points,
] ]
for check in checks: for check in checks:

View File

@ -2383,175 +2383,6 @@ class TestValidateFeatureBranches(base.BaseTestCase):
self.assertEqual(1, len(self.ctx.errors)) self.assertEqual(1, len(self.ctx.errors))
class TestValidateDriverfixesBranches(base.BaseTestCase):
def setUp(self):
super().setUp()
self.ctx = validate.ValidationContext()
gitutils.clone_repo(self.ctx.workdir, 'openstack/automaton')
def test_unknown_series(self):
deliverable_data = textwrap.dedent('''
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: driverfixes/abc
location:
openstack/automaton: be2885f544637e6ee6139df7dc7bf937925804dd
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(1, len(self.ctx.errors))
def test_location_not_a_dict(self):
deliverable_data = textwrap.dedent('''
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: driverfixes/austin
location: 1.5.0
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(1, len(self.ctx.errors))
def test_location_not_a_sha(self):
deliverable_data = textwrap.dedent('''
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: driverfixes/austin
location:
openstack/automaton: 1.5.0
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(1, len(self.ctx.errors))
def test_location_a_sha(self):
deliverable_data = textwrap.dedent('''
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: driverfixes/austin
location:
openstack/automaton: be2885f544637e6ee6139df7dc7bf937925804dd
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(0, len(self.ctx.errors))
def test_badly_formatted_name(self):
deliverable_data = textwrap.dedent('''
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: austin
location:
openstack/automaton: be2885f544637e6ee6139df7dc7bf937925804dd
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(1, len(self.ctx.errors))
def test_location_no_such_sha(self):
deliverable_data = textwrap.dedent('''
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: driverfixes/austin
location:
openstack/automaton: de2885f544637e6ee6139df7dc7bf937925804dd
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(1, len(self.ctx.errors))
def test_tempest_plugin(self):
deliverable_data = textwrap.dedent('''
type: tempest-plugin
releases:
- version: 1.5.0
projects:
- repo: openstack/automaton
hash: be2885f544637e6ee6139df7dc7bf937925804dd
branches:
- name: driverfixes/austin
location:
openstack/automaton: be2885f544637e6ee6139df7dc7bf937925804dd
''')
deliv = deliverable.Deliverable(
team='team',
series='ocata',
name='release-test',
data=yamlutils.loads(deliverable_data),
)
validate.validate_driverfixes_branches(deliv, self.ctx)
self.ctx.show_summary()
self.assertEqual(0, len(self.ctx.warnings))
self.assertEqual(1, len(self.ctx.errors))
class TestValidateSeriesOpen(base.BaseTestCase): class TestValidateSeriesOpen(base.BaseTestCase):
def setUp(self): def setUp(self):