首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在GitHub拉出请求中查找字符串

在GitHub拉出请求中查找字符串
EN

Stack Overflow用户
提问于 2021-08-25 19:26:07
回答 2查看 996关注 0票数 0

我想构建一个bot,让您知道某个字符串(如DONT_MERGE_ME )是否出现在GitHub拉请求中,这样我就可以通过失败的检查阻止提交,并为开发人员添加一个有用的注释。

假设您已经提交了如下代码,您不想意外地与您的PR合并(例如,您正在黑客攻击)。

代码语言:javascript
运行
复制
const bar = 'some-hack-value'; // DONT_MERGE_ME

给定PR id,我想知道PR中是否还有字符串DONT_MERGE_ME。然而,

考虑到上述限制,对于给定的PR id和commit,似乎只有在PR中找到所有提交,下载差异,并对它们进行总结。

是否有一种更简单的方法来使用GitHub API来做到这一点?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-27 18:16:57

我推荐的方法是订阅pull_request事件。如果payload.actionopenedsynchronize,则为拉请求的加载差数,并在已更改的所有行中查找字符串。

您可以通过将.diff添加到任何拉请求URL,例如https://patch-diff.githubusercontent.com/raw/gr2m/sandbox/pull/194.diff,来预览拉请求的差异响应。

找到以+开头的行,并在其中查找字符串

如果使用JavaScript octokit包,则可以加载如下所示的拉请求

代码语言:javascript
运行
复制
const { data: diff } = octokit.rest.pulls.get({ owner, repo, pull_number, mediaType: { format: "diff }})

也可以查看TODO GitHub应用,它的源代码也是开源的

票数 2
EN

Stack Overflow用户

发布于 2021-08-30 01:19:03

我发现(谢谢您的提示,@Gregor),如果您传递某些标头,就会有一个GitHub API作为一个diff来获取拉请求。

我们能为回购公司的公关找到三角洲吗?

代码语言:javascript
运行
复制
const pullId = 14956; // NOTE: 73 files changed!
const repoFullname = 'eslint/eslint';
const url = `https://api.github.com/repos/${repoFullname}/pulls/${pullId}.diff`;
const diffStr = (await axios.get(url,requestConfig)).data;

然后,我们可以使用parse-diff库来解析这些内容,并过滤掉add更改,并匹配我们想要的内容更改。

代码语言:javascript
运行
复制
// Search for this word
const KEYWORD = 'Requirements';
// Analyze all files
const files = parse(diffStr);
const filesWithMatchingAdds = files.map(
    file => ({
        file: file.to, 
        adds: file.chunks.map(
            chunk => chunk.changes
                // Only look for added lines
                .filter(chunk => chunk.type === 'add')
                // That match our keyword
                .filter(chunk => chunk.content.includes(KEYWORD))
        ).flat()}) // collapse into one array
// Only files with at least one match
).filter(file => file.adds.length);

输出看起来类似于

代码语言:javascript
运行
复制
[
  {
    "file": "tests/tools/internal-rules/multiline-comment-style.js",
    "adds": [
      {
        "type": "add",
        "add": true,
        "ln": 4,
        "content": "+// Requirements"
      }
    ]
  }
]

完整的要点这里

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68928820

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档