利用GitHub API获取最新Releases版本号

本文以 docker-compose: Define and run multi-container applications with Docker 为例,展示利用 GitHub API 获取 Repo 中最新 Releases 的版本号。

代码

1
curl --silent --connect-timeout 10 --retry 1 "https://api.github.com/repos/docker/compose/releases/latest" | grep "tag_name" | head -n 1 | awk -F ":" '{print $2}' | sed 's/\"//g;s/,//g;s/ //g'

代码解释

主字段

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
{
  "node_id": "RE_kwDOAOWUd84ET942",
  "tag_name": "v2.7.0",
  "target_commitish": "v2",
  "name": "v2.7.0",
  "draft": false,
  "prerelease": false,
  "created_at": "2022-07-19T15:15:48Z",
  "published_at": "2022-07-20T06:43:56Z",
}

以上为api获取到的部分json,我们需要获取 tag_name 的值

curl参数

  • "--silent" 静默模式
  • "--connect-timeout 10" 超时10s
  • "--retry 1" 重试次数1

筛选参数

  • grep "tag_name": grep 是 Linux 一个强大的文本搜索工具,在本代码中输出 tag_name 所在行,即输出 "tag_name": "v2.7.0",
  • head -n 1: head -n用于显示输出的行数,考虑到某些项目可能存在多个不同版本的 tag_name,这里我们只要第一个。
  • awk -F ":" '{print $2}': awk 主要用于文本分析,在这里指定:为分隔符,将该行切分成多列,并输出第二列。于是我们得到了(空格)"v2.7.0",
  • sed 's/"//g;s/,//g;s/ //g': 在这里 sed 用于数据查找替换,如sed 's/要被取代的字串/新的字串/g' ,因此本段命令可分为 3 个,以分号分隔。s/"//g即将引号删除(反斜杠是为了防止引号被转义),以此类推,最终留下我们需要的内容:v2.7.0
updatedupdated2024-10-282024-10-28