#updater #github #cargo-dist #standalone #version #self-updater #axoupdater

app axoupdater-cli

用于与 cargo-dist 一起使用的自更新可执行文件

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

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

#2 in #updater

Download history 43/week @ 2024-04-25 236/week @ 2024-05-02 356/week @ 2024-05-09 39/week @ 2024-05-16 10/week @ 2024-05-23 146/week @ 2024-05-30 111/week @ 2024-06-06 58/week @ 2024-06-13 4/week @ 2024-06-20 132/week @ 2024-07-04 12/week @ 2024-07-11 128/week @ 2024-07-18 135/week @ 2024-07-25 6/week @ 2024-08-01

每月269次下载

MIT/Apache

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

许可

根据您的选择,许可如下:

依赖项

~13–47MB
~785K SLoC