简体   繁体   中英

How to download the latest binary release from github?

I want to download the two (.bin and.zip) binaries from the latest releases.

I tried using the following command

curl -s https://github.com/Atmosphere-NX/Atmosphere/releases/latest | grep "browser_download_url.*zip" | cut -d : -f 2,3 | tr -d "\" | wget -qi -

but nothing happens, output being SYSTEM_WGETRC = c:/progra~1/wget/etc/wgetrc

I'm open to using any other (wget, ecurl etc) commands.

Is it trying to extract the download link from the HTML page? That's error prone and may break any time.

For such operations, check if they offer an API first.

They do: https://docs.github.com/en/rest/reference/releases#get-the-latest-release

You could write something like (pseudo code):

 curl \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/Atmosphere-NX/Atmosphere/releases/latest \
    | jq .assets[0].browser_download_url \
    | xargs wget -qi -

Like suggested in the comments, test each command (pipe separated) individually.

You can use the GitHub CLI , specifically the release download command:

gh release download --repo Atmosphere-NX/Atmosphere --pattern '*.bin'
gh release download --repo Atmosphere-NX/Atmosphere --archive zip

Without specifying a release tag, the command defaults to the latest release.

Just running curl on the url gives this:

curl https://github.com/Atmosphere-NX/Atmosphere/releases/latest
<html><body>You are being <a href="https://github.com/Atmosphere-NX/Atmosphere/releases/tag/1.2.6">redirected</a>.</body>

So, you easily see something is amiss straight off. Checking the curl help, you find options, command below to pinpoint what you need:

curl --help | grep redirect
 -L, --location      Follow redirects
     --max-redirs <num> Maximum number of redirects allowed
     --proto-redir <protocols> Enable/disable PROTOCOLS on redirect
     --stderr        Where to redirect stderr

First clue is redirect in the response and then we see in the help section that there is a flag to handle that.

Running it with th -L command gives the expected output. Pipeing it to grep "browser_download_url.*zip" however gives you nothing. You then investigate to see what the right match would be. But let's try mathing just html link with zip, just to see what happens.

curl -sL https://github.com/Atmosphere-NX/Atmosphere/releases/latest | grep "href=.*zip"
          <a href="/Atmosphere-NX/Atmosphere/releases/download/1.2.6/atmosphere-1.2.6-master-173d5c2d3+hbl-2.4.1+hbmenu-3.5.0.zip" rel="nofollow" data-skip-pjax>
          <a href="/Atmosphere-NX/Atmosphere/archive/refs/tags/1.2.6.zip" rel="nofollow" data-skip-pjax>

From there you can probably find what you are after to construct your command. As you see, links are relative with this method, so you still have to provide the base url to wget (or a curl equivalent) to finally be able to dowload what you are after.

This is more a reply to get you going on trouble shooting. You already have other answers to actually do what you want. But if you can't install the tools suggested, you could probably do something like this:

curl -sL https://github.com/Atmosphere-NX/Atmosphere/releases/latest |
    awk '/releases\/download/ && done != 1 {
        sub(/.*href="/, "https://github.com")
        sub(/".*/, "")
        print
        done = 1
    }' |
    xargs curl -LsO

Not suggesting this is a good way, just a way.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM