Vercel のビルド時は、プライベートリポジトリとなっているサブモジュールを取得できない。
Github上の Vercel のアプリに権限を付与してもできない。
Fine-granted personal access token を使って HTTP で取得させる必要がある。
キモとしては、ビルド中に下記を行う。
git submodule set-url <my-submodule> "https://${GITHUB_PAT}@github.com/ytyng/<my-submodule>.git"
git submodule sync
git submodule update --init
https://github.com/settings/tokens?type=beta
上記ページから、 Generate new token をクリック。
Repository access は、 Only select repositories を選択し、必要最低限のリポジトリを選択する。
Repository permissions は Contents の Read-only のみ付与する。
Generate token ボタンを押して生成する。
Vercel のプロジェクトの Settings → Environment Variables に登録する。私は GITHUB_PAT という名前で登録した。
sh/build-for-vercel.sh
という名前で作った。
#!/usr/bin/env bash
cd $(dirname $0)/../ || exit
if [ -z "${GITHUB_PAT}" ]; then
echo "環境変数 GITHUB_PAT が設定されていません。Github の vercel-submodule トークンを再生成して、Vercel の環境変数 GITHUB_PAT に登録してください。"
echo "https://github.com/settings/tokens?type=beta"
echo "https://vercel.com/<my-own-projects>/<project-name>/settings/environment-variables"
exit 1
fi
echo "サブモジュールの更新に失敗する場合は、Github の vercel-submodule トークンを再生成して、Vercel の環境変数 GITHUB_PAT に登録してください。"
echo "https://github.com/settings/tokens?type=beta"
echo "https://vercel.com/<my-own-projects>/<project-name>/settings/environment-variables"
git submodule set-url <my-submodule> "https://${GITHUB_PAT}@github.com/ytyng/<my-submodule>.git"
git submodule sync
git submodule update --init
# 本来のビルドスクリプト
npm run generate
今回は Nuxt の静的コンテンツ生成なのでこのような形になる
{
"buildCommand": "sh/build-for-vercel.sh",
"outputDirectory": ".output/public"
}
ビルドの最初で、どうしても
Warning: Failed to fetch one or more git submodules
の警告が出てしまうが、気にしない。
submodule update ではなくクローンしなおしても動く。
rm -r <my-submodule>
git clone --depth 1 --branch main "https://${GITHUB_PAT}@github.com/ytyng/<my-submodule>.git" <my-submodule>
コメント