recherche

Maison  >  Questions et réponses  >  le corps du texte

Comment répertorier les PR ouverts dans tous les référentiels de mon organisation à l'aide d'octokit ?

<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粉966335669P粉966335669452 Il y a quelques jours631

répondre à tous(2)je répondrai

  • P粉107991030

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

    Il prend en charge le filtrage par organisation. Utilisation :

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

    répondre
    0
  • P粉713866425

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

    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.

    répondre
    0
  • Annulerrépondre