Tích hợp liên tục (CI)#
Tích hợp liên tục (CI) là một khía cạnh thiết yếu của phát triển phần mềm, bao gồm việc tích hợp các thay đổi và tự động kiểm thử chúng. CI giúp chúng tôi duy trì mã nguồn chất lượng cao bằng cách phát hiện vấn đề sớm và thường xuyên trong quá trình phát triển. Tại Ultralytics, chúng tôi sử dụng nhiều bài kiểm tra CI để bảo đảm chất lượng và tính toàn vẹn của codebase.
Các tác vụ CI#
Sau đây là mô tả ngắn gọn về các tác vụ CI của chúng tôi:
- CI: Đây là bài kiểm tra CI chính, chạy unit test và tùy theo repository có thể chạy thêm các bài kiểm tra toàn diện hơn như kiểm tra export và benchmark.
- Triển khai Docker: Bài kiểm tra này kiểm tra quá trình triển khai dự án bằng Docker để bảo đảm Dockerfile và các script liên quan hoạt động chính xác.
- Liên kết bị hỏng: Bài kiểm tra này quét codebase để tìm các liên kết bị hỏng hoặc không còn hoạt động trong tệp Markdown hay HTML.
- CodeQL: CodeQL là công cụ của GitHub thực hiện phân tích ngữ nghĩa trên mã nguồn, giúp tìm các lỗ hổng bảo mật tiềm ẩn và duy trì chất lượng mã nguồn cao.
- Phát hành lên PyPI: Workflow này build package và phát hành từng phiên bản mới lên PyPI.
Kết quả CI#
Dưới đây là bảng trạng thái của các bài kiểm tra CI này đối với những repository chính của chúng tôi:
| Repository | CI | Triển khai Docker | Liên kết bị hỏng | CodeQL | Phát hành lên PyPI và xuất bản tài liệu |
|---|---|---|---|---|---|
| yolov3 | |||||
| yolov5 | |||||
| ultralytics | |||||
| sdk | |||||
| lite | |||||
| openapi | |||||
| kỹ năng | |||||
| yolo-ios-app | |||||
| yolo-flutter-app | |||||
| thop | |||||
| actions | |||||
| mkdocs | |||||
| tài liệu | |||||
| sổ tay | |||||
| lượt gắn sao | |||||
| CLIP |
Mỗi huy hiệu hiển thị trạng thái của lần chạy gần nhất của bài kiểm thử CI tương ứng trên nhánh main của repository tương ứng. Nếu một bài kiểm thử thất bại, huy hiệu sẽ hiển thị trạng thái "failing"; nếu bài kiểm thử thành công, huy hiệu sẽ hiển thị trạng thái "passing".
Nếu bạn phát hiện bài kiểm thử thất bại, bạn có thể giúp ích rất nhiều bằng cách báo cáo sự cố đó qua issue GitHub trong repository tương ứng.
Xin lưu ý rằng bài kiểm thử CI thành công không có nghĩa là mọi thứ đều hoàn hảo. Bạn luôn nên xem xét mã nguồn thủ công trước khi triển khai hoặc hợp nhất các thay đổi.
Độ bao phủ mã nguồn#
Độ bao phủ mã nguồn là một chỉ số thể hiện tỷ lệ phần trăm codebase được thực thi khi chạy các bài kiểm thử. Chỉ số này cho biết các bài kiểm thử kiểm tra mã nguồn kỹ lưỡng đến đâu và có thể rất quan trọng trong việc xác định những phần chưa được kiểm thử của ứng dụng. Tỷ lệ độ bao phủ mã nguồn cao thường gắn liền với khả năng xảy ra lỗi thấp hơn. Tuy nhiên, điều quan trọng là phải hiểu rằng độ bao phủ mã nguồn không đảm bảo không có lỗi. Chỉ số này đơn thuần cho biết những phần mã nguồn nào đã được các bài kiểm thử thực thi.
Tích hợp với codecov.io#
Tại Ultralytics, chúng tôi đã tích hợp các repository của mình với codecov.io, một nền tảng trực tuyến phổ biến để đo lường và trực quan hóa độ bao phủ mã nguồn. Codecov cung cấp thông tin chi tiết, so sánh độ bao phủ giữa các commit và lớp phủ trực quan ngay trên mã nguồn, cho biết những dòng nào đã được bao phủ.
Thông qua việc tích hợp với Codecov, chúng tôi hướng đến duy trì và cải thiện chất lượng mã nguồn bằng cách tập trung vào những khu vực có thể dễ phát sinh lỗi hoặc cần được kiểm thử thêm.
Kết quả độ bao phủ#
Để nhanh chóng nắm được trạng thái độ bao phủ mã nguồn của các repository, chúng tôi đã thêm huy hiệu Codecov và hình xem trước dạng biểu đồ sunburst cho từng dự án được theo dõi. Vòng trong cùng của mỗi biểu đồ sunburst biểu thị toàn bộ dự án; đi từ tâm ra ngoài lần lượt là các thư mục rồi đến từng tệp. Kích thước và màu sắc của mỗi lát biểu thị số lượng câu lệnh và độ bao phủ tương ứng. Để xem đầy đủ thông tin, hãy truy cập tổ chức Ultralytics trên Codecov.
| Repository | Độ bao phủ mã nguồn | Biểu đồ sunburst |
|---|---|---|
| actions | ||
| ultralytics | ||
| suy luận | ||
| yolo-flutter-app | ||
| yolo-ios-app | ||
| llm | ||
| hồ sơ | ||
| template | ||
| template-rust | ||
| replicate |
Câu hỏi thường gặp#
Tích hợp liên tục (CI) tại Ultralytics bao gồm việc tự động tích hợp và kiểm thử các thay đổi mã nguồn để đảm bảo tiêu chuẩn chất lượng cao. Thiết lập CI của chúng tôi bao gồm chạy các bài kiểm thử đơn vị, kiểm thử export và benchmark. Ngoài ra, chúng tôi còn thực hiện triển khai Docker, kiểm tra liên kết hỏng, phân tích CodeQL để tìm lỗ hổng bảo mật và phát hành lên PyPI nhằm đóng gói và phân phối phần mềm.
Ultralytics sử dụng một CI action chuyên biệt để kiểm tra liên kết hỏng trong các tệp markdown và HTML. Việc này giúp duy trì tính toàn vẹn của tài liệu bằng cách quét và phát hiện các liên kết chết hoặc hỏng, đảm bảo người dùng luôn truy cập được các tài nguyên chính xác và còn hoạt động.
Phân tích CodeQL rất quan trọng với Ultralytics vì phương pháp này thực hiện phân tích ngữ nghĩa mã nguồn để tìm các lỗ hổng bảo mật tiềm ẩn và duy trì tiêu chuẩn chất lượng cao. Với CodeQL, chúng tôi có thể chủ động xác định và giảm thiểu rủi ro trong mã nguồn, giúp cung cấp các giải pháp phần mềm mạnh mẽ và an toàn.
Ultralytics sử dụng Docker để xác thực quá trình triển khai các dự án thông qua một CI action chuyên dụng. Quy trình này đảm bảo Dockerfile và các script liên quan hoạt động chính xác, từ đó tạo ra các môi trường triển khai nhất quán và có thể tái lập—những yếu tố thiết yếu cho các giải pháp AI có khả năng mở rộng và đáng tin cậy.
Phát hành tự động lên PyPI sẽ xây dựng các package và phát hành từng phiên bản mới mà không cần thao tác thủ công. Bước này rất cần thiết để phân phối các package Python của Ultralytics, giúp người dùng dễ dàng cài đặt và sử dụng công cụ của chúng tôi thông qua Chỉ mục gói Python (PyPI).
Ultralytics đo lường độ bao phủ mã nguồn bằng cách tích hợp với Codecov, qua đó cung cấp thông tin về tỷ lệ codebase được thực thi trong quá trình kiểm thử. Độ bao phủ mã nguồn cao có thể cho thấy mã nguồn đã được kiểm thử kỹ lưỡng, đồng thời giúp phát hiện những khu vực chưa được kiểm thử và có thể dễ phát sinh lỗi. Bạn có thể xem các chỉ số độ bao phủ mã nguồn chi tiết qua những huy hiệu hiển thị trên các repository chính của chúng tôi hoặc trực tiếp trên Codecov.