Hướng dẫn công khai GitHub Action đầu tiên của bạn
Trong hành trình tìm hiểu và xây dựng mã nguồn mở, mình đã quyết định thử sức viết một GitHub Action nhỏ. Bài viết này sẽ chia sẻ những trải nghiệm từ những bước khởi đầu đến khi mình thành công công khai Action lên GitHub Marketplace. Hy vọng rằng nội dung này sẽ giúp ích cho những ai đang có ý định làm điều tương tự.
Giới thiệu
Khi bắt đầu, mục tiêu của mình là viết mã cho Action để đảm bảo rằng nó hoạt động đúng về mặt chức năng. Tuy nhiên, để có thể chia sẻ Action lên GitHub Marketplace, mình cần chuẩn bị một số thứ sau:
- Cấu hình workflow: Tạo một file
.github/workflows
để định nghĩa cách thức chạy Action. - Quản lý dependencies: Do mã của mình viết bằng JavaScript và sử dụng một số gói bên ngoài, mình cần có file
package.json
. - Mô tả Action: Viết file
action.yaml
để cung cấp thông tin chi tiết về Action mà mình muốn công khai.
Sau khi thực hiện kiểm tra và sửa lỗi, cuối cùng GitHub Action của mình đã chạy ổn định. Mình đã tiến hành tạo bản phát hành (release).
Một điều thú vị là mình thấy xuất hiện thông báo cảnh báo trong repo:
Ban đầu, mình nghĩ rằng mình đã hoàn thành, nhưng khi thử cài đặt Action vào một dự án khác để sử dụng, mình đã gặp phải một lỗi:
jobs:
review:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
steps:
- name: Review the code with Gemini
uses: bunheree/gemini-review@v1.0.0
...
Lỗi xuất hiện ngay lúc này, cụ thể là:
ERR_MODULE_NOT_FOUND(packageName, fileURLToPath(base), null)
^
Error [ERR_MODULE_NOT_FOUND]: Cannot find package '@actions/core'
Sau khi nghiên cứu, mình hiểu rằng lỗi này liên quan đến việc thiếu package @actions/core
trong thư mục /node_modules
. Đây là một lỗi thường gặp khi công bố GitHub Actions.
Nguyên nhân là do mã nguồn của bạn chưa được bundle.
Cách khắc phục
Bundling Action
Để sửa lỗi này, mình cần sử dụng một công cụ bundler như esbuild
hoặc ncc
để tạo ra một file JavaScript bao gồm tất cả các dependencies. Và mình đã chọn sử dụng @vercel/ncc
cho nhiệm vụ này.
npm install -g @vercel/ncc
Ngay sau khi cài đặt xong, mình đã chạy câu lệnh sau để build:
ncc build index.js --out dist
Sau khi thực hiện build, một thư mục bundling cho Action sẽ được tạo ra.
Kiểm tra lại file action.yaml
Trước đó, mình đã định nghĩa file chính là index.js
, nhưng giờ đây sau khi bundling xong, mình cần cập nhật lại thành dist/index.js
. Mình đã kiểm tra và sửa đổi lại cài đặt cho file action.yaml
như sau:
runs:
using: "node20"
main: "dist/index.js"
Lưu ý
Sau khi hoàn tất tất cả các cài đặt, đừng quên phát hành phiên bản mới cho GitHub Action của bạn, lúc này bạn đã có thể sử dụng GitHub Action ở những repo khác:
uses: bunheree/gemini-review@v1.0.2
Tóm tắt
Tổng kết lại, dưới đây là một số cài đặt và lưu ý quan trọng khi bạn muốn công khai GitHub Action:
- Cấu hình workflow: Tạo file
.github/workflows
để định nghĩa cách thức chạy Action. - Quản lý dependencies: Sử dụng file
package.json
cho các gói bên ngoài. - Mô tả Action: Viết file
action.yaml
để cung cấp thông tin chi tiết về Action. - Bundling Action: Sử dụng công cụ như
esbuild
hoặcncc
để đóng gói mã nguồn.
Nếu bạn quan tâm, hãy tham khảo GitHub Action mình vừa xây dựng tại đây: github.com/marketplace/actions/review-pull-request-auto
Kết thúc
Chúc các bạn code vui vẻ! 👩🏼💻
Tác giả: bunhere.com
Mình luôn mong nhận được phản hồi về bài viết của mình, vì vậy hãy cho mình biết suy nghĩ của bạn nhé. ❤️
source: viblo