Эффективные методы фильтрации запросов на извлечение GitHub, проходящих все проверки

При работе с репозиториями на GitHub запросы на включение (PR) играют решающую роль в совместной работе и проверке кода. Крайне важно фильтровать ЗП, прошедшие все проверки, с указанием соответствия предлагаемых изменений требуемым стандартам. В этой статье мы рассмотрим несколько методов и приведем примеры кода для фильтрации запросов GitHub, проходящих все проверки, что упростит процесс проверки и обеспечит качество кода.

Методы фильтрации запросов GitHub, проходящих все проверки:

Метод 1: GitHub REST API
GitHub REST API предоставляет конечные точки для получения информации о PR. Чтобы отфильтровать запросы на запросы, проходящие все проверки, вы можете использовать конечную точку pullsвместе с параметром фильтра status. Вот пример использования GitHub API v3 в Python:

import requests
repo_owner = 'owner'
repo_name = 'repository'
access_token = 'your_access_token'
url = f'https://api.github.com/repos/{repo_owner}/{repo_name}/pulls?state=open&status=success'
headers = {'Authorization': f'token {access_token}'}
response = requests.get(url, headers=headers)
prs = response.json()
for pr in prs:
    print(pr['number'], pr['title'])

Метод 2: API GitHub GraphQL
API GitHub GraphQL обеспечивает большую гибкость при запросе PR. Вы можете использовать поле pullRequestsи фильтровать на основе полей checkSuitesи conclusion. Вот пример использования GitHub GraphQL API в JavaScript:

const fetch = require('node-fetch');
const repoOwner = 'owner';
const repoName = 'repository';
const accessToken = 'your_access_token';
const query = `
  query {
    repository(owner: "${repoOwner}", name: "${repoName}") {
      pullRequests(states: OPEN, first: 10) {
        nodes {
          number
          title
          checkSuites(last: 1) {
            nodes {
              conclusion
            }
          }
        }
      }
    }
  }
`;
const url = 'https://api.github.com/graphql';
const headers = {
  'Authorization': `Bearer ${accessToken}`,
  'Content-Type': 'application/json',
};
fetch(url, {
  method: 'POST',
  headers: headers,
  body: JSON.stringify({ query: query }),
})
  .then(response => response.json())
  .then(data => {
    const prs = data.repository.pullRequests.nodes;
    prs.forEach(pr => {
      const checkConclusion = pr.checkSuites.nodes[0].conclusion;
      if (checkConclusion === 'SUCCESS') {
        console.log(pr.number, pr.title);
      }
    });
  });

Метод 3: Рабочий процесс действий GitHub
Вы можете использовать действия GitHub для создания рабочего процесса, который автоматически фильтрует запросы на запросы, проходящие все проверки, и уведомляет соответствующие стороны. Вот пример конфигурации YAML рабочего процесса:

name: Filter PRs Passing All Checks
on:
  pull_request:
    types:
      - opened
      - synchronize
jobs:
  filter-prs:
    runs-on: ubuntu-latest
    steps:
      - name: Check PR status
        id: check-status
        uses: actions/github-script@v5
        with:
          script: |
            const pr = context.payload.pull_request;
            const checkRuns = await github.checks.listForRef({
              owner: pr.base.repo.owner.login,
              repo: pr.base.repo.name,
              ref: pr.head.sha
            });
            const allChecksPassing = checkRuns.data.check_runs.every(run => run.conclusion === 'success');
            if (allChecksPassing) {
              console.log(`PR #${pr.number} is passing all checks.`);
              core.setOutput('allChecksPassing', 'true');
            } else {
              console.log(`PR #${pr.number} has failing checks.`);
              core.setOutput('allChecksPassing', 'false');
            }
      - name: Notify on Slack
        if: steps.check-status.outputs.allChecksPassing == 'true'
        uses: rtCamp/action-slack-notify@v2
        with:
          status: 'success'
          text: 'All checks passed. Ready for review!'
          channel: '#pull-requests'
          username: 'GitHub Actions'

Фильтрация запросов GitHub, прошедших все проверки, имеет решающее значение для эффективной проверки кода и поддержания его качества. В этой статье мы рассмотрели различные методы достижения этой цели, включая GitHub REST API, GitHub GraphQL API и рабочие процессы GitHub Actions. Внедрив эти методы, вы сможете оптимизировать процесс разработки, гарантируя, что на рассмотрение будут рассматриваться только те запросы на запрос, которые соответствуют необходимым стандартам.