4f02e92e70
Our prepare-workspace-git role was trying to express a few related steps as ansible tasks. The problem is that each one of these steps had to iterate through the entire project list incurring the ansible startup time for each task of each loop iteration. We can speed things up a bit if we use a single loop and a slightly more complicated shell task that checks if things like directories exist before cloning/initing git repos. Note this is still slower than if we removed the Ansible task loop entirely and move this logic into an ansible module that can run a loop internally. However, making a change like that is significantly more involved as we'd likely end up exec'ing git with python and need to manage logging, errors, and so on. The shell module already handles that for us in a nice way. Change-Id: Ic87eb182cc4ca4bd0acdd1aa46c2d72dc1165e90
33 lines
1.3 KiB
YAML
33 lines
1.3 KiB
YAML
# 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: mirror-workspace-git-repos
|