コンテンツにスキップ

Backport Builder 開発者ガイド

Backport Builder はリリースエンジニアリング用のプロジェクトです。ソースリポジトリを入力、生成されたツリーを出力として扱い、カスタム Rector ルールをテスト済みのビルドロジックとして位置付けます。

ダウングレードルール、生成されたパッケージメタデータ、ターゲットランタイムのチェック、または nextpdf/backport-builder 周辺のリリース自動化を保守する際は、このガイドを参照してください。

レイヤー所有者責務ここに置かないもの
ソースリポジトリ製品リポジトリ正規の PHP ソースとテスト。生成されたダウングレードへの編集。
ビルドスクリプトnextpdf/backport-builderソースのマージ、変換の実行、メタデータの書き込み、出力の検証。ランタイムのアプリケーションロジック。
Rector の設定nextpdf/backport-builderターゲット固有のダウングレードポリシー。テストのないターゲット横断の前提。
カスタム Rector ルールnextpdf/backport-builderプロジェクト固有の構文変換。テストされていない広範な書き換え。
生成されたパッケージビルド出力古いランタイム向けのインストール可能な成果物。信頼できる情報源(source of truth)への手動パッチ。
ステージ動作開発者のアクション
ソースのチェックアウトリリースワークフローによる、ソースリポジトリのターゲットタグでのチェックアウト。パッケージ全体でのソース参照の整合性維持。
コントラクトの検証ValidateBuildContract::run() による、ビルド前提条件のチェック。コントラクト失敗のリリース停止条件としての扱い。
マージMergeSources::run() による、ターゲットパッケージツリーの組み立て。Rector 実行前のターゲット範囲の確認。
変換Rector の設定とカスタムルールによる構文のダウングレード。ルール変更ごとのフィクスチャテスト追加。
Composer の調整AdjustComposer による、生成されたパッケージメタデータと replace マップの書き込み。パッケージ名、バージョン、ライセンス、制約の検証。
ランタイムの検証生成された出力に対する、ターゲットの PHP バージョンでの構文チェックとテスト。ターゲットランタイム失敗のリリース停止条件としての扱い。
リリースリリースへのアーカイブ添付。生成された出力を信頼できる情報源(source of truth)としてパッチしないこと。
作業項目信頼できる情報源生成された出力に関するポリシー
PHP 機能の使用メインのソースリポジトリ。バックポートルールによるその機能の適合。
依存関係の制約ソースの composer.json メタデータと調整スクリプト。生成された composer.json の再現可能性必須。
構文のダウングレードRector の設定とカスタムルール。生成されたソースは手動で編集しないでください。
ランタイムのサポートターゲットブランチと CI マトリックス。ターゲットの PHP でのビルド成功必須。
リリースノートドキュメントとリリースの自動化。生成された成果物からソースリリースへたどれるリンク。

カスタムルールはすべて、限定された目的、メタデータ、フィクスチャによるカバレッジを備えている必要があります。

ルールメソッド目的品質要件
getRuleDefinition()Rector ツール向けの変換内容の記述。実際のダウングレードと一致する before/after サンプルの同梱。
getNodeTypes()ルールが検査する AST ノードの限定。ノードリストをできるだけ小さく保つこと。
refactor()変換の適用、または変更なしでの返却。関連しないノードを変更せず、決定論的に保つこと。
フィクスチャテストbefore/after 出力の検証。最小の有効な入力と、少なくとも 1 つのスキップケースのカバー。
<?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);
}
}

開発中およびリリース候補の検証時には、ドライランを使用します。実際の出力は、ソース参照とターゲットブランチが確定している場合にのみ使用します。

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

生成されたパッケージの検証は、最新のビルドホストだけでなく、ターゲットランタイムでも実行すべきです。

拡張ポイント用途制約
Rector の設定ファイルターゲット固有のダウングレードポリシー。PHP 8.1 と PHP 7.4 のレーン分離。
カスタム Rector ルールプロジェクト固有の構文変換。メタデータとフィクスチャテスト必須。
Composer の調整スクリプト生成されたパッケージのアイデンティティ。SemVer に沿ったバージョニングの維持必須。
マージスクリプトソースパッケージ入力の選択と整形。ソースルートと出力ルートのログ記録必須。
ビルドワークフローリリースのオーケストレーション。生成された出力のターゲットランタイムでの検証必須。
  1. サポートされていない構文を最小のフィクスチャで再現します。
  2. カスタム Rector ルールを追加または更新します。
  3. ルール用の before/after フィクスチャを追加します。
  4. ドライビルドを実行します。
  5. 生成された出力をターゲットの PHP ランタイムで検証します。
  6. 必要に応じて、各恒久ターゲットブランチへ同じ論理的な変更を適用します。
  7. リリース成果物を、ソースタグとビルドスクリプトから再現可能な状態に保ちます。
障害対応すべき場所推奨される対応
ソースリポジトリの欠落コントラクト検証またはマージステージ。ビルドの停止とチェックアウト入力の修正。
Rector の解析失敗変換ステージ。フィクスチャへの縮小と、ルールまたは設定の更新。
生成された composer.json の不一致Composer の調整ステージ。生成済みメタデータではなく、生成スクリプトの修正。
ターゲット構文の失敗ランタイム検証。変換が修正されるまでのリリースブロック。
Pro ソースが利用できないビルド設定。意図したターゲットである場合に限る、パブリック成果物のビルド。
考慮事項デフォルトオーバーライドするタイミング
生成された出力読み取り専用の成果物。信頼できる情報源(source of truth)に決してしないこと。
ブランチモデル分離した恒久ターゲットブランチ。独立したプルリクエストによる変更同期の維持。
ビルドホスト最新の PHP。リリース準備状況の判断は、引き続きターゲットランタイムの検証。
カスタムルール小さく、フィクスチャに裏付けられたもの。明示的な before/after 例がない広範な変換の回避。
PHP 7.4 のレーン明示的にサポートされていない限り、コアのみ。ターゲットランタイムの検証なしに Pro の出力を含めないこと。
  • Rector ルールのメタデータテストが、すべてのカスタムルールをインスタンス化します。
  • フィクスチャテストが、各変換について変換前と変換後のコードをカバーします。
  • ドライビルドがリリースジョブの前に実行されます。
  • ターゲットランタイムの構文チェックとパッケージテストを、生成された出力に対して実行します。
  • Composer メタデータテストが、パッケージ名、バージョン、制約、replace マップ、ライセンスをアサートします。
  • ビルドログに、ソースパス、ターゲットパス、ターゲットランタイム、ドライラン状態、Pro の取り込み状態を含めます。