(追記)Basic認証で簡単ぞと言うアドバイスをいただいて更新しました!ありがとうございます!
経緯
もともとXcodeプロジェクトのプルリクをトリガーに、Danger
によるプルリクのチェックをしていました。
が、Swagger
で作成したAPIクライアントのプライベートリポジトリがPodfile
に追加されたことで、pod install
が失敗するようになってしまった、という経緯です。
AccessTokenによる認証で解決
SSH鍵を設定して行う方法(結論〜以降のセクション)でも目的を果たすことができましたが、アドバイスをいただき、Personal Access Token
によるBasic認証でスマートに行うことができました!
トークン発行
発行は https://github.com/settings/tokens こちらから行えます(Settings > Developer settings > Personal access tokens)
これだけでした。あとは生成した後に表示されるトークンをメモしておきましょう。
同じトークンは二度とGithub上で表示することはできません!(再生成になります)
PodfileのURLに書き換える
もとURLが、
https://github.com/dazy1030/TestRepository.git
でトークンが、
abc123
だった場合Basic認証を使用したURLは、
https://abc123:x-oauth-basic:github.com/dazy1030/TestRepository.git
となります。
一度ローカルの環境でcloneできるか試しておくと良いと思います。
これだけでpod install
成功しました!
SSHのときの欠点
以下の点からBasic認証の方が良いなと感じました。
- 設定までの作業が多い
- 該当リポジトリにSSH登録したユーザーと同じ権限でしか振る舞えない
- ローカル環境ではhttpsで
pod install
していた場合、sshに変更した際にプロジェクトに参画しているユーザーみんなにssh設定を行ってもらわなければならない(もともとしておけって話ではあるが)
以下SSHによる方法
結論
ワークフローのyamlはこんな感じになりました(無駄とかaction古くね?ってのあると思います。アドバイスお願いします…)
name: Danger
on: [pull_request]
jobs:
build:
runs-on: macos-latest
steps:
- uses: actions/checkout@v1
- name: Setup SSH
env:
SSH_PRIVATE_KEY: ${{ secrets.ACTIONS_SSH_PRIVATE_KEY }}
run: |
mkdir -p ~/.ssh
ssh-keyscan github.com > ~/.ssh/known_hosts
echo "$SSH_PRIVATE_KEY" > ~/.ssh/id_rsa && chmod 600 ~/.ssh/id_rsa
- name: Setup ruby
uses: actions/setup-ruby@v1
with:
ruby-version: '2.6'
- name: Cache bundle
uses: actions/cache@v1
with:
path: vendor/bundle
key: ${{ runner.os }}-gem-${{ hashFiles('**/Gemfile.lock') }}
restore-keys: |
${{ runner.os }}-gem-
- name: Bundle install
run: |
gem install bundler
bundle config path vendor/bundle
bundle install --jobs 4 --retry 3
- name: Cache CocoaPods
uses: actions/cache@v1
with:
path: Pods
key: ${{ runner.os }}-pods-${{ hashFiles('**/Podfile.lock') }}
restore-keys: |
${{ runner.os }}-pods-
- name: Pod install
run: bundle exec pod install
- name: Run danger
run: bundle exec danger
フローをざっくり言うと、
- チェックアウト
- SSHできるように設定
-
Gemfile
からbundle install
- (CococaPodsのキャッシュ)
-
Podfile
からbundle exec pod install
bundle exec danger
今回手を加えたのは2.の部分だけでした。
SSHの設定
ssh-keyを作成
まず、actionを実行するマシンのssh-keyを作成します。
本当は実行するマシン内で作成して〜ってのが正規手順っぽくて良いのですが、実行環境の保存やら初回実行時やら考えるのが面倒だったので、外の環境で作成しました。
秘密鍵をactionの実行マシンに配置する
actions内で作成した秘密鍵を持たせるために、Secrets
に環境変数として登録します
https://github.com/{ユーザー名}/{レポジトリ名}/settings/secrets
で登録できます。
登録後は、action内で(ACTIONS_PRIVATE_KEYと名付けたとします)
env:
PRIVATE_KEY: {{ secrets.ACTIONS_PRIVATE_KEY }}
のように呼び出すことができます。
そうしたら、~/.ssh/id_rsa
においてやるだけです。
ssh-keyscan github.com > ~/.ssh/known_hosts
はyes/no聞かれた時に失敗しちゃわないかな…と思い付けたのでちゃんと役目があるか確認できてません
Githubアカウントに公開鍵を登録
SSHでアクセスできるように公開鍵の方をアカウントに紐づけておきます。
https://github.com/settings/keys
ここから登録できます。
これでSSHでgithubにアクセスできるようになりました。
(今回は、個人のアカウントではなくプロジェクトのアカウント的なのが存在したので、そのアカウントに紐付けましたが個人でやるときは微妙かもしれませんね…)
最後に忘れずにPodfile
のリポジトリのアドレスをssh://~
に直して完了です。
かんそー
Github Actionsはまだまだ進化の途中って感じなので確立した運用にはまだかかりそうだなーと思いました。