Move to dictionary list of projects zuul._projects (take 2)
This is a revert of commitf28cc33bc3
which was a revert of the original attempt at moving to zuul._projects (df98773573
). The issue was that the order of projects in "Determine local HEAD" was not the same as "Update remote repository state" and we ended up checking out the wrong thing. To avoid this, build the projects and their current heads on the exectutor into a separate dict, and as we iterate the projects look up the correct values in that. Change-Id: I0d9a66435714efe42fb653aafc6cb71b08ca6b8a
This commit is contained in:
parent
d7cba9d7d5
commit
b1b2537de7
@ -3,32 +3,38 @@
|
|||||||
name: receive.denyCurrentBranch ignore
|
name: receive.denyCurrentBranch ignore
|
||||||
value: ignore
|
value: ignore
|
||||||
scope: local
|
scope: local
|
||||||
repo: "{{ ansible_user_dir }}/{{ item.src_dir}}"
|
repo: "{{ ansible_user_dir }}/{{ item.value.src_dir}}"
|
||||||
with_items: "{{ zuul.projects }}"
|
with_dict: "{{ zuul._projects }}"
|
||||||
|
|
||||||
- name: Synchronize src repos to workspace directory
|
- name: Synchronize src repos to workspace directory
|
||||||
command: "git push --mirror git+ssh://{{ ansible_user }}@{{ ansible_host }}/{{ ansible_user_dir }}/{{ item.src_dir}}"
|
command: "git push --mirror git+ssh://{{ ansible_user }}@{{ ansible_host }}/{{ ansible_user_dir }}/{{ item.value.src_dir}}"
|
||||||
args:
|
args:
|
||||||
chdir: "{{ zuul.executor.work_root }}/{{ item.src_dir }}"
|
chdir: "{{ zuul.executor.work_root }}/{{ item.value.src_dir }}"
|
||||||
with_items: "{{ zuul.projects }}"
|
with_dict: "{{ zuul._projects }}"
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
# ANSIBLE0006: Skip linting since it triggers on the "git" command,
|
# ANSIBLE0006: Skip linting since it triggers on the "git" command,
|
||||||
# but push is not supported by ansible git module.
|
# but push is not supported by ansible git module.
|
||||||
tags:
|
tags:
|
||||||
- skip_ansible_lint
|
- skip_ansible_lint
|
||||||
|
|
||||||
- name: Determine local HEAD
|
- name: Determine local HEAD of projects
|
||||||
shell: "git status |head -1 |awk '{ print $NF }'"
|
# Output yaml-valid dict data for projects and their current HEAD
|
||||||
|
shell: "echo '{{ item.key }}:' $(git status | head -1 |awk '{ print $NF }')"
|
||||||
args:
|
args:
|
||||||
chdir: "{{ zuul.executor.work_root }}/{{ item.src_dir }}"
|
chdir: "{{ zuul.executor.work_root }}/{{ item.value.src_dir }}"
|
||||||
with_items: "{{ zuul.projects }}"
|
with_dict: "{{ zuul._projects }}"
|
||||||
delegate_to: localhost
|
delegate_to: localhost
|
||||||
register: statuses
|
register: project_heads_yaml
|
||||||
# ANSIBLE0006: Skip linting since it triggers on the "git" command,
|
# ANSIBLE0006: Skip linting since it triggers on the "git" command,
|
||||||
# but status is not supported by ansible git module.
|
# but status is not supported by ansible git module.
|
||||||
tags:
|
tags:
|
||||||
- skip_ansible_lint
|
- skip_ansible_lint
|
||||||
|
|
||||||
|
- name: Build dict to map project and current head HEAD
|
||||||
|
set_fact:
|
||||||
|
project_heads: "{{ project_heads|default({}) | combine( item.stdout | from_yaml ) }}"
|
||||||
|
with_items: '{{ project_heads_yaml.results }}'
|
||||||
|
|
||||||
# Do this as a multi-line shell so that we can do the loop once
|
# Do this as a multi-line shell so that we can do the loop once
|
||||||
- name: Update remote repository state correctly
|
- name: Update remote repository state correctly
|
||||||
shell: |
|
shell: |
|
||||||
@ -37,12 +43,11 @@
|
|||||||
# Undo the config setting we did above
|
# Undo the config setting we did above
|
||||||
git config --local --unset receive.denyCurrentBranch
|
git config --local --unset receive.denyCurrentBranch
|
||||||
# checkout the branch matching the branch set up by the executor
|
# checkout the branch matching the branch set up by the executor
|
||||||
git checkout {{ item.1.stdout }}
|
git checkout {{ project_heads[item.key] }}
|
||||||
args:
|
args:
|
||||||
chdir: "{{ ansible_user_dir }}/{{ item.0.src_dir }}"
|
chdir: "{{ ansible_user_dir }}/{{ item.value.src_dir }}"
|
||||||
with_together:
|
with_dict:
|
||||||
- "{{ zuul.projects }}"
|
- "{{ zuul._projects }}"
|
||||||
- "{{ statuses.results }}"
|
|
||||||
# ANSIBLE0006: Skip linting since it triggers on the "git" command,
|
# ANSIBLE0006: Skip linting since it triggers on the "git" command,
|
||||||
# but we prefer the shell above
|
# but we prefer the shell above
|
||||||
tags:
|
tags:
|
||||||
|
@ -10,4 +10,4 @@
|
|||||||
tox_envlist: "{{ tox_envlist }}"
|
tox_envlist: "{{ tox_envlist }}"
|
||||||
tox_constraints_file: "{{ tox_constraints_file | default(omit) }}"
|
tox_constraints_file: "{{ tox_constraints_file | default(omit) }}"
|
||||||
project_dir: "{{ zuul_work_dir }}"
|
project_dir: "{{ zuul_work_dir }}"
|
||||||
projects: "{{ zuul.projects | selectattr('required') | list }}"
|
projects: "{{ zuul._projects.values() | selectattr('required') | list }}"
|
||||||
|
Loading…
Reference in New Issue
Block a user