Comment répertorier les PR ouverts dans tous les référentiels de mon organisation à l'aide d'octokit ?
P粉966335669
P粉966335669 2023-09-01 19:54:24
0
2
553
<p>Je souhaite écrire un script en Javascript pour interroger tous les PR github ouverts dans tous les référentiels de mon organisation. Je peux le faire dans le navigateur en utilisant cette URL : <code>https://my.github.server/pulls?q=is%3Aopen+is%3Apr+org%3Amy-org-name</code> </p> <p>Mais en utilisant octokit, je dois fournir le nom du référentiel à rechercher. Il semble que l'API github l'exige également, mais comme je l'ai dit, l'URL ci-dessus ne fournit pas le nom du référentiel, mais cela fonctionne très bien. </p> <p>Le document a également <code>/repos</code> au début, mais le mien ne l'a pas ci-dessus. Je ne trouve pas celui que j'utilise dans la documentation de l'API github. Si j'essaye <code>octokit.request( 'GET /pulls?q=...' )</code> comme ci-dessus, j'obtiens un 404. </p> <p>Je suis sûr qu'il existe un moyen de lister les référentiels et d'exécuter la recherche ci-dessus sur chacun d'eux, mais j'ai des dizaines de référentiels, donc ce sera probablement beaucoup plus lent. Existe-t-il un moyen de le faire en une seule requête ? </p>
P粉966335669
P粉966335669

répondre à tous(2)
P粉107991030

Il prend en charge le filtrage par organisation. Utilisation :

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

Il n'existe aucun moyen direct d'utiliser l'API de GitHub ou Octokit pour obtenir tous les PR ouverts dans tous les référentiels d'une organisation en une seule requête. L'API de recherche peut rechercher des PR, mais ne prend pas en charge le filtrage par organisation.

Vous pouvez obtenir une liste de tous les référentiels de votre organisation et obtenir toutes les demandes d'extraction pour chaque référentiel à l'aide de la liste des référentiels.

Exemple :

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

Je ne sais pas à quel point cela serait lent dans votre cas. Quoi qu'il en soit, j'espère que cela aide.

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!