Bỏ qua để đến nội dung

Hướng dẫn cho nhà phát triển Backport Builder

Backport Builder là một dự án kỹ thuật phát hành (release engineering). Hãy coi các kho nguồn là đầu vào, cây thư mục được tạo là đầu ra, và các quy tắc Rector tùy chỉnh là logic build đã qua kiểm thử.

Hãy dùng hướng dẫn này khi bạn duy trì các quy tắc hạ cấp (downgrade), siêu dữ liệu gói được tạo, kiểm tra runtime đích hoặc tự động hóa phát hành cho nextpdf/backport-builder.

LớpSở hữu bởiTrách nhiệmKhông đặt ở đây
Kho nguồnKho sản phẩmMã nguồn PHP và các bài kiểm thử đóng vai trò nguồn chính thức.Các chỉnh sửa hạ cấp được tạo.
Script buildnextpdf/backport-builderHợp nhất nguồn, chạy các phép biến đổi, ghi siêu dữ liệu và xác thực đầu ra.Logic ứng dụng tại runtime.
Cấu hình Rectornextpdf/backport-builderChính sách hạ cấp cho từng đích.Các giả định dùng chung giữa các đích mà không có kiểm thử.
Quy tắc Rector tùy chỉnhnextpdf/backport-builderCác phép biến đổi cú pháp riêng của dự án.Các phép viết lại diện rộng chưa được kiểm thử.
Gói được tạo raĐầu ra của buildCác artifact có thể cài đặt cho runtime cũ hơn.Các bản vá thủ công vào nguồn chính thức.
Giai đoạnHành viHành động của nhà phát triển
Checkout nguồnQuy trình phát hành checkout các kho nguồn tại tag đích.Giữ các tham chiếu nguồn nhất quán giữa các gói.
Xác thực hợp đồngValidateBuildContract::run() kiểm tra các giả định của build.Hãy coi hợp đồng không đạt là điều kiện chặn phát hành.
Hợp nhấtMergeSources::run() lắp ráp cây thư mục gói đích.Xác minh phạm vi đích trước khi chạy Rector.
Biến đổiCác cấu hình Rector và quy tắc tùy chỉnh hạ cấp cú pháp.Thêm bài kiểm thử fixture cho mọi thay đổi quy tắc.
Điều chỉnh ComposerAdjustComposer ghi siêu dữ liệu gói được tạo và các bản đồ replace.Xác thực tên gói, phiên bản, giấy phép và các ràng buộc.
Xác thực runtimeĐầu ra được tạo sẽ được kiểm tra cú pháp và kiểm thử trên các phiên bản PHP đích.Hãy coi lỗi runtime đích là điều kiện chặn phát hành.
Phát hànhCác bản lưu trữ được đính kèm vào một bản phát hành.Không vá đầu ra được tạo như thể đó là nguồn chính thức.
Hạng mục công việcNguồn chính thứcChính sách đầu ra được tạo ra
Việc sử dụng tính năng PHPKho nguồn chính.Các quy tắc backport điều chỉnh tính năng.
Các ràng buộc phụ thuộcSiêu dữ liệu composer.json nguồn cùng với script điều chỉnh.Tệp composer.json được tạo phải có thể tái tạo.
Hạ cấp cú phápCấu hình Rector và các quy tắc tùy chỉnh.Không nên chỉnh sửa thủ công mã nguồn được tạo.
Hỗ trợ runtimeNhánh đích và ma trận CI.Build phải đạt trên PHP đích.
Ghi chú phát hànhTài liệu và tự động hóa phát hành.Các artifact được tạo nên liên kết ngược về bản phát hành nguồn.

Mỗi quy tắc tùy chỉnh nên có mục đích hẹp, siêu dữ liệu và độ bao phủ fixture.

Phương thức quy tắcMục đíchYêu cầu chất lượng
getRuleDefinition()Ghi lại phép biến đổi cho công cụ Rector.Bao gồm một mẫu before/after khớp với phép hạ cấp thực tế.
getNodeTypes()Giới hạn các node AST mà quy tắc xem xét.Giữ danh sách node ở mức nhỏ nhất có thể.
refactor()Áp dụng phép biến đổi hoặc trả về không thay đổi.Giữ nguyên các node không liên quan và bảo đảm tính tất định.
Bài kiểm thử fixtureXác minh đầu ra before/after.Bao phủ đầu vào hợp lệ nhỏ nhất và ít nhất một trường hợp bỏ qua.
<?php
final class ExampleDowngradeRector extends AbstractRector
{
public function getNodeTypes(): array
{
return [SomeNode::class];
}
public function refactor(Node $node): ?Node
{
if (!$node instanceof SomeNode) {
return null;
}
return $this->rewriteNode($node);
}
}

Hãy dùng dry run trong quá trình phát triển và khi xác thực ứng viên phát hành (release candidate). Chỉ ghi đầu ra thật khi đã biết rõ các tham chiếu nguồn và nhánh đích.

Terminal window
composer build:dry
php scripts/build.php --version=2.0.0 --target=php81 --dry-run
php scripts/build.php --version=2.0.0 --target=php74 --no-pro

Hãy chạy xác thực gói được tạo trên runtime đích, không chỉ trên máy build hiện đại.

Điểm mở rộngDùng choRàng buộc
Các tệp cấu hình RectorChính sách hạ cấp cho từng đích.Giữ làn PHP 8.1 và PHP 7.4 tách biệt.
Quy tắc Rector tùy chỉnhCác phép biến đổi cú pháp riêng của dự án.Phải có siêu dữ liệu và bài kiểm thử fixture.
Script điều chỉnh ComposerDanh tính gói được tạo.Phải duy trì việc đánh phiên bản tuân theo SemVer.
Script hợp nhấtChọn và định hình đầu vào gói nguồn.Phải ghi log các thư mục gốc nguồn và thư mục gốc đầu ra.
Quy trình buildĐiều phối phát hành.Phải xác thực đầu ra được tạo trên runtime đích.
  1. Tái tạo cú pháp không được hỗ trợ trong một fixture tối thiểu.
  2. Thêm hoặc cập nhật một quy tắc Rector tùy chỉnh.
  3. Thêm các fixture before/after cho quy tắc.
  4. Chạy bản build dry.
  5. Xác thực đầu ra được tạo trên runtime PHP đích.
  6. Áp dụng cùng một thay đổi logic cho mỗi nhánh đích cố định khi cần.
  7. Giữ các artifact phát hành có thể tái tạo từ các tag nguồn và script build.
LỗiNơi cần xử lýPhản hồi được khuyến nghị
Thiếu kho nguồnGiai đoạn xác thực hợp đồng hoặc hợp nhất.Dừng build và sửa các đầu vào checkout.
Lỗi phân tích cú pháp của RectorGiai đoạn biến đổi.Thu nhỏ thành một fixture và cập nhật quy tắc hoặc cấu hình.
Tệp composer.json được tạo không khớpGiai đoạn điều chỉnh Composer.Sửa script tạo, không sửa siêu dữ liệu được tạo.
Lỗi cú pháp đíchXác thực runtime.Chặn phát hành cho đến khi phép biến đổi được sửa.
Nguồn Pro không khả dụngCấu hình build.Chỉ build artifact công khai khi đó là đích dự kiến.
Vấn đề cần lưu tâmMặc địnhKhi nào nên ghi đè
Đầu ra được tạoArtifact chỉ đọc.Không bao giờ biến nó thành nguồn chính thức.
Mô hình nhánhCác nhánh đích cố định, tách biệt.Giữ các thay đổi được đồng bộ thông qua các pull request độc lập.
Máy buildPHP hiện đại.Việc xác thực runtime đích vẫn quyết định mức độ sẵn sàng phát hành.
Quy tắc tùy chỉnhNhỏ và được hỗ trợ bằng fixture.Tránh các phép biến đổi diện rộng mà không có ví dụ before/after rõ ràng.
Làn PHP 7.4Chỉ Core trừ khi được hỗ trợ rõ ràng.Không bao gồm đầu ra Pro nếu chưa xác thực runtime đích.
  • Các bài kiểm thử siêu dữ liệu quy tắc Rector khởi tạo mọi quy tắc tùy chỉnh.
  • Các bài kiểm thử fixture bao phủ mã trước và sau cho mỗi phép biến đổi.
  • Bản build dry chạy trước các job phát hành.
  • Các kiểm tra cú pháp runtime đích và bài kiểm thử gói chạy trên đầu ra được tạo.
  • Các bài kiểm thử siêu dữ liệu Composer xác nhận tên gói, phiên bản, các ràng buộc, bản đồ replace và giấy phép.
  • Log build bao gồm đường dẫn nguồn, đường dẫn đích, runtime đích, trạng thái dry-run và trạng thái bao gồm Pro.