Skip to content

zdharma-continuum/zinit-annex-readurl

Repository files navigation

zinit-annex-readurl

Usage

Load as a regular plugin via:

zinit light zdharma-continuum/z-a-readurl

After executing the above command (possibly via zshrc), it's then possible to use the dlink'' and dlink0'' ices and the special as'readurl|…' value of the as'' ice.

This Zinit extension allows to automatically download the newest version of a file to which the URL is hosted on a webpage.

The annex provides:

  1. Two new ices: dlink'' and dlink0''.
  2. A handling of the special values of the as'' ice, i.e.: of as'readurl', as'readurl|command', etc.

Note: The annex works only with snippets, not plugins.

It works as follows:

  • invoke snippet (or pass the http://… address using the for syntax) on the web-page that hosts the URL to the file to download,
  • provide dlink'' ice with the expected file-download URL, replacing the version with the %VERSION% keyword,
  • also, provide as'' ice with one of the following values: readurl, readurl|command, readurl|completion, readurl|null; the part after the | has the same meaning as in the normal as'' ice.

So, for example:

zinit for \
    as'readurl|command' \
    dlink'/junegunn/fzf-bin/releases/download/%VERSION%/fzf-%VERSION%-linux_amd64.tgz'
    extract \
    id-as'fzf'
  https://github.com/junegunn/fzf-bin/releases/

The snippet is just an example. The same effect is obtained by loading as junegunn/fzf-bin plugin with from'gh-r' ice.

As demonstrated, the dlink'' can be a relative or an absolute path and also a full URL (i.e.: beginning with the http://… prefix).

Intermediate Download Page

Sometimes, like in the case of the terraform command, the download link isn't on the download page but on a page listed on it. In such cases utilize the dlink0'' ice and provide the pattern for the additional, intermediate download page. For For example, in the case of terraform, the Zinit command is:

zinit for \
    as'readurl|command' \
    dlink0'/terraform/%VERSION%/' \
    dlink'/terraform/%VERSION%/terraform_%VERSION%_linux_386.zip' \
    extract \
    id-as'terraform' \
  http://releases.hashicorp.com/terraform/

Skipping dlink'' Ice

Sometimes the URL of the download page differs from the URL of the archive in just a few /-sections. In such a case, it is possible to skip the dlink'' ice by appending a ++-separated fragment of the archive URL, like so:

zinit for \
    as'readurl|command' \
    extract \
  http://domain.com/download-page++/archive.zip

If the archive URL has some different /-sections, then it's possible to strip the conflicting ones from the download URL by using +++, ++++, etc. – the number of the /-section that'll be stripped equals the number of the + minus 2. So, for example:

zinit for \
    as'readurl|command' \
    extract \
  http://domain.com/download-page/removed-section+++/archive.zip

Sorting matched URLs/versions

Sometimes the download page doesn't list the package versions from newest to the oldest, but in some other order. In such case, it's possible to sort the URLs / package versions by prepending the chosen dlink ice (dlink0'' or dlink'') with the exclamation mark (dlink'!…', etc.). See the next section for an example:

Filtering The Matched URLs

Sometimes some unwanted URLs match the dlink''/dlink0'' regex/pattern. In such case it's possible to filter them out by appending a filtering regex to the dlink'' ice as: dlink='the-main-regex~%the-unwanted-URLs-regex%' (or the same for dlink0''). An example package that can benefit from this is the Open Shift client, which doesn't sort the URLs from latest to the oldest – hence the exclamation mark (!) prepend – and it has special URLs like stable-4.4 or candidate-4.5 together with the regular version URLs (like 4.5.0-rc.1):

zinit for \
    as'readurl|command' \
    dlink'openshift-client-windows-%VERSION%.zip' \
    dlink0'!%VERSION%~%(stable|latest|fast|candidate).*%' \
    id-as'ocp' \
  https://mirror.openshift.com/pub/openshift-v4/clients/ocp/

The above snippet of Zsh code / Zinit invocation will sort the URLs (dlink0'!…') and then filter out the special ones from the results (via …~%(stable|latest|fast|candidate).*%), this way selecting the latest version of the Open Shift client.

Examples

Pulumi, a tool to create, deploy, and manage modern cloud software.

zi for \
    as'readurl|null' \
    dlink'https://get.pulumi.com/releases/sdk/pulumi-%VERSION%-linux-x64.tar.gz' \
    extract'!' \
    id-as'pulumi' \
    sbin'pulumi*' \
  https://www.pulumi.com/docs/get-started/install/versions/

Releases

No releases published

Packages

No packages published

Languages