Skip to content

Commit dfee94d

Browse files
authored
Validate modules prevent version change (ansible#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
1 parent c207224 commit dfee94d

File tree

1 file changed

+37
-10
lines changed
  • test/sanity/validate-modules

1 file changed

+37
-10
lines changed

test/sanity/validate-modules/main.py

+37-10
Original file line numberDiff line numberDiff line change
@@ -1005,8 +1005,10 @@ def _validate_docs(self):
10051005
# This is the normal case
10061006
self._validate_docs_schema(doc, doc_schema(self.object_name.split('.')[0]), 'DOCUMENTATION', 305)
10071007

1008-
self._check_version_added(doc)
1009-
self._check_for_new_args(doc, metadata)
1008+
add_fragments(doc, self.object_path, fragment_loader=fragment_loader)
1009+
1010+
existing_doc = self._check_for_new_args(doc, metadata)
1011+
self._check_version_added(doc, existing_doc)
10101012

10111013
if not bool(doc_info['EXAMPLES']['value']):
10121014
self.reporter.error(
@@ -1082,19 +1084,29 @@ def _validate_docs(self):
10821084

10831085
return doc_info, doc
10841086

1085-
def _check_version_added(self, doc):
1086-
if not self._is_new_module():
1087-
return
1088-
1087+
def _check_version_added(self, doc, existing_doc):
1088+
version_added_raw = doc.get('version_added')
10891089
try:
10901090
version_added = StrictVersion(str(doc.get('version_added', '0.0') or '0.0'))
10911091
except ValueError:
10921092
version_added = doc.get('version_added', '0.0')
1093+
if self._is_new_module() or version_added != 'historical':
1094+
self.reporter.error(
1095+
path=self.object_path,
1096+
code=306,
1097+
msg='version_added is not a valid version number: %r' % version_added
1098+
)
1099+
return
1100+
1101+
if existing_doc and version_added_raw != existing_doc.get('version_added'):
10931102
self.reporter.error(
10941103
path=self.object_path,
1095-
code=306,
1096-
msg='version_added is not a valid version number: %r' % version_added
1104+
code=307,
1105+
msg='version_added should be %r. Currently %r' % (existing_doc.get('version_added'),
1106+
version_added_raw)
10971107
)
1108+
1109+
if not self._is_new_module():
10981110
return
10991111

11001112
should_be = '.'.join(ansible_version.split('.')[:2])
@@ -1105,7 +1117,7 @@ def _check_version_added(self, doc):
11051117
self.reporter.error(
11061118
path=self.object_path,
11071119
code=307,
1108-
msg='version_added should be %s. Currently %s' % (should_be, version_added)
1120+
msg='version_added should be %r. Currently %r' % (should_be, version_added_raw)
11091121
)
11101122

11111123
def _validate_ansible_module_call(self, docs):
@@ -1377,6 +1389,19 @@ def _check_for_new_args(self, doc, metadata):
13771389
continue
13781390

13791391
if any(name in existing_options for name in names):
1392+
for name in names:
1393+
existing_version = existing_options.get(name, {}).get('version_added')
1394+
if existing_version:
1395+
break
1396+
current_version = details.get('version_added')
1397+
if current_version != existing_version:
1398+
self.reporter.error(
1399+
path=self.object_path,
1400+
code=309,
1401+
msg=('version_added for new option (%s) should '
1402+
'be %r. Currently %r' %
1403+
(option, existing_version, current_version))
1404+
)
13801405
continue
13811406

13821407
try:
@@ -1406,10 +1431,12 @@ def _check_for_new_args(self, doc, metadata):
14061431
path=self.object_path,
14071432
code=309,
14081433
msg=('version_added for new option (%s) should '
1409-
'be %s. Currently %s' %
1434+
'be %r. Currently %r' %
14101435
(option, should_be, version_added))
14111436
)
14121437

1438+
return existing_doc
1439+
14131440
@staticmethod
14141441
def is_blacklisted(path):
14151442
base_name = os.path.basename(path)

0 commit comments

Comments
 (0)