drop support for driverfixes branches
This change removes support for driver fixes branches. It will prevent any releases from projects with those branches listed in the deliverable file in any series, which should prevent us from re-creating branches that we are trying to remove when we do releases. Change-Id: Ied35b936af1345e893da1384762f30547601ae8f Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
parent
83fcd8f905
commit
2c2e61b76f
@ -198,11 +198,7 @@ Prepare the branch request by submitting a patch to this repository.
|
||||
|
||||
``feature/`` -- for temporary feature branches
|
||||
|
||||
``driverfixes/`` -- for long-term driver maintenance, beyond the end of
|
||||
the stable branch
|
||||
|
||||
* ``stable/`` and ``driverfixes/`` branch names must match a valid series
|
||||
name.
|
||||
* ``stable/`` branch names must match a valid series name.
|
||||
|
||||
* If you are not the release liaison or PTL, have the PTL of the
|
||||
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
|
||||
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
|
||||
========
|
||||
@ -517,41 +509,6 @@ and then for the subsequent release it would be updated to contain::
|
||||
This release includes the change to stop importing
|
||||
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
|
||||
would contain all of them. For example, the Neutron deliverable might
|
||||
be described by ``deliverables/mitaka/neutron.yaml`` containing:
|
||||
|
@ -78,7 +78,6 @@ _USES_PREVER = set([
|
||||
_VALID_BRANCH_PREFIXES = set([
|
||||
'stable',
|
||||
'feature',
|
||||
'driverfixes',
|
||||
])
|
||||
|
||||
_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):
|
||||
"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')
|
||||
continue
|
||||
|
||||
if prefix == 'feature':
|
||||
if prefix != 'stable':
|
||||
print('these rules do not apply to feature branches, skipping')
|
||||
continue
|
||||
|
||||
elif prefix == 'stable':
|
||||
expected = set([
|
||||
'master',
|
||||
branch.name,
|
||||
])
|
||||
|
||||
else:
|
||||
# driverfixes
|
||||
expected = set([
|
||||
branch.name,
|
||||
'stable/' + series,
|
||||
])
|
||||
expected = set([
|
||||
'master',
|
||||
branch.name,
|
||||
])
|
||||
|
||||
location = branch.get_repo_map()
|
||||
|
||||
@ -1850,7 +1780,6 @@ def main():
|
||||
validate_branch_prefixes,
|
||||
validate_stable_branches,
|
||||
validate_feature_branches,
|
||||
validate_driverfixes_branches,
|
||||
validate_branch_points,
|
||||
]
|
||||
for check in checks:
|
||||
|
@ -2383,175 +2383,6 @@ class TestValidateFeatureBranches(base.BaseTestCase):
|
||||
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):
|
||||
|
||||
def setUp(self):
|
||||
|
Loading…
x
Reference in New Issue
Block a user