# Do all the steps in a single shell script. This reduces the number of times # ansible must loop over the list of projects which reduces the amount of # task startup time we incur. - name: Set initial repo states in workspace shell: | set -ex if [ -d "{{ cached_repos_root }}/{{ zj_project.canonical_name }}" ] ; then # We do a bare clone here first so that we skip creating a working # copy that will be overwritten later anyway. git clone --bare {{ cached_repos_root }}/{{ zj_project.canonical_name }} {{ ansible_user_dir }}/{{ zj_project.src_dir }}/.git else git init {{ ansible_user_dir }}/{{ zj_project.src_dir }} fi cd {{ ansible_user_dir }}/{{ zj_project.src_dir }} git config --local --bool core.bare false git remote -v | grep origin && git remote rm origin || true git remote add origin file:///dev/null args: creates: "{{ ansible_user_dir }}/{{ zj_project.src_dir }}" with_items: "{{ zuul.projects.values() | list }}" loop_control: loop_var: zj_project # We're using git in a shell script because it is faster and the module # doesn't support features we need. tags: - skip_ansible_lint # TODO(tobiash): we might want to deprecate the role mirror-workspace-git-repos # and move it here. - name: Synchronize repos import_role: name: test-mirror-workspace-git-repos