Ruby GithubAPI:获取特定发布标签的拉取请求

Ruby GithubAPI:获取特定发布标签的拉取请求,ruby,github,github-api,pull-request,bash,curl,jq,Ruby,Github,Github Api,Pull Request,Bash,Curl,Jq,是否可以获取与发布标签相关的拉取请求列表(或仅仅是数字)? 我整天都在看Github API文档,并尝试了不同的方法,但我不知道如何才能做到这一点 当我通过API获得提交时,我看不到拉请求信息可用,即使拉请求id和链接在这里可用,例如: (请参阅左上角“主控”旁边的链接)您可以使用搜索API提取标记与上一个标记之间的提交和搜索问题(类型为pull request)之间的提交 用于提取回购协议的标记列表 提取您感兴趣的特定标记(释放标记名称)&上一个标记(释放标记,如果存在) 使用获取这两个标

是否可以获取与发布标签相关的拉取请求列表(或仅仅是数字)?


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

当我通过API获得提交时,我看不到拉请求信息可用,即使拉请求id和链接在这里可用,例如:
(请参阅左上角“主控”旁边的链接)

您可以使用搜索API提取标记与上一个标记之间的提交和搜索问题(类型为pull request)之间的提交

  • 用于提取回购协议的标记列表
  • 提取您感兴趣的特定标记(释放标记名称)&上一个标记(释放标记,如果存在)
  • 使用获取这两个标记之间的所有提交
  • 具有特定类型的pull request。在这种情况下,您可以执行查询(*),将所有提交sha连接到查询
(*)请注意,搜索查询限制为256个字符,因此您必须拆分这些搜索API调用

使用和的示例:

#/bin/bash
当前标签=“v4.8.0”
使用“owner=“octokit/octokit.rb”命名
access\u token=“您的\u access\u token”
tags=$(curl-s-H“授权:令牌$access\u令牌”\
"https://api.github.com/repos/$name_和_所有者/标签“)
key=$(jq-r--arg current_tag$current_tag'to_entries |.[]| select(.value.name=$current_tag)|。key'我在Ruby中做的:

  • 使用
    octokit
    gem
  • 仅查找前缀为
    fix
    feat
  • 目的:
代码如下所示:

require 'octokit'
Client = Octokit::Client.new(access_token: YOUR_GITHUB_TOKEN)

def getCommitsForTag(repo, tagName)
  previousTag = getPreviousTag repo, tagName
  (Client.compare repo, previousTag.name, tagName).commits
end

def getPreviousTag(repo, tagName)
  tags = Client.tags repo
  tags.each_with_index { |tag, index|
    if tag.name == tagName
      return tags[index+1]
    end
  }
end

def filterCommitsByPrefix(commits, commitPrefixArray)
  filteredArray = []
  commits.each { |commit|
    commitPrefixArray.each { |commitPrefix|
      if commit.commit.message.start_with?(commitPrefix)
        filteredArray.push(commit)
      end
    }
  }
  filteredArray
end

def getPullRequestsByCommits(commits)
  query = "SHA:"
  commits.each { |commit| 
    query += "#{commit.sha},"
  }
  Client.search_issues query
end


def getPullRequestsForTag(repo, tag)
  commitsForTag = getCommitsForTag repo, tag
  fixCommits = filterCommitsByPrefix commitsForTag, ['fix']
  featCommits = filterCommitsByPrefix commitsForTag, ['feat']
  {
    fixes: getPullRequestsByCommits(fixCommits).items,
    features: getPullRequestsByCommits(featCommits).items
  }
end

#Execute it like this:
pullRequestsForTag = getPullRequestsForTag 'octokit/octokit.rb', 'v4.8.0'

puts "Fix pull requests:"
puts pullRequestsForTag[:fixes]
puts "Feat pull requests:"
puts pullRequestsForTag[:features]

回答得很好,非常感谢!我今天会尝试一下,然后带着结果回来。