0

是否可以每秒检查一次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,但到目前为止我实际上无法弄清楚如何做到这一点。

4

1 回答 1

1

默认情况下,pulls按 排序created,因此我们可以检查第 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 使用分页

根据文档:

姓名 类型 描述
每页 整数 询问 每页结果(最多 100 个)。默认值:30
整数 询问 要获取的结果的页码。默认值:1
于 2021-06-11T05:13:32.653 回答