Add validation test for new copyright (#32919)

* Update validation test for new copyright

Ensure new modules without the new copyright header fail
validation
Ensure existing modules without copyright in top 20 lines fail

* Add documentation of 108 error

Create label in developing modules documentation so that
the validation page can point to it

* Ensure new style copyright header passes test!
pull/30939/merge
Will Thames 7 years ago committed by Toshio Kuratomi
parent a130549ead
commit 5f29cd5e60

@ -30,6 +30,7 @@ All modules must have the following sections defined in this order:
If you look at some existing older modules, you may find imports at the bottom of the file. Do not copy that idiom into new modules as it is a historical oddity due to how modules used to be combined with libraries. Over time we're moving the imports to be in their proper place. If you look at some existing older modules, you may find imports at the bottom of the file. Do not copy that idiom into new modules as it is a historical oddity due to how modules used to be combined with libraries. Over time we're moving the imports to be in their proper place.
.. _copyright:
Copyright Copyright
---------------------- ----------------------

@ -69,6 +69,7 @@ Errors
106 Import found before documentation variables. All imports must appear below 106 Import found before documentation variables. All imports must appear below
``DOCUMENTATION``/``EXAMPLES``/``RETURN``/``ANSIBLE_METADATA`` ``DOCUMENTATION``/``EXAMPLES``/``RETURN``/``ANSIBLE_METADATA``
107 Imports should be directly below ``DOCUMENTATION``/``EXAMPLES``/``RETURN``/``ANSIBLE_METADATA`` 107 Imports should be directly below ``DOCUMENTATION``/``EXAMPLES``/``RETURN``/``ANSIBLE_METADATA``
108 GPLv3 license header should be the :ref:`short form <copyright>` for new modules
.. ..
--------- ------------------- --------- -------------------
**2xx** **Imports** **2xx** **Imports**

@ -375,14 +375,24 @@ class ModuleValidator(Validator):
msg='sys.exit() call found. Should be exit_json/fail_json' msg='sys.exit() call found. Should be exit_json/fail_json'
) )
def _check_for_gpl3_header(self): def _check_gpl3_header(self):
if ('GNU General Public License' not in self.text and header = '\n'.join(self.text.split('\n')[:20])
'version 3' not in self.text): if ('GNU General Public License' not in header or
('version 3' not in header and 'v3.0' not in header)):
self.reporter.error( self.reporter.error(
path=self.object_path, path=self.object_path,
code=105, code=105,
msg='GPLv3 license header not found' msg='GPLv3 license header not found in the first 20 lines of the module'
) )
elif self._is_new_module():
if len([line for line in header
if 'GNU General Public License' in line]) > 1:
self.reporter.error(
path=self.object_path,
code=108,
msg='Found old style GPLv3 license header: '
'https://docs.ansible.com/ansible/devel/dev_guide/developing_modules_documenting.html#copyright'
)
def _check_for_tabs(self): def _check_for_tabs(self):
for line_no, line in enumerate(self.text.splitlines()): for line_no, line in enumerate(self.text.splitlines()):
@ -1118,7 +1128,7 @@ class ModuleValidator(Validator):
self._validate_ps_replacers() self._validate_ps_replacers()
self._find_ps_docs_py_file() self._find_ps_docs_py_file()
self._check_for_gpl3_header() self._check_gpl3_header()
if not self._just_docs(): if not self._just_docs():
self._check_interpreter(powershell=self._powershell_module()) self._check_interpreter(powershell=self._powershell_module())
self._check_type_instead_of_isinstance( self._check_type_instead_of_isinstance(

Loading…
Cancel
Save