fix installing collections from git repos that contain MANIFEST.json (#79808) (#79826)

* add null 'manifest' key to metadata for git repo collections containing MANIFEST.json

changelog

* set to Sentinel instead of None

* Test installing a collection in a git repo that contains a MANIFEST.json

* fix test

* Update changelogs/fragments/ansible-galaxy-install-git-src-manifest.yml

(cherry picked from commit 321848e98d)
pull/80010/head
Sloane Hertel 2 years ago committed by GitHub
parent 65366f663d
commit c0395c486a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,2 @@
bugfixes:
- ansible-galaxy - fix installing collections in git repositories/directories which contain a MANIFEST.json file (https://github.com/ansible/ansible/issues/79796).

@ -1570,6 +1570,7 @@ def install_src(collection, b_collection_path, b_collection_output_path, artifac
if 'build_ignore' not in collection_meta: # installed collection, not src
# FIXME: optimize this? use a different process? copy instead of build?
collection_meta['build_ignore'] = []
collection_meta['manifest'] = Sentinel
collection_manifest = _build_manifest(**collection_meta)
file_manifest = _build_files_manifest(
b_collection_path,

@ -1,3 +1,4 @@
---
dependencies:
- setup_remote_tmp_dir
- setup_gnutar

@ -30,6 +30,7 @@
- include_tasks: ./download.yml
- include_tasks: ./setup_collection_bad_version.yml
- include_tasks: ./test_invalid_version.yml
- include_tasks: ./test_manifest_metadata.yml
always:

@ -0,0 +1,55 @@
- name: Test installing a collection from a git repo containing a MANIFEST.json
block:
- name: Create a temp directory for building the collection
file:
path: '{{ galaxy_dir }}/scratch'
state: directory
- name: Initialize a collection
command: 'ansible-galaxy collection init namespace_3.collection_1'
args:
chdir: '{{ galaxy_dir }}/scratch'
- name: Build the collection
command: 'ansible-galaxy collection build namespace_3/collection_1'
args:
chdir: '{{ galaxy_dir }}/scratch'
- name: Initialize git repository
command: 'git init {{ scm_path }}/namespace_3'
- name: Create the destination for the collection
file:
path: '{{ scm_path }}/namespace_3/collection_1'
state: directory
- name: Unarchive the collection in the git repo
unarchive:
dest: '{{ scm_path }}/namespace_3/collection_1'
src: '{{ galaxy_dir }}/scratch/namespace_3-collection_1-1.0.0.tar.gz'
remote_src: yes
- name: Commit the changes
shell: git add ./; git commit -m 'add collection'
args:
chdir: '{{ scm_path }}/namespace_3'
- name: Install the collection in the git repository
command: 'ansible-galaxy collection install git+file://{{ scm_path }}/namespace_3/.git'
register: result
- name: Assert the collection was installed successfully
assert:
that:
- '"namespace_3.collection_1:1.0.0 was installed successfully" in result.stdout_lines'
always:
- name: Clean up directories from test
file:
path: '{{ galaxy_dir }}/scratch'
state: absent
loop:
- '{{ galaxy_dir }}/scratch'
- '{{ scm_path }}/namespace_3'
- include_tasks: ./empty_installed_collections.yml
Loading…
Cancel
Save