--- - set_fact: glab: /usr/bin/glab - name: stat the executable stat: path: '{{glab}}' register: stat_glab - name: get install 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, `{{ {'x86_64': 'amd64', 'arm64': 'arm64'}[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' environment: '{{proxy_environment}}' - 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: get zsh completions source command: glab completion -s zsh register: glab_zsh_completions changed_when: false - name: install zsh completions become: true copy: content: '{{glab_zsh_completions.stdout}}' dest: /usr/local/share/zsh/site-functions/_glab