diff --git a/ansible/pull-request-helper.yml b/.articles/6_ansible_pr_helper/pull-request-helper.yml similarity index 59% rename from ansible/pull-request-helper.yml rename to .articles/6_ansible_pr_helper/pull-request-helper.yml index d83f0d1..a928df4 100644 --- a/ansible/pull-request-helper.yml +++ b/.articles/6_ansible_pr_helper/pull-request-helper.yml @@ -12,8 +12,12 @@ tags: - skip_ansible_lint + - name: Debug branch output + debug: + msg: "{{ branch.stdout }}" + - name: Register the git diff - ansible.builtin.command: git diff --name-only {{ default_branch }}..{{ branch.stdout }} . + ansible.builtin.command: git diff --name-only origin/{{ default_branch }}..origin/{{ branch.stdout }} . when: branch.stdout != default_branch register: diff tags: @@ -26,25 +30,24 @@ - name: Extract folders from the diff set_fact: - changed_folders: >- - "{{ diff.stdout_lines - | map('regex_replace', '^(.*/).*$' , '\\1') + changed_folders: "{{ diff.stdout_lines + | map('regex_replace', '^(.*/).*$' , '\\1') | unique }}" - when: branch.stdout != default_branch - name: Filter folders within the roles directory set_fact: - roles_with_changes: >- - "{{ changed_folders - | select('match', '^' + roles_folder + '/') - | map('regex_replace', '^' + roles_folder + '/([^/]+)/.*$', '\\1') + roles_with_changes: "{{ changed_folders + | select('match', '^' + roles_folder + '/') + | map('regex_replace', '^' + roles_folder + '/([^/]+)/.*$', '\\1') | unique }}" - when: branch.stdout != default_branch - name: Set all roles to run if on default branch set_fact: - roles_with_changes: >- - "{{ lookup('fileglob', roles_folder + '/*') - | map('basename') - | list }}" + roles_with_changes: "{{ lookup('fileglob', roles_folder + '/*') + | map('basename') + | list }}" when: branch.stdout == default_branch + + - name: Debug roles_with_changes output + debug: + msg: "{{ roles_with_changes }}" diff --git a/.articles/6_ansible_pr_helper/readme.md b/.articles/6_ansible_pr_helper/readme.md new file mode 100644 index 0000000..8779bf4 --- /dev/null +++ b/.articles/6_ansible_pr_helper/readme.md @@ -0,0 +1,7 @@ +## Speeding up Ansible Pull Request by only running affected roles + +From the root folder execute + +``` +ansible-playbook ./.articles/6_ansible_pr_helper/pull-request-helper.yml +``` \ No newline at end of file diff --git a/.gitpod.yml b/.gitpod.yml index 29f42a5..494989a 100644 --- a/.gitpod.yml +++ b/.gitpod.yml @@ -8,5 +8,3 @@ tasks: pip install pre-commit pre-commit install --install-hooks exit 0 - - diff --git a/ansible/roles/affected_roles/tasks/main.yaml b/ansible/roles/affected_roles/tasks/main.yaml index c8d1ed0..0d7a356 100644 --- a/ansible/roles/affected_roles/tasks/main.yaml +++ b/ansible/roles/affected_roles/tasks/main.yaml @@ -23,27 +23,24 @@ - name: Extract folders from the diff set_fact: - changed_folders: >- - "{{ diff.stdout_lines - | map('regex_replace', '^(.*/).*$' , '\\1') - | unique }}" + changed_folders: "{{ diff.stdout_lines + | map('regex_replace', '^(.*/).*$' , '\\1') + | unique }}" when: branch.stdout != default_branch - name: Filter folders within the roles directory set_fact: - roles_with_changes: >- - "{{ changed_folders - | select('match', '^' + roles_folder + '/') - | map('regex_replace', '^' + roles_folder + '/([^/]+)/.*$', '\\1') - | unique }}" + roles_with_changes: "{{ changed_folders + | select('match', '^' + roles_folder + '/') + | map('regex_replace', '^' + roles_folder + '/([^/]+)/.*$', '\\1') + | unique }}" when: branch.stdout != default_branch - name: Set all roles to run if on default branch set_fact: - roles_with_changes: >- - "{{ lookup('fileglob', roles_folder + '/*') - | map('basename') - | list }}" + roles_with_changes: "{{ lookup('fileglob', roles_folder + '/*') + | map('basename') + | list }}" when: branch.stdout == default_branch - name: Debug roles_with_changes output