微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决检查是否创建了新的拉取请求

是否可以每 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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。