Костылик для GitHub Action



Вот читаете вы про Statoscope, например, и видите в статье готовое решение, как прикрутить его в GitHub Actions. Чтобы полный отчёт грузился на S3, а краткий — прямо в комментарии к пулл-реквесту.



Вот, такой вот yml для воркфлоу https://github.com/statoscope/statoscope.tech/blob/main/.github/workflows/ci.yml . И вот есть в нём большой подвох, если вы прикрутите это к публичному репозиторию — в случае PR из форков GitHub не даст вам доступа к секретам. И пермишенов на публикацию комментариев не даст. Связано это с тем, что в GitHub actions в триггере





on:

pull_request:





весь код для воркфлоу берётся из текущей ветки, а, следовательно, он может быть изменён и креды утекут. Я не нашёл способа изменить поведение и заставить GitHub Actions всегда брать воркфлоу-файл из main-ветки. Получается, нужен костылик.



Костылик получается такой:



1 На пулл-реквест мы делаем нужные дела в ветке (например, собираем отчёт статоскопа)

2 Паблишим отчёт и информацию о пул-реквесте в артефакты гитхаба

3 Создаём ещё один воркфлоу. Триггером будет





on:

workflow_run:

workflows: [Наш первый воркфлоу]

types:

- completed





4 Выкачиваем наш артефакт





- name: Download Artifacts

uses: dawidd6/action-download-artifact@v3

with:

workflow: ${{ github.event.workflow_run.workflow_id }}

run_id: ${{ github.event.workflow_run.id }}



5 Этот воркфлоу запущен из main и у него есть доступ к секретам. Паблишим в S3 и пишем ссылку в комменты PR.





Дополнительно — в исходном решении избыточным выглядит mustache, достаточно взять обычный советский темплейт литерал. А для публикации отчёта в комменты PR удобно использовать https://github.com/marocchino/sticky-pull-request-comment



Ещё раз:



На пул-реквесте собираем артефакт и сохраняем его

https://github.com/datalens-tech/datalens-ui/blob/main/.github/workflows/statoscope_tests.yml#L38



На main ветке распаковываем артефакт и паблишим в S3 и комменты PR

https://github.com/datalens-tech/datalens-ui/blob/main/.github/workflows/statoscope_tests_report.yml#L19