Получение базовой ветки SHA по запросу извлечения в Github Action Workflow - PullRequest
1 голос
/ 23 апреля 2020

В действии GitHub по запросу извлечения мне нужно запустить некоторый код в контексте «текущего мастера», а позже повторно запустить тот же код в контексте ветви PR.

Я могу проверьте, сравните ли запрос на получение с базой, против которой он выполняется. Как мне найти SHA базовой ветви (например, текущий мастер, если PR против мастера)?

jobs:
  job_on_base:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: "${{ github.base_ref }}"
      - run: |
          # Seems like I can get it here with $(git log -1 --format="%H")
          echo "My current SHA is ... ?"

  job_on_pr:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
        with:
          ref: "${{ github.ref }}"
      - run: |
          echo "My current SHA is $GITHUB_SHA"
          echo "The BASE SHA is ?"

1 Ответ

1 голос
/ 24 апреля 2020

Это оказался вопрос git, а не действия Github. actions/checkout@v2 создает неглубокий клон --depth=1, поэтому, чтобы получить родительский PR, можно проанализировать вывод git cat-file -p как , описанный здесь . Первый (базовый) родитель может быть доступен с помощью

git cat-file -p <SHA> | awk 'NR > 1 {if(/^parent/){print $2; exit}}'

. Лучшим подходом оказалось использование параметра fetch-depth: 2. Это позволяет только одному заданию обрабатывать как запросы на извлечение, так и основные случаи слияния, а также может использоваться с HEAD^1 для перехода к родителю.

steps:
  - uses: actions/checkout@v2
    with:
      fetch-depth: 2
...