0
0
Lập trình
TT

Hướng dẫn công khai GitHub Action đầu tiên của bạn

Đăng vào 1 tháng trước

• 3 phút đọc

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:

Copy
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à:

Copy
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.

Copy
npm install -g @vercel/ncc

Ngay sau khi cài đặt xong, mình đã chạy câu lệnh sau để build:

Copy
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:

Copy
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:

Copy
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ặc ncc để đó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

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào