---
- name: Validate manual versioning folder
  ansible.builtin.file:
    state: directory
    path: ~/.ansible_gh_release_versions
    mode: '0755'

- name: Setting local release file path
  set_fact:
    local_version_file: "~/.ansible_gh_release_versions/{{ name }}" 

- name: Fetch latest release tarball url
  ansible.builtin.shell: 
    cmd: curl -s https://api.github.com/repos/{{ repo }}/releases/latest | jq -r '.assets[] | select(.browser_download_url|test("{{ filter }}")) | .browser_download_url'
  register: tar_url
  changed_when: false

- name: Get latest version tag from github
  ansible.builtin.shell: 
    cmd: 'echo {{ tar_url.stdout  }} | grep -oP "(?<=download\/).*(?=\/)"'
  changed_when: false
  register: version

- name: Get latest version from local entry
  set_fact:
    local_version: "{{ lookup('file', local_version_file, errors='ignore') | default(NOT_FOUND) }}"
    version: "{{ version.stdout  }}"
    tar_url: "{{ tar_url.stdout  }}"
    tar_download_location: "/tmp/{{ name }}.tar.gz"
  failed_when: false

- name: Unarchive the release
  ansible.builtin.unarchive:
    src: "{{ tar_url  }}"
    dest: /tmp/
    remote_src: yes
  when: version != local_version

- name: Unarchive release source
  ansible.builtin.unarchive:
    src: "https://github.com/{{ repo }}/archive/refs/tags/{{ version }}.tar.gz"
    dest: /tmp/
    remote_src: yes
  when: version != local_version and (include_source is defined)

- name: Moving bin to /usr/local/bin
  become: true
  ansible.builtin.shell: |
    cp /tmp{{ bin_path }} /usr/local/bin/
  when: version != local_version

- name: Adding man page if needed
  become: true
  ansible.builtin.shell: |
    cp /tmp{{ man_path }} /usr/share/man/man1/
  register: added_man
  when: man_path is defined and (version != local_version)

- name: Update mandb if needed
  become: true
  ansible.builtin.shell: mandb || true
  when: added_man is defined and (version != local_version)

- name: Adding autocomplete if needed
  ansible.builtin.shell: |
    cp /tmp/{{ autocomplete_path  }} ~/.shellconfig/autocomplete/{{ name }}.autocomplete
  when: autocomplete_path is defined and (version != local_version)

- name: Updating local version entry
  ansible.builtin.shell: echo {{ version  }} > {{ local_version_file  }}
  when: version != local_version

