tripleo-quickstart-extras/roles/build-test-packages/tasks/dlrn-build.yml

175 lines
6.0 KiB
YAML

---
- name: Set release name
set_fact:
artg_release: "{{ job.branch_override | default(artg_change.branch) | replace('stable/', '') }}"
- name: print out the release name
debug:
var: artg_release
- when: artg_release in ['master']
block:
- name: Set DLRN distro (legacy distgit branch naming)
set_fact:
artg_distro: "rpm-{{ artg_release }}"
- name: Set DLRN distro for branchless projects
set_fact:
artg_distro: "{{ release }}-rdo"
when:
- release is defined and release not in ['master']
- artg_change.project in artg_branchless_projects
- name: Set DLRN distro (new stable branch naming scheme)
set_fact:
artg_distro: "{{ artg_release }}-rdo"
when: artg_release not in ['master']
- name: Make sure /usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT exists (RHEL)
shell:
cmd: |
export CERTPATH="/usr/share/rhn/RHN-ORG-TRUSTED-SSL-CERT"
export CERTDIR=$(dirname $CERTPATH)
[ ! -d $CERTDIR ] && mkdir -p $CERTDIR
touch $CERTPATH
become: true
when: ansible_distribution in ['RedHat']
- name: Use local baseurl when using local mirrors
set_fact:
dlrn_baseurl: 'file:///tmp/fake-dlrn-repos'
when: dlrn_use_local_mirrors|bool
- name: Override projects.ini settings
lineinfile:
dest: '{{ build_repo_dir }}/DLRN/projects.ini'
regexp: '{{ project_item.regexp }}'
line: '{{ project_item.line }}'
with_items:
- {regexp: 'baseurl=.*', line: 'baseurl={{ dlrn_baseurl }}'}
- {regexp: 'distro=.*', line: 'distro={{ artg_distro }}'}
- {regexp: 'source=.*', line: 'source={{ artg_change.branch }}'}
loop_control:
loop_var: project_item
when: osp_release is not defined
- name: Override projects.ini settings for downstream
lineinfile:
dest: '{{ build_repo_dir }}/DLRN/projects.ini'
regexp: '{{ project_item.regexp }}'
line: '{{ project_item.line }}'
with_items:
- {regexp: 'baseurl=.*', line: 'baseurl={{ dlrn_baseurl }}'}
- {regexp: 'distro=.*', line: 'distro={{ release }}-rdo'}
- {regexp: 'source=.*', line: 'source={{ artg_change.branch }}'}
loop_control:
loop_var: project_item
when: osp_release is defined
- block:
- name: Map project name to DLRN project name
register: project_name_mapped
shell:
chdir: '{{ build_repo_dir }}/DLRN'
cmd: |
source '{{ build_repo_dir }}/dlrn-venv/bin/activate'
set -xeo pipefail
# {{ rdoinfo_repo_name }}/{{ rdoinfo_repo_name.split('info')[0] }}-full.yml will
# return rdo-full.yml and for downstream is osp-full.yml.
rdopkg findpkg -s '{{ artg_change.project | basename }}' \
-i {{ rdoinfo_repo_name }}/{{ rdoinfo_repo_name.split('info')[0] }}-full.yml | \
awk '/^name/{print $2}; {print "findpkg: " $0 > "/dev/stderr"}'
changed_when: false
failed_when: project_name_mapped.rc != 0 or not project_name_mapped.stdout
rescue:
- debug:
msg: |
WARNING: Got {{ project_name_mapped.rc }} result code trying to build {{ artg_change.project }}
--- STDERR ---
{{ project_name_mapped.stderr }}
--- STDOUT ---
{{ project_name_mapped.stdout }}
- when: project_name_mapped is success
block:
- name: Append project name to package list
set_fact:
artg_rdo_packages: '{{ artg_rdo_packages }} + {{ [ project_name_mapped.stdout ] }}'
- name: Check if project {{ project_name_mapped.stdout }} source already exist
stat:
path: '{{ build_repo_dir }}/DLRN/data/{{ project_name_mapped.stdout }}/.git'
register: repo_status
- name: Create data directory if doesn't exist yet
file:
path: "{{ build_repo_dir }}/DLRN/data/"
state: directory
- name: Copy from ready directories if configured
command: >
cp -raf {{ artg_repos_dir | dirname }}/{{ artg_change.project }}
{{ build_repo_dir }}/DLRN/data/{{ project_name_mapped.stdout }}
ignore_errors: true
register: copy_dir
when: artg_repos_dir is defined
- name: Clone the gated change
git:
repo: '{{ artg_change.host }}/{{ artg_change.project }}'
dest: '{{ build_repo_dir }}/DLRN/data/{{ project_name_mapped.stdout }}'
refspec: '{{ artg_change.refspec }}'
version: 'FETCH_HEAD'
when:
- >-
(artg_repos_dir is not defined and not repo_status.stat.exists) or
copy_dir is defined and copy_dir is failed
- name: Cleanup and checkout the relevant branch
vars:
git_path: '{{ build_repo_dir }}/DLRN/data/{{ project_name_mapped.stdout }}'
git_branch: '{{ artg_change.branch }}'
shell: |
set -eu
pushd {{ git_path }}
git clean -ffd
git reset --hard HEAD
git checkout {{ git_branch }}
popd
- name: Ensure distgit repo is absent, DLRN takes care of cloning based on config
file:
path: "{{ build_repo_dir }}/DLRN/data/{{ project_name_mapped.stdout }}_distro"
state: absent
- name: Clone the distgit change
git:
repo: '{{ artg_change.distgit.host }}/{{ artg_change.distgit.project }}'
dest: '{{ build_repo_dir }}/DLRN/data/{{ project_name_mapped.stdout }}_distro'
refspec: '{{ artg_change.distgit.refspec }}'
version: 'FETCH_HEAD'
accept_hostkey: true
when:
- artg_change.distgit is defined
- artg_repos_dir is not defined or copy_dir is defined and copy_dir is failed
- name: Generate DLRN Script
template:
src: run_dlrn.sh.j2
dest: "{{ build_repo_dir }}/run_dlrn.sh"
mode: 0744
- name: Print info about building
debug:
msg: "Building change for {{ project_name_mapped.stdout|default('unknown') }}"
- name: Run DLRN
shell: >
set -o pipefail &&
{{ build_repo_dir }}/run_dlrn.sh 2>&1 {{ timestamper_cmd }} >> {{ build_repo_dir }}/dlrn.log
args:
chdir: '{{ build_repo_dir }}'
register: repo_built
when: artg_build_one|bool