From 43868ae8287154b3e11c3075dfc95dc2685504f6 Mon Sep 17 00:00:00 2001 From: Clark Boylan Date: Fri, 5 Oct 2018 12:31:10 -0700 Subject: [PATCH] Add test workspace setup role This will allow us to test changes to this role which is used in base and base-test. Change-Id: I072eea647313aac5c5f1024db193b603ad91e010 --- .../README.rst | 6 +++ .../tasks/main.yaml | 42 +++++++++++++++++++ 2 files changed, 48 insertions(+) create mode 100644 roles/test-mirror-workspace-git-repos/README.rst create mode 100644 roles/test-mirror-workspace-git-repos/tasks/main.yaml diff --git a/roles/test-mirror-workspace-git-repos/README.rst b/roles/test-mirror-workspace-git-repos/README.rst new file mode 100644 index 000000000..b6e4ed940 --- /dev/null +++ b/roles/test-mirror-workspace-git-repos/README.rst @@ -0,0 +1,6 @@ +Mirror the local git repos to remote nodes + +This role uses git operations (unlike :zuul:role:`prepare-workspace` +which uses rsync) to mirror the local prepared git repos to the remote +nodes. This may be useful if the remote node already has a copy of +some or all of the git repos. diff --git a/roles/test-mirror-workspace-git-repos/tasks/main.yaml b/roles/test-mirror-workspace-git-repos/tasks/main.yaml new file mode 100644 index 000000000..2c9f19184 --- /dev/null +++ b/roles/test-mirror-workspace-git-repos/tasks/main.yaml @@ -0,0 +1,42 @@ +- 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 + # 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 + # 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 {{ item.value.checkout }} + 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