Home > other >  Bash script to download latest release from GitHub
Bash script to download latest release from GitHub

Time:07-17

Looking for a simple way to download a .zip from a latest GitHub release. There are other similar questions, but I havent been able to get them to work. :(

Trying to pull latest release from https://github.com/CTCaer/hekate

Currently ive got:

#!/bin/bash
curl -s https://api.github.com/repos/CTCaer/hekate/releases/latest | jq -r ".assets[] | select(.name | test(\"hekate_ctcaer\")) | .browser_download_url"

trying to fetch the url of the latest .zip and only grab the "hekate_ctcaer_X.X.X_Nyx_X.X.X.zip"

I saw someone trying to achieve this with 'Xidel', so im open to trying that if someone knows the syntax to grab a specific file from the GitHub api.

As I understand it (?), the Github API spits out an array for the release 'assets', so im trying to specify an item in this array that matches "hekate_ctcaer", and download the specified file.

CodePudding user response:

Github is also a compatible git repo. I provide a new train of thought.

  • use git ls-remote to fetch last release tag.
git -c 'versionsort.suffix=-' ls-remote --tags --sort='v:refname' http://github.com/CTCaer/hekate.git
| tail --lines=1
| cut --delimiter='/' --fields=3

Here this examples outputs v5.8.0

  • then clone remote repo
git clone --branch v5.8.0 http://github.com/CTCaer/hekate.git
  • zip repos to zipped file.
zip hekate.zip -r hekate/

CodePudding user response:

This will print out the url to the zip file of the latest release:

curl -sL https://api.github.com/repos/CTCaer/hekate/tags \
  | jq -r '.[0].zipball_url' \
  | xargs -I {} curl -sL {} -o latest.zip

CodePudding user response:

I saw someone trying to achieve this with 'Xidel'

I assume you're referring to my answer here. That answer is tagged , so you first of all have to swop the quotes for ("function('string')" --> 'function("string")'). And secondly, you're right. You have to select the appropriate object in the "assets"-array.

$ xidel -s "https://api.github.com/repos/CTCaer/hekate/releases/latest" \
  -f '$json/(assets)()[starts-with(name,"hekate_ctcaer")]/browser_download_url' \
  --download '{substring-after($headers[starts-with(.,"Content-Disposition")],"filename=")}'

This downloads 'hekate_ctcaer_5.8.0_Nyx_1.3.0.zip' in the current dir.
With r8389 or newer you can just use --download ..

also how would I modify this for the following: github.com/Atmosphere-NX/Atmosphere/releases/tag/1.3.2 the .zip AND the .bin

Strictly speaking you'd have to raise a new question for this, but ok.

It appears that (at the moment) v1.3.2 is also the latest release for this repo, so you can use...

$ xidel -s "https://api.github.com/repos/Atmosphere-NX/Atmosphere/releases/latest" \
  -e '$json'

or alternatively...

$ xidel -s "https://api.github.com/repos/Atmosphere-NX/Atmosphere/releases" \
  -e '$json()[tag_name="1.3.2"]'

The "assets"-array here has just 2 objects; one with the zip-file and one with the bin-file, so just "follow" (--follow / -f) the 2 "browser_download_url"-keys to download:

$ xidel -s "https://api.github.com/repos/Atmosphere-NX/Atmosphere/releases" \
  -f '$json()[tag_name="1.3.2"]//browser_download_url' \
  --download .
  • Related