GitLab, GitHub, Phabricator, CI/CD, боты для review
Правильные инструменты экономят часы. Автоматизируйте рутину, интегрируйте review в workflow.
Возможности:
Настройка:
# .github/branch-protection
main:
required_pull_request_reviews:
required_approving_review_count: 1
dismiss_stale_reviews: true
required_status_checks:
strict: true
contexts: [ci, lint, test]Возможности:
Настройка:
# .gitlab-ci.yml
merge_request:
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
# Settings → General → Merge request approvals
Required approvals: 1
Approvals before merge: enabled# GitHub Actions
name: PR Checks
on: [pull_request]
jobs:
lint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: pip install black flake8 mypy
- run: black --check .
- run: flake8 .
- run: mypy .
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: pip install -r requirements.txt
- run: pytest --cov=. --cov-fail-under=80
security:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- run: bandit -r .
- run: safety check✅ lint — форматирование и стиль
✅ test — тесты с coverage
✅ security — проверка уязвимостей
✅ build — сборка проекта
✅ deploy-staging — деплой на staging
| Бот | Что делает |
|---|---|
| Reviewdog | Комментирует PR с замечаниями линтеров |
| Codecov | Показывает покрытие тестами по файлам |
| Size Limit | Предупреждает о росте размера |
| Dependabot | Обновляет зависимости |
# .github/workflows/reviewdog.yml
name: Reviewdog
on: [pull_request]
jobs:
flake8:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- uses: reviewdog/action-flake8@v3
with:
github_token: ${{ secrets.GITHUB_TOKEN }}
reporter: github-pr-review
level: warningРезультат: замечания flake8 появляются как комментарии в PR.
# GitHub Actions
name: Notify Slack
on:
pull_request:
types: [opened, reviewed, merged]
jobs:
notify:
runs-on: ubuntu-latest
steps:
- uses: slackapi/slack-github-action@v1
with:
payload: |
{
"text": "New PR: ${{ github.event.pull_request.title }}",
"blocks": [{
"type": "section",
"text": {
"type": "mrkdwn",
"text": "*New PR*: ${{ github.event.pull_request.title }}\nAuthor: ${{ github.actor }}\nURL: ${{ github.event.pull_request.html_url }}"
}
}]
}
env:
SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK }}# GitHub Actions
- name: SonarQube Scan
uses: sonarsource/sonarqube-scan-action@master
env:
SONAR_TOKEN: ${{ secrets.SONAR_TOKEN }}
SONAR_HOST_URL: ${{ secrets.SONAR_HOST_URL }}Что даёт:
# .codeclimate.yml
version: "2"
checks:
argument-count:
enabled: true
config:
threshold: 4
complex-methods:
enabled: true
config:
threshold: 10
file-lines:
enabled: true
config:
threshold: 250
plugins:
duplication:
enabled: true
fixme:
enabled: trueКлючевая мысль: Настройте инструменты один раз — экономьте часы на каждом PR. CI должен блокировать мерж плохого кода автоматически.
Вопросы ещё не добавлены
Вопросы для этой подтемы ещё не добавлены.