При работе с репозиториями на 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. Внедрив эти методы, вы сможете оптимизировать процесс разработки, гарантируя, что на рассмотрение будут рассматриваться только те запросы на запрос, которые соответствуют необходимым стандартам.