-
Notifications
You must be signed in to change notification settings - Fork 20
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Handling external pull request by fork #805
Comments
Publish RC [RnD]Для этого workflow событие После закрытия PR и запуска Поэтом предлагаю перейти на В нашем случае после того как прошли обязательные проверки в merge-queue, происходит push в dev ботом. С учетом этого и сделана новая конфигурация. name: Publish RC
on:
push:
branches:
- dev
jobs:
publish:
name: Publish RC version
## Push от друго actor не запустит этот workflow
if: ${{ github.actor == 'github-merge-queue[bot]' }}
uses: ./.github/workflows/publish-common.yml
with:
with-update-package-lock: true
commit-message: "chore: update package-locks"
secrets:
gh_token: ${{ secrets.GH_TOKEN }}
npm_registry_token: ${{ secrets.NPM_REGISTRY_TOKEN }} NOTE: Вливаем всегда через merge-queue |
Какие workflows нужно будет адаптировать
Все эти workflows имеют запись on:
pull_request:
branches:
- dev
- master И для master нужно будет оставить как раз То есть будет on:
pull_request:
branches:
- master
pull_request_target:
branches:
- dev |
Что еще можно почитать на тему работы с https://iterative.ai/blog/testing-external-contributions-using-github-actions-secrets |
пока сложно я прочитал первую статью, из неё понял что Только я так и не понял куда оно там чекаутится и почему это безопасно?
что значит context target repository. я понял две вещи что мы можем переделать часть workflow на то что мы получаем pr через pull_request а потом делаем upload артифактов уже в другой джобе кажется это подходит для perfomance джобы не понятно мне пока как мы можем использовать еще не ясно почему у нас есть джоба про canary я понимаю нам как раз нужно использовать но кажется мы тут как раз можем воспользоваться механимзмом которые они предлагают про лейблы:
но они говорят что не безопасно ставить лейбл а потом это еще вливать все дела, тогда я предлагаю сделать следущий лайф-хак ставить label=run-ci-on-#{hashCommit} типа мы руками хотим запустить внешний пр и прописываем конкретный коммит на котором можно запустить, тогда если туда что-то докомитят то надо будет еще раз чекать и прописывать новый хэш или я понял environment решает ту же проблемы? Еще вопрос включается ли target автоматом ? в том плане мы свои пр тоже должны окать ? что в варианте с environment что в варианте с label ? или можем как-то чекать права во время запуска? или еще что? |
Прочитал https://iterative.ai/blog/testing-external-contributions-using-github-actions-secrets |
@Yeti-or @neretin-trike @kayman233 @TitanKuzmich К разговору о том как себя ведет Github CI/CD когда изменяем файлы конфигурации - В этом PR (через fork) я удалил блок с авторизацией и все же workflow запустился именно master config. То есть он не стал применять новые настройки. |
Цель
Запуск pull request созданных через fork должен корректно обрабатывать все secrets и не падать с ошибкой, что
GITHUB_TOKEN
не найден.TD;LR
Использование события
pull_request_target
без должных мер предосторожности может повлечь за собой раскрытие всех секретов неавторизованным пользователям GitHub.DOCs pull_request
GITHUB_SHA
GITHUB_REF
DOCs pull_request_target
GITHUB_SHA
GITHUB_REF
Из-за этой разницы в том на что/куда смотрит target события, в шаге с
checkout
нужно будет явно указатьref
И как раз это является потенциальным вектором атаки.
В статье Keeping your GitHub Actions and workflows secure Part 1: Preventing pwn requests подробно об этом рассказывается.
Возможные решения
Изменить подход к организации наших workflow
Полностью меняем подход к тому как мы обрабатываем внешний PR's через fork.
Исключаем workflow для таких PR где так или иначе фигурируют secrets, типа
github_token
.Например "Publish Canary" и deploy документации с песочницей.
Использование "Еnvironment" для получение approve
Добавляем ограничение на запуск для
environment === 'external'
.Переделанная конфигурация для "Publish Canary".
Внешний pull request не запустит ни один workflow в котором будут подобные ограничения.
Членам команды будут отправлены уведомления о том что нужно поставить approve на запуск workflow.
И тем самым исключаем запуск в целевом репозитории untrusted code.
The text was updated successfully, but these errors were encountered: