Bagaimanakah cara saya menyenaraikan PR terbuka merentas semua repositori dalam organisasi saya menggunakan octokit?
P粉966335669
P粉966335669 2023-09-01 19:54:24
0
2
552
<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粉966335669
P粉966335669

membalas semua(2)
P粉107991030

Ia menyokong penapisan mengikut organisasi. Penggunaan:

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

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.

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!