如何使用 octokit 列出我组织中所有存储库中的开放 PR?
P粉966335669
P粉966335669 2023-09-01 19:54:24
0
2
557
<p>我想用 Javascript 编写一个脚本来查询我的组织中所有存储库中的所有开放 github PR。我可以使用此 URL 在浏览器中执行此操作:<code>https://my.github.server/pulls?q=is%3Aopen+is%3Apr+org%3Amy-org-name</code>。</p> <p>但是使用 octokit,我需要提供要搜索的存储库的名称。看起来 github API 也需要它,但正如我所说,上面的 URL 不提供存储库名称,但它工作得很好。</p> <p>文档中的开头也有 <code>/repos</code> ,而我的上面没有。我在 github API 文档中找不到我正在使用的那个。如果我尝试如上所述 <code>octokit.request( 'GET /pulls?q=...' )</code> ,我会得到 404。</p> <p>我确信有一种方法可以列出存储库并对每个存储库运行上述搜索,但我有数十个存储库,因此这可能会慢得多。有没有办法在一个请求中完成它?</p>
P粉966335669
P粉966335669

全部回复(2)
P粉107991030

它确实支持按组织过滤。使用:

await octokit.request("GET /search/issues", {
    q: `is:pr is:open org:ORGANIZATION`,
});
P粉713866425

没有直接的方法可以使用 GitHub 的 API 或 Octokit 在单个请求中获取组织内所有存储库中的所有开放 PR。 Search API 可以搜索 PR,但不支持按组织过滤。

您可以获取组织中所有存储库的列表,并使用存储库列表获取每个存储库的所有拉取请求。

示例:

const { Octokit } = require("@octokit/core");

const octokit = new Octokit({ auth: `your_auth_token` });

async function fetchAllRepos(org) {
    const repos = [];
    let page = 1;
    while (true) {
        const result = await octokit.request('GET /orgs/{org}/repos', {
            org: org,
            type: 'public',
            per_page: 100,
            page: page
        });

        if (result.data.length === 0) break;
        repos.push(...result.data);
        page++;
    }
    return repos;
}

async function fetchAllPRs(org) {
    const repos = await fetchAllRepos(org);

    const prPromises = repos.map(repo =>
        octokit.request('GET /repos/{owner}/{repo}/pulls', {
            owner: org,
            repo: repo.name,
            state: 'open'
        })
    );

    const prResults = await Promise.all(prPromises);
    const prs = prResults.flatMap(result => result.data);
    return prs;
}

fetchAllPRs('my-org-name')
    .then(prs => console.log(prs))
    .catch(err => console.error(err));

不确定在你的情况下这会有多慢。无论如何,我希望这会有所帮助。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责声明 Sitemap
PHP中文网:公益在线PHP培训,帮助PHP学习者快速成长!