--- - 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 - set_fact: glab_version: '{{glab_version_output.stdout | replace("glab version ", "v")}}' 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