- name: Allow pushing to non-bare repo git_config: name: receive.denyCurrentBranch ignore value: ignore scope: local 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.value.src_dir}}" args: 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 # Do this as a multi-line shell so that we can do the loop once - name: Update remote repository state correctly shell: | # Reset is needed because we pushed to a non-bare repo git reset --hard # 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.value.checkout }} args: 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: - skip_ansible_lint