Главная/ Блог/ Update-informer

Update-informer — гибкая open-source библиотека для консольных приложений

February 2022

Библиотека update-informer создана в первую очередь для написанных на Rust консольных инструментов, таких как dotenv-linter и datanymizer. Она отслеживает выпуск новых версий и отправляет уведомления об их появлении. Разработал update-informer энтузиаст open-source Михаил Грачёв.

Интерфейс командной строки (Command Line Interface, CLI), или консоль — программа, которая считывает команды, введённые в командную строку, и выполняет требуемое действие. В категорию консольных приложений попадает любое приложение, которое можно использовать с помощью команд терминала.

 

Как работает библиотека?

Благодаря update-informer вы сможете автоматически отслеживать появление новых версий на таких ресурсах, как Crates.io и GitHub. Crates.io — реестр крейтов сообщества Rust — является основным ресурсом для хранения проектов, библиотек и тому подобного.

Добавьте библиотеку update-informer в своё приложение, которое запускается в консоли, и она периодически, с заданным вами интервалом, будет проверять, нет ли свежих релизов. При появлении новой версии update-informer отправляет на консоль сообщение типа: "A new release is available, update with this link".

Существует ряд похожих инструментов. Например, GitHub CLI, который может принести GitHub в ваш терминал. Его функциональность предоставляется из коробки, и вы можете работать с запросами (issue) и пулл реквестами (pr), проверками, релизами и многим другим. Подобная, очень популярная, библиотека есть и на Javascript.

В Rust тоже была похожая библиотека, но она довольно давно не сопровождалась и к тому же не поддерживала GitHub, так что нас она не удовлетворяла. Вдобавок библиотеку нельзя было настроить или изменить. Поэтому мы разработали для сообщества Rust более универсальное решение, которое можно настраивать всевозможными способами.

Во время запуска программы update-informer генерирует уведомление в коде (в логах). Одна из ключевых особенностей этого инструмента, отличающая его от других, — поддержка GitHub наряду с Crates.io. При настройке частоты проверок можно указать любой промежуток времени, вплоть до проверки каждую секунду. Инструмент имеет минимальное количество зависимостей: только ureq, semver и serde. Это очень важно, так как сторонние решения часто привносят множество зависимостей, что увеличивает кодовую базу, время компиляции и т. д.

Пример оповещения:

Update-informer — гибкая open-source библиотека для консольных приложений 1

Использование

Добавьте update-informer в Cargo.toml:

[dependencies]
update-informer = "0.2.0"

Чтобы проверить наличие новой версии на Crates.io, используйте функцию UpdateInformer::check_version. Эта функция принимает имя проекта и текущую версию, а также временной интервал между проверками:

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);
}

Кроме того, вы можете взять имя и версию проекта из спецификации Cargo, используя переменные окружения:

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();

Обратите внимание, что первая проверка произойдет только после истечения указанного интервала:

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

Проверка наличия новой версии на GitHub (обратите внимание, что в имени проекта необходимо указать владельца):

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();

Планы на будущее

На данный момент уже выпущена версия библиотеки v0.2.0. Если сообщество будет заинтересовано или появятся запросы на дальнейшие улучшения, мы будем совершенствовать этот инструмент и расширять функциональность. В будущем мы планируем добавить поддержку всех популярных платформ хостинга кода, таких как GitLab и Bitbucket, а также различных HTTP-клиентов, чтобы уменьшить количество зависимостей. Проверьте проект на GitHub и отправьте нам пулл реквесты!

Мы инициативны и понимаем, что нравится разработчикам и какие инструменты им нужны. Подтверждение этому — наша работа над проектами с открытым исходным кодом, а также то, что мы ежемесячно выбираем несколько OSS-проектов и оказываем им спонсорскую поддержку. Если вам требуется обновить свой проект до последних версий стека технологий, свяжитесь с нами через форму ниже.

 

Идея этого проекта пришла мне в голову, когда я работал с GitHub CLI. Я получил уведомление о новом релизе. Это мне понравилось, и я решил добавить что-то подобное в dotenv-linter. Ни одного подходящего решения не нашлось, поэтому я сделал своё собственное на Rust
Михаил Грачёв
энтузиаст open-source
Будем на связи
Прикрепить файл
Максимальный размер файла: 8 МБ.
Допустимые типы файлов: jpg jpeg png txt rtf pdf doc docx ppt pptx.