获取github最新版本的cli工具
lastversion的Python项目详细描述
最新版本
一个小小的命令行实用程序,有助于回答一个简单的问题:
< Buff行情>github项目的最新发布版本是什么?
github有一个api端点,请在这里获取最新版本rel="nofollow"。但如果你在这里,你就会知道这有多糟糕:
只有在使用github发布接口正式提交的情况下,发布才会显示在这个api响应中。 有时项目作者会使用正式版本,下一个版本他们不会使用。 人类没有一致性。
好的,您认为您可以使用另一个api端点来列出标记。 标记通常表示一个版本,但是api不会按时间顺序对它们进行排序。 此外,您可能会得到标签名值的"最新稳定值"。
一般来说,相当多的项目作者通过以下方式使事情更加复杂:
- 创建一个正式的版本,它显然是一个候选版本(
rc
in tag),但是忘记将其标记为预发布版本 - 在发布标签中添加无关文本,例如
release-1.2.3
或name-1.2.3-2019
- 放置或不放置"v"前缀以释放标记。今天是,明天不是。我自己对此并不一致:)
- 从一种版本格式切换到另一种版本格式,例如
V20150121
到v2.0.1
为了处理所有这些混乱,只需得到格式良好的,最后一个稳定的版本(或下载url!)在命令行中,您可以使用lastversion
它的主要用途是用于构建系统-无论何时您希望监视特定存储库的已发布版本,以便自动构建包。 或者要求在您的自动化脚本中获得最新版本。
lastversion
做了一点人工智能,以便检测发布者是否错误地将beta版本提交为稳定版本。
它使用了两个api端点,并结合了从版本信息中清除人为不一致性的逻辑。
概要
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
下载最新版本的内容
您还可以使用lastversion
获取最新版本的资产/源下载URL。
wget $(lastversion --assets mautic/mautic)
这将下载最新Stable Mautic的所有资产,它们是2个ZIP文件。
工作原理:lastversion
输出所有资产url,每一个都在新行上,并且wget
足够聪明,可以下载每个url。魔法:
对于没有添加资产的发行版,它将下载源文件。
要始终下载源代码,请改用--source
:
wget $(lastversion --source mautic/mautic)
资产是一个可下载的文件,通常表示一个可执行文件,或者"准备启动"项目。这是您在正式版本下看到的文件,通常是一个编译的(针对特定平台)程序。
源文件是发布源代码的tarball或zipball源文件。
获取最新版本(beta很好)
我们认为最新版本是稳定的/没有标记为beta的版本。
如果您不这么认为,则传递--pre
开关,如果e repository的最新版本是预发行版,然后您将获得其版本:
lastversion --pre mautic/mautic #> 2.15.2b0
用法
通常,您只需将存储库url(或repo所有者/名称)作为唯一参数传递给它,例如:
lastversion https://github.com/gperftools/gperftools
具有相同输出的等效接受调用是:
lastversion gperftools/gperftools
如果您甚至懒得复制粘贴一个项目的url,您可以只键入其名称作为参数,这将使用repository search api(较慢)。 有助于回答最新的Linux版本:
lastversion linux
或者想知道WordPress的最新版本是什么?
lastversion wordpress
主参数的特殊值self
将查找最后一个版本的lastversion
本身。
有关控制输出或行为的更多选项,请参见--help
输出:
usage: lastversion [-h] [--pre] [--verbose]
[--format {version,assets,source,json}] [--assets]
[--source] [--version] [-gt VER] [--filter REGEX]
REPO
Get latest release from GitHub.
positional arguments:
REPO GitHub repository in format owner/name
optional arguments:
-h, --help show this help message and exit
--pre Include pre-releases in potential versions
--verbose
--format {version,assets,source,json}
Output format
--assets Returns assets download URLs for last release
--source Returns only source URL for last release
--version show program's version number and exit
-gt VER, --newer-than VER
Output only if last version is newer than given
version
--filter REGEX Filters --assets result by a regular expression
--format
将影响上一版本的信息类型和显示格式,例如:
版本
是默认值。只需输出格式良好的版本号资产
将输出以换行分隔的资产URL列表(如果有),否则链接到源存档source
将输出指向源存档的链接,无论版本是否添加了某些资产json
可以由外部python模块使用,也可以用于调试,它是满足最新版本检查的api调用的json输出
您可以使用快捷方式--source
而不是--format source
,以及--assets
而不是--format assets
,如以上示例所示。
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
0
默认情况下,lastversion
会将--assets
的输出筛选为特定于操作系统。谁需要Linux上的.exe
?
要重写此行为,可以使用--filter
,它的参数是正则表达式。
要禁用操作系统筛选,请使用--filter.
,这将匹配所有内容。
您可以在使用grep的地方自然地使用--filter
,例如lastversion--assets--filter win repo
使用最新版本编写脚本
检查是否有新版本
当您正在构建一些上游包时,并且您以前也这样做过,就会有一个已知的"last build版本"。 自动生成变得容易:
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
1
状态代码
退出状态代码是通信命令执行成功或失败的常用方法。
因此,lastversion
如下:successful command返回0
而其他任何东西都是某种错误:
退出状态代码1
对于根本不存在存储库的释放标记或存储库不存在这样的情况返回。
退出状态代码2
返回用于-gt
版本比较负查找。
退出状态代码3
在筛选上一版本的资产时返回空url集(不匹配)
CentOS 7的安装
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
2
打包安装依赖于epel或基本存储库中缺少的一些依赖项。 以下依赖包也在我们的存储库中:
python2 cachecontrol
- 更新的python2 msgpack
其他系统的安装
该脚本主要是为Python2.7开发的,但众所周知,它可以与Python3.7等最新版本一起使用。
使用pip
安装最简单:
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
3
提示
获取最新版本对api来说非常重要,因为github不允许按时间顺序获取标记, 而且有些存储库会从一种版本格式切换到另一种版本格式,所以我们不能只认为最高版本是最新的。 我们必须获取每个标记的提交日期,看看它是否是最近的。因此,对于更大的存储库来说,速度较慢, 可能有很多标签。
因此,lastversion
利用缓存api响应来快速、轻松地访问github api,
我t执行条件etag验证,根据github api,这将不计入速率限制。
缓存存储在Linux系统上的~/.cache/lastversion
中。
建议您在~/.bashrc
中设置github api令牌,以提高您的速率限制:
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
4
然后运行source~/.bashrc
。在此之后,lastversion
将使用它从github获得更大的api调用许可。
在python模块中的用法
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
5
将产生:2.15.2b0
函数接受3个参数
repo
,格式为<;owner>;/<;name>;
,或此存储库下的任何URL,例如https://github.com/dvershinin/lastversion/issues
format
,它接受与以交互方式运行上一版本时相同的值
preok
,布尔值,用于确定是否将预发行版包含为潜在版本
检查Linux机器是否有更新的内核
lastversion apache/incubator-pagespeed-ngx #> 1.13.35.2
6