簡體   English   中英

如何從給定存儲庫的 github API 獲取最新標簽值

[英]How do I get the latest tag value from the github API for a given repository

我可以使用以下命令從 GitHub api 獲取最新提交:

$ curl 'https://api.github.com/repos/dwkns/test/commits?per_page=1'

但是,生成的 JSON 不包含對我在提交時創建的標簽的任何引用。

我可以使用以下方法獲取標簽列表:

$ curl 'https://api.github.com/repos/dwkns/test/tags'

然而,生成的 JSON 雖然包含我想要的標簽名稱,但與它們的創建順序不同 - 無法判斷哪個標簽是最新的。

編輯:創建的最新標簽是LatestLatestLatest

我的問題是我需要執行哪些 API 調用才能獲取存儲庫中最新標記的名稱?

jqcurl結合使用,您可以獲得一個非常簡單的命令:

curl -s \
  -H "Accept: application/vnd.github.v3+json" \
  https://api.github.com/repos/dwkns/test/tags \
  | jq -r '.[0].name' 

輸出(截至今天):

v56

jq命令說明:

  • -r用於“raw”,避免在 jq 的輸出中使用 json 引號
  • .[0]選擇我們從 github 獲得的 json array的第一個(最新)標簽object
  • .name選擇這個最新的 json objectname屬性
#!/bin/sh
curl -s https://github.com/dwkns/test/tags |
awk '/tag-name/{print $3;exit}' FS='[<>]'

或者

#!/bin/awk -f    
BEGIN {
  FS = "[<>]"
  while ("curl -s https://github.com/dwkns/test/tags" | getline) {
    if(/tag-name/){print $3;exit}
  }
}

語義版本控制示例

注意:如果您很着急並且不需要解釋所有細節,只需跳到“解決方案”並執行命令。

此解決方案使用curlgrep來匹配最新的語義版本號。 將使用我自己的 Github 存儲庫“ pi-ap ”(一堆 bash 腳本,可將 Raspberry Pi 自動配置為無線 AP)來演示一個示例。

您可以在 CLI 上測試我給您的示例,在您對它按預期工作感到滿意后,您可以將其調整為您自己的用例。

版本控制格式構建:

由於我們使用grep來匹配版本號,因此我需要解釋它的構造。 由 2 個點分隔並以“v”開頭的 3 對整數:

vXX.XX.XX
 ^  ^  ^
 |  |  |
 |  |  Patch
 |  Minor
 Major

注意:如果一個字段只有一個數字,我會用零填充它以確保結果格式是可預測的:總是 3 對整數,由 2 個點分隔。

解決方案:

Github 用戶名: F1Linux
Github Repo 名稱: pi-ap (注意:排除“ .git ”后綴)

curl -s 'https://github.com/f1linux/pi-ap/tags/'|grep -Eo "$Version v[0-9]{1,2}.[0-9]{1,2}.[0-9]{1,2}"|sort -r|head -n1

驗證結果正確:

在瀏覽器中,轉到:

https://github.com/f1linux/pi-ap/tags

並驗證從命令返回的最新標記。

對於大多數用例,上述內容是相當可擴展的。 如果您在標記您的存儲庫時不使用此約定,只需要更改用戶和存儲庫名稱並刪除/替換“v”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM