Skip to main content

[TIL] GitHub Action actions/checkout mặc định checkout merge commit với pull_request

GitHub Action @actions/checkout xuất hiện ở gần như mọi GitHub Action workflow.

Khi người dùng tạo Repository, GitHub sẽ gợi ý bằng 1 nút bấm trên giao diện để add GitHub action phù hợp với ngôn ngữ lập trình dùng chính trong repo. Ví dụ Python https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

# This workflow will install Python dependencies, run tests and lint with a single version of Python
# For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python

name: Python application

on:
  push:
    branches: [ "main" ]
  pull_request:
    branches: [ "main" ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4
# ...

Nó có vẻ làm những gì người dùng mong đợi: chứa các file code ở branch đã push lên, vì vậy, không mấy ai thực sự xem doc/code hay biết nó thực sự làm gì.

Thậm chí bấm vào GitHub repo https://github.com/actions/checkout dòng đầu viết:

This action checks-out your repository under $GITHUB_WORKSPACE, so your workflow can access it. Only a single commit is fetched by default, for the ref/SHA that triggered the workflow. Set fetch-depth: 0 to fetch all history for all branches and tags. Refer here to learn which commit $GITHUB_SHA points to for different events.

và nếu người dùng chịu bấm vào link "here" sẽ thấy 1 bảng tương đối khó hiểu.

  • Action này khi được trigger bằng event push - tức người dùng push lên, trong ví dụ trên, sẽ chỉ trigger nếu người dùng push lên main, action sẽ checkout branch main tại 1 commit mới nhất được push lên - HEAD).
  • Còn khi được trigger bằng event pull_request - tức người dùng tạo/thay đổi pull request (push lên branch cũng tính là 1 synchronize event của pull_request) thì action sẽ checkout merge commit.

Theo tài liệu here nói trên:

Last merge commit on the GITHUB_REF branch PR merge branch refs/pull/PULL_REQUEST_NUMBER/merge

Đọc HẾT tài liệu README checkout v4 có viết

Checkout pull request HEAD commit instead of merge commit

sẽ thấy có viết mặc định action checkout merge commit, ví dụ như sau:

  commit ab735464a83c5cd8efbd09888fce2168c8f5e49b
Merge: 3c771ec 80992e0
Author: GitHub user
Date:   Wed May 21 09:45:29 2025 +0000

    Merge 80992e095099699f3191c038070742a3ef78e435 into 3c771ec7abd340d7382bd4129a0c62a1be3e7c66

Đây là commit sau khi merge branch tạo Pull Request (còn gọi là pull request head) vào merge target (còn gọi là pull request base, thường là main hay master branch).

Merge commit này chứa thông tin về quá trình merge, tức có thể biết các file nào đã thay đổi (nhưng không biết nội dung thay đổi), nên có thể dùng để tìm các file đã thay đổi chỉ cần fetch-depth 2 commit mới nhất:

- name: Checkout
  uses: actions/checkout@v3
  with:
     fetch-depth: 2
- name: Get changes
  run: git diff --name-only HEAD^1 HEAD

Kết luận

Nhiều lúc không cần dùng tới https://github.com/tj-actions/changed-files

Tham khảo

https://stackoverflow.com/a/74268200/807703

Hết.

HVN at https://pymi.vn and https://www.familug.org.

Ủng hộ tác giả 🍺

Comments

Popular posts from this blog

Tài liệu và hướng dẫn học Python

Để tiết kiệm thời gian, tốt nhất là đi học PyMI Updated: 130617 Sau đây là các tài liệu khuyên dùng: Vì nhiều lý do, nên học python2.7 tại thời điểm hiện tại (giờ là tháng 6/2013 - muốn biết tại sao thì tự tìm hiểu) python 3.5+ (giờ là tháng 2/2017) Chuẩn bị: 1. biết bật tắt máy 2. biết cài python 3. tập gõ 10 ngón - gõ 2 ngón hay 1 ngón cũng không sao, nhưng 10 ngón là cách dễ nhất để gõ nhanh nhất. Tài liệu - Nên dùng tài liệu tại trang chủ của Python làm chính, tham khảo thêm các tài liệu khác tại http://www.familug.org/2016/12/free-ebook.html Căn bản, mới học 1.1 Python PyMI.vn https://pymi.vn/tutorial/ 1.2. Python offical tutorial kết hợp làm bài tập trên HackerRank  (đề bài bằng tiếng Anh, nhưng Google translate 1 lúc cũng ra vì có nhiều ví dụ mẫu đi kèm). Học viên của Pymi.vn có rất nhiều học viên đã tự học với Learn Python the hard way nhưng chưa thấy ai thành công cả. Hai link dưới nên đọc sau khi đã nắm được những phần cơ bản của ngôn ngữ pytho...

The PyMiers

New FAMILUG