--- - name: Check if nvim is installed ansible.builtin.command: which nvim changed_when: false register: nvim_installed failed_when: nvim_installed.rc > 1 - name: Request nvim install if nvim missing ansible.builtin.set_fact: nvim_install_needed: "{{ nvim_install_needed | default(true) }}" when: nvim_installed.rc == 1 - name: Check if nvim needs update # noqa risky-shell-pipe ansible.builtin.shell: | set pipefail nvim --version | head -n 1 | awk -F '-' '{ print $NF }' | cut -c2- changed_when: false register: nvim_installed_version when: nvim_installed.rc == 0 - name: Get nvim remote version # noqa risky-shell-pipe ansible.builtin.shell: | set pipefail # yamllint disable-line rule:line-length NVIM_HEAD_VER="$(git ls-remote --tags https://github.com/neovim/neovim.git nightly \ | awk '{ print $1 }' \ | head -c 9)" echo $NVIM_HEAD_VER >&2 printf "%s\n" "${NVIM_HEAD_VER}" changed_when: false register: nvim_remote_version when: nvim_installed.rc == 0 - name: Request nvim install if nvim update needed ansible.builtin.set_fact: nvim_install_needed: "{{ nvim_install_needed | default(true) }}" when: nvim_installed.rc == 0 and nvim_remote_version.stdout | default() != nvim_installed_version.stdout | default() - name: Create working directory ansible.builtin.tempfile: state: directory register: nvim_work_dir when: nvim_install_needed is defined and nvim_install_needed is true - name: Set nvim url ansible.builtin.set_fact: # yamllint disable-line rule:line-length nvim_url: "{{ 'https://github.com/neovim/neovim/releases/download/nightly/nvim-' + nvim_platform | default('linux64') + '.tar.gz' }}" when: nvim_install_needed is defined and nvim_install_needed is true - name: Set nvim archive variables ansible.builtin.set_fact: nvim_checksum: "{{ 'sha256:' + nvim_url + '.sha256sum' }}" nvim_archive_dest: "{{ nvim_work_dir.path + '/nvim.tar.gz' }}" nvim_unpacked_dest: "{{ nvim_work_dir.path + '/nvim-unpacked' }}" when: nvim_install_needed is defined and nvim_install_needed is true - name: Download neovim archive from releases become: true ansible.builtin.get_url: url: "{{ nvim_url }}" checksum: "{{ nvim_checksum }}" dest: "{{ nvim_archive_dest }}" mode: 0644 when: nvim_install_needed is defined and nvim_install_needed is true - name: Create unpack directory ansible.builtin.file: state: directory mode: 0644 path: "{{ nvim_unpacked_dest }}" when: nvim_install_needed is defined and nvim_install_needed is true - name: Extract neovim archive become: true ansible.builtin.unarchive: src: "{{ nvim_archive_dest }}" dest: "{{ nvim_unpacked_dest }}" remote_src: true when: nvim_install_needed is defined and nvim_install_needed is true - name: Copy neovim files into place become: true # noqa command-instead-of-module ansible.builtin.command: argv: - rsync - -avPr - "{{ nvim_unpacked_dest }}/nvim-{{ nvim_platform | default('linux64') }}/{{ item }}" - "{{ nvim_sync_dest_dir | default('/usr/') }}" changed_when: true when: nvim_install_needed is defined and nvim_install_needed is true loop: - bin - lib - share