From 83fea69bbff9072805ee546500044bba220c7ff5 Mon Sep 17 00:00:00 2001 From: Fabien Boucher Date: Jun 13 2019 15:14:31 +0000 Subject: Add mock roles --- diff --git a/roles/mock-build/defaults/main.yaml b/roles/mock-build/defaults/main.yaml new file mode 100644 index 0000000..fb82235 --- /dev/null +++ b/roles/mock-build/defaults/main.yaml @@ -0,0 +1 @@ +mock_config: fedora-rawhide-x86_64 diff --git a/roles/mock-build/tasks/main.yaml b/roles/mock-build/tasks/main.yaml new file mode 100644 index 0000000..6170d22 --- /dev/null +++ b/roles/mock-build/tasks/main.yaml @@ -0,0 +1,45 @@ +--- +- name: Install system dependencies + yum: + name: "mock,createrepo" + state: latest + become: true + +- name: Ensure user in mock group + command: usermod -a -G mock {{ ansible_user_id }} + become: true + +- name: Set mock options fact + set_fact: + mock_opts: "-v -r {{ mock_config }} --resultdir {{ ansible_user_dir }}/repo" + +- name: Init the mock chroot + command: mock {{ mock_opts }} --init + +- name: Create intermediary repositories yum repos file + blockinfile: + path: "{{ ansible_user_dir }}/artifacts.repo" + create: true + content: | + {% for artifact in zuul.artifacts|default([]) %}{% if artifact.name == 'repo' %} + [{{ artifact.project | regex_replace('/', '_') }}-{{ artifact.change }}-{{ artifact.patchset }}] + name={{ artifact.project }}-{{ artifact.change }}-{{ artifact.patchset }} + enabled=1 + baseurl={{ artifact.url }} + gpgcheck=0 + + {% endif %}{% endfor %} + +- name: Copy artifacts.repo in the mock root + shell: > + mock {{ mock_opts }} + --copyin {{ ansible_user_dir }}/artifacts.repo /etc/yum.repos.d/ + +- name: Build the RPM + shell: > + mock {{ mock_opts }} --postinstall --rebuild {{ srpm }} + +- name: Create repository + command: createrepo . + args: + chdir: "{{ ansible_user_dir }}/repo" diff --git a/roles/mock-fetch/tasks/main.yaml b/roles/mock-fetch/tasks/main.yaml new file mode 100644 index 0000000..f23cab5 --- /dev/null +++ b/roles/mock-fetch/tasks/main.yaml @@ -0,0 +1,14 @@ +--- +- name: Upload logs for all builds + synchronize: + src: '{{ ansible_user_dir }}/repo' + dest: '{{ zuul.executor.log_root }}/buildset/' + mode: pull + +- name: Return repo url + zuul_return: + data: + zuul: + artifacts: + - name: repo + url: buildset diff --git a/roles/mock-srpm-build/defaults/main.yaml b/roles/mock-srpm-build/defaults/main.yaml new file mode 100644 index 0000000..fb82235 --- /dev/null +++ b/roles/mock-srpm-build/defaults/main.yaml @@ -0,0 +1 @@ +mock_config: fedora-rawhide-x86_64 diff --git a/roles/mock-srpm-build/tasks/main.yaml b/roles/mock-srpm-build/tasks/main.yaml new file mode 100644 index 0000000..42be02d --- /dev/null +++ b/roles/mock-srpm-build/tasks/main.yaml @@ -0,0 +1,51 @@ +--- +- name: Install system dependencies + yum: + name: "spectool,mock" + state: latest + become: true + +- name: Ensure user in mock group + command: usermod -a -G mock {{ ansible_user_id }} + become: true + +- name: Ensure SOURCES directory + file: + path: "{{ ansible_user_dir }}/SOURCES" + state: directory + +- name: Set mock options fact + set_fact: + mock_opts: "-v -r {{ mock_config }} --resultdir {{ ansible_user_dir }}/repo" + +- name: Retrieve sources + shell: > + spectool -g -C {{ ansible_user_dir }}/SOURCES + {{ zuul.project.src_dir }}/*.spec + +- name: Init the mock chroot + command: mock {{ mock_opts }} --init + +- name: Build the SRPM + shell: > + mock {{ mock_opts }} --buildsrpm + --spec {{ zuul.project.src_dir }}/*.spec + --sources {{ ansible_user_dir }}/SOURCES + +- name: Rename log file with srpm prefix + command: | + mv {{ ansible_user_dir }}/repo/{{ item }} + {{ ansible_user_dir }}/repo/srpm_{{ item }} + loop: + - build.log + - hw_info.log + - root.log + - state.log + +- name: Get SRPM path + shell: ls {{ ansible_user_dir }}/repo/*.src.rpm + register: result + +- name: Set SRPM path fact + set_fact: + srpm: "{{ result.stdout }}" diff --git a/tests/srpm-mock.example b/tests/srpm-mock.example new file mode 100644 index 0000000..cdcede0 --- /dev/null +++ b/tests/srpm-mock.example @@ -0,0 +1,13 @@ +# TODO add preparation play to setup environement to run this + +- hosts: localhost + roles: + - mock-srpm-build + - mock-build + # - mock-fetch + vars: + ansible_user_dir: /home/fabien/dlrn-exp/fake_ansible_user_dir + mock_config: fedora-rawhide-x86_64 + zuul: + project: + src_dir: /home/fabien/dlrn-exp/python-redis