--- - name: stat executable stat: path: '{{ansible_env.HOME}}/.local/bin/jp' register: jp_stat - name: get installed version when: jp_stat.stat.exists command: jp --version changed_when: false register: jp_version - name: extract installed version when: jp_stat.stat.exists set_fact: jp_installed_version: '{{jp_version.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}' - name: get latest release uri: url: 'https://api.github.com/repos/jmespath/jp/releases/latest' register: latest - name: determine if jp needs installed set_fact: jp_needs_installed: '{{not jp_stat.stat.exists or jp_installed_version != latest.json.tag_name}}' arch_dict: {x86_64: amd64, arm64: arm64} - name: select asset name when: jp_needs_installed set_fact: asset_query: '[?contains(name, `jp-linux-{{arch_dict[ansible_architecture]}}`)] | [0]' - name: select asset when: jp_needs_installed set_fact: asset: '{{latest.json.assets | to_json | from_json | json_query(asset_query)}}' - name: create directory when: jp_needs_installed file: path: '{{ansible_env.HOME}}/.local/bin' state: directory - name: install executable when: jp_needs_installed get_url: url: '{{asset.browser_download_url}}' dest: '{{ansible_env.HOME}}/.local/bin/jp' mode: '0755'