cari

Rumah  >  Soal Jawab  >  teks badan

Bagaimanakah cara saya menyenaraikan PR terbuka merentas semua repositori dalam organisasi saya menggunakan octokit?

<p>Saya mahu menulis skrip dalam Javascript untuk menanyakan semua PR github terbuka dalam semua repositori dalam organisasi saya. Saya boleh melakukannya dalam penyemak imbas menggunakan URL ini: <code>https://my.github.server/pulls?q=is%3Aopen+is%3Apr+org%3Amy-org-name</code> </p> <p>Tetapi menggunakan octokit, saya perlu memberikan nama repositori untuk dicari. Nampaknya API github memerlukannya juga, tetapi seperti yang saya katakan, URL di atas tidak memberikan nama repositori, tetapi ia berfungsi dengan baik. </p> <p>Dokumen itu juga mempunyai <code>/repos</code> pada mulanya, tetapi saya tidak mempunyainya di atas. Saya tidak dapat mencari yang saya gunakan dalam dokumentasi API github. Jika saya mencuba <code>octokit.request( 'GET /pulls?q=...' )</code> </p> <p>Saya pasti ada cara untuk menyenaraikan repositori dan menjalankan carian di atas pada setiap satu, tetapi saya mempunyai berpuluh-puluh repositori jadi ini mungkin akan menjadi lebih perlahan. Adakah terdapat cara untuk melakukannya dalam satu permintaan? </p>
P粉966335669P粉966335669495 hari yang lalu675

membalas semua(2)saya akan balas

  • P粉107991030

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

    Ia menyokong penapisan mengikut organisasi. Penggunaan:

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

    balas
    0
  • P粉713866425

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

    Tiada cara langsung untuk menggunakan API GitHub atau Octokit untuk mendapatkan semua PR terbuka dalam semua repositori dalam organisasi dalam satu permintaan. API Carian boleh mencari PR, tetapi tidak menyokong penapisan mengikut organisasi.

    Anda boleh mendapatkan senarai semua repositori dalam organisasi anda dan dapatkan semua permintaan tarik untuk setiap repositori menggunakan senarai repositori.

    Contoh:

    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));

    Tidak pasti betapa lambatnya keadaan ini dalam kes anda. Bagaimanapun, saya harap ini membantu.

    balas
    0
  • Batalbalas