前提条件
開始する前に、以下を準備してください。SANDBOX_USERアイデンティティとアクセス管理 (IAM) action が付与された CoreWeave API アクセストークン。API アクセストークンを管理するを参照してください。- サーバーレスサンドボックスへのアクセス権と、CPU 1 基およびメモリ 2 GiB 分のキャパシティ。はじめにを参照してください。
- Git、
uv、および Python 3.11 以降。Python はuvを使用してインストールできます。 - ワークフローと Actions シークレットを追加できる公開 GitHub リポジトリ。
- 参考情報としての AI レビューに使用する Anthropic APIキー (オプション) 。
サンプルを実行する
リポジトリを接続する前に、バンドルされているサンプルを使用して、認証、リモート実行、クリーンアップが正しく動作することを検証します。-
recipes リポジトリをクローンし、ロックされた依存関係をインストールします。
-
CoreWeave トークンを設定します。
[API-ACCESS-TOKEN]は、トークンのシークレット値に置き換えてください。 -
サンプルを実行し、結果を確認します。
ターミナルに
Status: passedと表示されれば成功です。結果ファイルにはreturncode: 0とstopped: trueが記録されます。このサンプルでは、加算が正しく行われることを確認し、さらにオーケストレーター側の CoreWeave、GitHub、Anthropic のキーがサンドボックス環境に含まれていないことを検証します。 -
失敗時の動作を検証します。
このコマンドは意図的にステータス
1で終了します。結果ファイルにはstatus: failed、テストのreturncode: 7、stopped: trueが記録されます。
リポジトリのコミットをテストする
レシピディレクトリで、固定の MarkupSafe コミットを取得して依存関係をインストールし、サンドボックス内でpytest を実行します。
Status: passed と表示されることを確認してください。ご自身のプロジェクトで使用する場合は、リポジトリ、完全なコミットハッシュ、テストコマンドを置き換えてください。依存関係のインストールが失敗した場合にチェックも失敗させるには、インストールコマンドとテストコマンドを && でつなぎます。
このレシピでは python:3.12-bookworm を使用します。プロジェクトで別のツールチェーンが必要な場合は、run.py ファイル内の container_image 設定を変更してください。
このレシピは head コミット自体をチェックアウトします。GitHub が生成する合成マージコミットはテストしません。オーケストレーションスクリプトはローカルマシンまたは CI ランナー上で実行され、リポジトリのチェックアウトとテストコマンドはサンドボックス内で実行されます。
オプション: AI レビューを追加する
オーケストレーターの環境でANTHROPIC_API_KEY 環境変数を設定し、リポジトリ用のコマンドに --base [BASE-COMMIT-SHA] --review を追加します。[BASE-COMMIT-SHA] は、同じリポジトリ内のベースリビジョンを示す 40 文字の完全なコミットハッシュに置き換えてください。そのまま実行できる完全な例は、レシピの README に記載されています。
スクリプトは両方のリビジョンを取得し、git diff BASE...HEAD を計算します。差分、標準出力、標準エラーは、それぞれ最大 24,000 文字まで Anthropic に送信されます。モデルはツールを使用できません。スクリプトは応答を、人間がレビューするための参考テキストとして保存します。レビューリクエストが失敗した場合は、review_error フィールドにエラーの種類が記録されます。この場合もテスト結果は変わりません。
GitHub Actions ワークフローを追加する
このワークフローは、信頼できるリポジトリコントリビューターを対象に使用してください。ワークフロー定義はプルリクエストのマージ ref から取得されます。そのため、同一リポジトリからのプルリクエストでは、ワークフロー、テストコマンド、チェックアウト ref、シークレットの使用方法を変更できます。ベースブランチのファイルをチェックアウトしていても、プルリクエストによるこれらの変更は可能です。pull_request トリガーは変更しないでください。pull_request_target に変更する場合は、別途セキュリティ設計が必要です。
プルリクエストでこれらのチェックを実行するには、パブリックリポジトリにレシピをインストールします。
-
パブリックリポジトリのルートで、ランタイムファイルとワークフローをコピーします。
[RECIPES-CHECKOUT]は、recipes のクローンへのパスに置き換えてください。project のテストランナーに収集されないよう、レシピのtests/およびsample/ディレクトリは recipes のクローン内に残しておいてください。コピーしたファイルはリポジトリモードに対応しています。バンドルされたサンプルは recipes のクローンから実行してください。 -
.github/workflows/sandbox-ci.ymlにコピーしたworkflow.ymlファイルの内容を確認します。 -
ワークフローの
--commandに、project の依存関係をインストールしてテストを実行するコマンドを設定します。 -
CoreWeave トークンを値とする
CWSANDBOX_API_KEYという名前の Actions リポジトリシークレットを追加します。Using secrets in GitHub Actions を参照してください。 -
ワークフローと
ci/sandbox/のファイルを対象のベースブランチにマージします。ワークフローはオーケストレーションをプルリクエストのベースコミットから読み込むため、プルリクエストをテストする前に、これらのファイルがベースコミットに存在している必要があります。 - 同一リポジトリのプルリクエストを作成または更新します。
opened、synchronize、reopened イベントで実行されます。提供されているワークフローは、run.py ファイルとその依存関係ファイルをベースコミットからチェックアウトし、プルリクエストの head コミットハッシュをサンドボックスに渡します。また、contents: read 権限をリクエストし、チェックアウト認証情報の永続化を無効にします。
提供されているワークフローは、フォークからのプルリクエスト、Dependabot のプルリクエスト、および非公開リポジトリをスキップします。GitHub は、フォークや Dependabot のプルリクエストで実行されるワークフローにリポジトリシークレットを提供しません。スキップされたジョブは必須ステータスチェックを満たしたものとみなされるため、このチェックを必須にしても、スキップされたプルリクエストではテストが強制されません。Handling skipped but required checks を参照してください。
Actions で AI レビューを行う場合 (省略可能) は、レシピの手順に従って Anthropic のシークレットをテストステップに追加し、--review を有効にしてください。
結果を確認する
ジョブの概要を確認するには、Sandbox CI チェックを開きます。result.json ファイルと summary.md ファイルを入手するには、sandbox-ci-results アーティファクトをダウンロードします。このワークフローは、テストが失敗した場合でも結果をアップロードし、アーティファクトを 7 日間保持します。
結果ファイルには、テスト対象のコミット、サンドボックス ID、テストの戻りコード、取得した出力、クリーンアップの結果が含まれます。スクリプトは標準出力と標準エラーそれぞれの末尾 24,000 文字を保持するため、末尾に出力される失敗メッセージも確認できます。また、概要に含まれる返されたテキストはエスケープされ、テスト出力が CI ランナーのコンソールに直接出力されることはありません。失敗時には、ジョブの概要とアーティファクトを案内する固定テキストのエラーアノテーションが表示されます。
テストの実行が成功した場合、終了コードは 0 です。テストの失敗、セットアップエラー、タイムアウト、クリーンアップエラーの場合、終了コードは 1 になります。AI レビューはあくまで参考情報であり、この結果を変更することはありません。テストスイートに合格しても、送信されたコードのセキュリティが評価されたことにはなりません。
--timeout オプションには 1~300 秒を指定でき、デフォルトは 120 秒です。これとは別に、サンドボックスには 900 秒の有効期間の制限があります。
このレシピはコマンド出力を切り詰める前にバッファに格納するため、出力量の少ない小規模なリポジトリやテストスイートで使用してください。タイムアウトした場合、スクリプトは部分的なコマンド出力を含めずに status: error と error: SandboxTimeoutError を記録します。セットアップのタイムアウトやその他の制限については、レシピの README を参照してください。
クリーンアップ
スクリプトは、実行が成功した場合も失敗した場合も、finally ブロック内で stop(missing_ok=True) を呼び出します。クリーンアップ前にオーケストレーターが終了した場合でも、最大ライフタイムによって実行時間は制限されます。このレシピでは、スナップショット、ボリューム、サンドボックスのランナーは作成されません。
結果に cleanup_error フィールドが含まれている場合は、保存済みのサンドボックス ID と、実行時と同じ CoreWeave の認証情報を使用し、レシピのクリーンアップコマンドでサンドボックスを削除してください。その他のパターンについては、クリーンアップのパターンを参照してください。
必要な結果ファイルを保管したうえで、ローカルの outputs/ ディレクトリを削除してください。プルリクエストでサンドボックスを作成する必要がなくなった場合は、ワークフローを削除するか無効にしてください。