40 lines
1.2 KiB
YAML
40 lines
1.2 KiB
YAML
---
|
|
- name: Check if repo should be changed
|
|
set_fact:
|
|
proj: "{{ repo_item.replace('.git', '').split('/')[-2:]|join('/') }}:"
|
|
|
|
- name: Clone usually if project has no changes to apply
|
|
git:
|
|
repo: "{{ repo_item }}"
|
|
dest: "/opt/stack/{{ repo_item.replace('.git', '').split('/')[-1] }}"
|
|
version: master
|
|
when: proj not in zuul_changes
|
|
|
|
- name: Clone project and apply changes to it
|
|
when: proj in zuul_changes
|
|
block:
|
|
|
|
- name: Get changes
|
|
set_fact:
|
|
zuul_changes_list: "{{ zuul_changes.split('^')|list }}"
|
|
|
|
- name: Clone repo and apply change
|
|
shell: |
|
|
export dir={{ item.split(':')[0].split('/')[1] }}
|
|
export refs={{ item.split(':')[2] }}
|
|
if [[ ! -e $dir ]]; then
|
|
git clone {{ repo_item }}
|
|
cd $dir
|
|
git fetch {{ repo_item }} $refs && git checkout FETCH_HEAD
|
|
else
|
|
cd $dir
|
|
git fetch {{ repo_item }} $refs && git cherry-pick --allow-empty FETCH_HEAD
|
|
fi
|
|
git rebase {{ stable_release|default('master', true) }}
|
|
with_items: "{{ zuul_changes_list }}"
|
|
when:
|
|
- proj in item
|
|
- stable_release|default('master', true) in item
|
|
args:
|
|
chdir: /opt/stack
|