From dd66b2000db47fc999aad16630702ba1026696e3 Mon Sep 17 00:00:00 2001 From: Richard Lau Date: Thu, 5 Feb 2026 19:15:50 +0000 Subject: [PATCH] ansible: update gn and ninja for V8 builds Update the versions of `gn` and `ninja` used in the V8 CI for Linux on ppc64le and s390x. --- ansible/roles/build-test-v8/meta/main.yml | 6 ++ .../tasks/partials/rhel8-ppc64.yml | 8 +-- .../tasks/partials/rhel8-s390x.yml | 8 +-- ansible/roles/gn/meta/main.yml | 8 +++ ansible/roles/gn/tasks/main.yml | 2 +- .../roles/gn/tasks/partials/rhel8-ppc64.yml | 8 --- .../roles/gn/tasks/partials/rhel8-s390x.yml | 8 --- ansible/roles/gn/vars/main.yml | 4 +- .../roles/ninja-build/meta/argument_specs.yml | 17 ++++++ ansible/roles/ninja-build/tasks/main.yml | 61 +++++++++++++++++++ .../ninja-build/tasks/partials/rhel8.yml | 16 +++++ ansible/roles/ninja-build/vars/main.yml | 13 ++++ 12 files changed, 126 insertions(+), 33 deletions(-) create mode 100644 ansible/roles/gn/meta/main.yml delete mode 100644 ansible/roles/gn/tasks/partials/rhel8-ppc64.yml delete mode 100644 ansible/roles/gn/tasks/partials/rhel8-s390x.yml create mode 100644 ansible/roles/ninja-build/meta/argument_specs.yml create mode 100644 ansible/roles/ninja-build/tasks/main.yml create mode 100644 ansible/roles/ninja-build/tasks/partials/rhel8.yml create mode 100644 ansible/roles/ninja-build/vars/main.yml diff --git a/ansible/roles/build-test-v8/meta/main.yml b/ansible/roles/build-test-v8/meta/main.yml index 7420e0c8b..e2f1feef3 100644 --- a/ansible/roles/build-test-v8/meta/main.yml +++ b/ansible/roles/build-test-v8/meta/main.yml @@ -2,6 +2,12 @@ # prebuilt binaries for x64 but for ppc64 and s390x we need to compile these # ourselves. dependencies: + - role: ninja-build + when: arch == 'ppc64' or arch == 's390x' + vars: + ninja_dest_dir: "{{ tools_dest_dir }}" + ninja_git_dir: "{{ tools_git_dir }}/ninja" + ninja_user: "{{ tools_user }}" - role: gn when: arch == 'ppc64' or arch == 's390x' vars: diff --git a/ansible/roles/build-test-v8/tasks/partials/rhel8-ppc64.yml b/ansible/roles/build-test-v8/tasks/partials/rhel8-ppc64.yml index 60a1f29e1..38b09e5eb 100644 --- a/ansible/roles/build-test-v8/tasks/partials/rhel8-ppc64.yml +++ b/ansible/roles/build-test-v8/tasks/partials/rhel8-ppc64.yml @@ -4,17 +4,11 @@ # Install packages for V8 builds. # -# ninja-build on RHEL 8 is in the CodeReady Linux Builder repository. -- name: enable codeready-builder repository - community.general.rhsm_repository: - name: codeready-builder-for-rhel-8-ppc64le-rpms - state: enabled - # V8 builds still require Python 2. # rhel_llvm_version and rhel_rust_version from ansible/roles/baselayout/vars/main.yml - name: install packages required to build V8 ansible.builtin.dnf: - name: ['glib2-devel', 'bindgen-cli', 'llvm-toolset-{{rhel_llvm_version}}', 'ninja-build', 'python2', 'python2-pip', 'rustfmt-{{rhel_rust_version}}'] + name: ['glib2-devel', 'bindgen-cli', 'llvm-toolset-{{rhel_llvm_version}}', 'python2', 'python2-pip', 'rustfmt-{{rhel_rust_version}}'] state: present notify: package updated diff --git a/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml b/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml index 7248bb0b2..f9bdc6795 100644 --- a/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml +++ b/ansible/roles/build-test-v8/tasks/partials/rhel8-s390x.yml @@ -4,17 +4,11 @@ # Install packages for V8 builds. # -# ninja-build on RHEL 8 is in the CodeReady Linux Builder repository. -- name: enable codeready-builder repository - community.general.rhsm_repository: - name: codeready-builder-for-rhel-8-s390x-rpms - state: enabled - # Older V8 builds still require Python 2. # rhel_llvm_version and rhel_rust_version from ansible/roles/baselayout/vars/main.yml - name: install packages required to build V8 ansible.builtin.dnf: - name: ['GConf2-devel', 'bindgen-cli', 'llvm-toolset-{{rhel_llvm_version}}', 'ninja-build', 'python2', 'python2-pip', 'rustfmt-{{rhel_rust_version}}'] + name: ['GConf2-devel', 'bindgen-cli', 'llvm-toolset-{{rhel_llvm_version}}', 'python2', 'python2-pip', 'rustfmt-{{rhel_rust_version}}'] state: present notify: package updated diff --git a/ansible/roles/gn/meta/main.yml b/ansible/roles/gn/meta/main.yml new file mode 100644 index 000000000..c39cbb7e7 --- /dev/null +++ b/ansible/roles/gn/meta/main.yml @@ -0,0 +1,8 @@ +# Building gn requires ninja. +dependencies: + - role: ninja-build + when: arch == 'ppc64' or arch == 's390x' + vars: + ninja_dest_dir: "{{ gn_dest_dir }}" + ninja_git_dir: "{{ tools_git_dir }}/ninja" + ninja_user: "{{ tools_user }}" diff --git a/ansible/roles/gn/tasks/main.yml b/ansible/roles/gn/tasks/main.yml index 482dfb844..a5c2f988b 100644 --- a/ansible/roles/gn/tasks/main.yml +++ b/ansible/roles/gn/tasks/main.yml @@ -43,7 +43,7 @@ ansible.builtin.shell: | python3 build/gen.py && \ {{ gn_select_compiler }} && \ - ninja -C out && \ + {{ gn_dest_dir }}/ninja -C out && \ out/gn_unittests args: chdir: "{{ gn_git_dir }}" diff --git a/ansible/roles/gn/tasks/partials/rhel8-ppc64.yml b/ansible/roles/gn/tasks/partials/rhel8-ppc64.yml deleted file mode 100644 index 86928896a..000000000 --- a/ansible/roles/gn/tasks/partials/rhel8-ppc64.yml +++ /dev/null @@ -1,8 +0,0 @@ -# ninja-build on RHEL 8 is in the CodeReady Linux Builder repository. -- name: enable codeready-builder repository - community.general.rhsm_repository: - name: codeready-builder-for-rhel-8-ppc64le-rpms - state: enabled - -- name: run common RHEL 8 tasks - ansible.builtin.include_tasks: rhel8.yml \ No newline at end of file diff --git a/ansible/roles/gn/tasks/partials/rhel8-s390x.yml b/ansible/roles/gn/tasks/partials/rhel8-s390x.yml deleted file mode 100644 index 2c7e7d154..000000000 --- a/ansible/roles/gn/tasks/partials/rhel8-s390x.yml +++ /dev/null @@ -1,8 +0,0 @@ -# ninja-build on RHEL 8 is in the CodeReady Linux Builder repository. -- name: enable codeready-builder repository - community.general.rhsm_repository: - name: codeready-builder-for-rhel-8-s390x-rpms - state: enabled - -- name: run common RHEL 8 tasks - ansible.builtin.include_tasks: rhel8.yml \ No newline at end of file diff --git a/ansible/roles/gn/vars/main.yml b/ansible/roles/gn/vars/main.yml index 5cd37227f..b6fa8e82f 100644 --- a/ansible/roles/gn/vars/main.yml +++ b/ansible/roles/gn/vars/main.yml @@ -5,8 +5,8 @@ compiler: { } gn_select_compiler: "{{ compiler[os]|default(compiler[os|stripversion])|default('true') }}" -gn_version: c0a46c5e8c316010baf1a0eb2d2ee5a86f73e4c2 +gn_version: 304bbef6c7e9a86630c12986b99c8654eb7fe648 packages: { - 'rhel8': 'ninja-build,gcc-toolset-12' + 'rhel8': 'gcc-toolset-12' } diff --git a/ansible/roles/ninja-build/meta/argument_specs.yml b/ansible/roles/ninja-build/meta/argument_specs.yml new file mode 100644 index 000000000..4fcd01e59 --- /dev/null +++ b/ansible/roles/ninja-build/meta/argument_specs.yml @@ -0,0 +1,17 @@ +argument_specs: + main: + short_description: The main task for compiling ninja from source. + options: + ninja_dest_dir: + description: The location to place the symlink to the ninja binary. + required: yes + type: "str" + ninja_git_dir: + description: The location to put the git checkout. + required: yes + type: "str" + ninja_user: + default: "{{ server_user|default(omit) }}" + description: The user to install ninja under. + type: "str" + diff --git a/ansible/roles/ninja-build/tasks/main.yml b/ansible/roles/ninja-build/tasks/main.yml new file mode 100644 index 000000000..de7143613 --- /dev/null +++ b/ansible/roles/ninja-build/tasks/main.yml @@ -0,0 +1,61 @@ +- name: install ninja build dependencies + include_tasks: "{{ v8deps_include }}" + loop_control: + loop_var: v8deps_include + with_first_found: + - files: + - "{{ role_path }}/tasks/partials/{{ os }}-{{ arch }}.yml" + - "{{ role_path }}/tasks/partials/{{ os }}.yml" + - "{{ role_path }}/tasks/partials/{{ os|stripversion }}.yml" + skip: true + +- name: check existing ninja + ansible.builtin.command: "{{ ninja_dest_dir }}/ninja --version" + changed_when: no + failed_when: no + register: ninja_installed_version + +# `ninja --version` does not include the 'v' prefix. +- name: check if ninja needs to be rebuilt + ansible.builtin.set_fact: + rebuild_ninja: "{{ not ninja_installed_version.stdout|default('') is search(ninja_version[1:]) }}" + +- name: clone/update ninja repository + ansible.builtin.git: + dest: "{{ ninja_git_dir }}" + repo: "{{ ninja_git_repository }}" + version: "{{ ninja_version|default(omit) }}" + become: "{{ ninja_user|default(omit)|bool }}" + become_user: "{{ ninja_user|default(omit) }}" + register: ninja_git + when: rebuild_ninja + +- name: clean git checkout + ansible.builtin.shell: git clean -fdX + args: + chdir: "{{ ninja_git_dir }}" + become: "{{ ninja_user|default(omit)|bool }}" + become_user: "{{ ninja_user|default(omit) }}" + when: rebuild_ninja + +- name: build ninja + ansible.builtin.shell: | + {{ ninja_select_compiler }} && \ + ./configure.py --bootstrap + args: + chdir: "{{ ninja_git_dir }}" + become: "{{ ninja_user|default(omit)|bool }}" + become_user: "{{ ninja_user|default(omit) }}" + environment: + CC: gcc + CXX: g++ + when: rebuild_ninja + +- name: create symlink + ansible.builtin.file: + dest: "{{ ninja_dest_dir }}/ninja" + src: "{{ ninja_git_dir }}/ninja" + state: link + become: "{{ ninja_user|default(omit)|bool }}" + become_user: "{{ ninja_user|default(omit) }}" + when: rebuild_ninja diff --git a/ansible/roles/ninja-build/tasks/partials/rhel8.yml b/ansible/roles/ninja-build/tasks/partials/rhel8.yml new file mode 100644 index 000000000..5eded8d3e --- /dev/null +++ b/ansible/roles/ninja-build/tasks/partials/rhel8.yml @@ -0,0 +1,16 @@ +--- +# Install ninja build dependencies for RHEL 8 + +- name: install ninja build dependencies for {{ os }}-{{ arch }} + package: + name: "{{ package }}" + state: present + use: dnf + loop_control: + loop_var: package + notify: package updated + with_items: + # ansible doesn't like empty lists + - "{{ packages[os+'_'+arch]|default('[]') }}" + - "{{ packages[os]|default('[]') }}" + - "{{ packages[os|stripversion]|default('[]') }}" \ No newline at end of file diff --git a/ansible/roles/ninja-build/vars/main.yml b/ansible/roles/ninja-build/vars/main.yml new file mode 100644 index 000000000..dcca81f24 --- /dev/null +++ b/ansible/roles/ninja-build/vars/main.yml @@ -0,0 +1,13 @@ +--- + +compiler: { + 'rhel8': '. /opt/rh/gcc-toolset-12/enable' +} + +ninja_git_repository: 'https://github.com/ninja-build/ninja' +ninja_select_compiler: '{{ compiler[os]|default(compiler[os|stripversion])|default("true") }}' +ninja_version: 'v1.13.2' + +packages: { + 'rhel8': 'gcc-toolset-12' +}