GithubActions上で複数のprivate repoをpub getする方法
概要
sample1:
git:
url: git@github.com:sample1/sample1.git
ref: v1.0.0
sample2:
git:
url: git@github.com:sample2/sample2.git
ref: v1.0.0
Flutter プロジェクトにおいて、上記のように private repo に依存してる時、Github Actions 上で pub get するとエラーになります。
原因としては、Github Actions が private repo へのアクセス権限が持っていないためです。
こちらの方法の通り、private repo が1つの場合は、デプロイキーを設定すればアクセスできるようになります。
ただし、private repo が複数の場合は、各 private repo に対してデプロイキーを設定しないといけなく、管理が煩雑になります。
ここでは、マシンユーザを使用することによって、単一のデプロイキーで複数の private repo にアクセスする方法を紹介します。
方法
1.SSH キーの生成
SSH キーを生成します。
各種パラメータは適宜調整してください。
ssh-keygen -t ed25519 -f key -C "xxx@example.com"
2.マシンユーザの設定
通常のユーザーを作成するのと同じように Github 上にユーザーを作成します。
マシンユーザーの "Settings > SSH and GPG keys > SSH Keys" ページに 「1.SSH キーの生成」で作成した公開鍵を登録します。
また、マシンユーザーを該当するリポジトリへコラボレータとして招待します。
3.秘密鍵を登録
下記では 「1.SSH キーの生成」で作成した秘密鍵を GithubActions の Secrets にPRIVATE_SSH_KEY
として登録し、webfactory/ssh-agent
を使用してアクセスしています。
これにより private repo の pub get が可能になりました 🎉
- uses: webfactory/ssh-agent@v0.7.0
with:
ssh-private-key: ${{ secrets.PRIVATE_SSH_KEY }}
- name: setup flutter
id: flutter-action
uses: subosito/flutter-action@v2
with:
channel: "stable"
- name: Install packages
run: flutter pub get
備考
"ボット" またはその他の自動化された手段で "アカウント" を登録することは許可されていません。
これは、アカウントの生成を自動化することはできないということです。 しかし、プロジェクトや組織内でデプロイスクリプトのような自動化タスクのために 1 つのマシンユーザを作成したいなら、それはまったく素晴らしいことです。
https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/managing-deploy-keys#machine-userss
利用規約的にも、アカウントの自動生成を禁止してるだけで、自動化タスクのためにマシンユーザを作成することは許可されているようです
参考
Discussion