If the `GITHUB_TOKEN` is defined in the Ansible controller's environment it is used to set the GitHub REST API authentication header. This is they passed to all `uri` modules tasks which interact with the GitHub REST API. If the `GITHUB_TOKEN` is not set, the authentication header is not used. Fixes #19
109 lines
2.7 KiB
YAML
109 lines
2.7 KiB
YAML
---
|
|
- name: get latest stable github release
|
|
uri:
|
|
url: https://api.github.com/repos/llvm/llvm-project/releases/latest
|
|
headers: '{{github_auth_headers}}'
|
|
register: llvm_latest
|
|
|
|
- name: read /etc/os-release
|
|
slurp:
|
|
src: /etc/os-release
|
|
register: os_release_b64
|
|
- name: extract UBUNTU_CODENAME=<name> to support dirivitive distros
|
|
set_fact:
|
|
ubuntu_codename: >-
|
|
{{
|
|
os_release_b64.content | b64decode |
|
|
regex_search('UBUNTU_CODENAME=.*') |
|
|
replace('UBUNTU_CODENAME=', '')
|
|
}}
|
|
|
|
- set_fact:
|
|
llvm_major_version:
|
|
'{{llvm_latest.json.tag_name[8:llvm_latest.json.tag_name.find(".")]}}'
|
|
- set_fact:
|
|
llvm_apt_repo_url:
|
|
'http://apt.llvm.org/{{ubuntu_codename}}/'
|
|
llvm_apt_category:
|
|
'llvm-toolchain-{{ubuntu_codename}}-{{llvm_major_version}}'
|
|
keyring: '/etc/apt/keyrings/llvm.asc'
|
|
|
|
- name: remove old keyring
|
|
when: '"WSL" not in ansible_kernel'
|
|
become: true
|
|
apt_key:
|
|
url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
|
id: 6084F3CF814B57C1CF12EFD515CF4D18AF4F7421
|
|
state: absent
|
|
|
|
- name: remove old upstream deb repository
|
|
become: true
|
|
apt_repository:
|
|
repo: 'deb {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
|
|
state: absent
|
|
filename: llvm
|
|
update_cache: false
|
|
|
|
- name: remove old upstream deb-src repository
|
|
become: true
|
|
apt_repository:
|
|
repo: 'deb-src {{llvm_apt_repo_url}} {{llvm_apt_category}} main'
|
|
state: absent
|
|
filename: llvm
|
|
update_cache: false
|
|
|
|
- name: add apt repository key
|
|
become: true
|
|
get_url:
|
|
url: https://apt.llvm.org/llvm-snapshot.gpg.key
|
|
dest: '{{keyring}}'
|
|
|
|
- name: add upstream deb repository
|
|
become: true
|
|
apt_repository:
|
|
repo: >
|
|
deb [signed-by={{keyring}}]
|
|
{{llvm_apt_repo_url}} {{llvm_apt_category}} main
|
|
state: present
|
|
filename: llvm
|
|
update_cache: false
|
|
|
|
- name: add upstream deb-src repository
|
|
become: true
|
|
apt_repository:
|
|
repo: >
|
|
deb-src [signed-by={{keyring}}]
|
|
{{llvm_apt_repo_url}} {{llvm_apt_category}} main
|
|
state: present
|
|
filename: llvm
|
|
update_cache: false
|
|
|
|
- name: update apt cache
|
|
become: true
|
|
apt:
|
|
update_cache: true
|
|
|
|
- name: install apt packages
|
|
become: true
|
|
apt:
|
|
name:
|
|
- clang-{{llvm_major_version}}
|
|
- clang-format-{{llvm_major_version}}
|
|
- clang-tidy-{{llvm_major_version}}
|
|
- clang-tools-{{llvm_major_version}}
|
|
- clangd-{{llvm_major_version}}
|
|
- llvm-{{llvm_major_version}}
|
|
state: latest
|
|
install_recommends: true
|
|
|
|
- name: update alternatives
|
|
become: true
|
|
alternatives:
|
|
link: '/usr/bin/{{item}}'
|
|
name: '{{item}}'
|
|
path: '/usr/bin/{{item}}-{{llvm_major_version}}'
|
|
priority: '{{llvm_major_version}}0'
|
|
with_items:
|
|
- clang-format
|
|
- clangd
|