ソリューション

プルリクエストごとのプレビュー用データベース

プルリクエストが開いたらデータベースのブランチを作成し、閉じたら削除します。各プレビューは実データから始まり、専用のコンピュートで動くため、マイグレーションやテストがメインブランチに触れることはありません。

しくみ

  1. 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\"}"
  2. 02

    プレビューをブランチに向ける

    ブランチにはそれぞれプライマリコンピュートが付きます。プロジェクトのブランチ一覧を取得し、新しいコンピュートのステータスが READY になったら、その host をプレビューのマイグレーション、テスト、アプリに使います。

    curl "https://relyt.one/api/v1/projects/$PROJECT_ID/branches" \
      -H "Authorization: Bearer $RELYT_API_KEY"
  3. 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 キーはシークレットとして保存します。
  • 子ブランチが残っているブランチは削除できず、プライマリブランチは削除できません。プレビューはメインブランチから作成し、親ブランチより先に削除してください。

ほかのソリューション

無料プランで試しましょう。

GitHub または Google でサインインし、プロジェクトと API キーを作成して、上の呼び出しを実行してください。クレジットカードは不要です。