zuul-jobs/roles/mirror-workspace-git-repos/tasks/main.yaml
Ian Wienand 80f5a7eeb4 Convert back to zuul.projects
Zuul has transitioned zuul.projects to a dict that mirrors
zuul._projects.  Convert users back to zuul.projects so we can remove
the underscore version in zuul.

Change-Id: I1408a15d4da274f3fc911f03d5572f4818bc4ebb
Depends-On: I3c011f72933e98ccbf8badf0e9197c8659766c51
2017-12-01 15:02:20 +11:00

54 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 --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
- 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.value.src_dir }}"
with_dict: "{{ zuul.projects }}"
delegate_to: localhost
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: |
# 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 {{ project_heads[item.key] }}
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