如何使用 octokit 列出我組織中所有儲存庫中的開放 PR?
P粉966335669
P粉966335669 2023-09-01 19:54:24
0
2
629
<p>我想用 Javascript 編寫一個腳本來查詢我的組織中所有儲存庫中的所有開放 github PR。我可以使用此 URL 在瀏覽器中執行此操作:<code>https://my.github.server/pulls?q=is:open is:pr org:my-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));

不確定在你的情況下這會有多慢。無論如何,我希望這會有所幫助。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板