--- - name: get latest github release uri: url: https://api.github.com/repos/sharkdp/bat/releases/latest register: latest - set_fact: latest_version: '{{latest.json.tag_name[1:]}}' bat_exe: '/usr/bin/bat' - name: check if already installed stat: path: '{{bat_exe}}' register: bat_stat - name: get installed version when: bat_stat.stat.exists == True command: '{{bat_exe}} --version' register: bat_version changed_when: false - when: bat_stat.stat.exists == True set_fact: installed_version: '{{bat_version.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}' - when: ansible_machine == "x86_64" set_fact: arch: amd64 - assert: that: arch is defined fail_msg: 'Architecture not currently supported: {{ansible_machine}}' - set_fact: assets: '{{latest.json.assets}}' asset_query: '[?contains(name, `bat-musl_`)] | [?contains(name, `amd64.deb`)] | [0]' pkg_dir: '{{ansible_env.HOME}}/.local/pkg/bat' - set_fact: asset: '{{assets | to_json | from_json | json_query(asset_query)}}' bat_deb: '{{pkg_dir}}/bat.deb' - name: create directory for deb file download file: state: directory path: '{{pkg_dir}}' - name: download .deb file when: installed_version is not defined or installed_version != latest_version get_url: url: '{{asset.browser_download_url}}' dest: '{{bat_deb}}' - name: install .deb file when: installed_version is not defined or installed_version != latest_version become: true apt: deb: '{{bat_deb}}' - name: remove .deb file when: installed_version is not defined or installed_version != latest_version file: state: absent path: '{{bat_deb}}' changed_when: false