Introduction

GitHub Action là một tool khá hữu ích của GitHub, nó cho phép chúng ta viết các tác vụ (actions) và kết hợp các tác vụ đó lại với nhau để tạo ra một workflow theo ý muốn. Workflow là các tiến trình tự động mà chúng ta có thể thiết lập trong repository của mình để build, test, publish package, release, hoặc deploy dự nào trên Github.

Trong phần này chúng ta sẽ chỉ tập trung vào cách sử dụng actions để chạy Rubocop, với sự hỗ trợ của Rubocop Linter ActionGitHub Checks API để hiển thị các kết quả của action ngay trên PR.

Implement

Trước tiên, chúng ta cần tạo một Rails app:

rails new devto-rubocop-linter-action-demo
cd devto-rubocop-linter-action-demo/

Sau đó là tạo workflow files:

mkdir -p .github/workflows
touch .github/workflows/rubocop.yml

Tiếp theo chúng ta sẽ thêm các config để chạy Rubocop Linter Action:

# .github/workflows/rubocop.yml

name: Rubocop

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/[email protected]
    - name: Rubocop Linter Action
      uses: andrewmcodes/[email protected]
      env:
        GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

GitHub hiểu action name của chúng ta là Rubocop, và ta muốn chạy nó trong môi trường ubuntu version mới nhất bất cứ lúc nào có action PUSH đến repo của chúng ta.

Với các step ở trên, trước tiên chúng ta dùng actions/[email protected] để checkout từ repo, sau đó chạy rubocop linter action có version là 3.0.0.rc2

Cuối cùng là khai báo biến env github token để xác thực cho các GitHub Actions, chi tiết các bạn có thể tham khảo thêm tại đây.

Bây giờ chúng ta sẽ khởi tạo repo và thực hiện push các actions lên repo mới:

git add .
git commit -m "first commit"
git remote add origin [email protected]:tuannm-0896/demo_rubocop.git
git push -u origin master

Tại giao diện GitHub, mở tab actions, ta sẽ thấy actions rubocop đang được khởi tạo: Sau một vài giây, sẽ có thông báo run succeed, đi sâu chi tiết vào commit vừa tạo, chúng ta sẽ thấy 2 action nhỏ bên trái lần lượt là buildRubocop Action Ở tab Build, ta sẽ thấy được các build logs của action, còn ở tab Rubopcop Action, ta sẽ thấy kết quả chi tiết sau khi chạy rubocop, hiện đang fail rất nhiều:

Advanced Configuration

Điều thú vị của Actions chính là việc có thể config workflow một cách tùy thích theo ý muốn. Giờ chúng ta sẽ thêm một số option khác cho action, đầu tiên, tạo Rubocop config:

touch .rubocop.yml

Sau đó add thêm 2 extensions là rubocop-performancerubocop-rails

# .rubocop.yml

require:
  - rubocop-performance
  - rubocop-rails

Tiếp theo ta sẽ tạo config file cho actions:

mkdir -p .github/config
touch .github/config/rubocop_linter_action.yml

Đây sẽ là file để chúng ta có thể add thêm các config option cho actions:

# .github/config/rubocop_linter_action.yml

rubocop_extensions:
  - 'rubocop-rails'
  - 'rubocop-performance': '1.5.1'

Sau đó checkout sang branch khác, sau đó tiến hành commit và push:

git add .
git commit -m "add rubocop and rubocop-linter-action config files"
git push origin advanced-rubocop-action-config

Tại giao diện GitHub, mở PR vừa push lên, ta sẽ thấy thông báo rubocop failing check: Mở tab Check, ta sẽ thấy xuất hiện thêm các lỗi mới do các plugins vừa được thêm vào phát hiện ra: Chi tiết hơn, chúng ta mở tab Files Changed để thấy cụ thể line bị lỗi của những file thay đổi của commit, và bên dưới là các lỗi của các file khác trong hệ thống:

Summary

Bài viết nhằm giới thiệu về GitHub Actions - một tool khá hữu ích của GitHub - và ứng dụng nó với Rubocop Linter Action. Bài viết còn nhiều hạn chế, cảm ơn các bạn đã dành thời gian theo dõi.

Nguồn: https://dev.to/andrewmcodes/run-rubocop-with-github-actions-4adp