【问题标题】:Check if a new pull request was created检查是否创建了新的拉取请求
【发布时间】:2021-06-11 04:42:45
【问题描述】:

是否可以每隔x 秒检查一次并确定是否在 github 存储库上创建了新的拉取请求,并对其执行功能(我正在使用 JavaScript 库 @octokit/rest)?

目前为止

const { Octokit } = require('@octokit/rest');

const octokit = new Octokit({
    auth: "REDACTED"
});

var data = (async () => {
    var response = await octokit.request('/repos/foo/bar/pulls?state=all');
    return response;
})();

以数据作为 github api 的响应。如何确定是否创建了新的 pr,我想出的最简单的方法是实际比较变量 data 的长度,但到目前为止我实际上无法弄清楚该怎么做。

【问题讨论】:

  • PR 的数字总是递增的。所以你可以记录最高的数字,看看现在是否有更高的数字。
  • 库中没有可以使用的内置函数吗?

标签: github-api-v3


【解决方案1】:

默认情况下,pullscreated 排序,因此我们可以检查第 0 个索引的number 属性是否大于旧的number。 (number 类似于网站上显示的#1、#4 等)。在我们等待新的 PR 期间,可能会产生多个 PR,因此我们需要过滤掉 data,这样我们就可以在之前的值之上有多个 PR。

这是基于文档:

并使用 curl 测试路线

const { Octokit } = require('@octokit/rest');

const octokit = new Octokit({
    auth: "REDACTED"
});

const getData = () => octokit.request('/repos/foo/bar/pulls?state=all');
const getLatestPRNumber = (data) => data.length === 0 ? 0 : data[0]["number"];
const getPRsAboveNumber = (data, prNumber) => data.filter(({number}) => number > prNumber)

(async () => {
    const data = await getData();
    let latestPR = getLatestPRNumber(data);
    setInterval(async () => {
        const data = await getData();
        const firstPRNumber = getLatestPRNumber(data);
        if (firstPRNumber > latestPR) {
            const newPRs = getPRsAboveNumber(data, latestPR);
            console.log(newPRs);
            latestPR = firstPRNumber;
        }
    }, 1000 * 60); // 1000ms * 60 = 60s
})();

如果创建的 PR 过多,则由于 GitHub API 使用分页,因此某些 PR 将无法访问

根据文档:

Name Type In Desc
per_page integer query Results per page (max 100). Default: 30
page integer query Page number of the results to fetch. Default: 1

【讨论】:

  • 立即退出;甚至在创建 PR 时也不起作用。
猜你喜欢
  • 1970-01-01
  • 2022-07-22
  • 2016-12-26
  • 2019-07-02
  • 1970-01-01
  • 2014-01-23
  • 2011-08-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多