improve npm version validation
Require the package.json version to match the tag. Change-Id: Ice7ff376a030fee41589408a3657658a4e076a16 Signed-off-by: Doug Hellmann <doug@doughellmann.com>
This commit is contained in:
parent
7375d482f4
commit
b9e5af6371
@ -37,6 +37,7 @@ from requests.packages import urllib3
|
||||
from openstack_releases import defaults
|
||||
from openstack_releases import gitutils
|
||||
from openstack_releases import governance
|
||||
from openstack_releases import npmutils
|
||||
from openstack_releases import project_config
|
||||
from openstack_releases import puppetutils
|
||||
from openstack_releases import pythonutils
|
||||
@ -415,6 +416,23 @@ def validate_releases(deliverable_info, zuul_layout,
|
||||
)
|
||||
)
|
||||
|
||||
# If this is a npm module, ensure
|
||||
# that the tag and metadata file
|
||||
# match.
|
||||
if npmutils.looks_like_a_module(workdir,
|
||||
project['repo']):
|
||||
npm_ver = npmutils.get_version(
|
||||
workdir, project['repo'])
|
||||
if npm_ver != release['version']:
|
||||
mk_error(
|
||||
'%s package.json contains "%s" '
|
||||
'but is being tagged "%s"' % (
|
||||
project['repo'],
|
||||
npm_ver,
|
||||
release['version'],
|
||||
)
|
||||
)
|
||||
|
||||
if is_independent:
|
||||
mk_warning('skipping descendant test for '
|
||||
'independent project, verify '
|
||||
|
33
openstack_releases/npmutils.py
Normal file
33
openstack_releases/npmutils.py
Normal file
@ -0,0 +1,33 @@
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
import json
|
||||
import os.path
|
||||
|
||||
|
||||
def looks_like_a_module(workdir, repo):
|
||||
"Does the directory look like it contains an npm module?"
|
||||
return os.path.exists(os.path.join(workdir, repo, 'package.json'))
|
||||
|
||||
|
||||
def get_metadata(workdir, repo):
|
||||
"Load the package.json file from the repo"
|
||||
with open(os.path.join(workdir, repo, 'package.json'), 'r') as f:
|
||||
body = f.read()
|
||||
return json.loads(body)
|
||||
|
||||
|
||||
def get_version(workdir, repo):
|
||||
"Get the version string from the project metadata."
|
||||
return get_metadata(workdir, repo).get('version')
|
77
openstack_releases/tests/test_npmutils.py
Normal file
77
openstack_releases/tests/test_npmutils.py
Normal file
@ -0,0 +1,77 @@
|
||||
# All Rights Reserved.
|
||||
#
|
||||
# Licensed under the Apache License, Version 2.0 (the "License"); you may
|
||||
# not use this file except in compliance with the License. You may obtain
|
||||
# a copy of the License at
|
||||
#
|
||||
# http://www.apache.org/licenses/LICENSE-2.0
|
||||
#
|
||||
# Unless required by applicable law or agreed to in writing, software
|
||||
# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
|
||||
# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
|
||||
# License for the specific language governing permissions and limitations
|
||||
# under the License.
|
||||
|
||||
from __future__ import unicode_literals
|
||||
|
||||
import os
|
||||
|
||||
import fixtures
|
||||
import json
|
||||
import mock
|
||||
from oslotest import base
|
||||
|
||||
from openstack_releases import npmutils
|
||||
|
||||
|
||||
class TestModuleDetection(base.BaseTestCase):
|
||||
|
||||
def test_no_metadata(self):
|
||||
|
||||
def exists(name):
|
||||
if name.endswith('package.json'):
|
||||
return False
|
||||
|
||||
with mock.patch('os.path.exists', exists):
|
||||
is_mod = npmutils.looks_like_a_module(
|
||||
'.', 'openstack/monasca-kibana-plugin')
|
||||
self.assertFalse(is_mod)
|
||||
|
||||
def test_with_metadata(self):
|
||||
|
||||
def exists(name):
|
||||
if name.endswith('package.json'):
|
||||
return True
|
||||
|
||||
with mock.patch('os.path.exists', exists):
|
||||
is_mod = npmutils.looks_like_a_module(
|
||||
'.', 'openstack/monasca-kibana-plugin')
|
||||
self.assertTrue(is_mod)
|
||||
|
||||
|
||||
class TestGetMetadata(base.BaseTestCase):
|
||||
|
||||
def setUp(self):
|
||||
super(TestGetMetadata, self).setUp()
|
||||
self.tmpdir = self.useFixture(fixtures.TempDir()).path
|
||||
self.repo = 'foo'
|
||||
self.mdfn = os.path.join(self.tmpdir, self.repo, 'package.json')
|
||||
os.makedirs(os.path.join(self.tmpdir, self.repo))
|
||||
self.expected = {
|
||||
"name": "monasca-kibana-plugin",
|
||||
"version": "0.0.5",
|
||||
"description": "fake description",
|
||||
"author": "OpenStack",
|
||||
"license": "Apache-2.0",
|
||||
}
|
||||
|
||||
with open(self.mdfn, 'w') as f:
|
||||
f.write(json.dumps(self.expected))
|
||||
|
||||
def test_get_metadata(self):
|
||||
md = npmutils.get_metadata(self.tmpdir, self.repo)
|
||||
self.assertEqual(self.expected, md)
|
||||
|
||||
def test_get_version(self):
|
||||
ver = npmutils.get_version(self.tmpdir, self.repo)
|
||||
self.assertEqual('0.0.5', ver)
|
Loading…
Reference in New Issue
Block a user