Add Bazel build and ensure roles
* Build role requires build target to be specified via a variable * Ensure role checks for a specific version of Bazel and downloads and installs if missing; defaults to v3.1.0 and downloading from bazelbuild Github, but these can be overrriden using variables * Also installs dependencies for Bazel; only supports Ubuntu/Debian at present, but includes scope to extend for other platforms * Includes test playbook and job Change-Id: I83f198aaf20c2b3664bea6fc05edd3b4fca13a4f
This commit is contained in:
parent
5b37cabf41
commit
ad7297199d
5
doc/source/build-roles.rst
Normal file
5
doc/source/build-roles.rst
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
Build Roles
|
||||||
|
============
|
||||||
|
|
||||||
|
.. zuul:autorole:: bazel-build
|
||||||
|
.. zuul:autorole:: ensure-bazel
|
@ -10,6 +10,7 @@ Roles
|
|||||||
general-roles
|
general-roles
|
||||||
log-roles
|
log-roles
|
||||||
afs-roles
|
afs-roles
|
||||||
|
build-roles
|
||||||
cloud-roles
|
cloud-roles
|
||||||
container-roles
|
container-roles
|
||||||
deprecated-roles
|
deprecated-roles
|
||||||
|
14
roles/bazel-build/README.rst
Normal file
14
roles/bazel-build/README.rst
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
Build project using Bazel.
|
||||||
|
|
||||||
|
**Role Variables**
|
||||||
|
|
||||||
|
.. zuul:rolevar:: bazel_build_target
|
||||||
|
|
||||||
|
Build target to specify when invoking Bazel. See
|
||||||
|
`Bazel docs <https://docs.bazel.build/versions/master/guide.html#target-patterns>`_
|
||||||
|
for details
|
||||||
|
|
||||||
|
.. zuul:rolevar:: zuul_work_dir
|
||||||
|
:default: {{ zuul.project.src_dir }}
|
||||||
|
|
||||||
|
Directory where project will be built.
|
1
roles/bazel-build/defaults/main.yaml
Normal file
1
roles/bazel-build/defaults/main.yaml
Normal file
@ -0,0 +1 @@
|
|||||||
|
zuul_work_dir: "{{ zuul.project.src_dir }}"
|
9
roles/bazel-build/tasks/main.yaml
Normal file
9
roles/bazel-build/tasks/main.yaml
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
- name: Require bazel_build_target variable
|
||||||
|
fail:
|
||||||
|
msg: bazel_build_target is required for this role
|
||||||
|
when: bazel_build_target is not defined
|
||||||
|
|
||||||
|
- name: Build bazel
|
||||||
|
command: bazel build {{ bazel_build_target }}
|
||||||
|
args:
|
||||||
|
chdir: '{{ zuul_work_dir }}'
|
13
roles/ensure-bazel/README.rst
Normal file
13
roles/ensure-bazel/README.rst
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
Download and install Bazel, if the specified version is not already present.
|
||||||
|
|
||||||
|
**Role Variables**
|
||||||
|
|
||||||
|
.. zuul:rolevar:: bazel_version
|
||||||
|
:default: '3.1.0'
|
||||||
|
|
||||||
|
The version of Bazel required.
|
||||||
|
|
||||||
|
.. zuul:rolevar:: bazel_release_url
|
||||||
|
:default: 'https://github.com/bazelbuild/bazel/releases/download'
|
||||||
|
|
||||||
|
The base URL to use when downloading Bazel releases.
|
4
roles/ensure-bazel/defaults/main.yaml
Normal file
4
roles/ensure-bazel/defaults/main.yaml
Normal file
@ -0,0 +1,4 @@
|
|||||||
|
---
|
||||||
|
bazel_version: '3.1.0'
|
||||||
|
bazel_release_url: 'https://github.com/bazelbuild/bazel/releases/download'
|
||||||
|
install_bazel_if_missing: true
|
20
roles/ensure-bazel/tasks/Debian.yaml
Normal file
20
roles/ensure-bazel/tasks/Debian.yaml
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
- name: Install Bazel dependencies
|
||||||
|
become: true
|
||||||
|
package:
|
||||||
|
name:
|
||||||
|
- pkg-config
|
||||||
|
- zip
|
||||||
|
- g++
|
||||||
|
- zlib1g-dev
|
||||||
|
- unzip
|
||||||
|
- python3
|
||||||
|
state: present
|
||||||
|
|
||||||
|
- name: Install bazel on Debian
|
||||||
|
become: true
|
||||||
|
shell: |
|
||||||
|
set -ex
|
||||||
|
{{ bazel_installer_tempdir.path }}/bazel-{{ bazel_version }}-installer-linux-x86_64.sh
|
||||||
|
bazel version
|
||||||
|
args:
|
||||||
|
executable: /bin/bash
|
5
roles/ensure-bazel/tasks/default.yaml
Normal file
5
roles/ensure-bazel/tasks/default.yaml
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
- name: Warn about unsupported distribution
|
||||||
|
debug:
|
||||||
|
msg: >
|
||||||
|
WARNING: Installation of Bazel on {{ ansible_distribution }} is not
|
||||||
|
supported by this role yet.
|
29
roles/ensure-bazel/tasks/install-bazel.yaml
Normal file
29
roles/ensure-bazel/tasks/install-bazel.yaml
Normal file
@ -0,0 +1,29 @@
|
|||||||
|
- name: Create temp directory
|
||||||
|
tempfile:
|
||||||
|
state: directory
|
||||||
|
register: bazel_installer_tempdir
|
||||||
|
|
||||||
|
- name: Get installer checksum
|
||||||
|
uri:
|
||||||
|
url: "{{ bazel_release_url }}/{{ bazel_version }}/bazel-{{ bazel_version }}-installer-linux-x86_64.sh.sha256"
|
||||||
|
return_content: true
|
||||||
|
register: bazel_installer_checksum
|
||||||
|
|
||||||
|
- debug: msg="Checksum is {{ bazel_installer_checksum.content.split(' ')[0] }}"
|
||||||
|
|
||||||
|
- name: Download bazel installer
|
||||||
|
get_url:
|
||||||
|
url: "{{ bazel_release_url }}/{{ bazel_version }}/bazel-{{ bazel_version }}-installer-linux-x86_64.sh"
|
||||||
|
dest: "{{ bazel_installer_tempdir.path }}/bazel-{{ bazel_version }}-installer-linux-x86_64.sh"
|
||||||
|
mode: 0755
|
||||||
|
checksum: "sha256:{{ bazel_installer_checksum.content.split(' ')[0] }}"
|
||||||
|
|
||||||
|
- debug: msg="Distribution is {{ ansible_distribution }}"
|
||||||
|
- debug: msg="OS family is {{ ansible_os_family }}"
|
||||||
|
|
||||||
|
- name: Install bazel and platform-specific dependencies
|
||||||
|
include: "{{ item }}"
|
||||||
|
with_first_found:
|
||||||
|
- "{{ ansible_distribution }}.yaml"
|
||||||
|
- "{{ ansible_os_family }}.yaml"
|
||||||
|
- "default.yaml"
|
12
roles/ensure-bazel/tasks/main.yaml
Normal file
12
roles/ensure-bazel/tasks/main.yaml
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
- name: Check version of bazel
|
||||||
|
shell: bazel --version | grep -Eo '([0-9]+\.)+[0-9]+'
|
||||||
|
ignore_errors: yes
|
||||||
|
register: installed_bazel_version
|
||||||
|
|
||||||
|
- debug: msg="Current installed Bazel version is {{ installed_bazel_version.stdout }}"
|
||||||
|
|
||||||
|
- name: Download and install Bazel if needed
|
||||||
|
include_tasks: install-bazel.yaml
|
||||||
|
when:
|
||||||
|
- install_bazel_if_missing
|
||||||
|
- installed_bazel_version.stdout != bazel_version
|
24
test-playbooks/build-roles/ensure-bazel.yaml
Normal file
24
test-playbooks/build-roles/ensure-bazel.yaml
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
- name: Test correct version of bazel installed
|
||||||
|
hosts: all
|
||||||
|
roles:
|
||||||
|
- role: ensure-bazel
|
||||||
|
post_tasks:
|
||||||
|
- name: Confirm correct version installed
|
||||||
|
shell: bazel --version | grep -Eo '([0-9]+\.)+[0-9]+'
|
||||||
|
ignore_errors: yes
|
||||||
|
register: confirmed_bazel_version
|
||||||
|
failed_when: bazel_version != confirmed_bazel_version.stdout
|
||||||
|
|
||||||
|
- name: Test bazel not installed when install_bazel_if_missing is false
|
||||||
|
hosts: all
|
||||||
|
roles:
|
||||||
|
- role: ensure-bazel
|
||||||
|
vars:
|
||||||
|
bazel_version: '1.2.1'
|
||||||
|
install_bazel_if_missing: False
|
||||||
|
post_tasks:
|
||||||
|
- name: Confirm version not installed
|
||||||
|
shell: bazel --version | grep -Eo '([0-9]+\.)+[0-9]+'
|
||||||
|
ignore_errors: yes
|
||||||
|
register: confirmed_bazel_version
|
||||||
|
failed_when: bazel_version == confirmed_bazel_version.stdout
|
16
zuul-tests.d/build-roles-jobs.yaml
Normal file
16
zuul-tests.d/build-roles-jobs.yaml
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
- job:
|
||||||
|
name: zuul-jobs-test-ensure-bazel
|
||||||
|
description: Test the ensure-bazel role
|
||||||
|
run: test-playbooks/build-roles/ensure-bazel.yaml
|
||||||
|
|
||||||
|
# -* AUTOGENERATED *-
|
||||||
|
# The following project section is autogenerated by
|
||||||
|
# tools/update-test-platforms.py
|
||||||
|
# Please re-run to generate new job lists
|
||||||
|
|
||||||
|
- project:
|
||||||
|
check:
|
||||||
|
jobs: &id001
|
||||||
|
- zuul-jobs-test-ensure-bazel
|
||||||
|
gate:
|
||||||
|
jobs: *id001
|
Loading…
Reference in New Issue
Block a user