110dcaacf9
In case of reused workspaces on static nodes remote non-bare repos needs to be cleaned up to make sure that any untracked files from any earlier jobs are removed. Change-Id: I00dda298f499b241a224c19657ebbb8a9015eb4d
48 lines
2.0 KiB
YAML
48 lines
2.0 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
|
|
# Clean is needed because we pushed to a non-bare repo
|
|
git clean -xdf
|
|
# 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
|