Belov Solutions

Создание сценариев GitHub: настройка и интеграция

Введение

После освоения базовых функций GitHub можно настроить его под конкретные нужды команды или интегрировать с внешними сервисами. В этом разделе мы разберем использование хуков и API GitHub для кастомизации и автоматизации процессов.

Сервисы и хуки

Раздел «Webhooks and Services» в настройках репозитория позволяет подключать внешние системы. Перейдите в «Settings» и выберите вкладку «Webhooks and Services».

Сервисы: Выберите сервис, например, email, для уведомлений. Укажите адрес (например, anna.k@example.ru) и активируйте. Email будет получать уведомления при каждом push. Для интеграции с системой вроде Travis CI настройте встроенный сервис для запуска тестов.

Хуки: Для кастомной интеграции добавьте вебхук через «Add webhook». Укажите URL (например, https://myservice.com/hook) и секретный ключ. По умолчанию хук реагирует на push-события.

Пример: веб-сервис на Python с Flask для уведомления о изменениях в файле config.yml определённой ветки:

from flask import Flask, request, json
from smtplib import SMTP

app = Flask(__name__)

@app.route('/payload', methods=['POST'])
def webhook():
    data = json.loads(request.data)
    pusher = data['pusher']['name']
    branch = data['ref']
    files = [item for commit in data['commits'] for item in commit['modified']]
    if pusher == 'ekaterina' and branch == 'ref/heads/dev-branch' and 'config.yml' in files:
        with SMTP('smtp.example.com') as server:
            server.sendmail('ekaterina@example.com', 'ekaterina@example.com', 'Config changed!')
    return '', 200

Используйте консоль отладки на странице вебхука для тестирования доставок.

GitHub API

API позволяет автоматизировать действия, такие как комментирование или изменение статусов. Пример запроса без аутентификации:

$ curl https://api.github.com/users/ekaterina_nikitina

Для действий с приватным контентом используйте токен доступа из «Applications» в настройках.

Пример: комментирование задачи №5 в репозитории ekaterina_nikitina/task-manager:

$ curl -H "Content-Type: application/json" \
       -H "Authorization: token YOUR_TOKEN" \
       --data '{"body":"Отличная работа!"}' \
       https://api.github.com/repos/ekaterina_nikitina/task-manager/issues/5/comments

Изменение статуса запроса на слияние

Пример: вебхук проверяет наличие тега «Reviewed-by» в коммитах:

from flask import Flask, request, json
import requests

app = Flask(__name__)

@app.route('/payload', methods=['POST'])
def webhook():
    data = json.loads(request.data)
    repo_name = data['repository']['full_name']
    for commit in data['commits']:
        if 'Reviewed-by' in commit['message']:
            state = 'success'
            desc = 'Reviewed successfully!'
        else:
            state = 'failure'
            desc = 'Review missing.'
        sha = commit['id']
        url = f"https://api.github.com/repos/{repo_name}/statuses/{sha}"
        headers = {'Authorization': f"token {os.environ['TOKEN']}", 'Content-Type': 'application/json'}
        requests.post(url, json={'state': state, 'description': desc, 'context': 'validate/review'}, headers=headers)
    return '', 200

Статусы отображаются на странице запроса, помогая избежать слияния проблемного кода.

Заключение

Сценарии GitHub с хуками и API позволяют гибко настраивать процессы.

Отзывы

Оставить отзыв

Ваша эл. почта не будет опубликована