zuul-jobs/roles/test-mirror-workspace-git-repos/tasks/main.yaml
Ian Wienand a8f1afb5ed Update test-mirror-workspace-git-repos, add test
This updates the test-mirror-workspace-git-repos to be the same as
mirror-workspace-git-repos, and adds the change proposed in
I84d9a8a460e99d3bc558b3a7584d787b22f2ed33 for testing.

Change-Id: If0792190c75c7716e94f1f5ae0f2d4fc37e0b306
2018-12-12 16:02:59 +11:00

46 lines
1.8 KiB
YAML

- 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 | ipwrap }}:{{ ansible_port }}/{{ ansible_user_dir }}/{{ item.value.src_dir}}"
args:
chdir: "{{ zuul.executor.work_root }}/{{ item.value.src_dir }}"
with_dict: "{{ zuul.projects }}"
delegate_to: localhost
# We occasionally see git pushes in the middle of this loop fail then
# subsequent pushes for other repos succeed. The entire loop ends up
# failing because one of the pushes failed. Mitigate this by retrying
# on failure.
register: git_push
until: git_push is success
retries: 3
# 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 }}
# put out a status line with the current HEAD
echo "{{ item.value.canonical_name }} checked out to:"
git log --pretty=oneline -1
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