Fix prepare-workspace-git operating on existing repos
Commit 8003cdc76c
causes problems
if the remote repo already exists (e.g., the worker node is static
and not ephemeral) because it unconditionally removes settings
which are only conditionally set if the workspace is newly cloned.
Fix that by remove the Ansible "creates" check from the task and
executing the set calls unconditionally (but also, recreate the
functionality of the create check for the cloning part of the
task, which is what we're really trying to avoid).
This will run a few extra command such as clearing the bare flag
and also resetting the origin remote. That should be fine in
this role since we expect it to do whatever it takes to make the
remote repo the same as the local one.
Also, resync test-prepare-workspace-git.
Change-Id: Ife12992df9ce2b0ce199b3980a4baa255cb0f28a
This commit is contained in:
parent
8c90dd472b
commit
78276a58c5
@ -21,23 +21,24 @@
|
||||
- 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 }} {{ zuul_workspace_root }}/{{ zj_project.src_dir }}/.git
|
||||
else
|
||||
git init {{ zuul_workspace_root }}/{{ zj_project.src_dir }}
|
||||
if [ ! -d "{{ zuul_workspace_root }}/{{ zj_project.src_dir }}" ] ; then
|
||||
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 }} {{ zuul_workspace_root }}/{{ zj_project.src_dir }}/.git
|
||||
else
|
||||
git init {{ zuul_workspace_root }}/{{ zj_project.src_dir }}
|
||||
fi
|
||||
cd {{ zuul_workspace_root }}/{{ 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
|
||||
fi
|
||||
cd {{ zuul_workspace_root }}/{{ zj_project.src_dir }}
|
||||
git config --local --bool core.bare false
|
||||
# Allow pushing to non-bare repo
|
||||
git config --local receive.denyCurrentBranch ignore
|
||||
# Allow deleting current branch
|
||||
git config --local receive.denyDeleteCurrent ignore
|
||||
git remote -v | grep origin && git remote rm origin || true
|
||||
git remote add origin file:///dev/null
|
||||
args:
|
||||
creates: "{{ zuul_workspace_root }}/{{ zj_project.src_dir }}"
|
||||
with_items: "{{ _zuul_projects.values() }}"
|
||||
loop_control:
|
||||
loop_var: zj_project
|
||||
|
@ -21,23 +21,24 @@
|
||||
- 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 }} {{ zuul_workspace_root }}/{{ zj_project.src_dir }}/.git
|
||||
else
|
||||
git init {{ zuul_workspace_root }}/{{ zj_project.src_dir }}
|
||||
if [ ! -d "{{ zuul_workspace_root }}/{{ zj_project.src_dir }}" ] ; then
|
||||
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 }} {{ zuul_workspace_root }}/{{ zj_project.src_dir }}/.git
|
||||
else
|
||||
git init {{ zuul_workspace_root }}/{{ zj_project.src_dir }}
|
||||
fi
|
||||
cd {{ zuul_workspace_root }}/{{ 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
|
||||
fi
|
||||
cd {{ zuul_workspace_root }}/{{ zj_project.src_dir }}
|
||||
git config --local --bool core.bare false
|
||||
# Allow pushing to non-bare repo
|
||||
git config --local receive.denyCurrentBranch ignore
|
||||
# Allow deleting current branch
|
||||
git config --local receive.denyDeleteCurrent ignore
|
||||
git remote -v | grep origin && git remote rm origin || true
|
||||
git remote add origin file:///dev/null
|
||||
args:
|
||||
creates: "{{ zuul_workspace_root }}/{{ zj_project.src_dir }}"
|
||||
with_items: "{{ _zuul_projects.values() }}"
|
||||
loop_control:
|
||||
loop_var: zj_project
|
||||
@ -46,32 +47,11 @@
|
||||
tags:
|
||||
- skip_ansible_lint
|
||||
|
||||
- name: Synchronize src repos to workspace directory
|
||||
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 {{ zuul_workspace_root }}/{{ zj_project.value.src_dir }}"
|
||||
{% else %}
|
||||
git push {% if mirror_workspace_quiet %}--quiet{% endif %} --mirror git+ssh://{{ ansible_user }}@{{ ansible_host | ipwrap }}:{{ ansible_port }}/{{ zuul_workspace_root }}/{{ zj_project.value.src_dir }}
|
||||
{% endif %}
|
||||
args:
|
||||
chdir: "{{ zuul.executor.work_root }}/{{ zj_project.value.src_dir }}"
|
||||
environment:
|
||||
GIT_ALLOW_PROTOCOL: ext:ssh
|
||||
- name: Include tasks to synchronize src repos to workspace directory
|
||||
include_tasks: sync-project.yaml
|
||||
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
|
||||
# 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
|
||||
|
23
roles/test-prepare-workspace-git/tasks/sync-project.yaml
Normal file
23
roles/test-prepare-workspace-git/tasks/sync-project.yaml
Normal file
@ -0,0 +1,23 @@
|
||||
- name: "Synchronize {{ zj_project.value.canonical_name }}"
|
||||
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 {{ zuul_workspace_root }}/{{ zj_project.value.src_dir }}"
|
||||
{% else %}
|
||||
git push {% if mirror_workspace_quiet %}--quiet{% endif %} --mirror git+ssh://{{ ansible_user }}@{{ ansible_host | ipwrap }}:{{ ansible_port }}/{{ zuul_workspace_root }}/{{ zj_project.value.src_dir }}
|
||||
{% endif %}
|
||||
args:
|
||||
chdir: "{{ zuul.executor.work_root }}/{{ zj_project.value.src_dir }}"
|
||||
environment:
|
||||
GIT_ALLOW_PROTOCOL: ext:ssh
|
||||
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
|
Loading…
Reference in New Issue
Block a user