检查是否创建了新的拉取请求

问题描述

是否可以每 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,我想出的最简单的方法是 ofc 实际比较变量 data 的长度,但到目前为止我实际上无法弄清楚如何这样做。>

解决方法

默认情况下,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,那么一些 PR 将无法访问,因为 GitHub API 使用分页

根据文档:

名称 输入 Desc
per_page 整数 查询 每页结果(最多 100 个)。默认值:30
页面 整数 查询 要获取的结果的页码。默认值:1