👋

GithubActions上で複数のprivate repoをpub getする方法

2024/04/16に公開

概要

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

利用規約的にも、アカウントの自動生成を禁止してるだけで、自動化タスクのためにマシンユーザを作成することは許可されているようです

参考

https://zenn.dev/najeira/articles/2023-03-31-zenn-xaehahc6phahdahkuphe

https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/managing-deploy-keys#machine-users

GitHubで編集を提案

Discussion