ライフサイクルセーフな検証
トリガーと境界
タスク完了、レビューハンドオフ、ワークスペースの破棄、または現在のワーキングディレクトリを削除または移動する可能性のある他の承認された遷移の前に使用してください。このスキルは、クリーンアップ、ライフサイクル遷移、ステータス変更、プロセス終了、または再試行を許可しません。プラットフォームの実際のライフサイクル契約に従ってください。すべての遷移がワークツリーを削除するわけではなく、成功した遷移がワーカープロセスを停止する必要はありません。
遷移前
- 正確なIDを確立します:タスク/レコードID、ボードまたは名前空間、プロファイル/アカウント、リポジトリ、期待される状態。ディレクトリを変更した後、ツールの暗黙的な現在のタスクに依存しないでください。プラットフォームがサポートする明示的なセレクタを使用します。
- クリーンアップセマンティクスを調査し、タスク所有の場所と永続的な場所を特定します。遷移が削除できるすべてのワークスペースの外にある、既存の安定したディレクトリを選択します。親パスは、それ自体がクリーンアップ後も存続する場合にのみ安全です。使い捨てワークスペースへのシンボリックリンクは耐久性のある場所ではありません。実際のパスを解決します。
- 最初に受け入れチェックを完了します。必要なレポート、チェックサム、コミット、添付ファイルを、プラットフォームがサポートする耐久性のあるアーティファクトメカニズム、またはユーザーが承認した別の永続的な場所を通じて保存します。正確なアーティファクトのIDと内容を読み返します。コメント内のパス文字列は、名前付きのファイルを保存しません。
- 使い捨てディレクトリの外に、コンパクトな遷移前のレシートを記録します:正確なID、期待される遷移、証拠の場所、検証コマンド、未解決の制限事項。証拠を保存するためだけに未完了の受け入れを完了としてマークしないでください。代わりに適切な承認済みチェックポイント/ハンドオフ状態を使用します。
- 遷移後の検証が、古いチェックアウト、その仮想環境、相対ファイル、環境依存のボード検出、またはヘルパースクリプトを必要としないように計画します。遷移前に必要な実行可能ファイルと耐久性のあるパスを解決します。
遷移と正確な読み返し
- すでに承認された遷移を1回実行します。成功を望ましい耐久状態の証明として扱うことなく、そのレシートをキャプチャします。
- 実行ツールの明示的な安定したワーキングディレクトリパラメータを使用して読み返しを起動します。コマンド内の
cdは、ツールが記憶された削除済みcwdに入ろうとして失敗した場合、実行されない可能性があります。ツールにワーキングディレクトリのオーバーライドがない場合は、存続する場所にルートされた独立したセッションを使用します。読み返しの失敗を修復するためにライフサイクルミューテーションを繰り返さないでください。 - サポートされている読み取り専用インターフェースを使用して、正確なタスク/レコードと遷移イベントを読み取ります。期待されるステータス、関連する実行/イベントID、耐久性のあるアーティファクトの内容を検証します。削除自体が要求された場合は、ファイルシステムの不在とGitワークツリーの登録解除を個別に検証します。ディレクトリの不在がブランチや添付ファイルが削除されたことを意味するとは想定しないでください。
- プラットフォームが要求された状態を変換した場合(たとえば、レビューにルーティングした場合)、実際の状態を報告します。ワーカーがアクティブなままの場合は、そのことを個別に報告します。許可なく停止しないでください。
- エラーの場合、stderrとどのステージで失敗したかを調査します。
cd: ... No such file or directoryで126を返すラッパーは、ターゲット実行可能ファイルにchmodが必要であることの証拠ではありません。安定したディレクトリからの読み取り専用検証のみを再試行します。レコードを読み取れない場合は、遷移が確認されたが検証が不完全であることを報告します。
使い捨て回帰フィクスチャ
このフィクスチャは、独自の一時的なGitリポジトリとリンクされたワークツリーを作成し、合成レシートを兄弟の耐久性のあるディレクトリに保存し、そのフィクスチャワークツリーのみを削除し、削除されたcwdからの起動は失敗するが耐久性のあるディレクトリからの起動は成功することを証明します。また、Gitのワークツリーリストとレシートの内容をチェックします。実際のタスク、リモート、ユーザーワークスペース、プラットフォームAPIには一切触れません。
インストールされたパッケージディレクトリから実行します:
python -m unittest discover -s scripts -p 'test_*.py' -v
これはファイルシステム/サブプロセス/Gitの動作をテストするものであり、普遍的なプラットフォームクリーンアップの約束ではありません。実際の完了セマンティクスとリモートアーティファクトの読み返しには、依然としてプラットフォーム固有の検証が必要です。デモンストレーションとしてユーザーのワークスペースに対して削除コマンドを実行しないでください。
ソースと出典
繰り返し発生する削除済みcwd検証の失敗から独立して作成されました。プライベートログ、パス、タスク識別子は含まれていません。Pythonのsubprocessドキュメントはcwd、リターンコード、子プロセスの起動失敗を文書化しています。Gitワークツリーマニュアルはリンクされたワークツリーの作成、削除、リストを文書化しています。これらのプリミティブはフィクスチャをサポートしており、特定のタスクスケジューラの実装についての推論ではありません。