Test speedup change to prepare-workspace-git

The child change to prepare-workspace-git explains this in more detail.
We're reducing the number of ansible loops these roles run to reduce
ansible task startup overhead and speed up the role. This change is made
first to the test role so that we can ensure this all works properly
before affecting production zuul installs.

Change-Id: I3d33bb0001e65f449e1026ed323514097088f664
This commit is contained in:
Clark Boylan 2022-09-22 10:46:40 -07:00
parent ce5ab0a01c
commit 9494108621
1 changed files with 18 additions and 49 deletions

View File

@ -1,59 +1,28 @@
- name: Find locally cached git repos
stat:
path: "{{ cached_repos_root }}/{{ zj_project.canonical_name }}"
with_items: "{{ zuul.projects.values() | list }}"
loop_control:
loop_var: zj_project
register: cached_repos
# We do a bare clone here first so that we skip creating a working copy that
# will be overwritten later anyway.
- name: Clone cached repo to workspace
# 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 -e
git clone --bare {{ cached_repos_root }}/{{ zj_project.0.canonical_name }} {{ ansible_user_dir }}/{{ zj_project.0.src_dir }}/.git
cd {{ ansible_user_dir }}/{{ zj_project.0.src_dir }}
git config --local --bool core.bare false
args:
creates: "{{ ansible_user_dir }}/{{ zj_project.0.src_dir }}"
when: zj_project.1.stat.exists
with_together:
- "{{ zuul.projects.values() | list }}"
- "{{ cached_repos.results }}"
loop_control:
loop_var: zj_project
# ANSIBLE0006: If we use the git module, we get warning
# ANSIBLE0004 since we do not give an explicit version
tags:
- skip_ansible_lint
- name: Initialize non-cached repos
command: "git init {{ ansible_user_dir }}/{{ zj_project.0.src_dir }}"
args:
creates: "{{ ansible_user_dir }}/{{ zj_project.0.src_dir }}"
when: not zj_project.1.stat.exists
with_together:
- "{{ zuul.projects.values() | list }}"
- "{{ cached_repos.results }}"
loop_control:
loop_var: zj_project
# ANSIBLE0006: If we use the git module, we get warning
# ANSIBLE0004 since we do not give an explicit version
tags:
- skip_ansible_lint
- name: Remove origin from local git repos and replace it by the zuul fake origin
# To be idempotent, remove origin only if it's found in the local list.
shell: |
set -e
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
cd {{ ansible_user_dir }}/{{ zj_project.src_dir }}
git config --local --bool core.bare false
else
git init {{ ansible_user_dir }}/{{ zj_project.src_dir }}
fi
cd {{ ansible_user_dir }}/{{ zj_project.src_dir }}
git remote -v | grep origin && git remote rm origin || true
git remote add origin file:///dev/null
args:
chdir: "{{ ansible_user_dir }}/{{ zj_project.src_dir }}"
creates: "{{ ansible_user_dir }}/{{ zj_project.src_dir }}"
with_items: "{{ zuul.projects.values() | list }}"
loop_control:
loop_var: zj_project
# ANSIBLE0006: git remote is not supported by ansible module
# 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