--- - name: "Get latest version: {{ project.name }}" ansible.builtin.shell: | set -o pipefail && curl -s "https://api.github.com/repos/{{ project.repo }}/releases/latest" | grep -Po '"tag_name": *"v?\K[^"]*' args: executable: /usr/bin/bash register: project_version changed_when: false - name: "Set version: {{ project_version }}" ansible.builtin.set_fact: project_version: "{{ project_version.stdout }}" - name: "Download: {{ project.name }}" ansible.builtin.get_url: url: "https://github.com/{{ project.repo }}/releases/download/v{{ project_version }}/{{ project.name }}_{{ project_version }}_Linux_x86_64.tar.gz" dest: "/tmp/{{ project.name }}.tar.gz" mode: "0666" - name: "Extract binary: {{ project.name }}" ansible.builtin.unarchive: src: "/tmp/{{ project.name }}.tar.gz" dest: "/tmp" creates: "/tmp/{{ project.name }}" remote_src: true - name: "Install: {{ project.name }}" ansible.builtin.copy: src: "/tmp/{{ project.name }}" dest: "/usr/local/bin/{{ project.name }}" mode: "0755" become: true - name: Remove tar.gz and binary ansible.builtin.file: path: "{{ loop_file_name }}" state: absent loop: - "/tmp/{{ project.name }}.tar.gz" - "/tmp/{{ project.name }}" loop_control: loop_var: loop_file_name