풀 리퀘스트에 연결된 모든 이슈를 얻는 방법

6139 단어 githubgraphql

소개



Github API는 프로그래밍 방식으로 git 내에서 데이터에 액세스하고 데이터를 변경할 수 있는 유연성을 제공합니다. Github는 개발자에게 기존REST API과 보다 현대적인GraphQL API 상호 작용을 모두 제공합니다. 그러나 GraphQL API의 향상된 유연성으로 인해 REST에서 사용할 수 없는 일부 기능이 GraphQL에서 사용할 수 있습니다.

그래서 오늘은 Github의 GraphQL API를 사용하여 풀 리퀘스트에 연결된 모든 이슈를 찾는 방법을 살펴보겠습니다.

참고: 이 튜토리얼에서는 노드를 사용합니다. TLDR을 보려면 아래로 스크롤하십시오.

전제 조건


  • Github에서 개인용 액세스 토큰을 생성하십시오. 이것은 Github가 귀하가 어떤 사용자인지, 귀하가 요청하는 데이터에 액세스할 수 있는 권한이 있는지 확인하는 데 사용하는 개인 oAuth 토큰입니다. 없는 경우 설명서here를 사용하여 만들 수 있습니다. 다음 권한으로 토큰을 생성해야 합니다. repo , workflow , user
  • GraphQL 쿼리가 작동하는 방식에 대한 기본적인 이해가 있어야 합니다. 이 문서에서 필요한 특정 쿼리의 구조를 살펴보겠지만 해당 지식을 미리 알고 있으면 도움이 됩니다
  • .

    쿼리




    query getLinkedIssues(
      $repository: String!,
      $organizationOrOwner: String!,
      $prNumber: Int!,
      $maxIssues: Int!,
    ) {
      repository(number: $prNumber) {
        closingIssuesReference(first: $maxIssues) {
          nodes {
            number
            body
            title
          }
        }
      }
    }
    


    쿼리 분석

    query getLinkedIssues( 
      /*
        These are the params (or data points) needed to run the query
        Params with a bang operator (!) are required
    
        It includes: 
         - repository: name of the repository you're accessing
         - owner: name of the owner of the repository
         - prNumber: the number of the pull request who's issues you need 
         - maxIssues: the maximum number of issues that you would like returned
      */
      $repository: String!,
      $owner: String!,
      $prNumber: Int!,
      $maxIssues: Int!,
    ) {
      repository(number: $prNumber) {
    
        // All issues referenced in the PR with a closing prefix
        // Examples here: https://docs.github.com/en/issues/tracking-your-work-with-issues/linking-a-pull-request-to-an-issue
        closingIssuesReference(first: $maxIssues) {
    
          // Nodes represent the individual issues 
          nodes {
    
            // The data we want returned for each issue
            // Check out the Github GraphQL Explorer for a full list
            // https://docs.github.com/en/graphql/overview/explorer
            number
            body
            title
          }
        }
      }
    }
    


    요청하기



    Github의 GraphQL 클라이언트와 상호 작용할 수 있는 기능을 제공하는 Github API 클라이언트와 상호 작용하는 데 사용할 수 있는 항목a few libraries이 있습니다. 이 자습서의 목적을 위해 octokit의 노드 기반 클라이언트를 사용하는 한 가지 예를 제공합니다.

    반환하는 데이터 유형을 더 많이 제어하려면 Github's GraphQL Explorer 을 확인하십시오. 전체 API에 대한 느낌을 얻을 수 있도록 쿼리를 연습(및 실행)할 수 있는 훌륭한 놀이터입니다.

    
    import { graphql } from "@octokit/graphql";
    
    const linkedIssuesQuery = `
    query getLinkedIssues(
      $repository: String!,
      $owner: String!,
      $prNumber: Int!,
      $maxIssues: Int!,
    ) {
      repository(number: $prNumber) {
        closingIssuesReference(first: $maxIssues) {
          nodes {
            number
            body
            title
          }
        }
      }
    }
    `
    
    /* NOTE: 
    This function needs your personal access token
    in order to authorize and execute the query. 
    
    DO NOT COPY AND PASTE YOUR TOKEN DIRECTLY. 
    
    Instead, I recommend keeping the token in a 
    .env file and not committing it to your source code
    */
    
    const getIssueData = async (myToken) => {
      const issueData = await graphql({
        query: linkedIssuesQuery,
        repository: [INSERT_REPO_NAME_HERE],
        owner:[INSERT_OWNER_HERE],
        prNumber: [INSERT_PR_NUMBER_HERE],
        maxIssues: [INSERT_MAX_ISSUES_HERE],
        headers: {
          // Include a space after the word bearer
          authorization: "bearer " + myToken,
        },
      });
    }
    


    TLDR;




    query getLinkedIssues(
      $repository: String!,
      $organizationOrOwner: String!,
      $prNumber: Int!,
      $maxIssues: Int!,
    ) {
      repository(number: $prNumber) {
        closingIssuesReference(first: $maxIssues) {
          nodes {
            number
            body
            title
          }
        }
      }
    }
    

    좋은 웹페이지 즐겨찾기