要約

背景とモチベーション(何が嬉しいか)

背景と困りごと

モチベーション

Vercelがどう動いているか

前提

GitHubのbase branch を develop ブランチ staging環境を staging ブランチ Production環境を main ブランチ とするような一般的なGit flow + Pull request の運用を行なっていることとする

Vercelの通常の動き

普通にVercel teamに $20 /mon 課金して memberとして招待された場合の話。

あらかじめ 、Settings → ProjectSettings → Domains develop ブランチに紐づく domain を develop-vercel-example.vercel.app , staging ブランチに紐づく domain を staging-vercel-example.vercel.app , main ブランチに紐づくdomainを vercel-example.app ,

としておく。

Vercel プロジェクトを GitHub リポジトリとインテグレートすると、

  1. Vercel の GitHub Apps経由でGitHubリポジトリの各 branch に対して Push を検知し、その後自動で Vercel 環境上の preview 環境としてデプロイされる(ここで生成される URL は branch 毎、Push 毎に独自のものが発行される)。
  2. 各Preview環境 が Pull Request によって base branchにマージされるとマージ元の HEAD がそのままベースブランチに移行(alias)される。 つまり、現在の環境だと staging にマージされると staging への Pull request 段階で作成された preview deployment が staging 環境、つまり staging-vercel-example.vercel.app に移行される。

これを自動でやってくれるのは本当に便利である一方で、VercelのTeamに招待したメンバーのみがこのフローを使うことができる。 すなわち、このままでは課金してVercelのメンバーに招待しない限り、Deploymentの作成とDomainとの紐付けができない。

Vercel上のdeploymentを自動CLIで再現する

上記の通常の動き、1, 2 をGitHub Actions の CI上でなんとかできないか? 色々調べた結果、以下のことが可能