mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-30 06:11:26 -07:00
Validate modules prevent version change (#51549)
* Add logic to catch version changes in docs * Add in doc fragments before doing doc comparisons * Handle new module scenario * historical is only allowed in alreay present modules * Don't repr StrictVersion
This commit is contained in:
parent
c20722474a
commit
dfee94dfc7
1 changed files with 37 additions and 10 deletions
|
@ -1005,8 +1005,10 @@ class ModuleValidator(Validator):
|
||||||
# This is the normal case
|
# This is the normal case
|
||||||
self._validate_docs_schema(doc, doc_schema(self.object_name.split('.')[0]), 'DOCUMENTATION', 305)
|
self._validate_docs_schema(doc, doc_schema(self.object_name.split('.')[0]), 'DOCUMENTATION', 305)
|
||||||
|
|
||||||
self._check_version_added(doc)
|
add_fragments(doc, self.object_path, fragment_loader=fragment_loader)
|
||||||
self._check_for_new_args(doc, metadata)
|
|
||||||
|
existing_doc = self._check_for_new_args(doc, metadata)
|
||||||
|
self._check_version_added(doc, existing_doc)
|
||||||
|
|
||||||
if not bool(doc_info['EXAMPLES']['value']):
|
if not bool(doc_info['EXAMPLES']['value']):
|
||||||
self.reporter.error(
|
self.reporter.error(
|
||||||
|
@ -1082,19 +1084,29 @@ class ModuleValidator(Validator):
|
||||||
|
|
||||||
return doc_info, doc
|
return doc_info, doc
|
||||||
|
|
||||||
def _check_version_added(self, doc):
|
def _check_version_added(self, doc, existing_doc):
|
||||||
if not self._is_new_module():
|
version_added_raw = doc.get('version_added')
|
||||||
return
|
|
||||||
|
|
||||||
try:
|
try:
|
||||||
version_added = StrictVersion(str(doc.get('version_added', '0.0') or '0.0'))
|
version_added = StrictVersion(str(doc.get('version_added', '0.0') or '0.0'))
|
||||||
except ValueError:
|
except ValueError:
|
||||||
version_added = doc.get('version_added', '0.0')
|
version_added = doc.get('version_added', '0.0')
|
||||||
|
if self._is_new_module() or version_added != 'historical':
|
||||||
|
self.reporter.error(
|
||||||
|
path=self.object_path,
|
||||||
|
code=306,
|
||||||
|
msg='version_added is not a valid version number: %r' % version_added
|
||||||
|
)
|
||||||
|
return
|
||||||
|
|
||||||
|
if existing_doc and version_added_raw != existing_doc.get('version_added'):
|
||||||
self.reporter.error(
|
self.reporter.error(
|
||||||
path=self.object_path,
|
path=self.object_path,
|
||||||
code=306,
|
code=307,
|
||||||
msg='version_added is not a valid version number: %r' % version_added
|
msg='version_added should be %r. Currently %r' % (existing_doc.get('version_added'),
|
||||||
|
version_added_raw)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
if not self._is_new_module():
|
||||||
return
|
return
|
||||||
|
|
||||||
should_be = '.'.join(ansible_version.split('.')[:2])
|
should_be = '.'.join(ansible_version.split('.')[:2])
|
||||||
|
@ -1105,7 +1117,7 @@ class ModuleValidator(Validator):
|
||||||
self.reporter.error(
|
self.reporter.error(
|
||||||
path=self.object_path,
|
path=self.object_path,
|
||||||
code=307,
|
code=307,
|
||||||
msg='version_added should be %s. Currently %s' % (should_be, version_added)
|
msg='version_added should be %r. Currently %r' % (should_be, version_added_raw)
|
||||||
)
|
)
|
||||||
|
|
||||||
def _validate_ansible_module_call(self, docs):
|
def _validate_ansible_module_call(self, docs):
|
||||||
|
@ -1377,6 +1389,19 @@ class ModuleValidator(Validator):
|
||||||
continue
|
continue
|
||||||
|
|
||||||
if any(name in existing_options for name in names):
|
if any(name in existing_options for name in names):
|
||||||
|
for name in names:
|
||||||
|
existing_version = existing_options.get(name, {}).get('version_added')
|
||||||
|
if existing_version:
|
||||||
|
break
|
||||||
|
current_version = details.get('version_added')
|
||||||
|
if current_version != existing_version:
|
||||||
|
self.reporter.error(
|
||||||
|
path=self.object_path,
|
||||||
|
code=309,
|
||||||
|
msg=('version_added for new option (%s) should '
|
||||||
|
'be %r. Currently %r' %
|
||||||
|
(option, existing_version, current_version))
|
||||||
|
)
|
||||||
continue
|
continue
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -1406,10 +1431,12 @@ class ModuleValidator(Validator):
|
||||||
path=self.object_path,
|
path=self.object_path,
|
||||||
code=309,
|
code=309,
|
||||||
msg=('version_added for new option (%s) should '
|
msg=('version_added for new option (%s) should '
|
||||||
'be %s. Currently %s' %
|
'be %r. Currently %r' %
|
||||||
(option, should_be, version_added))
|
(option, should_be, version_added))
|
||||||
)
|
)
|
||||||
|
|
||||||
|
return existing_doc
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def is_blacklisted(path):
|
def is_blacklisted(path):
|
||||||
base_name = os.path.basename(path)
|
base_name = os.path.basename(path)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue