+11

Renovate Bot - Trợ thủ đắc lực tự động cập nhật dependency

Hello hello, xin chào tất cả anh em. Anh em nào lỡ vào đây rồi thì comment chào nhau một cái cho vui vẻ nhé. Các cụ đã bảo rồi: Lời chào cao hơn mâm cỗ mà! 😄

Ngày hôm nay, mình sẽ giới thiệu tới mọi người một công cụ mà hiện tại mình luôn luôn tích hợp nó vào trong các dự án open source của mình trên GitHub. Đó chính là Renovate Bot. Vai trò của nó đó là giúp cảnh báo và tự động hóa việc cập nhật dependencies cho dự án. Hãy cùng mình tìm hiểu nó ngay nhé!

Get goooo....! 👊👊👊

Giới thiệu về Renovate Bot

Trong thế giới phát triển phần mềm ngày nay, việc duy trì các dự án mã nguồn mở (opensource) trở nên ngày càng phức tạp khi dự án ngày một lớn. Một phần quan trọng của việc này là đảm bảo rằng các phần mềm và thư viện bên thứ ba (third-party) mà dự án của bạn sử dụng luôn được cập nhật để đảm bảo tính bảo mật và hiệu suất tốt nhất. Đây là một công việc đơn giản nhưng lại vô cùng hệ trọng.

Renovate Bot là một công cụ mạnh mẽ giúp tự động hóa quá trình này bằng cách tự động kiểm tra và cập nhật các dependencies của dự án open source. Bạn không cần phải cất công theo dõi xem hôm nay có dependencies nào có version mới, hay một package đã có bản vá lỗi bảo mật hay chưa, hoặc version mới phát hành đó liệu có tương thích để upgrade được hay không. Renovate Bot sẽ làm tất cả điều này thay bạn.

Lợi ích của Renovate Bot

Renovate Bot giúp tiết kiệm thời gian và công sức trong việc duy trì dự án opensource bằng cách tự động thực hiện một số công việc sau:

  • Kiểm tra bản cập nhật: Renovate Bot tự động kiểm tra và cập nhật các dependencies mới, giúp bạn tránh việc phải làm điều này thủ công như đã trình bày ở trên. Nói cách khác, nó sẽ giúp bạn tiết kiệm được thời gian. Hay lại nói cách khác nữa là tiết kiệm tiền. =))
  • Kiểm tra tích hợp: Bot kiểm tra xem các phiên bản cập nhật có tương thích với dự án hiện tại hay không, giúp tránh các vấn đề tương thích không mong muốn. Tự động tạo Issue và PR tương ứng cho mỗi dependencies được đề xuất.
  • Tự động tạo report: Renovate Bot có khả năng report tự động về các thay đổi, các bản cập nhật và tình trạng của các dependencies trong dự án.

Ngoài ra, bạn có thể tùy chỉnh cách Renovate Bot hoạt động theo các quy tắc riêng của dự án.

Hướng dẫn tích hợp Renovate Bot trên GitHub

Dưới đây là hướng dẫn cơ bản về cách sử dụng Renovate Bot cho dự án mã nguồn mở trên GitHub.

1. Cài đặt Renovate Bot

  • Đầu tiên, cần đăng nhập vào tài khoản GitHub của bạn.
  • Truy cập vào trang https://github.com/apps/renovate, đây là trang chính thức của Renovate. Nếu không nhớ bạn có thể search google với từ khóa renovate app.
  • Nhấn vào nút Install hoặc Configure để tiến hành chọn repository mà bạn muốn cấp quyền để cài đặt Renovate vào. Chỉ chọn cái nào cần tích hợp Renovate.

image.png image.png

  • Sau khi chọn repo, bạn sẽ được điều hướng tới trang dịch vụ của Renovate, bạn tiến hành nhấn Sign In, rồi chọn Renovate. Sau đó hoàn thành việc submit form registration theo hướng dẫn để hoàn tất đăng ký nhé.

image.png

2. Cấu hình renovate.json

  • Bây giờ, bạn setup xong 80% rồi. Giờ nhấn nút Start setup Wizard để chọn chế độ quét. Ở bước này có 3 options: Do nothing, Silent Scan và Interactive Mode như trong hình dưới đây. Mình sẽ chọn Interactive Mode để Renovate tự động hết cả quá trình scan, tạo issue, tạo PR.

image.png

image.png

  • Cuối cùng, mình chọn Onboarding Pull Requests, Renovate sẽ tự quét repo và generate file cấu hình cơ bản.

image.png

image.png

Trong file renovate.json, bạn có thể thiết lập thêm các tùy chọn cấu hình cho Renovate Bot để phù hợp với dự án. Trong ví dụ trên, extends là tùy chọn sử dụng cấu hình mặc định.

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ]
}

3. Thực hiện cập nhật đầu tiên

Trước mắt, việc của bạn là merge PR để thêm file cấu hình cho Renovate chạy thử trước nhé! 😉 Sau khi tệp tin cấu hình được tạo và cấu hình được thiết lập, Renovate Bot sẽ tự động thực hiện cập nhật đầu tiên và tạo Pull Request.

image.png

Sau khi Renovate chạy, nó sẽ định có một issue có tên Depenedency Dashboard gồm báo cáo tổng thể về các bản update của các dependencies đang có.

image.png

4. Theo dõi và kiểm tra Pull Requests

  • Theo dõi các Pull Request do Renovate Bot tạo ra khi có phiên bản mới của dependency.
  • Kiểm tra các thay đổi đề xuất và bạn có thể quyết định merge PR đó hay không.
  • Nếu cancel PR của Renovate Bot, đồng nghĩa với việc bạn từ chối update version đó, nó sẽ không hỏi lại ở lần quét sau nữa.
  • Nếu một PR của Renovate Bot đã tạo ra bị conflict sau khi dev team có sửa đổi, bạn có thể nhấn vào checkbox ở cuối PR để bot thực hiện rebase lại nha.

image.png

image.png

  • Một số thông tin quan trọng về dependecy trong một PR mà Renovate tạo ra bạn cần chú ý đó là:
    • Change: PR upgrade dependency từ version nào tới version nào
    • Age: Cho bạn biết phiên bản mới của dependecy được release cách đây từ bao giờ
    • Adoption: Tỉ lệ phần trăm người dùng Renovate đang dùng bản release này
    • Passing: Tỉ lệ phần trăm các testcase mà package này đã pass
    • Confidence: Mức độ tự tin của của bot cho PR update dependency này (Low, Neutral, High, Very High). Càng high thì bạn càng không phải nghĩ.

image.png

5. Tùy chỉnh cấu hình

Nếu bạn muốn tùy chỉnh hơn, bạn có thể tạo các tệp cấu hình riêng cho từng loại thư viện hoặc tùy chỉnh các quy tắc theo nhu cầu cụ thể của dự án.

Các cấu hình mở rộng hơn tham khảo chi tiết trong trang: https://docs.renovatebot.com/configuration-options/#automerge. Họ cung cấp khá đầy đủ và có cả ví dụ mẫu.

Chẳng hạn: Bạn có thể config để Renovate tự động upgrade dependency nếu là minor update. Vì nếu theo theo semver thì minor sẽ không có breaking change.

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": [
    "config:base"
  ],
  "packageRules": [
    {
      "matchUpdateTypes": [
        "minor",
        "patch",
        "pin",
        "digest"
      ],
      "automerge": true
    },
    {
      "matchDepTypes": [
        "devDependencies"
      ],
      "automerge": true
    }
  ],
  "platformAutomerge": true,
  "automergeType": "branch"
}

Trường hợp này bạn cần làm thêm 2 bước nữa:

  1. Vào trang Settings của repository và bật thêm các option Allow auto-mergeAutomatically delete head branches để cho phép auto-merge hoạt động trong repo, cũng như là tự xóa head branch sau khi merge:

image.png

Option Allow auto-merge sẽ không bật được nếu repository của bạn đang là private và tài khoản GitHub của bạn là tài khoản free nha.

  1. Vào trang Settings > Branches, nếu repository của bạn có bật protection rule cho các branch như main, master thì bạn bật thêm 2 option Require status checks to pass before mergingRequire branches to be up to date before merging.

image.png

Auto Merge bắt buộc phải pass CI test trong repo, nếu repo của bạn không có CI thì auto merge sẽ không hoạt động nếu bạn không thêm config "ignoreTests": true cho Renovate. Mình cũng suggest thêm config "automergeType": "branch" để khi dependency có minor update và pass CI test thì Renovate sẽ tự động commit vào branch thay vì tạo PR vì sẽ khá spam thông báo. Nếu không pass test thì PR vẫn sẽ được tạo cho bạn như bình thường - không auto merge.

Tổng kết

Renovate Bot là một công cụ mạnh mẽ giúp duy trì và cập nhật các dependency trong dự án open source trên GitHub một cách tự động và hiệu quả. Bằng cách sử dụng Renovate Bot, bạn có thể đảm bảo rằng dự án luôn sử dụng phiên bản dependency mới nhất và an toàn mà lại tiết kiệm khá nhiều thời gian.

Nếu bạn quan tâm tới các chủ đề về front-end, back-end, devops, hãy ủng hộ mình bằng cách follow các kênh của mình dưới đây để nhận các nội dung mới sớm nhất nhé:


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí