0%

获取GitHub代码仓库最新Release信息

请求 GitHub REST API,获取指定代码仓库的最新软件包发布信息

下面以 Microsoft Powershell 为例,Powershell 终端的仓库地址为https://github.com/PowerShell/PowerShell,根据 GitHub REST API 文档,获取最新发布版本信息的 URL 格式为https://api.github.com/repos/拥有者/代码仓库/releases/latest,则 Powershell 最新发布版本信息的 URL 是https://api.github.com/repos/PowerShell/PowerShell/releases/latest,请求此网址会返回如下 JSON 信息(有删减)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
{
"url": "https://api.github.com/repos/PowerShell/PowerShell/releases/39686910",
"assets_url": "https://api.github.com/repos/PowerShell/PowerShell/releases/39686910/assets",
"upload_url": "https://uploads.github.com/repos/PowerShell/PowerShell/releases/39686910/assets{?name,label}",
"html_url": "https://github.com/PowerShell/PowerShell/releases/tag/v7.1.3",
"id": 39686910,
"author": {
"login": "rjmholt",
"id": 7009879,
"node_id": "MDQ6VXNlcjcwMDk4Nzk=",
"avatar_url": "https://avatars.githubusercontent.com/u/7009879?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rjmholt",
"html_url": "https://github.com/rjmholt",
"followers_url": "https://api.github.com/users/rjmholt/followers",
"following_url": "https://api.github.com/users/rjmholt/following{/other_user}",
"gists_url": "https://api.github.com/users/rjmholt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rjmholt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rjmholt/subscriptions",
"organizations_url": "https://api.github.com/users/rjmholt/orgs",
"repos_url": "https://api.github.com/users/rjmholt/repos",
"events_url": "https://api.github.com/users/rjmholt/events{/privacy}",
"received_events_url": "https://api.github.com/users/rjmholt/received_events",
"type": "User",
"site_admin": false
},
"node_id": "MDc6UmVsZWFzZTM5Njg2OTEw",
"tag_name": "v7.1.3",
"target_commitish": "master",
"name": "v7.1.3 Release of PowerShell",
"draft": false,
"prerelease": false,
"created_at": "2021-03-11T23:29:12Z",
"published_at": "2021-03-11T23:29:58Z",
"assets": [
{
"url": "https://api.github.com/repos/PowerShell/PowerShell/releases/assets/33348893",
"id": 33348893,
"node_id": "MDEyOlJlbGVhc2VBc3NldDMzMzQ4ODkz",
"name": "powershell-7.1.3-1.centos.8.x86_64.rpm",
"label": "",
"uploader": {
"login": "rjmholt",
"id": 7009879,
"node_id": "MDQ6VXNlcjcwMDk4Nzk=",
"avatar_url": "https://avatars.githubusercontent.com/u/7009879?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rjmholt",
"html_url": "https://github.com/rjmholt",
"followers_url": "https://api.github.com/users/rjmholt/followers",
"following_url": "https://api.github.com/users/rjmholt/following{/other_user}",
"gists_url": "https://api.github.com/users/rjmholt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rjmholt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rjmholt/subscriptions",
"organizations_url": "https://api.github.com/users/rjmholt/orgs",
"repos_url": "https://api.github.com/users/rjmholt/repos",
"events_url": "https://api.github.com/users/rjmholt/events{/privacy}",
"received_events_url": "https://api.github.com/users/rjmholt/received_events",
"type": "User",
"site_admin": false
},
"content_type": "application/x-msdownload",
"state": "uploaded",
"size": 67749060,
"download_count": 6943,
"created_at": "2021-03-11T23:00:12Z",
"updated_at": "2021-03-11T23:00:14Z",
"browser_download_url": "https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell-7.1.3-1.centos.8.x86_64.rpm"
},
{
"url": "https://api.github.com/repos/PowerShell/PowerShell/releases/assets/33348883",
"id": 33348883,
"node_id": "MDEyOlJlbGVhc2VBc3NldDMzMzQ4ODgz",
"name": "powershell_7.1.3-1.ubuntu.20.04_amd64.deb",
"label": "",
"uploader": {
"login": "rjmholt",
"id": 7009879,
"node_id": "MDQ6VXNlcjcwMDk4Nzk=",
"avatar_url": "https://avatars.githubusercontent.com/u/7009879?v=4",
"gravatar_id": "",
"url": "https://api.github.com/users/rjmholt",
"html_url": "https://github.com/rjmholt",
"followers_url": "https://api.github.com/users/rjmholt/followers",
"following_url": "https://api.github.com/users/rjmholt/following{/other_user}",
"gists_url": "https://api.github.com/users/rjmholt/gists{/gist_id}",
"starred_url": "https://api.github.com/users/rjmholt/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/rjmholt/subscriptions",
"organizations_url": "https://api.github.com/users/rjmholt/orgs",
"repos_url": "https://api.github.com/users/rjmholt/repos",
"events_url": "https://api.github.com/users/rjmholt/events{/privacy}",
"received_events_url": "https://api.github.com/users/rjmholt/received_events",
"type": "User",
"site_admin": false
},
"content_type": "application/x-msdownload",
"state": "uploaded",
"size": 68316948,
"download_count": 2174,
"created_at": "2021-03-11T23:00:09Z",
"updated_at": "2021-03-11T23:00:11Z",
"browser_download_url": "https://github.com/PowerShell/PowerShell/releases/download/v7.1.3/powershell_7.1.3-1.ubuntu.20.04_amd64.deb"
}
],
"tarball_url": "https://api.github.com/repos/PowerShell/PowerShell/tarball/v7.1.3",
"zipball_url": "https://api.github.com/repos/PowerShell/PowerShell/zipball/v7.1.3",
"body": "## [7.1.3] - 2021-03-11\r\n\r\n### Engine Updates and Fixes\r\n\r\n- Remove the 32K character limit on the environment block for `Start-Process` (#14111)\r\n- Fix webcmdlets to properly construct URI from body when using `-NoProxy` (#14673)\r\n\r\n### General Cmdlet Updates and Fixes\r\n\r\n- Fix `PromptForCredential()` to add `targetName` as domain (#14504)\r\n\r\n### Build and Packaging Improvements\r\n\r\n<details>\r\n\r\n<summary>\r\n\r\nBump .NET SDK to 5.0.4\r\n\r\n</summary>\r\n\r\n<ul>\r\n<li>Bump .NET SDK to 5.0.4 (Internal 14775)</li>\r\n<li>Disable running markdown link verification in release build CI (#14971, #14974, #14975)</li>\r\n<li>Use template that disables component governance for CI (#14938)</li>\r\n<li>Declare which variable group is used for checking the blob in the release build (#14970)</li>\r\n<li>Add suppress for nuget multi-feed warning (#14893)</li>\r\n<li>Disable code signing validation where the file type is not supported (#14885)</li>\r\n<li>Install wget on <code>CentOS</code> 7 docker image (#14857)</li>\r\n<li>Fix install-dotnet download (#14856)</li>\r\n<li>Make universal Deb package based on deb package spec (#14681)</li>\r\n<li>Fix release build to upload global tool packages to artifacts (#14620)</li>\r\n<li>Update <code>ini</code> component version in test <code>package.json</code> (#14454)</li>\r\n<li>Add manual release automation steps and improve changelog script (#14445)</li>\r\n<li>Update markdown test packages with security fixes (#14145)</li>\r\n<li>Fix a typo in the <code>Get-ChangeLog</code> function (#14129)</li>\r\n<li>Disable global tool copy to unblock release</li>\r\n</ul>\r\n\r\n</details>\r\n\r\n[7.1.3]: https://github.com/PowerShell/PowerShell/compare/v7.1.2...v7.1.3\r\n\r\n### SHA256 Hashes of the release artifacts\r\n\r\n- powershell_7.1.3-1.debian.10_amd64.deb\r\n - 128F84AE66CD37443C72337DFEFEB586D6100FD1D125A6DC41589FFACA406EAF\r\n- powershell_7.1.3-1.debian.11_amd64.deb\r\n - 0CF96A987B82C01C3D3B1C74A7A66F399AA86547DD70564E0405D214A54D1DB5\r\n- powershell_7.1.3-1.debian.9_amd64.deb\r\n - ED11525B2991ACE03B594FED91F46AC3A5BE9948765AA8E5382EEFBF4651FEC6\r\n- powershell_7.1.3-1.ubuntu.16.04_amd64.deb\r\n - DFA2AC5B01D0734238FE971A38CBE47D453492291B9B2271CA9E0F4031367DE1\r\n- powershell_7.1.3-1.ubuntu.18.04_amd64.deb\r\n - 5D7867407FC509D45E7D2163CBE42A3C2AA1C1F03E38A35DF077E6D0D9439AAD\r\n- powershell_7.1.3-1.ubuntu.20.04_amd64.deb\r\n - ED800C0E58560D6A4F743E68083F8B46BEF29670917C250157AA2C1170A6E502\r\n- powershell-7.1.3-1.centos.8.x86_64.rpm\r\n - 11112500FC436CD8575BED59872A8328BA54232956C775DD275B06F4E91AFA31\r\n- powershell-7.1.3-1.rhel.7.x86_64.rpm\r\n - DC0BE83C7ABA8A1BE0F27D1AF682AC29F0B1B0E77B6C3BB20E5B91584C57C365\r\n- powershell-7.1.3-linux-alpine-x64.tar.gz\r\n - F291DA2E2CC29C20583017814B4C1B9E10B43D6DB9ADDB1BF0B8C1171E3A4569\r\n- powershell-7.1.3-linux-arm32.tar.gz\r\n - DB47E8DF58FA1509FCFE34BD5A351F0DF315F995B7D48F1EA8DD1F71AA0F2D5E\r\n- powershell-7.1.3-linux-arm64.tar.gz\r\n - B4ECB166EBBD7232CDF2ED3CC84D90FF1A01E62F5307EB58868697CA6CB3B4A2\r\n- powershell-7.1.3-linux-x64.tar.gz\r\n - 9F853FB8F7C7719005BD1054FA13CA4D925C519B893F439DD2574E84503E6A85\r\n- powershell-7.1.3-linux-x64-fxdependent.tar.gz\r\n - BBC21CD4F0A1AA50870965FC2A6217897A0736D73B815EA0244E8229A20D97E5\r\n- powershell-7.1.3-osx-x64.pkg\r\n - 6E889BC771463555F8639AA3B40E9D571CE365E1C442380EE361189575B27B0F\r\n- powershell-7.1.3-osx-x64.tar.gz\r\n - 5DF00EC5AE7F31248DE726921B2A3D38BDEBAAC889F97A375559B7AC43E60C56\r\n- PowerShell-7.1.3-win-arm32.zip\r\n - 3928C7BDF7B62CD6ADB19F78CA92F928B85E2099692270F55BB4FBBD0616EF74\r\n- PowerShell-7.1.3-win-arm64.zip\r\n - 1CBA41A2ECFE7745D376EFDE14499DB59496455EBCB658C743A6297AF11CED38\r\n- PowerShell-7.1.3-win-fxdependent.zip\r\n - D177C028F56982E72ECA0AF3068040035561B7DA67467976CF4579CDC0AF1B83\r\n- PowerShell-7.1.3-win-fxdependentWinDesktop.zip\r\n - 234EB61C87495A776C8E66B8A67F868AD95C876E0173A886F02E0DE0197E513F\r\n- PowerShell-7.1.3-win-x64.msi\r\n - 459642D8B6D69F643794DF8394F28191F43E5ED35472899C4F0D8424F6D1317C\r\n- PowerShell-7.1.3-win-x64.zip\r\n - 47475F1D4015704F3FB5F6D2CF61196D121ABA60C19592B04BE818317CE01039\r\n- PowerShell-7.1.3-win-x86.msi\r\n - 7CEB1203D2C4A6D7C28128C9CBC8282EAF9C237FEE238930C16382F2C0C731EC\r\n- PowerShell-7.1.3-win-x86.zip\r\n - ECFD51545084D9B791874062C39EB0C7C7DD2991265EE7F4DC5064995A614E6C\r\n"
}

其他信息详细含义请查阅 GitHub 文档,这里只关心跟软件更新相关的两个信息,一个第一级 JSON 对象的tag_nameassets数组,tag_name是当前软件包的最新发布版本,assets数组的每一个子项是不同打包方式不同操作系统平台的软件包信息,比如 Powershell v7.1.3 就有 23 个不同操作系统平台的发布软件包,上述列出的删减 JSON 的assets数组有两个软件包,一个是针对使用 dnf 软件包管理器 Linux RPM 软件包,另一个是针对使用 apt 软件包管理器的 Linux DEB 软件包,assets数组子项的browser_download_url就是软件包的实际文件下载 URL。

拥有以上关键信息,不同平台使用不同工具反序列化 GitHub REST API 返回的 JSON,就能实现软件更新和下载。

-------------本文结束感谢您的阅读-------------