---
- set_fact:
    glab: /usr/bin/glab
- name: stat the executable
  stat:
    path: '{{glab}}'
  register: stat_glab

- name: get instlal version
  when: stat_glab.stat.exists
  command: '{{glab}} --version'
  register: glab_version_output
  changed_when: false

- when: stat_glab.stat.exists
  set_fact:
    glab_version: '{{glab_version_output.stdout | replace("glab version ", "v")}}'

- set_fact:
    gitlab_api: 'https://gitlab.com/api/v4'
    project_id: 'gitlab-org%2Fcli'

- name: get list of gitlab releases
  uri:
    url:
      '{{gitlab_api}}/projects/{{project_id}}/releases'
  register: releases

- set_fact:
    latest: '{{releases.json[0]}}'
    latest_version: '{{releases.json[0].tag_name}}'
    query: >
      [?contains(name, `glab`)] |
      [?contains(name, `Linux`)] |
      [?contains(name, `{{ansible_machine}}.deb`)] | [0]
- set_fact:
    asset: '{{latest.assets.links|json_query(query)}}'

- name: create download directory
  when: glab_version is not defined or glab_version != latest_version
  tempfile:
    state: directory
    suffix: glab
  register: tempdir

- name: download .deb file
  when: glab_version is not defined or glab_version != latest_version
  get_url:
    url: '{{asset.url}}'
    dest: '{{tempdir.path}}/glab.deb'

- name: install .deb file
  when: glab_version is not defined or glab_version != latest_version
  become: true
  apt:
    deb: '{{tempdir.path}}/glab.deb'

- name: remove download directory
  when: glab_version is not defined or glab_version != latest_version
  file:
    state: absent
    path: '{{tempdir.path}}'

- name: install zsh completions
  when: glab_version is not defined or glab_version != latest_version
  command:
    glab completion -s zsh > ~/.local/share/zsh/site-functions/_glab