本文介绍了GitHub接口:获取特定版本标签的拉流请求的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

是否可以获取与版本标签相关的拉请求列表(或仅获取编号)?


我一整天都在查看Github API文档,尝试了不同的方法,但我看不出如何才能做到这一点。

当我通过API获得提交时,我看不到拉取请求信息可用,即使拉取请求id链接在此处可用,例如:https://github.com/octokit/octokit.rb/commit/1d82792d7d16457206418850a3ed0a0230defc81(参见左上角"master"旁边的#962链接)

推荐答案

您可以使用Search API:

提取上一个标记与搜索问题(拉取请求类型)之间的提交SHA
  • 使用Get tags提取您的回购的标签列表
  • 提取您感兴趣的特定标记(版本标记名称)(&;前一个标记(如果存在))
  • 使用compare获取这两个标记之间的所有提交
  • search issues类型的拉取请求,具有特定的SHA。在这种情况下,您可以执行查询(*),所有提交都将SHA:<commit sha>连接到查询

(*)请注意,搜索查询被限制为256个字符,因此您必须拆分这些搜索API调用

使用bashcurl&;jq的示例:

#!/bin/bash

current_tag="v4.8.0"
name_with_owner="octokit/octokit.rb"
access_token="YOUR_ACCESS_TOKEN"

tags=$(curl -s -H "Authorization: Token $access_token" 
            "https://api.github.com/repos/$name_with_owner/tags")
key=$(jq -r --arg current_tag $current_tag 'to_entries | .[] | select(.value.name == $current_tag) | .key' <<< "$tags")
previous_tag=$(jq -r --arg index $((key+1)) '.[$index | tonumber].name' <<< "$tags")

echo "compare between $previous_tag & $current_tag"

commits=$(curl -s -H "Authorization: Token $access_token" 
               "https://api.github.com/repos/$name_with_owner/compare/$previous_tag...$current_tag" | 
               jq -r '.commits[].sha')


# you can have a query of maximum of 256 character so we only process 17 sha for each request
count=0
max_per_request=17
while read sha; do
    if [ $count == 0 ]; then
        query="repo:$name_with_owner%20type:pr"
    fi
    query="$query%20SHA:%20${sha:0:7}"
    count=$((count+1))
    if ! (($count % $max_per_request)); then
        echo "https://api.github.com/search/issues?q=$query"
        curl -s -H "Authorization: Token $access_token" 
            "https://api.github.com/search/issues?q=$query" | jq -r '.items[].html_url'
        count=0
    fi
done <<< "$commits"

这篇关于GitHub接口:获取特定版本标签的拉流请求的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

10-30 01:41