Update-informer

对 update-informer 开源:一个适用于 CLI 应用的高度可定制 Rust 库

update-informer 是一个主要为用 Rust 编写的 CLI 工具(如 datanymizer. 创建的库。 它会检查已发布的新版本,并在发现更新时发送通知。 update-informer 由开源爱好者 Mikhail Grachev 开发完成。

CLI 是 Command Line Interface(命令行界面)的缩写,它是一种命令行程序,用于读取输入的命令并执行请求的操作。 一般来说,可以通过终端命令使用的任何程序都属于这一类。


 

项目简介

用户可以使用 update-informer 在 Crates.io 和 GitHub 等资源上自动检查新版本。 Crates.io 是 Rust 社区的 crate 注册表,是所有项目、库等的主要存储资源。

向在控制台中运行的 CLI 应用添加 update-informer 库后,它会定期(例如,每天一次)检查是否发布了新版本。 如果检测到了新版本, update-informer 就会向控制台发送一条消息,如“有新版本可用,请使用此链接进行更新。”

许多项目都有类似的工具。 例如, GitHub CLI 可以将 GitHub 带到您的终端。 它的功能开箱即用,您可以处理议题、拉取请求、检查、发布等。 Javascript 中也有类似的库,很受欢迎。

Rust 也有一个类似的库,但是没有维护很长时间,也不支持 GitHub,而且我们对它的工作方式也不是很满意。 并且无法对其进行自定义或更改。 因此,我们为 Rust 社区开发了一个更通用的解决方案,可以用各种可能的方式对进行定制。

update-informer 会在程序启动期间生成一个通知(在日志中)。 除了 Crates.io 之外,这个工具的一个关键功能是支持 GitHub,这一点与其他工具不同。 它还提供了配置检查频率的功能(您可以指定任意时长,甚至可以每秒钟检查一次),并且具有最少的依赖项(只有 ureq, semverserde)。 这一点非常重要,因为第三方解决方案经常会带来很多依赖项,导致代码库增加、编译时间增加等。

结果类似于:

update-informer

用法

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

未来计划

目前, update-informer v0.2.0 版已经发布。 如果社区有兴趣或要求改进,那么我们继续改进此工具并扩展其功能。 未来,我们计划支持所有流行的主机(如 GitLab 和 Bitbucket),并增加对各种 HTTP 客户端的支持,从而减少依赖项。 请查看项目的GitHub 并向我们发送拉取请求!

我们在开源项目上的工作(而且我们每个月都会选择几个 OSS 项目来赞助)表明了我们的进取心和对开发者热爱和所需内容的理解。 如果您需要将您的项目更新到最新版本的技术堆栈,请通过下面的表格与我们联系!

这个项目的想法是我在使用 GitHub CLI 时产生的。 我收到了一个通知,提示新版本已经发布。 我喜欢这个主意,决定加一些类似 dotenv-linter 的内容。 没有合适的解决方案,因此我决定用 Rust 开发自己的解决方案。
Mikhail Grachev
开源爱好者
联系我们
已有项目构想?
我们一起来实现它吧
添加附件
文件必须小于 8 MB
允许的文件类型:jpg jpeg png txt rtf pdf doc docx ppt pptx
本网站受 reCAPTCHA 保护,并适用 Google 隐私政策服务条款