download_latest.py: automatic github release downloader (3)

in Deutsch D-A-CH3 years ago

English version below


Teil 2: https://peakd.com/hive-121566/@t-nil/downloadlatestpy-automatic-github-release-downloader-2

So, Teil drei über mein Python-Skript:

Ich habe übrigens endlich ein Github Repo erstellt (und nur gleich initial irgendwelche komischen Merge Conflicts und zerstückelte History generiert, sollte aber funktionieren):

Screenshot_2021-12-29_14-07-52.png

  • Hier wird JSON aus der Github API geholt (Z. 80f).

Wie das zum Beispiel für Signal aussieht, zeige ich euch hier:

Screenshot_2021-12-29_16-00-54.png

Auf der Ausgabe sieht man auch schon die Informationen, die uns im Rahmen dieses Skripts interessieren:

  • den tag_name bzw. name: Hier steht die Versionsnummer, die wir erst einmal verwenden werden, um festzustellen, ob ein Update herausgegeben wurde
  • tarball_url bzw. zipball_url: Die Download-Links für die verschiedenen Artifakte, welche wir dann herunterladen und adaptiv entpacken wollen

Zurück zum Code oben: (sorry for formatting)

  • die Remote-Version wird wie besprochen aus dem name Tag herausgeparst (Z. 85)
  • Wenn wir das Projekt schon im System haben aus vorherigen Durchläufen (86), laden wir auch die lokale Version (87) und vergleichen die beiden (88). Falls gleich, ist nichst zu zun und wir beenden (89ff).
  • Kleine Fehlerabfrage, ob wir vielleicht die gewünschte Artifakt-URL nicht in der API finden (93ff)

Screenshot_2021-12-29_16-16-26.png

  • Wir lesen also die Artifakt-URL (97) und laden die Datei herunter (98)
  • die schöne 103 löscht die vorherige Installation, wenn sie existiert (102)

Ja, wenn die App Daten im eigenen Verzeichnis speichert, gehen die futsch. Hoffentlich macht sie das nicht!

Screenshot_2021-12-29_16-21-43.png

  • Wir matchen das übergebene gewünschte Dateiformat nach unterstützten Formaten. Aktuell gibt es zip und tar.gz, welche wir über die Standard-Python-Funktionen entpacken (zip) bzw. die Kommandozeile nutzen (tar.gz). (106-123)
  • Danach wird die aktuelle Version neu gesetzt (125)

Screenshot_2021-12-29_16-27-29.png

  • Zum Schluss schreiben wir noch den aktuellen State wieder raus

Das war's schon! Nachtrag: Witzigerweise habe ich zu spät bemerkt, dass Signal-Desktop keine compilierten Releases, sondern nur den Source Code auf diesem Weg zur Verfügung stellt. FUCK. Aber für andere Applikationen sollte dieses Skript ja zum Glück genauso funktionieren.

Tschüss


English version


Part 2: https://peakd.com/hive-121566/@t-nil/downloadlatestpy-automatic-github-release-downloader-2

So, part three about my Python script:

By the way, I finally created a github repo (and just generated some weird merge conflicts and fragmented history right away initially, but should work):

Screenshot_2021-12-29_14-07-52.png

  • Here JSON is fetched from the Github API (lines 80f).

For example, I'll show you how this looks for Signal here:

Screenshot_2021-12-29_16-00-54.png

On the output you can already see the information we are interested in for this script:

  • the tag_name or name: This is the version number, which we will first use to determine if an update has been released
  • tarball_url resp. zipball_url: The download links for the various artifacts, which we will then download and adaptively unzip.

Back to the code above: (sorry for formatting)

  • the remote version is parsed out of the name tag as discussed (line 85)
  • If we already have the project in the system from previous runs (86), we also load the local version (87) and compare the two (88). If equal, there is nothing to add and we exit (89ff).
  • Small error query to see if we might not find the desired artifact URL in the API (93ff)

Screenshot_2021-12-29_16-16-26.png

  • So we read the artifact URL (97) and download the file (98)
  • the nice 103 deletes the previous installation if it exists (102)

Yes, if the app stores data in its own directory, they go poof. *Hopefully it doesn't do that!

Screenshot_2021-12-29_16-21-43.png

  • We match the passed desired file format by supported formats. Currently there are zip and tar.gz, which we unpack using the standard Python functions (zip) or use the command line (tar.gz). (106-123)
  • After that we reset the current version (125)

Screenshot_2021-12-29_16-27-29.png

  • Finally we write the current state out again

That's it! *Addendum: Funnily enough, I realized too late that Signal-Desktop doesn't provide compiled releases, only the source code this way. FUCK. But for other applications this script should work just as well, thankfully.

Bye