Programmatically Download Latest Release from GitHub Repo
Programmatically download the latest release from a GitHub Repo without having to hardcode the version or use separate API calls
Overview
I recently needed to download the latest release from a GitHub repo but didn’t want to hardcode the version number or use separate API calls to get the latest release. I found a few one-liner solutions online, but most of these made two separate calls:
- an API call to get the latest release
- then another to download that release asset
I swore there was a way to get this in one call, but it took a little bit of digging for me to find it. I’m posting this here for posterity and future searchers 😀.
The script
Well, it’s not much of a script, more of a command, but here it is for both wget
and curl
. The only thing you need to know is the filename of the asset you want to download. In this case, it’s tfsec-linux-amd64
. If the maintainers chose to add in version numbers in the filename, like tfsec-linux-amd64-v1.28.1
, you would need to use an alternative one-liner to make that second API call to get the version number.
How to download the latest version of a release asset:
wget
1
wget https://github.com/aquasecurity/tfsec/releases/latest/download/tfsec-linux-amd64
curl
1
curl -LO https://github.com/aquasecurity/tfsec/releases/latest/download/tfsec-linux-amd64
The
-O
(case sensitive) saves the file as the same name specified in the URL, and-L
follows redirects.
Download a Specific Version
I’m posting this here in case you have the exact opposite problem and need to download a specific version of a release asset.
If you need to download a specific version of a release, you can use:
1
wget https://github.com/aquasecurity/tfsec/releases/download/v1.28.1/tfsec-linux-amd64
Summary
To make your CI jobs repeatable, it makes more sense to have a hardcoded version of a release asset. Just make sure to update the version every now and then 😁. If you just need to download the latest version of a release asset, then the above solution will be perfect!