Verify package data in setup.py installs all files (#59537)
* Add sanity test to ensure all non-py files are installed * Fix mode and regex * Fix role skel inventory package_data * Add docs * Update package_data for inventory files * Address pylint concerns * Another tweak to package_data * Address review feedback * Change index to 1 * add to ansible-only.txt
This commit is contained in:
parent
119f2b873a
commit
95f4282c42
6 changed files with 61 additions and 1 deletions
|
@ -0,0 +1,5 @@
|
|||
Sanity Tests » package-data
|
||||
===========================
|
||||
|
||||
Verifies that the combination of ``MANIFEST.in`` and ``package_data`` from ``setup.py``
|
||||
properly installs data files from within ``lib/ansible``
|
1
setup.py
1
setup.py
|
@ -271,6 +271,7 @@ static_setup_params = dict(
|
|||
'galaxy/data/*/*/.*',
|
||||
'galaxy/data/*/*/*.*',
|
||||
'galaxy/data/*/tests/inventory',
|
||||
'galaxy/data/*/role/tests/inventory',
|
||||
'config/base.yml',
|
||||
'config/module_defaults.yml',
|
||||
],
|
||||
|
|
|
@ -6,3 +6,4 @@ deprecated-config.py
|
|||
docs-build.py
|
||||
test-constraints.py
|
||||
update-bundled.py
|
||||
package-data.py
|
||||
|
|
5
test/sanity/code-smell/package-data.json
Normal file
5
test/sanity/code-smell/package-data.json
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"disabled": true,
|
||||
"always": true,
|
||||
"output": "path-message"
|
||||
}
|
48
test/sanity/code-smell/package-data.py
Executable file
48
test/sanity/code-smell/package-data.py
Executable file
|
@ -0,0 +1,48 @@
|
|||
#!/usr/bin/env python
|
||||
from __future__ import (absolute_import, division, print_function)
|
||||
__metaclass__ = type
|
||||
|
||||
import fnmatch
|
||||
import os
|
||||
import re
|
||||
import tempfile
|
||||
import subprocess
|
||||
|
||||
|
||||
def main():
|
||||
ignore_files = frozenset((
|
||||
'*/.git_keep',
|
||||
'*/galaxy/data/default/role/*/main.yml.j2',
|
||||
'*/galaxy/data/default/role/*/test.yml.j2',
|
||||
'*/galaxy/data/default/collection/plugins/README.md.j2',
|
||||
))
|
||||
|
||||
non_py_files = []
|
||||
for root, _dummy, files in os.walk('lib/ansible/'):
|
||||
for filename in files:
|
||||
path = os.path.join(root, filename)
|
||||
if os.path.splitext(path)[1] not in ('.py', '.pyc', '.pyo'):
|
||||
add = True
|
||||
for ignore in ignore_files:
|
||||
if fnmatch.fnmatch(path, ignore):
|
||||
add = False
|
||||
if add:
|
||||
non_py_files.append(os.path.relpath(path, 'lib/ansible'))
|
||||
|
||||
with tempfile.TemporaryDirectory() as tmp_dir:
|
||||
stdout, _dummy = subprocess.Popen(
|
||||
['python', 'setup.py', 'install', '--root=%s' % tmp_dir],
|
||||
stdout=subprocess.PIPE,
|
||||
stderr=subprocess.PIPE,
|
||||
universal_newlines=True,
|
||||
).communicate()
|
||||
match = re.search('^creating (%s/.*?/(?:site|dist)-packages/ansible)$' % tmp_dir, stdout, flags=re.M)
|
||||
|
||||
for filename in non_py_files:
|
||||
path = os.path.join(match.group(1), filename)
|
||||
if not os.path.exists(path):
|
||||
print('%s: File not installed' % os.path.join('lib', 'ansible', filename))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
|
@ -17,7 +17,7 @@ fi
|
|||
|
||||
case "${group}" in
|
||||
1) options=(--skip-test pylint --skip-test ansible-doc --skip-test docs-build) ;;
|
||||
2) options=(--test ansible-doc --test docs-build) ;;
|
||||
2) options=(--test ansible-doc --test docs-build --test package-data) ;;
|
||||
3) options=(--test pylint --exclude test/units/ --exclude lib/ansible/module_utils/ --exclude lib/ansible/modules/network/) ;;
|
||||
4) options=(--test pylint test/units/ lib/ansible/module_utils/ lib/ansible/modules/network/) ;;
|
||||
esac
|
||||
|
|
Loading…
Reference in a new issue