4ea777ae66
Especially when using Github branch and push workflows repos can easily have hundreds of branches. The role mirror-workspace-git-repos which pushes them onto the node prints all of them in every build. This can get quite messy. Thus we need to optionally be able to silence the git push operation. This is done on purpose by the --quiet parameter instead of using no_log because this way errors are still logged normally and normal operation produces no log output for this task. Change-Id: Id77cc00972df9139e4544dd79954d91f4ab6b60b
46 lines
1.9 KiB
YAML
46 lines
1.9 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 {% if mirror_workspace_quiet %}--quiet{% endif %} --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 {% if mirror_workspace_quiet %}--quiet{% endif %} {{ 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
|