--- - name: get latest github release uri: url: https://api.github.com/repos/typst/typst/releases/latest headers: '{{github_auth_headers}}' register: latest - set_fact: asset_name: >- {{ { 'amd64': 'typst-x86_64-unknown-linux-musl', 'x86_64': 'typst-x86_64-unknown-linux-musl', 'arm64': 'typst-aarch64-unknown-linux-musl', }[ansible_architecture] }} - set_fact: asset_query: '[?contains(name, `{{asset_name}}.tar.xz`)] | [0]' assets: '{{latest.json.assets}}' asset_archive: '{{asset_name}}.tar.xz' latest_version: '{{latest.json.tag_name}}' exe: '{{ansible_env.HOME}}/.local/bin/typst' - name: check if already installed stat: path: '{{exe}}' register: stat_exe - name: get installed version when: stat_exe.stat.exists == True command: '{{exe}} --version' register: version_output changed_when: false - when: stat_exe.stat.exists == True set_fact: installed_version: 'v{{version_output.stdout.strip() | regex_replace("^.*(\d+\.\d+\.\d+).*$", "\1")}}' - set_fact: asset: '{{assets | to_json | from_json | json_query(asset_query)}}' - name: download archive when: installed_version is not defined or installed_version != latest_version get_url: url: '{{asset.browser_download_url}}' dest: '/tmp/{{asset_archive}}' environment: '{{proxy_environment}}' - name: extract archive when: installed_version is not defined or installed_version != latest_version unarchive: src: '/tmp/{{asset_archive}}' dest: '/tmp' - name: remove archive when: installed_version is not defined or installed_version != latest_version file: state: absent path: '/tmp/{{asset_archive}}' - name: copy executable when: installed_version is not defined or installed_version != latest_version copy: src: '/tmp/{{asset_name}}/typst' dest: '{{exe}}' mode: +x - name: remove extraced archive when: installed_version is not defined or installed_version != latest_version file: state: absent path: '/tmp/{{asset_archive}}' # TODO: install zsh completions