From 2cc836a320965e949ef298a2fd57a349b25df0b4 Mon Sep 17 00:00:00 2001 From: "James E. Blair" Date: Thu, 19 May 2022 09:32:15 -0700 Subject: [PATCH] Re-sync test-mirror-workspace-git-repos This brings it in-line with mirror-workspace-git-repos in preparation for further changes. Change-Id: Ia7d07f84c5bf48dc11e195738edbce7acece8fee --- .../README.rst | 8 ++++++++ .../defaults/main.yaml | 1 + .../tasks/main.yaml | 19 +++++++++++++++---- 3 files changed, 24 insertions(+), 4 deletions(-) create mode 100644 roles/test-mirror-workspace-git-repos/defaults/main.yaml diff --git a/roles/test-mirror-workspace-git-repos/README.rst b/roles/test-mirror-workspace-git-repos/README.rst index b6e4ed940..e2a1fdac7 100644 --- a/roles/test-mirror-workspace-git-repos/README.rst +++ b/roles/test-mirror-workspace-git-repos/README.rst @@ -4,3 +4,11 @@ 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. + +**Role Variables** + +.. zuul:rolevar:: mirror_workspace_quiet + :default: false + + If `true` git operations will be silenced and won't print every + changed reference. diff --git a/roles/test-mirror-workspace-git-repos/defaults/main.yaml b/roles/test-mirror-workspace-git-repos/defaults/main.yaml new file mode 100644 index 000000000..b59b6d6b5 --- /dev/null +++ b/roles/test-mirror-workspace-git-repos/defaults/main.yaml @@ -0,0 +1 @@ +mirror_workspace_quiet: false diff --git a/roles/test-mirror-workspace-git-repos/tasks/main.yaml b/roles/test-mirror-workspace-git-repos/tasks/main.yaml index 37e105b37..7f2eb8b42 100644 --- a/roles/test-mirror-workspace-git-repos/tasks/main.yaml +++ b/roles/test-mirror-workspace-git-repos/tasks/main.yaml @@ -9,10 +9,19 @@ loop_var: zj_project - name: Synchronize src repos to workspace directory - command: "git push --mirror git+ssh://{{ ansible_user }}@{{ ansible_host | ipwrap }}:{{ ansible_port }}/{{ ansible_user_dir }}/{{ zj_project.value.src_dir }}" + command: |- + {% if ansible_connection == "kubectl" %} + git push {% if mirror_workspace_quiet %}--quiet{% endif %} --mirror "ext::kubectl --context {{ zuul.resources[inventory_hostname].context }} -n {{ zuul.resources[inventory_hostname].namespace }} exec -i {{ zuul.resources[inventory_hostname].pod }} -- %S {{ ansible_user_dir }}/{{ zj_project.value.src_dir }}" + {% else %} + git push {% if mirror_workspace_quiet %}--quiet{% endif %} --mirror git+ssh://{{ ansible_user }}@{{ ansible_host | ipwrap }}:{{ ansible_port }}/{{ ansible_user_dir }}/{{ zj_project.value.src_dir }} + {% endif %} args: chdir: "{{ zuul.executor.work_root }}/{{ zj_project.value.src_dir }}" + environment: + GIT_ALLOW_PROTOCOL: ext:ssh with_dict: "{{ zuul.projects }}" + loop_control: + loop_var: zj_project 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 @@ -25,18 +34,20 @@ # but push is not supported by ansible git module. tags: - skip_ansible_lint - loop_control: - loop_var: zj_project # Do this as a multi-line shell so that we can do the loop once - name: Update remote repository state correctly shell: | + set -eu + # Reset is needed because we pushed to a non-bare repo git reset --hard + # Clean is needed because we pushed to a non-bare repo + git clean -xdf # 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 {{ zj_project.value.checkout }} + git checkout {% if mirror_workspace_quiet %}--quiet{% endif %} {{ zj_project.value.checkout }} # put out a status line with the current HEAD echo "{{ zj_project.value.canonical_name }} checked out to:" git log --pretty=oneline -1