簡體   English   中英

在 Github 操作中獲取提交 SHA

[英]Get commit SHA in Github actions

在 Github 操作中,您可以使用${GITHUB_SHA}獲取提交 SHA,這是默認的環境變量。 . 但是,這個提交 SHA 似乎是一個合並提交?。 這不等於 PR 的 Github UI 上顯示的提交 SHA? 關於如何獲取 PR 中顯示的 SHA(在 Github UI 上)有什么想法嗎?

了解會發生什么

參考: Github 社區帖子weide-zhou(Github 合作伙伴)的回答。

當您可以創建拉取請求時,github 將執行基於假合並分支的工作流: refs/pull/:prNumber/mergemerge_commit_sha在 base 或 head 分支上不存在,但指向該代理合並提交,並且有是一個可合並的鍵,用於顯示測試提交的狀態。

因此,這里的github.sha代表實際的合並提交。

Github 變量

提示:您可以使用以下步驟打印GitHub variables

- name: Show GitHub context
  env:
    GITHUB_CONTEXT: ${{ toJson(github) }}
  run: echo "$GITHUB_CONTEXT"

看起來你在這里想要的是${{ github.event.pull_request.head.sha }}值。

pull_request的情況下,最新提交的哈希值可以在${{ github.event.pull_request.head.sha }}變量中找到,而${{ github.sha }}指的是 PR 合並提交。

請注意,如果已為 fork 存儲庫打開github.event.pull_request ,則github.event.pull_request變量將為空(不知道這是錯誤還是他們正在處理的問題)。

這不是問題的直接答案,但是當我尋找獲取 SHA 的通用解決方案(無論是push還是pull_request )時,谷歌向我提出了這個問題,因此我的回答可能對某人有所幫助。

- name: Setup Environment (PR)  
  if: ${{ github.event_name == 'pull_request' }}  
  shell: bash  
  run: |  
    echo "LAST_COMMIT_SHA=${{ github.event.pull_request.head.sha }}" >> ${GITHUB_ENV}  
- name: Setup Environment (Push)  
  if: ${{ github.event_name == 'push' }}  
  shell: bash  
  run: |  
    echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV}

所以現在我們可以使用 ENV 中的LAST_COMMIT_SHA來獲取最后一次提交的 SHA。 如果我們在多個工作流程中需要它,我們可以將這些步驟放在自定義操作中

# .github/actions/prepare/action.yml
name: 'Preparation'
description: ''
runs:
  using: "composite"
  steps:
    - name: Setup Environment (PR)  
      if: ${{ github.event_name == 'pull_request' }}  
      shell: bash  
      run: |  
        echo "LAST_COMMIT_SHA=${{ github.event.pull_request.head.sha }}" >> ${GITHUB_ENV}  
    - name: Setup Environment (Push)  
      if: ${{ github.event_name == 'push' }}  
      shell: bash  
      run: |  
        echo "LAST_COMMIT_SHA=${GITHUB_SHA}" >> ${GITHUB_ENV}

並將其稱為每個工作流程中的第一步

# .github/workflows/ci.yml
# ...
    steps:
      - name: Checkout Code
        uses: actions/checkout@v3
      - name: Prepare
        uses: ./.github/actions/prepare
# ...
      - name: Set build tag
        shell: bash
        run: |
          echo "BUILD_TAG=${LAST_COMMIT_SHA:0:7}" >> $GITHUB_ENV

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM