diff options
author | Jordan Borean <jborean93@gmail.com> | 2022-01-19 11:09:45 +1000 |
---|---|---|
committer | GitHub <noreply@github.com> | 2022-01-18 17:09:45 -0800 |
commit | 39b6dec9372b9ce9864ab85efe9d403c6fe858e9 (patch) | |
tree | 333de468de0d742b1fd547a048e2295a0f096f1c | |
parent | 6da3cf51a329194d5b81fe1e8a10797eecfeb0fa (diff) | |
download | ansible-39b6dec9372b9ce9864ab85efe9d403c6fe858e9.tar.gz |
galaxy build - ignore existing MANIFEST and FILES (#76479) (#76499)
(cherry picked from commit 8482ee4e9a992abe998c7f885ef5e873f9ef5894)
-rw-r--r-- | changelogs/fragments/galaxy-build-files-ignore.yml | 4 | ||||
-rw-r--r-- | lib/ansible/galaxy/collection/__init__.py | 2 | ||||
-rw-r--r-- | test/units/galaxy/test_collection.py | 39 |
3 files changed, 45 insertions, 0 deletions
diff --git a/changelogs/fragments/galaxy-build-files-ignore.yml b/changelogs/fragments/galaxy-build-files-ignore.yml new file mode 100644 index 0000000000..983307e0ce --- /dev/null +++ b/changelogs/fragments/galaxy-build-files-ignore.yml @@ -0,0 +1,4 @@ +bugfixes: +- >- + ansible-galaxy collection build - Ignore any existing ``MANIFEST.json`` and ``FILES.json`` in the root directory + when building a collection. diff --git a/lib/ansible/galaxy/collection/__init__.py b/lib/ansible/galaxy/collection/__init__.py index 85a91bdcc9..0feb0fe637 100644 --- a/lib/ansible/galaxy/collection/__init__.py +++ b/lib/ansible/galaxy/collection/__init__.py @@ -790,6 +790,8 @@ def _build_files_manifest(b_collection_path, namespace, name, ignore_patterns): # We always ignore .pyc and .retry files as well as some well known version control directories. The ignore # patterns can be extended by the build_ignore key in galaxy.yml b_ignore_patterns = [ + b'MANIFEST.json', + b'FILES.json', b'galaxy.yml', b'galaxy.yaml', b'.git', diff --git a/test/units/galaxy/test_collection.py b/test/units/galaxy/test_collection.py index 8575a55c17..15f4feee36 100644 --- a/test/units/galaxy/test_collection.py +++ b/test/units/galaxy/test_collection.py @@ -246,6 +246,45 @@ def test_build_existing_output_with_force(collection_input): assert tarfile.is_tarfile(existing_output) +def test_build_with_existing_files_and_manifest(collection_input): + input_dir, output_dir = collection_input + + with open(os.path.join(input_dir, 'MANIFEST.json'), "wb") as fd: + fd.write(b'{"collection_info": {"version": "6.6.6"}, "version": 1}') + + with open(os.path.join(input_dir, 'FILES.json'), "wb") as fd: + fd.write(b'{"files": [], "format": 1}') + + with open(os.path.join(input_dir, "plugins", "MANIFEST.json"), "wb") as fd: + fd.write(b"test data that should be in build") + + collection.build_collection(to_text(input_dir, errors='surrogate_or_strict'), to_text(output_dir, errors='surrogate_or_strict'), False) + + output_artifact = os.path.join(output_dir, 'ansible_namespace-collection-0.1.0.tar.gz') + assert tarfile.is_tarfile(output_artifact) + + with tarfile.open(output_artifact, mode='r') as actual: + members = actual.getmembers() + + manifest_file = next(m for m in members if m.path == "MANIFEST.json") + manifest_file_obj = actual.extractfile(manifest_file.name) + manifest_file_text = manifest_file_obj.read() + manifest_file_obj.close() + assert manifest_file_text != b'{"collection_info": {"version": "6.6.6"}, "version": 1}' + + json_file = next(m for m in members if m.path == "MANIFEST.json") + json_file_obj = actual.extractfile(json_file.name) + json_file_text = json_file_obj.read() + json_file_obj.close() + assert json_file_text != b'{"files": [], "format": 1}' + + sub_manifest_file = next(m for m in members if m.path == "plugins/MANIFEST.json") + sub_manifest_file_obj = actual.extractfile(sub_manifest_file.name) + sub_manifest_file_text = sub_manifest_file_obj.read() + sub_manifest_file_obj.close() + assert sub_manifest_file_text == b"test data that should be in build" + + @pytest.mark.parametrize('galaxy_yml_dir', [b'namespace: value: broken'], indirect=True) def test_invalid_yaml_galaxy_file(galaxy_yml_dir): galaxy_file = os.path.join(galaxy_yml_dir, b'galaxy.yml') |