23 个版本 (6 个重大更新)
0.7.0 | 2024 年 7 月 26 日 |
---|---|
0.6.6 | 2024 年 6 月 12 日 |
0.3.3 | 2024 年 3 月 21 日 |
#99 in 开发工具
8,707 每月下载量
在 4 crates 中使用
72KB
1.5K SLoC
轴更新器
轴更新器为与 cargo-dist 一起使用而设计的自更新程序。它可以用作独立的程序,或者作为您自己的程序中的库。它支持托管在 GitHub 发布 或 Axo 发布(处于测试阶段) 上的版本。
为了能够检查已安装程序的信息,它从版本 0.10.0 或更高版本 开始使用 cargo-dist 生成的安装收据。这些安装收据是包含关于当前安装的应用程序版本和生成它的 cargo-dist 版本的元数据的 JSON 文件;它们可以在 ~/.config/APP_NAME
(Linux, Mac) 或 %LOCALAPPDATA%\APP_NAME
(Windows) 中找到。
独立使用
当构建为独立的命令行应用程序时,axoupdater 只做一件事:检查用户是否正在使用它所构建的软件的最新版本,如果不是,则执行更新。更新程序的文件名不是为特定应用程序硬编码的,而是用于确定要更新的应用程序。例如,如果 axoupdater 在文件名 axolotlsay-update
下安装,则它将尝试获取名为 axolotlsay
的应用程序的更新。这意味着您只需要构建一次 axoupdater,就可以将其部署到多个应用程序而无需重新构建。
在即将发布的版本中,cargo-dist 将支持作为可选功能生成和安装用户的更新程序。
库使用
axoupdater 还可以用作您自己应用程序中的库,以便您可以在自己的应用程序中检查更新或执行自动更新。以下是一些使用示例。
检查更新并通知用户
if AxoUpdater::new_for("axolotlsay").load_receipt()?.is_update_needed_sync()? {
eprintln!("axolotlsay is outdated; please upgrade!");
}
如果程序未更新,自动执行更新
if AxoUpdater::new_for("axolotlsay").load_receipt()?.run_sync()? {
eprintln!("Update installed!");
} else {
eprintln!("axolotlsay already up to date");
}
要使用方法的阻塞版本,请确保在 Cargo.toml
中启用此依赖项的 "blocking"
功能。同时也提供了 is_update_needed()
和 run()
的异步版本。
if AxoUpdater::new_for("axolotlsay").load_receipt()?.run().await? {
eprintln!("Update installed!");
} else {
eprintln!("axolotlsay already up to date");
}
GitHub Actions 和 CI 中的速率限制
默认情况下,axoupdater 在获取版本信息时使用未经身份验证的 GitHub API 调用。这在正常使用中是可靠的,但在高度人工化的 CI 测试环境中遇到速率限制的可能性要大得多。Axoupdater 提供了一种提供 GitHub API 令牌的方法,以便选择更高的速率限制;如果您在 CI 中发现您的应用程序被速率限制,您可能希望选择它。Cargo-dist 在其自己的测试中使用此功能。以下是如何将其集成到您自己的应用程序中的简单示例。
我们建议使用环境变量进行令牌配置,这样您就不需要在测试中调整如何通过命令行调用您的应用程序。我们还建议选择一个仅针对您的应用程序的特定环境变量名称;用户在其环境中可能有陈旧或过期的 GITHUB_TOKEN
令牌,使用该名称可能会使您的应用程序出现意外行为。
首先,在您构造更新器客户端的任何地方,添加对环境变量的检查,如果已设置,则将其值传递给 set_github_token()
方法。
if let Ok(token) = std::env::var("YOUR_APP_GITHUB_TOKEN") {
updater.set_github_token(&token);
}
关于 cargo-dist 如何使用此功能的示例,请参见此处。
然后,在您的 CI 配置中,将该变量赋值为 GitHub Actions 自动分配的 GITHUB_TOKEN
机密值。
env:
YOUR_APP_GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
关于 cargo-dist CI 配置的示例,请参见此处。
库特性
默认情况下,axoupdater 支持GitHub和Axo发布。如果您将其作为程序中的库使用,并且您事先知道您将使用哪个后端来托管发布资产,您可以禁用其他库以减少依赖项树的大小。
构建
要作为独立二进制文件构建,请按照以下步骤操作
- 运行
cargo build --release
- 将
target/release/axoupdater
重命名为APPNAME-update
,其中APPNAME
是您希望升级的应用程序的名称。
许可
根据您的选择,许可协议为
- Apache License,版本 2.0,(LICENSE-APACHE 或 apache.org/licenses/LICENSE-2.0)
- MIT 许可证(LICENSE-MIT 或 opensource.org/licenses/MIT)
。
依赖项
~6–42MB
~661K SLoC