diff --git a/roles/llvm/tasks/Darwin.yaml b/roles/llvm/tasks/Darwin.yaml new file mode 100644 index 0000000..5ce84ca --- /dev/null +++ b/roles/llvm/tasks/Darwin.yaml @@ -0,0 +1,5 @@ +--- +- name: install homebrew package + homebrew: + name: llvm + state: latest diff --git a/roles/llvm/tasks/Debian-unstable.yaml b/roles/llvm/tasks/Debian-unstable.yaml new file mode 100644 index 0000000..c93e6aa --- /dev/null +++ b/roles/llvm/tasks/Debian-unstable.yaml @@ -0,0 +1,13 @@ +--- +- name: install apt packages + become: true + apt: + name: + - clang + - clang-format + - clang-tidy + - clang-tools + - clangd + - llvm + state: latest + install_recommends: true diff --git a/roles/llvm/tasks/Debian.yaml b/roles/llvm/tasks/Debian.yaml new file mode 100644 index 0000000..ab1e2e1 --- /dev/null +++ b/roles/llvm/tasks/Debian.yaml @@ -0,0 +1,2 @@ +--- +- include_tasks: '{{ansible_distribution}}-{{ansible_distribution_version}}.yaml' diff --git a/roles/llvm/tasks/Ubuntu-18.04.yaml b/roles/llvm/tasks/Ubuntu-18.04.yaml new file mode 100644 index 0000000..ff7d554 --- /dev/null +++ b/roles/llvm/tasks/Ubuntu-18.04.yaml @@ -0,0 +1,50 @@ +--- +- name: get list of releases from github + uri: + url: https://api.github.com/repos/llvm/llvm-project/releases + register: releases + +- name: select latest release with Ubuntu binaries + set_fact: + release: '{{releases.json | json_query("[?assets | [?contains(name, `x86_64-linux-gnu-ubuntu`)]] | [0]")}}' + +- name: select from latest available release with x86_64-linux-gnu-ubuntu asset + set_fact: + asset: '{{release | json_query("assets | [?contains(name, `x86_64-linux-gnu-ubuntu`)] | [?ends_with(name, `.tar.xz`)] | [0]")}}' + +- name: process release name for /usr/local/lib/{{package_name}} + set_fact: + package_name: '{{release.name | lower | regex_replace(" (\d+)\.\d+\.\d+", "-\1")}}' + +- name: set path for archive download + set_fact: + archive_path: '/tmp/{{asset.name}}' + +- name: download release archive + get_url: + url: '{{asset.browser_download_url}}' + dest: '{{archive_path}}' + +- name: create package directory + become: true + file: + path: '/usr/local/lib/{{package_name}}' + state: directory + +# TODO: don't extract when not actually doing a n update +- name: extract release archive + become: true + unarchive: + src: '{{archive_path}}' + dest: '/usr/local/lib/{{package_name}}' + extra_opts: ['--strip-components', '1'] + +- name: create symlinks from /usr/local/lib/{package_name}} to /usr/local/bin + become: true + file: + src: '{{item}}' + dest: '/usr/local/bin/{{item | basename}}' + state: link + with_fileglob: '/usr/local/lib/{{package_name}}/bin/*' + +# TODO: cleanup old installs? diff --git a/roles/llvm/tasks/Windows.yaml b/roles/llvm/tasks/Windows.yaml new file mode 100644 index 0000000..037309c --- /dev/null +++ b/roles/llvm/tasks/Windows.yaml @@ -0,0 +1,5 @@ +--- +- name: install chocolatey package + win_chocolatey: + name: llvm + state: latest diff --git a/roles/llvm/tasks/main.yaml b/roles/llvm/tasks/main.yaml new file mode 100644 index 0000000..6853678 --- /dev/null +++ b/roles/llvm/tasks/main.yaml @@ -0,0 +1,2 @@ +--- +- include_tasks: '{{ansible_os_family}}.yaml'