--- - name: Check if paru is already installed ansible.builtin.stat: path: /usr/bin/paru register: paru - name: Install paru when: not paru.stat.exists ## ## Deprecated version with compilation ## # - name: Install paru # block: # - name: Install build dependencies # package: # name: # - base-devel # - git # state: present # - name: Disable sudo password prompt (makepkg sudoers hack) # lineinfile: # dest: /etc/sudoers # state: present # regexp: "^#?%wheel" # line: "%wheel ALL=(ALL) NOPASSWD: ALL" # validate: /usr/sbin/visudo -cf %s # - name: Create paru sources dir # file: # path: "{{ paru_src_path }}" # state: directory # owner: "{{ ansible_user }}" # - name: Clone git sources # become: false # git: # repo: "{{ paru_git_repo }}" # dest: "{{ paru_src_path }}" # # note: this only works because SUDOERS password prompt is disabled # - name: Build and install # become: false # command: # chdir: "{{ paru_src_path }}" # cmd: "makepkg -si -f --noconfirm" # - name: Restore sudo with password prompt # lineinfile: # dest: /etc/sudoers # state: present # regexp: "^#?%wheel" # line: "%wheel ALL=(ALL:ALL) ALL" # validate: /usr/sbin/visudo -cf %s # when: not paru.stat.exists block: - name: Get the last github release ansible.builtin.uri: url: "https://api.github.com/repos/{{ paru_git_repo }}/releases/latest" return_content: true register: paru_release - name: Extract tag_name ansible.builtin.set_fact: paru_version: "{{ (paru_release.json.tag_name | regex_replace('^v', '')) }}" - name: Get the binary URL ({{ os_arch }}) ansible.builtin.set_fact: paru_url: "{{ item.browser_download_url }}" loop: "{{ paru_release.json.assets }}" when: "'os_arch.tar.zst' in item.name" - name: Download ansible.builtin.get_url: url: "{{ paru_url }}" dest: "/tmp/paru-{{ os_arch }}.tar.zst" mode: "0644" - name: Extract paru ansible.builtin.unarchive: src: "/tmp/paru-{{ os_arch }}.tar.zst" dest: /tmp remote_src: true extra_opts: - paru - name: Install paru binary ansible.builtin.copy: src: /tmp/paru dest: /usr/bin/paru remote_src: true mode: "0755" - name: Ensure permissions ansible.builtin.file: path: /usr/bin/paru mode: "0755" - name: Cleanup ansible.builtin.file: path: "/tmp/paru-{{ os_arch }}.tar.zst" state: absent