搜尋

首頁  >  問答  >  主體

如何使用 octokit 列出我組織中所有儲存庫中的開放 PR?

<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粉966335669P粉966335669452 天前630

全部回覆(2)我來回復

  • P粉107991030

    P粉1079910302023-09-02 16:21:43

    它確實支援按組織過濾。使用:

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

    回覆
    0
  • P粉713866425

    P粉7138664252023-09-02 13:30:20

    沒有直接的方法可以使用 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));

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

    回覆
    0
  • 取消回覆