--- - 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?