Dependabot
Chào mừng bạn đến với trang chính thức công khai của Dependabot.
Dependabot-Core là gì?
Dependabot-Core là thư viện nằm ở trung tâm của Dependabot cập nhật bảo mật / phiên bản.
Sử dụng nó để tạo các pull request tự động cập nhật dependency cho các dự án viết bằng Ruby, JavaScript, Python, PHP, Dart, Elixir, Elm, Go, Rust, Java và .NET. Nó cũng có thể cập nhật submodule git, file Docker, và file Terraform. Các tính năng bao gồm:
- Kiểm tra phiên bản mới nhất của dependency có thể giải quyết dựa trên các dependency khác của dự án
- Tạo manifest và lockfiles cập nhật cho phiên bản dependency mới
- Tạo mô tả PR bao gồm changelogs, ghi chú phát hành, và commits của dependency đã cập nhật
Cách chạy Dependabot
Hầu hết mọi người đã quen với dịch vụ Dependabot chạy trên GitHub.com và GitHub Enterprise. Việc kích hoạt đó đơn giản như checking a dependabot.yml configuration file in to your repository’s .github directory.
Tuy nhiên, nếu bạn muốn chạy một phiên bản tùy chỉnh của Dependabot hoặc chạy nó trên một nền tảng khác, bạn cũng không bị bỏ rơi. Repo này cung cấp logic cần thiết để lưu trữ Dependabot độc lập của bạn, miễn là bạn là not re-selling Dependabot to others. Hiện tại, nó hỗ trợ mở Pull Requests đối với các repo được lưu trữ trên GitHub, Github Enterprise, Azure DevOps, GitLab, BitBucket, và AWS CodeCommit.
Dependabot-Core là một thư viện, vì vậy bạn sẽ cần một script entrypoint nào đó. Dưới đây là một số ví dụ để giúp bạn bắt đầu.
Lưu ý: Nếu bạn muốn chạy Dependabot cục bộ cho mục đích phát triển / gỡ lỗi, xem Development Guide.
Dependabot-Script
Cảm ơn bạn!
Repo dependabot-script cung cấp một bộ sưu tập các script ví dụ để cấu hình thư viện Dependabot-Core. Nó được thiết kế như một điểm xuất phát cho người dùng cao cấp để chạy một phiên bản Dependabot tự lưu trữ trong các dự án của họ.
Lưu ý: Gần đây, chúng tôi đã tái cấu trúc hình ảnh Docker đơn khối được sử dụng trong thư viện Dependabot Core thành một-hình-ảnh-mỗi-đại dương. Thật không may, điều đó đã làm hỏng dependabot-scripts, và chúng tôi chưa có thời gian để cập nhật chúng. Chúng tôi nhận thức được vấn đề và hy vọng sẽ cung cấp một giải pháp sớm.
Dependabot CLI
Dependabot CLI là một công cụ mới có thể cuối cùng thay thế dependabot-script cho các trường hợp sử dụng độc lập. Mặc dù nó tạo ra các sự khác biệt về dependency, hiện tại nó vẫn thiếu logic để biến những sự khác biệt đó thành PR thực sự. Tuy nhiên, nó có thể hữu ích cho người dùng cao cấp đang tìm kiếm các ví dụ về cách tùy chỉnh Dependabot.
Dependabot trên CI
Trong một môi trường như GitHub nơi Dependabot đang chạy trong một container, nếu bạn muốn thay đổi quy trình xây dựng hoặc cài đặt của mình tùy thuộc vào việc Dependabot có đang kiểm tra hay không, bạn có thể xác định nó qua sự tồn tại của biến môi trường DEPENDABOT
.
Đóng góp cho Dependabot
Báo cáo vấn đề và Yêu cầu Tính năng
👋 Muốn gửi phản hồi cho Dependabot, hoặc đóng góp cho nó? Tuyệt vời – cảm ơn bạn rất nhiều!
Ví dụ Có Thể Tái Tạo
Hầu hết các báo cáo lỗi nên đi kèm với một liên kết đến một repo công khai tái tạo vấn đề. Các báo cáo lỗi không thể được tái tạo trên một repo công khai sử dụng CLI tool hoặc dry-run script có thể bị đóng với lý do “không thể tái tạo”.
Không có bình luận “+1”
Cảm ơn bạn!
Trình theo dõi vấn đề của chúng tôi khá sôi động, và do đó có khả năng cao là đã có người khác nêu cùng một vấn đề. Nếu vậy, vui lòng tăng cấp vấn đề đó, vì chúng tôi sử dụng phản ứng 👍 trên các vấn đề như một dấu hiệu để đánh giá tác động của một yêu cầu tính năng hoặc lỗi.
Tuy nhiên, vui lòng không để lại những bình luận không đóng góp thêm thông tin mới vào cuộc thảo luận. Để biết chi tiết, xem https://github.com/golang/go/wiki/NoPlusOne. Đây là mã nguồn mở, nếu bạn thấy điều gì bạn muốn sửa, chúng tôi rất vui lòng hướng dẫn bạn cách đóng góp một pull request để sửa nó.
Không nêu vấn đề về Cảnh báo Bảo mật hay Đồ thị Phụ thuộc
Trình theo dõi vấn đề chỉ dành riêng cho các vấn đề liên quan đến logic cập nhật của Dependabot. Vấn đề về security alerts hoặc Dependency Graph nên được nêu dưới dạng Code Security discussion.
Một quy tắc ngón tay cái tốt là nếu bạn có câu hỏi về sự khác biệt trong một PR, nó thuộc về đây.
Tiết lộ Vấn đề Bảo mật
Nếu bạn tin rằng bạn đã tìm thấy một lỗ hổng bảo mật trong Dependabot, vui lòng gửi lỗ hổng đó đến GitHub Security Bug Bounty để chúng tôi có thể giải quyết vấn đề trước khi nó được công bố công khai.
Gửi Pull Requests
Muốn đóng góp cho Dependabot? Tuyệt vời – cảm ơn bạn rất nhiều!
Quy trình đóng góp:
. Fork dự án.
. Lấy development environment running.
. Thêm tính năng hoặc sửa lỗi của bạn.
. Thêm tests for it. Điều này quan trọng để chúng tôi không vô tình làm hỏng nó trong một phiên bản sau này.
. Gửi một pull request. Các bài kiểm tra sẽ tự động chạy trên nó, vì vậy đừng lo lắng nếu bạn không thể chạy chúng ở cấp độ cục bộ.
Vui lòng tham khảo hướng dẫn CONTRIBUTING để biết thêm thông tin.
Hệ thống Sinh thái Mới
Cảm ơn bạn!
Hiện tại, nhóm Dependabot không chấp nhận hỗ trợ cho các hệ thống sinh thái mới. Chúng tôi đang ưu tiên nâng cấp cho các hệ thống sinh thái đã được hỗ trợ tại thời điểm này.
Vui lòng tham khảo hướng dẫn CONTRIBUTING để biết thêm thông tin.
Hướng Dẫn Phát Triển
Khởi chạy Môi trường Phát triển
Bước đầu tiên để debug một vấn đề hoặc viết một tính năng mới là khởi động môi trường phát triển. Chúng tôi cung cấp một shell phát triển Docker-based tùy chỉnh chứa tất cả các phụ thuộc cần thiết. Trong hầu hết các trường hợp, đây là cách tốt nhất để làm việc với dự án.
Shell phát triển sử dụng volume mounts để kết hợp các thay đổi cục bộ của bạn vào mã nguồn Dependabot. Như vậy, bạn có thể chỉnh sửa cục bộ bằng trình soạn thảo ưa thích của mình và các thay đổi sẽ được phản ánh ngay lập tức trong container docker để thực hiện dry-runs hoặc thực thi tests. Lưu ý: Xem điều kiện về editing the native package manager helper scripts.
Khởi đầu Nhanh
Script để khởi chạy shell phát triển sẽ xây dựng các hình ảnh docker từ đầu nếu nó không thể tìm thấy chúng cục bộ. Việc này có thể mất một thời gian.
Bỏ qua thời gian chờ bằng cách kéo hình ảnh được xây dựng sẵn cho hệ thống sinh thái bạn muốn làm việc. Tên hình ảnh sử dụng YAML ecosystem name để chỉ định hệ thống sinh thái. Ví dụ, đối với Go Modules, tên YAML là gomod
:
$ docker pull ghcr.io/dependabot/dependabot-updater-gomod
Lưu ý: Hình ảnh được xây dựng sẵn hiện chỉ có sẵn cho kiến trúc AMD64 / Intel. Chúng sẽ chạy trên ARM, nhưng chậm hơn 2x-3x so với nếu bạn manually build ARM-specific images.
Tiếp theo, chạy shell phát triển, chỉ định hệ thống sinh thái mong muốn sử dụng tên thư mục cấp cao của hệ thống sinh thái trong dự án này. Ví dụ, đối với Go Modules, thư mục cấp cao được đặt tên là go_modules
:
$ bin/docker-dev-shell go_modules
=> running docker development shell
[dependabot-core-dev] ~/dependabot-core $
[dependabot-core-dev] ~/dependabot-core $ cd go_modules && rspec spec # to run tests for a particular package
Xây dựng Hình Ảnh từ Đầu
Thông thường Quickstart là tất cả những gì bạn cần, nhưng đôi khi bạn sẽ cần phải xây dựng lại các hình ảnh cơ sở.
Cảm ơn bạn!
Ví dụ, trong khi chúng tôi chưa xuất bản các hình ảnh dành riêng cho ARM, nếu bạn đang làm việc trên một nền tảng dựa trên ARM, chúng tôi khuyến nghị xây dựng thủ công các hình ảnh vì các container kết quả chạy nhanh hơn rất nhiều.
Shell dành cho nhà phát triển chạy trong một hình ảnh docker của Dependabot Development, được xây dựng trên cơ sở của một hình ảnh hệ sinh thái.
Thay đổi đối với các tệp docker cho bất kỳ hình ảnh này đều yêu cầu xây dựng một hoặc nhiều hình ảnh cục bộ để được phản ánh trong shell phát triển.
Cách đơn giản nhưng chậm là xóa bất kỳ hình ảnh hiện có và sau đó chạy bin/docker-dev-shell
để tự động xây dựng các hình ảnh bị thiếu.
Cách nhanh hơn là kéo tất cả các hình ảnh được xây dựng sẵn là các phụ thuộc của hình ảnh bạn thực sự cần xây dựng. Để (tái) xây dựng một cái cụ thể:
Hình ảnh core của Updater:
$ docker pull ghcr.io/dependabot/dependabot-updater-core # OR
$ docker build Dockerfile.updater-core # recommended on ARM
Hình ảnh hệ sinh thái của Updater:
$ docker pull ghcr.io/dependabot/dependabot-updater-gomod # OR
$ script/build go_modules # recommended on ARM
Container phát triển sử dụng cờ --rebuild
:
$ bin/docker-dev-shell go_modules --rebuild
Thực hiện Thay đổi đối với trợ giúp Quản lý Gói gốc
Một số gói Dependabot sử dụng ‘trợ giúp gốc’, các chương trình thực thi nhỏ trong ngôn ngữ máy chủ của họ.
Thay đổi đối với các tệp này không được tự động phản ánh bên trong container phát triển.
Một khi bạn đã thực hiện bất kỳ chỉnh sửa nào đối với các tệp trợ giúp, chạy kịch bản xây dựng phù hợp để cập nhật phiên bản đã cài đặt với các thay đổi của bạn như sau:
$ bin/docker-dev-shell bundler
=> running docker development shell
$ bundler/helpers/v2/build
$ bin/dry-run.rb bundler dependabot/demo --dir="/ruby"
Để xem nhật ký và stdout từ các trợ giúp quản lý gói gốc, xem debugging native helpers.
Gỡ lỗi Vấn đề
Bước đầu tiên để gỡ lỗi là nhận được development environment running.
Trong môi trường phát triển, bạn có hai tùy chọn để mô phỏng công việc cập nhật phụ thuộc: Bạn có thể sử dụng CLI tool mới phát triển hoặc Dry-run script gốc.
Công cụ CLI
Công cụ Dependabot CLI là một công cụ mới được phát triển, tích hợp GitHub Credentials Proxy để mô phỏng một cách thực tế hơn những gì đang xảy ra trong dịch vụ Dependabot-tại-GitHub khi trò chuyện với các kho lưu trữ riêng tư.
Nó có một dedicated debugging guide, bao gồm hỗ trợ để chuyển vào trình gỡ lỗi Ruby.
Kịch bản Chạy Thử
Lưu ý: Trước khi chạy kịch bản chạy thử, bạn cần phải get the development environment running.
Bạn có thể sử dụng kịch bản bin/dry-run.rb
để mô phỏng một công việc cập nhật phụ thuộc, in diff sẽ được tạo ra lên terminal. Nó nhận hai đối số vị trí: quản lý gói và tên repo GitHub (bao gồm tài khoản):
$ bin/docker-dev-shell go_modules
=> running docker development shell
$ bin/dry-run.rb go_modules rsc/quote
=> fetching dependency files
=> parsing dependency files
=> updating 2 dependencies
…
Các tùy chọn hữu ích để tăng tốc thử nghiệm chạy thử
Dry-Run script hỗ trợ nhiều tùy chọn khác, tất cả đều được tài liệu hóa tại top of the script’s source code. Ví dụ:
. LOCAL_GITHUB_ACCESS_TOKEN="fake-GitHub-PAT"
cho phép chỉ định một GitHub Personal Access Token (PAT) để tránh bị giới hạn tốc độ.
. --dir="path/to/subdir/containing/manifest"
là yêu cầu nếu tệp manifest được đặt trong một thư mục con.
. --dep="dep-name-that-I-want-to-test"
cho phép chỉ định một dep duy nhất để thử cập nhật và tất cả các dep khác sẽ bị bỏ qua.
. --cache=files
cho phép lưu trữ các tệp dep từ xa cục bộ cho việc chạy lại nhanh chóng khi thử nghiệm các thay đổi logic cục bộ.
. --updater-options=feature_flag_name
cho phép truyền vào các cờ tính năng.
Dưới đây là một ví dụ về cách kết hợp tất cả những điều này lại với nhau
LOCAL_GITHUB_ACCESS_TOKEN=github_pat_123_fake_string \
bin/dry-run.rb docker jeffwidman/secrets-store-driver \
--dir "/manifest_staging/charts/secrets-store-provider" \
--cache=files \
--dep="secrets-store" \
--updater-options=kubernetes_updates
Thêm điểm dừng gỡ lỗi
Bạn có thể thêm một lệnh debugger
ở bất cứ đâu trong mã Ruby, ví dụ:
def latest_resolvable_version
debugger
latest_version_finder.latest_version
end
Khi bạn thực hiện công việc, trình gỡ lỗi Ruby sẽ mở. Nó nên trông giống như thế này:
[11, 20] in ~/go_modules/lib/dependabot/go_modules/update_checker.rb
11| module GoModules
12| class UpdateChecker < Dependabot::UpdateCheckers::Base
13| require_relative "update_checker/latest_version_finder"
14|
15| def latest_resolvable_version
=> 16| debugger
17| latest_version_finder.latest_version
18| end
19|
20| # This is currently used to short-circuit latest_resolvable_version,
=>#0 Dependabot::GoModules::UpdateChecker#latest_resolvable_version at ~/go_modules/lib/dependabot/go_modules/update_checker.rb:16
#1 Dependabot::GoModules::UpdateChecker#latest_version at ~/go_modules/lib/dependabot/go_modules/update_checker.rb:24
# and 9 frames (use `bt' command for all frames)
(rdbg)
Tại dấu nhắc này, bạn có thể chạy debugger commands để điều hướng xung quanh, hoặc nhập các phương pháp và biến để xem chúng chứa gì. Thử nhập dependency
để xem phụ thuộc nào Dependabot đang làm việc trên.
Lưu ý Khi ở trong trình gỡ lỗi, các thay đổi được thực hiện trên mã nguồn sẽ không được cập nhật. Bạn sẽ phải kết thúc phiên gỡ lỗi và khởi động lại nó.
Gỡ lỗi Native Package Manager Helpers
Khi bạn đang gỡ lỗi một vấn đề, bạn thường cần phải xem xét bên trong các script này chạy trong một quá trình riêng biệt.
In tất cả các lệnh log từ các trợ giúp native bằng cách sử dụng DEBUG_HELPERS=true
:
DEBUG_HELPERS=true bin/dry-run.rb bundler dependabot/demo --dir="/ruby"
Tạm dừng thực hiện để gỡ lỗi một hàm trợ giúp native duy nhất bằng cách sử dụng DEBUG_FUNCTION=<tên hàm>
. Hàm này ánh xạ tới một tên hàm trợ giúp native, ví dụ, một trong các hàm trong bundler/helpers/v2/lib/functions.rb
.
Khi hàm này đang được thực thi, một debugger
được chèn vào, tạm dừng thực hiện của kịch bản bin/dry-run.rb
, điều này giữ lại thư mục tmp
hiện tại, cho phép bạn cd
vào thư mục và chạy hàm trợ giúp native trực tiếp:
DEBUG_FUNCTION=parsed_gemfile bin/dry-run.rb bundler dependabot/demo --dir="/ruby"
=> fetching dependency files
=> dumping fetched dependency files: ./dry-run/dependabot/demo/ruby
=> parsing dependency files
$ cd /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby && echo "{\"function\":\"parsed_gemfile\",\"args\":{\"gemfile_name\":\"Gemfile\",\"lockfile_name\":\"Gemfile.lock\",\"dir\":\"/home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby\"}}" | BUNDLER_VERSION=1.17.3 BUNDLE_GEMFILE=/opt/bundler/v1/Gemfile GEM_HOME=/opt/bundler/v1/.bundle bundle exec ruby /opt/bundler/v1/run.rb
Sao chép và chạy lệnh cd...
:
cd /home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby && echo "{\"function\":\"parsed_gemfile\",\"args\":{\"gemfile_name\":\"Gemfile\",\"lockfile_name\":\"Gemfile.lock\",\"dir\":\"/home/dependabot/dependabot-core/tmp/dependabot_TEMP/ruby\"}}" | BUNDLER_VERSION=1.17.3 BUNDLE_GEMFILE=/opt/bundler/v1/Gemfile GEM_HOME=/opt/bundler/v1/.bundle bundle exec ruby /opt/bundler/v1/run.rb
Điều này nên ghi lại đầu ra của hàm parsed_gemfile
:
{"result":[{"name":"business","requirement":"~> 1.0.0","groups":["default"],"source":null,"type":"runtime"},{"name":"uk_phone_numbers","requirement":"~> 0.1.0","groups":["default"],"source":null,"type":"runtime"}]}
Hãy nhớ rằng, khác với các thay đổi vào mã nguồn Ruby, các thay đổi trên máy chủ của bạn tới mã nguồn của các trợ giúp native không được đồng bộ hóa với container phát triển. Vì vậy, bạn có hai lựa chọn để chỉnh sửa trợ giúp native:
- Bạn có thể chỉnh sửa trực tiếp bản sao tạm thời của trợ giúp native trong container phát triển, ví dụ:
vi /opt/bundler/v1/lib/functions/file_parser.rb
. Và sau đó chạy lại lệnhcd...
. Đây là cách nhanh nhất để gỡ lỗi, nhưng bất kỳ thay đổi nào sẽ không được lưu ngoài container. - Bạn có thể chỉnh sửa bản sao cục bộ của bạn, và sau đó rebuild the native helper. Điều này sẽ yêu cầu chạy lại kịch bản chạy thử để nhận thay đổi.
Gỡ lỗi điều kiện bỏ qua
Hầu hết các hệ thống sinh thái trong Dependabot-Core hỗ trợ các điều kiện ignore
, cho phép người dùng chỉ định tên hay phiên bản của các phụ thuộc cần loại trừ khỏi việc nâng cấp. Tài liệu cho dịch vụ Dependabot trên GitHub describe the feature in more detail.
Dependabot CLI hỗ trợ việc truyền các điều kiện ignore
như một phần của định nghĩa công việc. Xem the example.
dry-run script hỗ trợ việc truyền một hoặc nhiều điều kiện ignore
thông qua biến môi trường IGNORE_CONDITIONS
:
IGNORE_CONDITIONS='[{"dependency-name":"*","update-types": ["version-update:semver-major"]}]' \
bin/dry-run.rb docker test_org/test-dependabot`
Gỡ lỗi Cập nhật Bảo mật
Nhiều hệ thống sinh thái trong Dependabot-Core hỗ trợ security updates. Đây là một hình thức đặc biệt của cập nhật phiên bản, trong đó tên phụ thuộc và dãy phiên bản có lỗ hổng được truyền vào. Dependabot-Core sẽ cố gắng nâng cấp bất kỳ phiên bản nào của phụ thuộc đó lên phiên bản tối thiểu không có lỗ hổng. Điều này khác với việc cập nhật phiên bản bình thường, nơi cố gắng cập nhật lên phiên bản mới nhất.
Biến môi trường SECURITY_ADVISORIES
cho phép truyền một hoặc nhiều thông báo cảnh báo bảo mật đến dry-run script để mô phỏng một cập nhật bảo mật:
SECURITY_ADVISORIES='[{"dependency-name":"buffer","patched-versions":[],"unaffected-versions":[],"affected-versions":["<= 2.0.0"]}]' \
bin/dry-run.rb pub dart-lang/pub-dev --dir "/app" --cache=files --dep="buffer"
Visual Studio Code và Docker
Có hỗ trợ tích hợp sẵn để sử dụng ability for debugging của Visual Studio Code trong một container Docker. Sau khi cài đặt Dev Containers extension được đề xuất, chỉ cần nhấn Ctrl+Shift+P
(⇧⌘P
trên macOS) và chọn Dev Containers: Reopen in Container
. Bạn cũng có thể truy cập vào dropdown bằng cách nhấp vào nút xanh ở góc dưới bên trái của trình soạn thảo. Nếu hình ảnh Docker phát triển không có trên máy bạn, nó sẽ tự động được xây dựng. Khi hoàn thành, bắt đầu cấu hình Debug Dry Run
(F5)
và bạn sẽ được nhắc chọn trình quản lý gói và kho dữ liệu để thực hiện một thử nghiệm khô. Hãy thoải mái đặt các điểm ngắt trong mã.
Cảm ơn bạn!
Cũng có hỗ trợ để gỡ lỗi từng lượt chạy thử nghiệm bằng cách chạy cấu hình Debug Tests
(F5)
và bạn sẽ được nhắc chọn một hệ thống sinh thái và cung cấp đường dẫn rspec.
⚠️ Các lệnh Clone Repository ...
của tiện ích Remote Containers hiện đang thiếu một số chức năng và do đó không được hỗ trợ. Bạn phải sao chép kho dữ liệu thủ công và sử dụng lệnh Reopen in Container
hoặc Open Folder in Container...
.
Chạy Thử nghiệm
Khi bạn đã có development environment for a particular ecosystem, thực thi các thử nghiệm cho hệ thống sinh thái đó bằng cách chạy rspec spec
bên trong thư mục của hệ thống sinh thái đó, ví dụ:
$ cd go_modules
$ rspec spec
Bạn cũng có thể giới hạn thử nghiệm chỉ cho tập tin bạn đang làm việc, hoặc chỉ các thử nghiệm đã thất bại trước đó, ví dụ:
$ rspec spec/dependabot/file_updaters/elixir --only-failures
Kiểu dáng được thực thi bởi RuboCop. Để kiểm tra vi phạm kiểu dáng, chỉ cần chạy rubocop
trong mỗi gói, ví dụ:
$ cd go_modules
$ rubocop
Phân tích
Bạn có thể phân tích một dry-run bằng cách truyền cờ --profile
khi chạy nó, hoặc đánh dấu một thử nghiệm rspec
bằng :profile
. Điều này sẽ tạo ra một tệp stackprof-<datetime>.dump
trong thư mục tmp/
, và bạn có thể tạo ra một biểu đồ flamegraph từ đây bằng cách chạy:
stackprof --d3-flamegraph tmp/stackprof-<data or spec name>.dump > tmp/flamegraph.html
Kiến trúc và Bố cục Mã
Dependabot-Core là một bộ sưu tập các gói Ruby (gems), chứa mã logic để cập nhật các phụ thuộc trong một số ngôn ngữ khác nhau.
dependabot-common
Gói common
chứa tất cả các chức năng chung / chia sẻ. Ví dụ, mã để tạo yêu cầu kéo cho các nền tảng được hỗ trợ khác nhau sống ở đây, cũng như hầu hết logic để xử lý các phụ thuộc Git (vì hầu hết các ngôn ngữ hỗ trợ phụ thuộc Git một cách nào đó). Cũng có các lớp cơ bản được định nghĩa cho mỗi vấn đề chính cần thiết để triển khai hỗ trợ cho một ngôn ngữ hoặc quản lý gói cụ thể.
Cảm ơn bạn!
dependabot-{package-manager}
Mỗi quản lý gói hoặc ngôn ngữ mà Dependabot hỗ trợ đều có một gem tương ứng. Tối thiểu, mỗi gem trong số này sẽ thực hiện các lớp sau:
Dịch Vụ | Mô tả |
---|---|
FileFetcher |
Trích xuất các tệp phụ thuộc liên quan cho dự án (ví dụ: Gemfile và Gemfile.lock ). Xem README để biết thêm chi tiết. |
FileParser |
Phân tích một tệp phụ thuộc và trích xuất danh sách các phụ thuộc cho dự án. Xem README để biết thêm chi tiết. |
UpdateChecker |
Kiểm tra xem một phụ thuộc cụ thể có được cập nhật hay không. Xem README để biết thêm chi tiết. |
FileUpdater |
Cập nhật tệp phụ thuộc để sử dụng phiên bản mới nhất của phụ thuộc cụ thể. Xem README để biết thêm chi tiết. |
MetadataFinder |
Tìm kiếm thông tin về một phụ thuộc, chẳng hạn như địa chỉ GitHub của nó. Xem README để biết thêm chi tiết. |
Version |
Mô tả logic để so sánh các phiên bản phụ thuộc. Xem hex Version class để xem một ví dụ. |
Requirement |
Mô tả định dạng của yêu cầu phụ thuộc (ví dụ: >= 1.2.3 ). Xem hex Requirement class để xem một ví dụ. |
Quy trình cấp cao có dạng như sau:
dependabot-omnibus
Đây là một gem “meta”, chỉ đơn giản phụ thuộc vào tất cả các gem khác. Nếu bạn muốn tự động bao gồm hỗ trợ cho tất cả các ngôn ngữ, bạn chỉ cần bao gồm gem này và bạn sẽ có tất cả những gì bạn cần.
Quản lý Thông tin Đăng ký Riêng tư
Đối với nhiều hệ thống sinh thái, Dependabot-Core hỗ trợ các kho lưu trữ riêng tư. Đôi khi điều này xảy ra bằng cách truyền thông tin đăng ký kho riêng tư trực tiếp cho các trình quản lý gói cơ bản (npm
, pip
, bundler
, vv), đôi khi xảy ra trong mã Ruby của Dependabot-Core.
Cảm ơn bạn!
Mặc dù đơn giản và rõ ràng, điều này là một rủi ro về bảo mật đối với các hệ thống sinh thái cho phép chạy mã không đáng tin cậy trong các tệp định dạng của họ. Ví dụ setup.py
và .gemspec
cho phép chạy mã ngôn ngữ Python và Ruby. Nếu một gói trong cây phụ thuộc bị hack, kẻ tấn công có thể đẩy một tệp định dạng độc hại, buộc trình quản lý gói cơ bản tiết lộ thông tin đăng ký.
Để bảo vệ chống lại điều này, đối với dịch vụ Dependabot mà Github chạy, chúng tôi bao bọc Dependabot-Core bằng một proxy thông tin đăng ký để các bí mật lưu trữ riêng không bao giờ bị tiết lộ cho Dependabot-Core.
Điều này cũng có nghĩa là nếu Dependabot-Core bị lỗ hổng bảo mật, các thông tin đăng ký vẫn không bị nguy cơ bị tiết lộ.
Tại sao điều này công khai?
Như tên gợi ý, Dependabot-Core là cốt lõi của Dependabot (phần còn lại của ứng dụng gần như chỉ là giao diện người dùng và cơ sở dữ liệu). Nếu chúng tôi rất bất an về việc ai đó đánh cắp kinh doanh của chúng tôi thì chúng tôi sẽ giữ nó trong tủ khóa.
Dependabot-Core là công khai bởi vì chúng tôi quan tâm hơn về việc nó tạo ra ảnh hưởng hơn là kiếm tiền từ nó. Chúng tôi rất mong bạn sử dụng Dependabot để chúng tôi có thể tiếp tục phát triển nó, nhưng nếu bạn muốn xây dựng và tự quản lý phiên bản riêng của bạn thì thư viện này sẽ giúp bạn làm điều đó dễ dàng hơn rất nhiều.
Nếu bạn sử dụng Dependabot-Core, chúng tôi rất mong được biết bạn đã xây dựng gì! Nếu bạn tò mò về những gì chúng tôi đang làm, check out our public board!
Lịch sử
Dependabot và Dependabot-Core bắt đầu ra đời như Bump và Bump Core, vào thời điểm Harry và Grey đang làm việc tại GoCardless. Chúng tôi vẫn cảm kích sự giúp đỡ và hỗ trợ của GoCardless trong việc giúp thực hiện Dependabot – nếu bạn cần thu thập thanh toán định kỳ từ châu Âu, hãy xem qua họ.
Ghi chú cho các nhà duy trì dự án
📖 Hướng dẫn phát hành
Đăng bản phát hành mới lên RubyGems bằng cách chạy quy trình Gems – Bump Version và tuân theo hướng dẫn trong tóm tắt công việc.
Tóm tắt quá trình sẽ là:
. Chạy hành động để tạo một yêu cầu kéo với phiên bản mới.
. Hợp nhất yêu cầu kéo.
. Đánh dấu lần hợp nhất đó như một bản phát hành mới bằng định dạng v1.2.3
. Tóm tắt công việc chứa một URL được điền trước với phiên bản đúng cho tiêu đề và thẻ.
. Khi đã đánh dấu bản phát hành, quy trình công việc GitHub Action khác sẽ tự động đẩy nó lên RubyGems.
Chi tiết Tải về:
Tác giả: Dependabot
Mã nguồn: https://github.com/dependabot/dependabot-core
Giấy phép: View license
Cảm ơn bạn!