34次发布
0.1.1 | 2024年7月21日 |
---|---|
0.0.32 | 2024年6月1日 |
0.0.29 | 2023年12月17日 |
0.0.28 | 2023年9月9日 |
0.0.6 | 2021年1月17日 |
#228 in Web编程
每月1,155次下载
130KB
3K SLoC
通用二进制安装程序库和CLI工具
当我提到“通用”,我的意思是它会从GitHub发布中下载二进制文件。
当我提到“二进制”,我的意思是它处理类似于大多数Go和Rust项目创建的单文件可执行文件。
当我提到“安装程序”,我的意思是它会将二进制文件放在你指定的任何位置。
最后,当我提到“UBI”,我的意思不是通用基本收入,但那也很好。
作为库使用UBI
[dependencies]
ubi = "0.1.0"
有关更多详细信息,请参阅ubi
在docs.rs上的文档。
安装它
您可以通过从发布页面下载最新的版本来手动安装它。
还有提供ubi
半成品实现的引导安装脚本
Linux和macOS
curl --silent --location \
https://raw.githubusercontent.com/houseabsolute/ubi/master/bootstrap/bootstrap-ubi.sh |
sh
如果您以非root用户身份运行此脚本,它将ubi
安装到$HOME/bin
。以root身份运行时,它将安装到/usr/local/bin
。
环境变量参数
引导脚本支持多个环境变量作为参数。
变量 | 描述 |
---|---|
TARGET |
安装ubi 的目录。对于非root用户默认为$HOME/bin ,对于root用户默认为/usr/local/bin 。 |
TAG |
要下载的ubi 版本标签。默认为最新发布版。 |
FILENAME |
要下载的发布文件资产的名称。这会跳过平台检测,仅下载具有此名称的文件。如果引导脚本无法检测您的平台,请使用此选项(但请考虑提交PR以修复检测)。 |
GITHUB_TOKEN |
用于下载发布版本的GitHub API令牌。仅在私有仓库或达到GitHub API匿名使用限制时才需要此令牌。在CI环境中重复运行引导脚本时,很可能会遇到这些限制。 |
要设置这些变量,您可以在运行脚本之前在环境中设置它们,或者您可以在命令行上设置它们。请注意,您需要在管道的右侧设置它们。例如,要使用TAG
环境变量安装ubi
的特定版本
curl --silent --location \
https://raw.githubusercontent.com/houseabsolute/ubi/master/bootstrap/bootstrap-ubi.sh |
TAG=v0.0.15 sh
Windows
powershell -exec bypass -c "Invoke-WebRequest -URI 'https://raw.githubusercontent.com/houseabsolute/ubi/master/bootstrap/bootstrap-ubi.ps1' -UseBasicParsing | Invoke-Expression"
您可以从命令行或PowerShell命令行运行此命令。这将把ubi.exe
安装到当前目录中。
如何使用它
USAGE:
ubi [OPTIONS]
OPTIONS:
-d, --debug Enable debugging output
-e, --exe <exe> The name of this project's executable. By default this is the same
as the project name, so for houseabsolute/precious we look for
precious or precious.exe. When running on Windows the ".exe" suffix
will be added as needed.
-h, --help Print help information
-i, --in <in> The directory in which the binary should be placed. Defaults to
./bin.
-m, --matching <matching> A string that will be matched against the release filename when
there are multiple files for your OS/arch, i.e. "gnu" or "musl".
Note that this will be ignored if there is only used when there is
only one matching release filename for your OS/arch
-p, --project <project> The project you want to install, like houseabsolute/precious or
https://github.com/houseabsolute/precious.
-q, --quiet Suppresses most output
--self-upgrade Use ubi to upgrade to the latest version of ubi. The --exe, --in,
--project, --tag, and --url args will be ignored.
-t, --tag <tag> The tag to download. Defaults to the latest release.
-u, --url <url> The url of the file to download. This can be provided instead of a
project or tag. This will not use the GitHub API, so you will never
hit the GitHub API limits. This means you do not need to set a
GITHUB_TOKEN env var except for private repos.
-v, --verbose Enable verbose output
-V, --version Print version information
使用GitHub令牌
如果设置了GITHUB_TOKEN
环境变量,那么它将用于所有API调用。这是下载私有项目发布版本所必需的。如果您在一个频繁运行作业的CI环境中运行ubi
,您可能也需要它,因为GitHub对匿名API请求的速率限制非常低。
但是,您也可以使用--url
选项通过直接提供下载链接来绕过GitHub API。
升级ubi
您可以使用ubi --self-upgrade
命令使用ubi
来升级ubi
。请注意,您必须对包含ubi
的目录有写权限才能使此操作生效。
在Windows上,这会留下一个名为ubi-old.exe
的文件,必须手动删除。
在CI中使用ubi
的最佳实践
当在CI中使用ubi
时,您需要考虑以下几点。
首先,有GitHub API速率限制。在没有提供GITHUB_TOKEN
的情况下,此限制可能低至每小时每个IP 60个请求,所以您几乎肯定需要提供它。在GitHub Actions中运行时,您可以使用${{ secrets.GITHUB_TOKEN }}
语法来设置此环境变量,在这种情况下,速率限制是按仓库计算的。
- name: Install UBI
shell: bash
run: |
curl --silent --location \
https://raw.githubusercontent.com/houseabsolute/ubi/master/bootstrap/bootstrap-ubi.sh |
sh
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Install tools with UBI
shell: bash
run: |
"$HOME/bin/ubi" --project houseabsolute/precious --in "$HOME/bin"
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
如果您仅在单个平台上运行ubi
,您可以通过使用--url
参数来避免完全使用GitHub API。但如果您在多个平台上运行,这可能很繁琐,而且很大程度上抵消了使用ubi
的目的。
如果您从您不控制的仓库下载可执行文件,并且您没有使用--url
参数,那么您应该使用--tag
参数来指定您想要安装的发布版本。否则,ubi
将始终下载最新版本,这可能会导致意外,特别是如果您在CI中运行您下载的工具。
为什么这很有用
随着Go和Rust的兴起,像ripgrep这样的非常有用的工具越来越多地以包含单个可执行文件的tarball或zip文件的形式发布。有一个能够下载适合您平台的正确二进制的单个工具是非常方便的。
是的,在Unix系统上的shell中可以完成这项操作,但您知道如何在PowerShell中完成等效操作吗?
一旦安装了 ubi
,您就可以使用它来在 Linux、macOS 和 Windows 上安装这些单二进制工具。
这是否比从源代码安装更好?
我认为是的。虽然当然可以使用 go
或 cargo
安装这些工具,但这需要完整的语言工具链。然后您必须实际编译该工具,这可能需要下载和编译许多依赖项。这将比安装二进制文件慢得多,并且更容易出错。
这是否比从 deb/RPM/homebrew/chocolatey 软件包安装更好?
这值得商榷。使用 ubi
的主要优点是您可以在 Linux、macOS 和 Windows 上使用完全相同的工具。主要缺点是您不会获得包含元数据(如许可文件)的完整软件包或额外的工具,如 shell 完成文件,并且您也不能轻松使用软件包管理器卸载它。
依赖项
~19–35MB
~559K SLoC