23个版本 (6个重大更新)
0.7.0 | 2024年7月26日 |
---|---|
0.6.6 | 2024年6月12日 |
0.3.3 | 2024年3月21日 |
#2 in #updater
每月269次下载
95KB
1.5K SLoC
axoupdater
axoupdater为与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)
。
依赖项
~13–47MB
~785K SLoC