ソリューション
プルリクエストごとのプレビュー用データベース
プルリクエストが開いたらデータベースのブランチを作成し、閉じたら削除します。各プレビューは実データから始まり、専用のコンピュートで動くため、マイグレーションやテストがメインブランチに触れることはありません。
しくみ
01
プルリクエストが開いたらブランチを作成
CI のジョブが API キーで Open API を呼び出し、メインブランチからブランチを作成します。ブランチは親ブランチのコピーオンライトによる分岐で、データベースの大きさにかかわらず数秒で準備できます。
curl -X POST "https://relyt.one/api/v1/projects/$PROJECT_ID/branches" \ -H "Authorization: Bearer $RELYT_API_KEY" \ -H "Content-Type: application/json" \ -d "{\"name\":\"pr-$PR_NUMBER\",\"parentBranchSlug\":\"$MAIN_BRANCH_SLUG\"}"02
プレビューをブランチに向ける
ブランチにはそれぞれプライマリコンピュートが付きます。プロジェクトのブランチ一覧を取得し、新しいコンピュートのステータスが READY になったら、その host をプレビューのマイグレーション、テスト、アプリに使います。
curl "https://relyt.one/api/v1/projects/$PROJECT_ID/branches" \ -H "Authorization: Bearer $RELYT_API_KEY"03
プルリクエストが閉じたら削除
もう一度呼び出すと、ブランチとそのコンピュートが削除されます。メインブランチは変更されません。
curl -X DELETE "https://relyt.one/api/v1/projects/$PROJECT_ID/branches/$BRANCH_SLUG" \ -H "Authorization: Bearer $RELYT_API_KEY"
今すぐ使える機能
フィクスチャではなく実データ
ブランチは親ブランチの全データを持った状態で始まります。変更していないデータは親と共有するため、新たにストレージを使うのはプレビューで加えた変更分だけです。
専用のコンピュート
プレビューへのクエリはそのブランチのコンピュートで実行され、メインブランチのコンピュートは使いません。アイドル状態のコンピュートは一時停止でき、次の接続で再開します。データには影響しません。
どの CI からでもスクリプト化
REST の Open API と API キーで、ブランチの作成、一覧、名前の変更、削除ができます。ブランチ名はプロジェクト内で一意なので、同じプルリクエストのジョブが 2 回実行されても、2 回目は 409 を返し、ブランチは増えません。
注意事項
- Relyt One はリポジトリに何もインストールしません。呼び出しは GitHub Actions のジョブなど、ご自身の CI ワークフローで実行し、API キーはシークレットとして保存します。
- 子ブランチが残っているブランチは削除できず、プライマリブランチは削除できません。プレビューはメインブランチから作成し、親ブランチより先に削除してください。