Dùng AI

GitHub Actions: tự chạy test, tự nhận xét code bằng AI

GitHub Actions là dịch vụ tự động hóa có sẵn trong GitHub: bạn viết một tệp YAML trong thư mục .github/workflows, và mỗi khi có push hay pull request, GitHub mở một máy ảo, cài Python, chạy test rồi báo xanh hoặc đỏ ngay trên PR. Trên nền đó có thể thêm bước để AI đọc thay đổi và để lại nhận xét, còn người vẫn là người quyết định gộp.

Ý chính
  • Một workflow là một tệp YAML trong .github/workflows/. Nó khai báo khi nào chạy (on:), chạy trên máy nào (runs-on:) và các bước (steps:).
  • Theo GitHub Docs (11/11/2026), runner chuẩn do GitHub cung cấp chạy miễn phí cho kho công khai; kho riêng tư có hạn mức tính theo tiền tùy gói.
  • Cho mỗi pull request tự chạy test là cách rẻ nhất để không gộp nhầm code hỏng, kể cả code do AI viết.
  • AI review là bước thêm: đặt khóa API trong Secrets, cấp quyền tối thiểu, và coi nhận xét của AI là góp ý, không phải phê duyệt.

Bài này dựa trên GitHub Docs, README của actions/checkout và actions/setup-python, và tài liệu của claude-code-action, đọc ngày 11/11/2026. Ví dụ dùng Python và pytest; bạn nên biết pull request là gì trước, xem bài issue và pull request.

GitHub Actions là gì

GitHub Actions chạy các lệnh của bạn trên máy ảo khi có sự kiện trong kho. Các khái niệm cần nắm:

  • Workflow: một tệp YAML mô tả một quy trình tự động, đặt trong thư mục .github/workflows/ của kho.
  • Sự kiện (event): thứ kích hoạt workflow, ví dụ push, pull_request, hay chạy theo lịch.
  • Job: một nhóm bước chạy trên cùng một máy. Nhiều job chạy song song nếu không phụ thuộc nhau.
  • Runner: máy chạy job, ví dụ ubuntu-latest do GitHub cung cấp.
  • Step: một lệnh shell (run:) hoặc một action viết sẵn (uses:), như actions/checkout để lấy code về máy chạy.

Kết quả hiện ở tab Actions của kho và ở phần Checks trên trang pull request: dấu xanh là đạt, dấu đỏ là có bước thất bại, bấm vào để xem log từng dòng.

Chi phí

Trang GitHub Actions billing (11/11/2026) ghi: chạy runner chuẩn của GitHub trong kho công khai là miễn phí và không trừ vào hạn mức. Với kho riêng tư, mỗi gói có hạn mức tính bằng tiền: 12 USD mỗi tháng cho GitHub Free và 18 USD cho GitHub Pro. Docs nói rõ hạn mức này là một khoản tiền, không phải số phút cố định; số phút thực tế tùy loại máy chạy. Dự án học tập để công khai thì gần như không phải lo chi phí cho việc chạy test.

Workflow đầu tiên: tự chạy test

Giả sử dự án có một hàm chuẩn hóa dữ liệu kiểu min-max, đưa mọi giá trị về khoảng 0 đến 1, cùng bốn hàm test viết theo kiểu pytest. Trong đó có một test cho trường hợp dễ quên: mọi giá trị bằng nhau, công thức sẽ chia cho 0 nếu không xử lý riêng.

Tệp workflow chay_test.yml đặt ở .github/workflows/:

  • on: chạy khi push lên main và khi có pull request.
  • permissions: contents: read chỉ cấp quyền đọc code, đủ cho việc chạy test.
  • strategy.matrix chạy cùng bộ test trên Python 3.12 và 3.13, mỗi phiên bản một job song song.
  • Các bước: lấy code bằng actions/checkout@v7, cài Python bằng actions/setup-python@v7 (cả hai là phiên bản chính mới nhất ngày 11/11/2026 theo README), cài pytest, rồi chạy test.
# Đặt tệp này ở .github/workflows/chay_test.yml trong kho của bạn.
name: Chạy test

on:
  push:
    branches: [main]
  pull_request:

permissions:
  contents: read

jobs:
  test:
    runs-on: ubuntu-latest
    strategy:
      matrix:
        python-version: ["3.12", "3.13"]
    steps:
      - uses: actions/checkout@v7
      - uses: actions/setup-python@v7
        with:
          python-version: ${{ matrix.python-version }}
      - name: Cài thư viện
        run: python -m pip install pytest
      - name: Chạy test
        run: python -m pytest thu_chuan_hoa.py -v

Commit cả ba tệp, push lên GitHub, mở tab Actions để xem workflow chạy. Từ nay mỗi PR đều có dòng "Chạy test" trong phần Checks. Khi chạy thử trên máy với pytest, cả bốn test đều đạt; còn nếu ai đó sửa hàm và quên trường hợp mọi giá trị bằng nhau, test thứ hai báo lỗi chia cho 0 và PR hiện dấu đỏ.

Với dự án thật, thay dòng cài pytest bằng python -m pip install -r requirements.txt. Dự án AI hay có mô hình lớn; đừng để test tải mô hình nặng mỗi lần chạy, mà tách phần xử lý dữ liệu, tiền xử lý thành hàm nhỏ để test nhanh như ví dụ trên.

GitHub Actions cho dự án AI Máy chạy test, AI góp ý, người quyết định 1. Sự kiệnpush, PRon: pull_request 2. Testpytest3.12 và 3.13 3. AI reviewNhận xét PRkhóa ở Secrets 4. NgườiĐọc, quyết địnhgộp khi xanh Kho công khai: runner chuẩn miễn phí
GitHub Actions cho dự án AI 1. Sự kiệnpush, PRon: pull_request 2. Testpytest3.12 và 3.13 3. AI reviewNhận xét PRkhóa ở Secrets 4. NgườiĐọc, quyết địnhgộp khi xanh Kho công khai: runner chuẩn miễn phí
Hình 1. Khi có push hoặc pull request, GitHub Actions chạy test bằng pytest trên Python 3.12 và 3.13, có thể thêm bước AI nhận xét PR với khóa API cất trong Secrets, và cuối cùng người review đọc rồi quyết định gộp khi mọi kiểm tra đều xanh. Runner chuẩn chạy miễn phí cho kho công khai.

Khi workflow báo đỏ

Dấu đỏ không có nghĩa là GitHub hỏng; nó là thông tin. Cách đọc:

  1. Bấm vào dấu đỏ trong phần Checks của PR, hoặc mở tab Actions và chọn lần chạy thất bại.
  2. Chọn job bị đỏ (ví dụ "test (3.13)"), mở bước có dấu X. Log hiện đúng thông báo như khi bạn chạy trên máy.
  3. Nếu chỉ một phiên bản Python đỏ, lỗi thường do khác biệt giữa các phiên bản thư viện hay ngôn ngữ; nếu cả hai đều đỏ, lỗi nằm ở code hoặc test.
  4. Chạy lại đúng lệnh đó trên máy, sửa, push lên cùng nhánh; workflow tự chạy lại.

Lỗi hay gặp ở lần đầu: quên đưa tệp requirements.txt vào commit, đường dẫn tệp test sai so với gốc kho, hoặc code đọc một tệp dữ liệu chỉ có trên máy bạn. Đây chính là lợi ích của việc chạy test trên một máy sạch: những phụ thuộc ngầm như vậy lộ ra trước khi người khác gặp.

Những sự kiện khác đáng biết

Ngoài push và pull_request, hai sự kiện hữu ích cho dự án học tập:

  • workflow_dispatch: thêm nút chạy bằng tay trong tab Actions, hợp cho việc chạy đánh giá mô hình khi bạn cần.
  • schedule: chạy theo lịch viết dạng cron, ví dụ mỗi sáng thứ Hai kiểm lại xem các đường dẫn dữ liệu còn tải được không.

Với các workflow tốn nhiều thời gian như huấn luyện mô hình, nên chạy bằng tay hoặc theo lịch thay vì mỗi lần push, để không tốn hạn mức và không làm chậm PR.

Bắt buộc test xanh trước khi gộp

Chạy test thôi chưa đủ nếu vẫn bấm gộp được khi test đỏ. Trong Settings của kho, tạo quy tắc cho nhánh main (Rulesets hoặc Branch protection) và yêu cầu các kiểm tra trạng thái phải đạt trước khi gộp, chọn job "test" của workflow. Kết hợp với yêu cầu ít nhất một người review, nhánh main luôn ở trạng thái chạy được.

Thêm AI nhận xét code

Có hai hướng phổ biến:

Copilot code review. Theo GitHub Docs (11/11/2026), trong Settings, Rulesets, tạo quy tắc nhánh và chọn "Automatically request Copilot code review"; có thể bật thêm review lại khi có push mới và review cả PR nháp. Copilot chỉ được gửi review đồng ý (approve) nếu bạn bật tùy chọn riêng, và phê duyệt đó chỉ tính vào điều kiện gộp khi bật thêm một tùy chọn nữa. Docs ghi tính năng tự review PR của chính mình có ở các gói Copilot Pro, Pro+ và Max, cùng Copilot Business và Enterprise.

Một action gọi mô hình AI. Ví dụ claude-code-action của Anthropic. Hướng dẫn nhanh trong README là chạy /install-github-app từ Claude Code để cài ứng dụng GitHub và thêm secret. Tài liệu Solutions của kho có ví dụ "Automatic PR Code Review": workflow chạy khi PR được mở hoặc có commit mới (types: [opened, synchronize]), cấp quyền contents: read, pull-requests: write, id-token: write, truyền khóa qua secrets.ANTHROPIC_API_KEY, kèm lời nhắc nêu những gì cần xem (chất lượng code, lỗi tiềm ẩn, bảo mật, hiệu năng) và danh sách công cụ được phép như gh pr comment, gh pr diff.

Vài nguyên tắc an toàn khi để AI chạy trong Actions:

  • Khóa API luôn đặt trong Settings, Secrets and variables, Actions; không bao giờ viết thẳng vào tệp YAML.
  • Cấp quyền ít nhất có thể. Review chỉ cần đọc code và ghi bình luận, không cần quyền ghi vào nhánh.
  • Giới hạn công cụ AI được dùng, như ví dụ trên chỉ cho đọc diff và bình luận.
  • Cẩn thận với PR từ fork của người lạ: nội dung PR có thể chứa chữ nhằm điều khiển AI. Tài liệu claude-code-action có riêng mục cho PR từ người đóng góp bên ngoài; đọc kỹ trước khi bật.
  • AI review là góp ý. Người vẫn đọc và chịu trách nhiệm trước khi gộp; xem bài kiểm chứng việc AI làm và giới hạn quyền của agent.
Cẩn thận
  • Viết khóa API thẳng vào tệp workflow rồi push lên kho công khai.
  • Cấp permissions: write-all cho một workflow chỉ cần đọc code.
  • Có test nhưng không bắt buộc test xanh trước khi gộp.
  • Để test tải mô hình vài GB mỗi lần chạy, workflow chậm và dễ hỏng.
  • Coi nhận xét của AI là phê duyệt và gộp mà không đọc.

Câu hỏi thường gặp

GitHub Actions có miễn phí không?

Với kho công khai dùng runner chuẩn của GitHub thì miễn phí theo trang billing ngày 11/11/2026. Kho riêng tư có hạn mức hằng tháng tính bằng tiền: 12 USD với gói Free, 18 USD với gói Pro.

Tệp workflow đặt ở đâu?

Trong thư mục .github/workflows/ ở gốc kho, đuôi .yml hoặc .yaml. Mỗi tệp là một workflow.

Chạy được trên Windows hay macOS không?

Được: đổi runs-on sang windows-latest hoặc macos-latest, hoặc đưa hệ điều hành vào ma trận để chạy cả ba.

Thử workflow trên máy trước được không?

Có thể chạy các lệnh trong run: trên máy mình trước (như python -m pytest thu_chuan_hoa.py). Phần còn lại cứ push lên một nhánh thử và xem log trong tab Actions.

Học tiếp

Nếu bạn muốn học Python và AI bài bản cùng giảng viên, tham khảo khóa học AI của Big-O Coding.

Muốn học bài bản cùng giảng viên?

Khóa AI – Introduction to Machine Learning: nền tảng Máy học từ thuật toán cơ bản đến Neural Networks và LLM, học bằng Python. Học thử buổi 1 miễn phí.

Xem Khóa AI

Nguồn tham khảo

Chia sẻ: Facebook LinkedIn
Nhắn Zalo tư vấnZalo Gọi 0937 401 483