Передайте информацию о проверке в сценарии действий на github

#github #github-actions

Вопрос:

У меня есть собственный бегун на github, который запускает скрипт python. Этот скрипт python запускает сценарий оболочки bash на другой машине, и я думаю, что могу передать аргументы любому сценарию. Прямо сейчас я настроил его для клонирования main ветви моего репозитория, или я могу передать ему аргумент, чтобы проверить другую ветвь. Это отлично подходит для тестирования при выдаче тегов.

Я хочу настроить это так, чтобы он проверял код в a pull_request . pull_request S поступают из разветвлений репозитория, а не из ветвей внутри репозитория. Я понимаю, что SHA не будет доступен в репо, потому что он существует только на развилке, поэтому я не могу сделать что-то вроде

 git clone <URL>.FMS.git amp;amp; cd FMS amp;amp; git merge $GITHUB_SHA
 

Как мне передать информацию из вилки и ветви/SHA вилки для слияния в main ветку в репозитории? затем я могу настроить свой скрипт на выполнение (?)

 git clone <URL>/FMS.git amp;amp; cd FMS amp;amp; git pull <FORK-URL>/FMS.git $GITHUB_SHA

 

Вот как в настоящее время настроен мой рабочий процесс

 on: pull_request
jobs:
   pw:
    runs-on: [self-hosted, pwp]
    strategy:
      fail-fast: false
      max-parallel: 2
      matrix:
        include:
                - runname: FMS with intel 18
                  runscript: python3 /home/pw/storage/pw_api_python/FMStestStartClusters.py cluster
                - runname: FMS with intel 2021 container
                  runscript: python3 /home/pw/storage/pw_api_python/FMSintel21StartClusters.py cluster_two
    steps:
                - name: FMS make check
                  env:
                          RUNNAME: ${{ matrix.runname }}
                          RUNSCRIPT: ${{ matrix.runscript }}
                  run: $RUNSCRIPT
 

Ответ №1:

Я хочу настроить это так, чтобы он проверял код в pull_request. Запросы pull_request поступают из ветвей репозитория, а не из ветвей внутри репозитория.

Эта часть верна, но:

Я понимаю, что SHA не будет доступен в репо, потому что он существует только на развилке

… эта часть не является: акт выполнения запроса на вытягивание на GitHub переносит 1 фиксацию PR в целевой репозиторий. Вы должны иметь возможность получить к ним доступ по хэш-идентификатору, а также использовать refs/pull пространство имен для доступа к ним.

Я не знаю, как все это связано с действиями на GitHub, но если бы вы хотели поместить эти коммиты в свой собственный клон на своем ноутбуке, вы бы запустили:

 git fetch origin refs/pull/123/head:refs/heads/pr123
 

например, и у вас внезапно появилась бы ветка pr123 на вашем ноутбуке, содержащая эти коммиты. (Предполагается origin , что это удаленное имя вашего репозитория на GitHub, для которого был сделан PR.)


1 Я полагаю, что это своего рода виртуализированные операции, использующие внутренний механизм альтернатив Git, хотя на самом деле я никогда не работал на самих GitHub.

Комментарии:

1. Это было очень полезно. Я смог передать переменную $GITHUB_REF вместо $GITHUB_SHA, а затем извлечь ссылку (ваши ссылки/заголовки/pr123) и объединить ее с git merge FETCH_HEAD . Это именно то, что мне нужно было сделать. Спасибо.