diff --git a/roles/mirror-workspace-git-repos/tasks/main.yaml b/roles/mirror-workspace-git-repos/tasks/main.yaml index e4d8592b7..35dae6606 100644 --- a/roles/mirror-workspace-git-repos/tasks/main.yaml +++ b/roles/mirror-workspace-git-repos/tasks/main.yaml @@ -3,32 +3,38 @@ name: receive.denyCurrentBranch ignore value: ignore scope: local - repo: "{{ ansible_user_dir }}/{{ item.src_dir}}" - with_items: "{{ zuul.projects }}" + repo: "{{ ansible_user_dir }}/{{ item.value.src_dir}}" + with_dict: "{{ zuul._projects }}" - name: Synchronize src repos to workspace directory - command: "git push --mirror git+ssh://{{ ansible_user }}@{{ ansible_host }}/{{ ansible_user_dir }}/{{ item.src_dir}}" + command: "git push --mirror git+ssh://{{ ansible_user }}@{{ ansible_host }}/{{ ansible_user_dir }}/{{ item.value.src_dir}}" args: - chdir: "{{ zuul.executor.work_root }}/{{ item.src_dir }}" - with_items: "{{ zuul.projects }}" + chdir: "{{ zuul.executor.work_root }}/{{ item.value.src_dir }}" + with_dict: "{{ zuul._projects }}" delegate_to: localhost # ANSIBLE0006: Skip linting since it triggers on the "git" command, # but push is not supported by ansible git module. tags: - skip_ansible_lint -- name: Determine local HEAD - shell: "git status |head -1 |awk '{ print $NF }'" +- name: Determine local HEAD of projects + # Output yaml-valid dict data for projects and their current HEAD + shell: "echo '{{ item.key }}:' $(git status | head -1 |awk '{ print $NF }')" args: - chdir: "{{ zuul.executor.work_root }}/{{ item.src_dir }}" - with_items: "{{ zuul.projects }}" + chdir: "{{ zuul.executor.work_root }}/{{ item.value.src_dir }}" + with_dict: "{{ zuul._projects }}" delegate_to: localhost - register: statuses + register: project_heads_yaml # ANSIBLE0006: Skip linting since it triggers on the "git" command, # but status is not supported by ansible git module. tags: - skip_ansible_lint +- name: Build dict to map project and current head HEAD + set_fact: + project_heads: "{{ project_heads|default({}) | combine( item.stdout | from_yaml ) }}" + with_items: '{{ project_heads_yaml.results }}' + # Do this as a multi-line shell so that we can do the loop once - name: Update remote repository state correctly shell: | @@ -37,12 +43,11 @@ # Undo the config setting we did above git config --local --unset receive.denyCurrentBranch # checkout the branch matching the branch set up by the executor - git checkout {{ item.1.stdout }} + git checkout {{ project_heads[item.key] }} args: - chdir: "{{ ansible_user_dir }}/{{ item.0.src_dir }}" - with_together: - - "{{ zuul.projects }}" - - "{{ statuses.results }}" + chdir: "{{ ansible_user_dir }}/{{ item.value.src_dir }}" + with_dict: + - "{{ zuul._projects }}" # ANSIBLE0006: Skip linting since it triggers on the "git" command, # but we prefer the shell above tags: diff --git a/roles/tox/tasks/siblings.yaml b/roles/tox/tasks/siblings.yaml index 84c43cd73..d527edeeb 100644 --- a/roles/tox/tasks/siblings.yaml +++ b/roles/tox/tasks/siblings.yaml @@ -10,4 +10,4 @@ tox_envlist: "{{ tox_envlist }}" tox_constraints_file: "{{ tox_constraints_file | default(omit) }}" project_dir: "{{ zuul_work_dir }}" - projects: "{{ zuul.projects | selectattr('required') | list }}" + projects: "{{ zuul._projects.values() | selectattr('required') | list }}"