2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

GitHub API でコミットに紐づくタグを取得する

Last updated at Posted at 2020-06-14

モチベーション

  • git のコミット ID に紐づくタグの一覧を GitHub から取得したい
  • GitHub API によると
    • タグからコミット ID を取得する API はある
    • コミット ID からタグを取得する API はない
  • なんとかして後者を実現したい

手順

ここでは Bash と jq を使います。

  1. リポジトリのタグ一覧を取得する API を叩く
    https://developer.github.com/v3/repos/#list-repository-tags
  2. 一覧から当該コミット ID を含むタグのみを抽出

1. リポジトリのタグ一覧を取得する API を叩く

bash_script
# GitHub API をコール
response=$(curl -H "Authorization: token ${GITHUB_ACCESS_TOKEN}" \
                -H "Content-Type: application/json" \
                -s -XGET https://api.github.com/repos/${OWNER}/${REPO}/tags \
          )

参考: response の例

response
[
  {
    "name": "test1",
    "zipball_url": "https://github.com/octocat/Hello-World/zipball/test1",
    "tarball_url": "https://github.com/octocat/Hello-World/tarball/test1",
    "commit": {
      "sha": "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"
      "url": "https://api.github.com/repos/octocat/Hello-World/commits/c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"
    },
    "node_id": "MDM6UmVmMjAxMTcwOTQ4OnRlc3Qx"
  },
  {
    "name": "test2",
    "zipball_url": "https://github.com/octocat/Hello-World/zipball/test2",
    "tarball_url": "https://github.com/octocat/Hello-World/tarball/test2",
    "commit": {
      "sha": "c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"
      "url": "https://api.github.com/repos/octocat/Hello-World/commits/c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc"
    },
    "node_id": "MDM6UmVmMjAxMTcwOTQ4OnRlc3Q"
  },
  {
    "name": "test3",
    "zipball_url": "https://github.com/octocat/Hello-World/zipball/test3",
    "tarball_url": "https://github.com/octocat/Hello-World/tarball/test3",
    "commit": {
      "sha": "762941318ee16e59dabbacb1b4049eec22f0d303"
      "url": "https://api.github.com/repos/octocat/Hello-World/commits/762941318ee16e59dabbacb1b4049eec22f0d303"
    },
    "node_id": "MDM6UmVmMjAxMTcwOTQ4OnRlc3Qz"
  }
]

2. 一覧から当該コミット ID を含むタグのみを抽出

bash_script
# コミット ID を指定
COMMIT_SHA='c5b97d5ae6c19d5c5df71a34c7fbeeda2479ccbc'

# レスポンスからコミットに紐づくタグ JSON のみを取得
tag_object=$(echo -e "$response" | jq -r ".[] | select(.commit.sha == \"$COMMIT_SHA\")")
[[ -z $tag_object ]] && echo "No tag is found. response = $response" && exit 0

# タグ名だけを抽出して JSON の配列に整形して返す
echo -e "$tag_object" | jq '. | .name' | jq -s

実行結果

実行結果
[
  "test1",
  "test2"
]

メモ

  • 全タグを取得してしまっているのであまりエコではない。もっといい方法はないものか。
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?