LOCATION=$(curl -s https://api.github.com/repos/<YOUR ORGANIZTION>/<YOUR REPO>/releases/latest \
| grep "tag_name" \
| awk '{print "https://github.com/<YOUR ORGANIZATION>/<YOUR REPO>/archive/" substr($2, 2, length($2)-3) ".zip"}') \
; curl -L -o <OUTPUT FILE NAME> $LOCATION
for example:
LOCATION=$(curl -s https://api.github.com/repos/gvenzl/csv2db/releases/latest \
| grep "tag_name" \
| awk '{print "https://github.com/gvenzl/csv2db/archive/" substr($2, 2, length($2)-3) ".zip"}') \
; curl -L -o csv2db.zip $LOCATION
Here is how it goes:
LOCATION=$(...)
stores the output of all the commands in the brackets in the variable $LOCATION
curl -s https://api.github.com/repos/gvenzl/csv2db/releases/latest
gets the latest release from your repository, in my case github.com/gvenzl/csv2db
grep "tag_name"
grabs the tag name of the latest release (e.g. v1.0.0
)
awk '{print "https://github.com/gvenzl/csv2db/archive/" substr($2, 2, length($2)-3) ".zip"}'
prints "https://github.com/gvenzl/csv2db/archive/" v1.0.0 ".zip" --> "https://github.com/gvenzl/csv2db/archive/v1.0.0.zip"
Now the $LOCATION is set to that string.
curl -L -o csv2db.zip $LOCATION
invokes cURL and downloads $LOCATION
into csv2db.zip
. The -L
parameter is important so that cURL follows the URL, i.e. redirect.