102 lines
3.3 KiB
YAML
102 lines
3.3 KiB
YAML
---
|
|
- 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 -d '+' -f2 | 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: Install neovim for MacOS
|
|
community.general.homebrew:
|
|
name: neovim
|
|
state: head
|
|
when: ansible_facts.distribution == 'MacOSX'
|
|
|
|
- name: Handle neovim install for non-macos systems
|
|
when: ansible_facts.distribution != 'MacOSX' and nvim_install_needed is defined and nvim_install_needed is true
|
|
block:
|
|
- name: Create working directory
|
|
ansible.builtin.tempfile:
|
|
state: directory
|
|
register: nvim_work_dir
|
|
|
|
- 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' }}"
|
|
|
|
- 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' }}"
|
|
|
|
- name: Download neovim archive from releases
|
|
become: true
|
|
ansible.builtin.get_url:
|
|
url: "{{ nvim_url }}"
|
|
checksum: "{{ nvim_checksum }}"
|
|
dest: "{{ nvim_archive_dest }}"
|
|
mode: 0644
|
|
|
|
- name: Create unpack directory
|
|
ansible.builtin.file:
|
|
state: directory
|
|
mode: 0644
|
|
path: "{{ nvim_unpacked_dest }}"
|
|
|
|
- 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
|
|
loop:
|
|
- bin
|
|
- lib
|
|
- share
|