diff --git a/roles/kitty/tasks/Debian.yaml b/roles/kitty/tasks/Debian.yaml index d4982e7..254bb98 100644 --- a/roles/kitty/tasks/Debian.yaml +++ b/roles/kitty/tasks/Debian.yaml @@ -1,6 +1,106 @@ --- -- name: install apt package +- name: remove apt package become: true apt: name: kitty - state: latest + state: absent + +- name: get latest version + uri: + url: https://api.github.com/repos/kovidgoyal/kitty/releases/latest + headers: '{{github_auth_headers}}' + register: latest + +- set_fact: + kitty_latest_version: '{{latest.json.tag_name[1:]}}' + kitty_exe: /usr/local/bin/kitty + kitty_package_dir: /usr/local/stow/kitty + +- name: check if already installed + stat: + path: '{{kitty_exe}}' + register: kitty + +- name: get installed version + when: kitty.stat.exists + command: '{{kitty_exe}} --version' + register: kitty_version + changed_when: false + +- when: kitty.stat.exists + set_fact: + kitty_install_version: + '{{kitty_version.stdout | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}' + +- set_fact: + kitty_asset_query: > + [? contains(name, + `kitty-{{kitty_latest_version}}-{{ansible_architecture}}.txz`)] | [0] + +- set_fact: + kitty_install_required: > + {{ kitty_install_version is not defined or + kitty_latest_version != kitty_install_version }} + kitty_asset: "{{ latest.json.assets | json_query(kitty_asset_query) }}" + +- name: uninstall package + when: kitty_install_required and kitty.stat.exists + become: true + command: + cmd: 'stow --delete --target /usr/local .' + chdir: '{{kitty_package_dir}}' + +- name: remove outdated package + when: kitty_install_required and kitty.stat.exists + become: true + file: + state: absent + path: '{{kitty_package_dir}}' + +- set_fact: + kitty_package_archive: '{{kitty_package_dir}}/{{kitty_asset.name}}' + +- name: create package directory + become: true + file: + state: directory + path: '{{kitty_package_dir}}' + +- name: download package + when: kitty_install_required + become: true + get_url: + url: '{{kitty_asset.browser_download_url}}' + dest: '{{kitty_package_archive}}' + environment: '{{proxy_environment}}' + +- name: decompress package + when: kitty_install_required + become: true + unarchive: + src: '{{kitty_package_archive}}' + dest: '{{kitty_package_dir}}' + owner: root + group: staff + +- name: remove package archive + when: kitty_install_required + become: true + file: + state: absent + path: '{{kitty_package_archive}}' + +# FIXME: This is bound to break something somewhere but on Ubuntu 22.04 this +# file breaks a bunch of other stuff when the kitty package in installed in +# /usr/local with stow so we delete it before stowing. +- name: remove conflicting library + file: + state: absent + path: '{{kitty_package_dir}}/lib/libglib-2.0.so.0' + +- name: install package + when: kitty_install_required + become: true + command: + cmd: 'stow --no-folding --target /usr/local .' + chdir: '{{kitty_package_dir}}'