Хороший год назад это был объявлен это DEVIVEBOT интегрируется в GitHub. Эта задача скоро завершена, так как Old Devideabot («Предварительный просмотр» Devingabot «) будет закрыт 3 августа 2021 года. 1
Функцией, которая все еще отсутствует в нативной интеграции GitHub, является вариантом для автоматического слияния запросов на вытягивание DEDIGNABOT после успешного запуска CI.
Как это часто в наши дни я решил эту проблему, используя действия GitHub. Вот как я это сделал.
Прежде чем мы начнем#
1 марта 2021 г. GitHub Изменено Как разрешения работают в действиях GitHub, запускаемых Devidabot. С 1 марта Github_token
готов только.
Это означает, что любой запуск рабочего процесса, который запускается Devidebot, не может ничего изменить в вашем хранилище. Он не может добавить новые файлы и не может автоматически объединить запрос на вытягивание. (Это изменение сломало мой предыдущий подход к Auto-Merge, который проходил в том же рабочем процессе, что и мои обычные непрерывные проверки интеграции)
Рабочий процесс#
Сначала вам нужен рабочий процесс действий GitHub, который проверяет, что введенные изменения ничего не нарушают.
Этот рабочий процесс обычно запускает ваш тестовый набор или генерирует новую сборку вашего программного обеспечения.
В этой статье мы собираемся использовать мой Alfred Emoji Pack Проект в качестве примера. Это приложение PHP -консоли, которое генерирует пакет фрагментов смайликов для Альфред Анкет
Я позвонил в рабочий процесс «Интеграция» И это похоже на это:
name: Integrate on: push: branches: - main pull_request: jobs: build: name: Build runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - name: Setup PHP uses: shivammathur/setup-php@v2 with: php-version: 8.0 extension: zip, json - name: Install dependencies run: composer install --prefer-dist --no-interaction --no-suggest - name: Generate new Emoji Pack run: php app generate
Если вы новичок в действиях GitHub, этот синтаксис может выглядеть запутанным. Но не волнуйтесь, это легко понять. Приведенный выше код рассказывает Действия GitHub:
- Запустить этот рабочий процесс всякий раз, когда совершается коммит
Главный
-Брэнк или при открытии запроса на привлечение или новый коммит выполняется в отношении запроса на привлечение. - Чтобы запустить этот рабочий процесс на сервере под управлением Ubuntu.
- Установить PHP 8.0 и зависимости проекта
- И выполнить
Приложение PHP генерирует
Чтобы создать новый пакет фрагментов
Этот простой рабочий процесс гарантирует, что приложение работает, как и ожидалось. В приложении с тестовым набором Phpunit вы бы запустили Продавец/bin/phpunit
вместо Приложение PHP генерирует
Анкет Или если вы работаете в узле, вы можете запустить что -то вроде NPM Run Test
Анкет
Теперь, когда мы можем быть уверены, что ничто не сломается, когда Devideabot открывает запрос на вытяжение, мы хотим автоматически объединить его.
Для этого мы создаем новый рабочий процесс, который использует фантастический ROIDOTT/MERGE-ME Действие. Сначала создайте новый файл в .github/Workflows
называется Auto-Merge.yml
Анкет
Внутри мы добавляем следующий код:
name: Merge me! on: workflow_run: types: - completed workflows: - 'Integrate' jobs: merge-me: name: Merge me! runs-on: ubuntu-latest steps: - name: Merge me! if: ${{ github.event.workflow_run.conclusion == 'success' }} uses: ridedott/merge-me-action@v2 with: # Depending on branch prodtection rules, a manually populated # `GITHUB_TOKEN_WORKAROUND` secret with permissions to push to # a protected branch must be used. # # When using a custom token, it is recommended to leave the following # comment for other developers to be aware of the reasoning behind it: # # This must be used as GitHub Actions token does not support pushing # to protected branches. GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PRESET: DEPENDABOT_MINOR
Код прямо из примера самого действия. Но я хотел бы быстро пройти рабочий процесс и объяснить, что он делает.
on: workflow_run: types: - completed workflows: - 'Integrate'
Вначале мы говорим рабочим процессам послушать завершен
событие других рабочих процессов. Как вы можете видеть под рабочие процессы
Массив, я добавил название моего ранее упомянутого рабочего процесса «интегрировать». Это означает, что это Рабочий процесс будет запущен, когда мой «интегральный» заполняется.
steps: - name: Merge me! if: ${{ github.event.workflow_run.conclusion == 'success' }} uses: ridedott/merge-me-action@v2 with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} PRESET: DEPENDABOT_MINOR
Рядом с ядром рабочего процесса. Перед ROIDEOTT/MERGE-ME-ACTION
выполняется, мы проверяем, запускается ли «интеграция» — это вызвано это Рабочий процесс — был успешным. Это защищает нас от Auto слияния запросов Devingabot, которые нарушают наше заявление.
Поскольку в моем репозитории не используется защищенные ветви, я использую обеспечивает GitHub токена по умолчанию, используя секреты. Github_token
. (Прочтите Merge-Me-Action
Документы для получения более подробной информации о том, как использовать его с защищенными ветвями).
Предустановка
установлен на DEVIVEBOT_MINOR
. Это сообщит действию, чтобы автоматически объединить незначительные обновления зависимостей. Если вы хотите пойти по более безопасному маршруту, используйте DEVIVEBOT_PATCH
только объединить обновления зависимостей патча. (Подробнее об этой функции в документах )
И это все! Совершить и протолкнуть новый Auto-Merge.yml
Рабочий процесс для вашего репозитория GitHub, и когда появятся новые запросы на вытягивание Devidentabot, они будут автоматически объединены, если ваш тестовый набор или сборка будут успешными.
Пример обратного запроса#
Как упоминалось ранее, «интегральный» рабочий процесс взят из моего проекта «Альфред-Эмоджи-Пак». В #17 Вы находите запрос на тягу, который был создан Devidabot, а затем был автоматически объединен действиями GitHub.
Вывод#
Как вы можете видеть, добавление функции автоматического Merge в ваш репозиторий GitHub совсем не так сложно. Все, что вам нужно, — это существующий рабочий процесс, который проверяет, работает ли все в вашем приложении, и второй рабочий процесс, который «слушает» ваш первый рабочий процесс «непрерывной интеграции».
Я надеюсь, что нативная интеграция Devidebot в GitHub теперь достаточно стабилен, чтобы этот подход по -прежнему будет работать через 12 месяцев и сэкономит мне бесчисленные часы слияния запросов на притяжение.
Прежде чем я оставлю тебя, есть одна предостережение: Рабочий процесс «Auto-Merge» не будет отображаться в списке проверки запроса на вытягивание «проверки», так как рабочий процесс не запускается через pull_request
Мероприятие.
- Я узнал о окончании предварительного просмотра Deventabot через запрос на вытягивание в My Dotfiles Repository Анкет ↩
Оригинал: «https://dev.to/_stefanzweifel/auto-merge-dependabot-pull-requests-49ia»