Merge "update TestValidateExistingTags to create its own git repository"
This commit is contained in:
commit
d690159d48
@ -668,12 +668,13 @@ def validate_existing_tags(deliv, context):
|
|||||||
)
|
)
|
||||||
if actual_sha != project.hash:
|
if actual_sha != project.hash:
|
||||||
context.error(
|
context.error(
|
||||||
('Version %s in %s is on '
|
'Version {} in {} is on '
|
||||||
'commit %s instead of %s') %
|
'commit {!r} instead of {!r}'.format(
|
||||||
(release.version,
|
release.version,
|
||||||
project.repo.name,
|
project.repo.name,
|
||||||
actual_sha,
|
actual_sha,
|
||||||
project.hash))
|
project.hash)
|
||||||
|
)
|
||||||
else:
|
else:
|
||||||
print('{} tag exists and is correct for {}'.format(
|
print('{} tag exists and is correct for {}'.format(
|
||||||
release.version, project.repo.name))
|
release.version, project.repo.name))
|
||||||
|
@ -16,6 +16,7 @@ from __future__ import unicode_literals
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
import os
|
import os
|
||||||
|
import re
|
||||||
import textwrap
|
import textwrap
|
||||||
|
|
||||||
import fixtures
|
import fixtures
|
||||||
@ -30,6 +31,70 @@ from openstack_releases import processutils
|
|||||||
from openstack_releases import yamlutils
|
from openstack_releases import yamlutils
|
||||||
|
|
||||||
|
|
||||||
|
class GPGKeyFixture(fixtures.Fixture):
|
||||||
|
"""Creates a GPG key for testing.
|
||||||
|
|
||||||
|
It's recommended that this be used in concert with a unique home
|
||||||
|
directory.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def setUp(self):
|
||||||
|
super(GPGKeyFixture, self).setUp()
|
||||||
|
# Force a temporary home directory with a short path so the
|
||||||
|
# gpg commands do not complain about an excessively long
|
||||||
|
# value.
|
||||||
|
self.useFixture(fixtures.TempHomeDir('/tmp'))
|
||||||
|
tempdir = self.useFixture(fixtures.TempDir('/tmp'))
|
||||||
|
gnupg_version_re = re.compile('^gpg\s.*\s([\d+])\.([\d+])\.([\d+])')
|
||||||
|
gnupg_version = processutils.check_output(
|
||||||
|
['gpg', '--version'],
|
||||||
|
cwd=tempdir.path).decode('utf-8')
|
||||||
|
for line in gnupg_version.split('\n'):
|
||||||
|
gnupg_version = gnupg_version_re.match(line)
|
||||||
|
if gnupg_version:
|
||||||
|
gnupg_version = (int(gnupg_version.group(1)),
|
||||||
|
int(gnupg_version.group(2)),
|
||||||
|
int(gnupg_version.group(3)))
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
if gnupg_version is None:
|
||||||
|
gnupg_version = (0, 0, 0)
|
||||||
|
|
||||||
|
config_file = tempdir.path + '/key-config'
|
||||||
|
with open(config_file, 'wt') as f:
|
||||||
|
if gnupg_version[0] == 2 and gnupg_version[1] >= 1:
|
||||||
|
f.write(textwrap.dedent("""
|
||||||
|
%no-protection
|
||||||
|
%transient-key
|
||||||
|
"""))
|
||||||
|
f.write(textwrap.dedent("""
|
||||||
|
%no-ask-passphrase
|
||||||
|
Key-Type: RSA
|
||||||
|
Name-Real: Example Key
|
||||||
|
Name-Comment: N/A
|
||||||
|
Name-Email: example@example.com
|
||||||
|
Expire-Date: 2d
|
||||||
|
%commit
|
||||||
|
"""))
|
||||||
|
|
||||||
|
# Note that --quick-random (--debug-quick-random in GnuPG 2.x)
|
||||||
|
# does not have a corresponding preferences file setting and
|
||||||
|
# must be passed explicitly on the command line instead
|
||||||
|
if gnupg_version[0] == 1:
|
||||||
|
gnupg_random = '--quick-random'
|
||||||
|
elif gnupg_version[0] >= 2:
|
||||||
|
gnupg_random = '--debug-quick-random'
|
||||||
|
else:
|
||||||
|
gnupg_random = ''
|
||||||
|
|
||||||
|
cmd = ['gpg', '--gen-key', '--batch']
|
||||||
|
if gnupg_random:
|
||||||
|
cmd.append(gnupg_random)
|
||||||
|
cmd.append('key-config')
|
||||||
|
|
||||||
|
processutils.check_call(cmd, cwd=tempdir.path)
|
||||||
|
|
||||||
|
|
||||||
class GitRepoFixture(fixtures.Fixture):
|
class GitRepoFixture(fixtures.Fixture):
|
||||||
|
|
||||||
logger = logging.getLogger('git')
|
logger = logging.getLogger('git')
|
||||||
@ -42,10 +107,13 @@ class GitRepoFixture(fixtures.Fixture):
|
|||||||
|
|
||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
|
self.useFixture(GPGKeyFixture())
|
||||||
os.makedirs(self.path)
|
os.makedirs(self.path)
|
||||||
self.git('init', '.')
|
self.git('init', '.')
|
||||||
self.git('config', '--local', 'user.email', 'example@example.com')
|
self.git('config', '--local', 'user.email', 'example@example.com')
|
||||||
self.git('config', '--local', 'user.name', 'super developer')
|
self.git('config', '--local', 'user.name', 'super developer')
|
||||||
|
self.git('config', '--local', 'user.signingkey',
|
||||||
|
'example@example.com')
|
||||||
|
|
||||||
def git(self, *args):
|
def git(self, *args):
|
||||||
self.logger.debug('$ git %s', ' '.join(args))
|
self.logger.debug('$ git %s', ' '.join(args))
|
||||||
@ -59,14 +127,17 @@ class GitRepoFixture(fixtures.Fixture):
|
|||||||
def commit(self, message='commit message'):
|
def commit(self, message='commit message'):
|
||||||
self.git('add', '.')
|
self.git('add', '.')
|
||||||
self.git('commit', '-m', message)
|
self.git('commit', '-m', message)
|
||||||
sha = self.git('show', '--pretty=format:%H')
|
sha = self.git('log', '-n', '1', '--pretty=format:%H')
|
||||||
return sha.decode('utf-8')
|
return sha.decode('utf-8').strip()
|
||||||
|
|
||||||
def add_file(self, name):
|
def add_file(self, name):
|
||||||
with open(os.path.join(self.path, name), 'w') as f:
|
with open(os.path.join(self.path, name), 'w') as f:
|
||||||
f.write('adding %s\n' % name)
|
f.write('adding %s\n' % name)
|
||||||
return self.commit('add %s' % name)
|
return self.commit('add %s' % name)
|
||||||
|
|
||||||
|
def tag(self, version):
|
||||||
|
self.git('tag', '-s', '-m', version, version)
|
||||||
|
|
||||||
|
|
||||||
class TestDecorators(base.BaseTestCase):
|
class TestDecorators(base.BaseTestCase):
|
||||||
|
|
||||||
@ -675,9 +746,18 @@ class TestValidateExistingTags(base.BaseTestCase):
|
|||||||
def setUp(self):
|
def setUp(self):
|
||||||
super().setUp()
|
super().setUp()
|
||||||
self.ctx = validate.ValidationContext()
|
self.ctx = validate.ValidationContext()
|
||||||
gitutils.clone_repo(self.ctx.workdir, 'openstack/release-test')
|
self._make_repo()
|
||||||
|
|
||||||
def test_valid(self):
|
def _make_repo(self):
|
||||||
|
self.repo = self.useFixture(
|
||||||
|
GitRepoFixture(self.ctx.workdir, 'openstack/release-test')
|
||||||
|
)
|
||||||
|
self.commit_1 = self.repo.add_file('testfile1.txt')
|
||||||
|
self.repo.tag('0.8.0')
|
||||||
|
self.commit_2 = self.repo.add_file('testfile2.txt')
|
||||||
|
|
||||||
|
@mock.patch('openstack_releases.gitutils.safe_clone_repo')
|
||||||
|
def test_valid(self, clone):
|
||||||
deliv = deliverable.Deliverable(
|
deliv = deliverable.Deliverable(
|
||||||
team='team',
|
team='team',
|
||||||
series='ocata',
|
series='ocata',
|
||||||
@ -688,7 +768,7 @@ class TestValidateExistingTags(base.BaseTestCase):
|
|||||||
{'version': '0.8.0',
|
{'version': '0.8.0',
|
||||||
'projects': [
|
'projects': [
|
||||||
{'repo': 'openstack/release-test',
|
{'repo': 'openstack/release-test',
|
||||||
'hash': 'a26e6a2e8a5e321b2e3517dbb01a7b9a56a8bfd5',
|
'hash': self.commit_1,
|
||||||
'tarball-base': 'openstack-release-test'},
|
'tarball-base': 'openstack-release-test'},
|
||||||
]}
|
]}
|
||||||
],
|
],
|
||||||
@ -710,8 +790,7 @@ class TestValidateExistingTags(base.BaseTestCase):
|
|||||||
{'version': '0.8.0',
|
{'version': '0.8.0',
|
||||||
'projects': [
|
'projects': [
|
||||||
{'repo': 'openstack/release-test',
|
{'repo': 'openstack/release-test',
|
||||||
# hash from the previous release
|
'hash': self.commit_2},
|
||||||
'hash': '88af0f601895d54fb0a45b796cdd045a2b3636a3'},
|
|
||||||
]}
|
]}
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
|
Loading…
Reference in New Issue
Block a user