Update-informer

Update-informer als Open Source: Eine flexible Rust-Bibliothek für CLI-Programme

update-informer ist eine Bibliothek, die vor allem für CLI-Tools entwickelt wurde, welche in Rust geschrieben wurden, wie etwa dotenv-linter oder datanymizer. Sie sucht nach neu veröffentlichten Versionen und versendet Benachrichtigungen, wenn Updates gefunden werden. update-informer wurde vom Open-Source-Enthusiasten Mikhail Grachev entwickelt.

CLI steht für Command Line Interface, ein Befehlszeilenprogramm, das eingegebene Befehle ausliest und die gewünschten Aktionen ausführt. Im Allgemeinen fällt jedes Programm, das über die Befehlszeile verwendet werden kann, in diese Kategorie.

 

Die Funktionsweise

Mit update-informer lässt sich auf Plattformen wie Crates.io und GitHub automatisch nach neuen Versionen suchen. Crates.io ist die Crate-Registry der Rust-Community, die Hauptressource, in der alle Projekte, Bibliotheken usw. gespeichert werden.

Wenn Sie die update-informer Bibliothek in Ihre CLI-Anwendung einfügen, die in der Konsole ausgeführt wird, prüft sie regelmäßig (z. B. einmal pro Tag), ob eine neue Version veröffentlicht wurde. Wenn ein Update verfügbar ist, sendet update-informer eine Meldung an die Konsole, wie etwa „Eine neue Version ist verfügbar, aktualisieren Sie über diesen Link“.

Es gibt eine Reihe von Projekten mit ähnlichen Tools. Zum Beispiel kann GitHub CLIGitHub in Ihre Kommandozeile bringen. Die Funktionalität ist sofort einsatzbereit, und Sie können mit Issues, Pull Requests, Checks, Releases und mehr arbeiten. Es gibt auch eine beliebte entsprechende Bibliothek in Javascript.

Rust hatte eine ähnliche Bibliothek, doch diese wurde lange nicht mehr gepflegt, bot keine GitHub-Unterstützung und wir waren nicht ganz zufrieden mit ihrer Funktionsweise. Sie konnte nicht ausreichend angepasst oder verändert werden. Daher haben wir eine universellere Lösung für die Rust-Community entwickelt, die in jeder Hinsicht angepasst werden kann.

update-informer generiert beim Programmstart eine Benachrichtigung im Code (im Protokoll). Eines der besonderen Hauptmerkmale des Tools ist die Unterstützung von GitHub, zusätzlich zu Crates.io. Es bietet auch die Möglichkeit, die Häufigkeit der Update-Suchen zu konfigurieren (Sie können eine beliebige Zeitspanne angeben, sogar im Sekundentakt) und hat die geringste Anzahl von Abhängigkeiten: nur ureq, semver und serde. Dies ist enorm wichtig, da Lösungen von Drittanbietern sehr oft viele Abhängigkeiten mit sich bringen, was zu einer Vergrößerung der Codebasis, einer Verlängerung der Kompilierungszeit usw. führt.

So sieht das Resultat einer Suche aus:

update-informer

Verwendung

Hinzufügen von update-informer zu Cargo.toml:

[dependencies]
update-informer = "0.2.0"

TUm nach einer neuen Version auf Crates.io, zu suchen, verwenden Sie die Funktion UpdateInformer::check_version. Sie benötigt den Projektnamen und die aktuelle Version sowie das Suchintervall:

use update_informer::{registry::Crates, Check, UpdateInformer};

let informer = UpdateInformer::new(Crates, "repo", "0.1.0", Duration::from_secs(60 * 60 * 24));
if let Ok(Some(version)) = informer.check_version() {
    println!("New version is available: {}", version);
}

Darüber hinaus können Sie den Namen und die Version des Projekts mit Hilfe von Umgebungsvariablen von Cargo verwenden:

use update_informer::{registry::Crates, Check, UpdateInformer};

let name = env!("CARGO_PKG_NAME");
let version = env!("CARGO_PKG_VERSION");
UpdateInformer::new(Crates, name, version, Duration::from_secs(60 * 60 * 24)).check_version();

Beachten Sie, dass die erste Suche erst nach Ablauf des Intervalls erfolgt:

use update_informer::{registry::Crates, Check, UpdateInformer};

const EVERY_HOUR: Duration = Duration::from_secs(60 * 60);

let informer = UpdateInformer::new(Crates, "repo", "0.1.0", EVERY_HOUR);
informer.check_version(); // The check will start only after an hour

Um nach einer neuen Version auf GitHubzu suchen (beachten Sie, dass der Projektname den Eigentümer enthalten muss):

use update_informer::{registry::GitHub, Check, UpdateInformer};

let informer = UpdateInformer::new(GitHub, "owner/repo", "0.1.0", Duration::from_secs(60 * 60 * 24));
informer.check_version();

Pläne für die Zukunft

Kürzlich ist Version v0.2.0 des update-informers veröffentlicht worden. Wenn es Interesse seitens der Community oder Verbesserungswünsche gibt, werden wir natürlich daran arbeiten, das Tool zu verbessern und die Funktionalität zu erweitern. Für die Zukunft ist geplant, alle gängigen Hosts wie GitLab und Bitbucket zu unterstützen sowie Unterstützung für verschiedene HTTP-Clients hinzuzufügen, um Abhängigkeiten zu reduzieren. Besuchen Sie das Projekt auf GitHub an und schicken Sie uns Pull Requests!

Unsere Arbeit an Open-Source-Projekten – sowie die Tatsache, dass wir jeden Monat mehrere OSS-Projekte für ein Sponsoring auswählen – zeigt unseren Unternehmungsgeist und unser Verständnis dafür, was Entwickler hoch schätzen und brauchen. Kontaktieren Sie uns über das untenstehende Formular, wenn Sie Ihr Projekt auf die neuesten Versionen des Technologie-Stacks aktualisieren möchten!

Die Idee für dieses Projekt kam mir, als ich mit dem GitHub CLI arbeitete. Ich erhielt eine Benachrichtigung über die Veröffentlichung einer neuen Version. Mir gefiel die Idee und ich beschloss, etwas Ähnliches zu dotenv-linter hinzuzufügen. Da es noch keine passende Lösung gab, entwickelte ich in Rust meine eigene.
Mikhail Grachev
Open-Source-Enthusiast
Kontaktieren Sie uns
Schwebt Ihnen ein Projekt vor?
Setzen wir es gemeinsam um
Datei anhängen
Die Dateien müssen kleiner als 8 MB sein.
Zulässige Dateierweiterungen: jpg jpeg png txt rtf pdf doc docx ppt pptx.
Diese Website wird durch reCAPTCHA geschützt. Es gelten die Datenschutzerklärung und die Nutzungsbedingungen von Google.