23 个版本 (6 个重大更新)

0.7.0 2024 年 7 月 26 日
0.6.6 2024 年 6 月 12 日
0.3.3 2024 年 3 月 21 日

#99 in 开发工具

Download history • Rust 包仓库 613/week @ 2024-04-18 • Rust 包仓库 534/week @ 2024-04-25 • Rust 包仓库 1167/week @ 2024-05-02 • Rust 包仓库 1996/week @ 2024-05-09 • Rust 包仓库 2263/week @ 2024-05-16 • Rust 包仓库 1789/week @ 2024-05-23 • Rust 包仓库 1765/week @ 2024-05-30 • Rust 包仓库 1886/week @ 2024-06-06 • Rust 包仓库 1710/week @ 2024-06-13 • Rust 包仓库 2221/week @ 2024-06-20 • Rust 包仓库 2263/week @ 2024-06-27 • Rust 包仓库 2621/week @ 2024-07-04 • Rust 包仓库 1824/week @ 2024-07-11 • Rust 包仓库 2364/week @ 2024-07-18 • Rust 包仓库 2471/week @ 2024-07-25 • Rust 包仓库 1427/week @ 2024-08-01 • Rust 包仓库

8,707 每月下载量
4 crates 中使用

MIT/Apache

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 是您希望升级的应用程序的名称。

许可

根据您的选择,许可协议为

依赖项

~6–42MB
~661K SLoC