Wie lade ich Binärdateien einer GitHub-Version herunter?

Lesezeit: 5 Minuten

Wie lade ich Binardateien einer GitHub Version herunter
Tyler Pfaff

Ich habe ein Repo mit Binärdateien darin, die ich brauche.

Ich kann

git checkout tags/thetagoftherelease

was anscheinend das richtige Tag auscheckt, aber die Binärdateien nicht herunterzieht. Wie kann ich die Binärdateien herunterladen, die der Version hinzugefügt wurden (die grünen Kästchen auf der Version)?

Bild von Binärdateien in einer Version hinzugefügt.

Geben Sie hier die Bildbeschreibung ein

  • Abwertungen ohne Kommentare sind nicht hilfreich

    – Tyler Pfaff

    18. September 14 um 23:24 Uhr

  • Ziehen oder Kasse? Das sind zwei sehr unterschiedliche Begriffe in Git. Auch was “grüne Kästen”?

    – jub0bs

    18. September 14 um 23:26 Uhr

  • Entschuldigung, war umgangssprachlich mit pull. Grüne Kästchen wie in, hinzugefügte Binärdateien zu einer Veröffentlichung auf Git. Sie werden als grüne Kästchen angezeigt, die Sie manuell auf GitHub herunterladen können. Ich möchte diese hinzugefügten Binärdateien aus der Version herunterladen. Beim Auschecken des Release-Tags werden mir die Binärdateien nicht angezeigt.

    – Tyler Pfaff

    18. September 14 um 23:30 Uhr

  • Soweit ich weiß, sind diese Releases eine GitHub-Funktion und nicht Teil Ihres Repos. Ich glaube nicht, dass Sie sie mit Git-Befehlen von GitHub herunterladen können.

    – jub0bs

    18. September 14 um 23:34 Uhr

  • Danke @Jubobs, ich akzeptiere das als Antwort, wenn du es postest.

    – Tyler Pfaff

    19. September 14 um 0:03 Uhr

1643372885 79 Wie lade ich Binardateien einer GitHub Version herunter
Ted

Ich habe tagelang versucht, die richtige Antwort darauf zu finden, und schließlich habe ich herausgefunden, wie das mit dem Curl-Befehl geht. Es ist ein 3-stufiger Prozess.

Um zunächst eine Liste der Assets für die neueste Version zu erhalten:

curl -H "Authorization: token YOURGITHUBTOKEN" 
    https://api.github.com/repos/NAME/REPO/releases/latest 

Suchen Sie dann im JSON nach der URL des gewünschten Assets. Zum Beispiel würde es so aussehen:

"url": "https://api.github.com/repos/NAME/REPO/releases/assets/1275759"

Dann übergeben Sie dies an einen anderen Curl-Befehl, um die tatsächliche URL abzurufen, die eigentlich ein Link zu einer Amazon S3-Datei ist.

curl -H "Authorization: token YOURGITHUBTOKEN" 
     -H "Accept:application/octet-stream" 
     -i https://api.github.com/repos/NAME/REPO/releases/assets/1275759

Die URL befindet sich im Feld „location“ der HTTP-Antwort, und verwenden Sie dann curl, um die Datei wie folgt abzurufen:

curl "https://github-cloud.s3.amazonaws.com...." -i -o FILENAME

  • beste Antwort, danke. Vergessen Sie curl, verwenden Sie die httpie.org (CLI-HTTP-Client, benutzerfreundlicher Curl-Ersatz mit intuitiver Benutzeroberfläche, JSON-Unterstützung, Syntaxhervorhebung, Wget-ähnliche Downloads, Erweiterungen usw.)

    – Frekel

    10. Juli 16 um 17:41 Uhr

  • Stellen Sie sicher, dass Sie die s3-URL in Anführungszeichen setzen. Sonst bekommt curl es nicht richtig hin.

    – Erick A. Montañez

    22. Februar ’18 um 12:00 Uhr

Binäre Release-Assets existieren außerhalb von Git und können nicht mit den Standardtools verwaltet werden.

Sie sollten jedoch über die API von GitHub verfügbar sein.

  1. Listen Sie die Release-Assets des Repositorys auf:

    GET /repos/:owner/:repo/releases/:id/assets
    

    Dadurch wird ein JSON-Dokument zurückgesendet, das die Release-Assets für das Repository auflistet, z

    [
      {
        "url": "https://api.github.com/repos/octocat/Hello-World/releases/assets/1",
        "browser_download_url": "https://github.com/octocat/Hello-World/releases/download/v1.0.0/example.zip",
        "id": 1,
        "name": "example.zip",
        "label": "short description",
        "state": "uploaded",
        "content_type": "application/zip",
        "size": 1024,
        "download_count": 42,
        "created_at": "2013-02-27T19:35:32Z",
        "updated_at": "2013-02-27T19:35:32Z",
        "uploader": {
          "login": "octocat",
          ...
        }
      }
    ]
    
  2. Rufen Sie die Assts aus der gewünschten Version ab, definiert durch seine id von oben:

    GET /repos/:owner/:repo/releases/assets/:id
    

    Wenn Sie den binären Inhalt des Assets herunterladen möchten, übergeben Sie einen Medientyp von "application/octet-stream". Die API leitet den Client entweder an den Standort weiter oder streamt ihn, wenn möglich, direkt. API-Clients sollten sowohl a 200 oder 302 Antwort.

Wie dokumentiert, sind diese Anforderungen alle relativ zu https://api.github.com.

Dies ist ein Mini-Skript zum Herunterladen eines Assets, das seinen Dateinamen kennt (kann leicht geändert werden, um andere Assets herunterzuladen:

asseturl=$(curl -H "Authorization: token ${token}" https://api.github.com/repos/${repo}/releases/${releaseid}/assets | jq ".[] | select(.name=="${filename}") | .url")
curl -L -H "Authorization: token ${token}" -H "Accept:application/octet-stream" $(echo $asseturl | tr -d '"') > ${filename}
  • $token ist das Zugriffstoken für github
  • $filename ist der Dateiname für das Asset
  • $releaseid ist die Release-ID, in der die Binärdatei gespeichert ist

  • wenn du das nicht kennst releaseid du kannst filtern /repos/{owner}/{repo}/releases namentlich mit curl -H "Authorization: token ${token}" https://api.github.com/repos/${owner}/${repo}/releases | jq -r ".[] | select(.name == "${releasename}") | .assets[] | select(.name == "${filename}") | .url"

    – Cyrf

    11. Oktober 21 um 19:24 Uhr


Für Ansible können Sie diese Aufgabenliste verwenden (gleiche Schritte wie bei @ted):

- name: Get latest version
  uri:
    url: "https://api.github.com/repos/{{github_user}}/{{github_repo}}/releases/latest"
    return_content: yes
    headers:
      Authorization: "token {{ vault_github_deploying_token }}"
  register: github_response

- set_fact:
    binary_asset_url: "{{  github_response.json.assets|json_query(query) }}"
  vars:
    query: "[?name=='{{your_github_binary_filename}}'].url | [0]"   

- name: Get Binary asset's location
  uri:
    url: "{{ binary_asset_url }}"
    return_content: no
    follow_redirects: none
    status_code: 302
    headers:
      Authorization: "token {{ vault_github_deploying_token }}"
      Accept: "application/octet-stream"
  register: assets

- name: Download binary
  get_url:
    url: "{{ assets.location }}"
    dest: "/tmp/{{ your_github_binary_filename }}"
    mode: 0755

Beachten Sie, dass wget cat erhalten Sie es direkt, indem Sie dem Download-Link folgen, wie es ein Browser tut.

Umschreiben $URL wie du es brauchst. Meine Konvention besteht darin, mit einem Suffix für die Binärversion hochzuladen.

Ein Beispielskript:

#!/bin/bash
#
# You can fetch some binary directly from release on github
#
# We encourage to build your own version from source.
#

GIT_USER=me
GIT_PROJECT=project_name
BASE_URL=https://github.com/$GIT_USER/$GIT_PROJECT/releases/download
RELEASE=v0.6.3-alpha1
BINARY=bin_file_on_release

if [[ -e $BINARY ]]
then
  echo "file in the way: '$BINARY' remove it."
  exit 1
fi

if [[ $(getconf LONG_BIT) == "64" ]]
then
    echo "I'm 64-bits"
    URL="$BASE_URL/$RELEASE/$BINARY"
else
    echo "I'm 32-bits"
    URL="$BASE_URL/$RELEASE/${BINARY}-32bits"
fi

set -e
echo "Fetching from: $URL"
wget -q -O $BINARY "$URL"
file $BINARY
chmod a+x $BINARY

Einstufiger Prozess:

Hier ist ein Einzeiler (ohne Authentifizierung) Ich habe in einem Skript zum Download verwendet Digitaler Ozean‘S doctl Schnittstelle von Github. Es packt einfach die NEUESTE Release und entTARs es:

curl -sL $(curl -s https://api.github.com/repos/digitalocean/doctl/releases/latest | grep "http.*linux-amd64.tar.gz" | awk '{print $2}' | sed 's|[",]*||g') | tar xzvf -

Wenn Sie kein Linux verwenden, ersetzen Sie "http.*linux-amd64.tar.gz" oben mit “darwin”, “windows”, etc und dem entsprechenden arch.

HINWEIS: Obenstehendes sollen Ich arbeite programmgesteuert mit Binärdateien aus anderen Github-Repos, aber ich habe es nur mit getestet doctl. HTH-

.

674410cookie-checkWie lade ich Binärdateien einer GitHub-Version herunter?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy