Open4
GitHubのプライベートリポジトリにおいてある自作のfastlaneプラグインを読み込む
以下のように自作のfastlaneプラグインをGit参照により依存関係に追加する。
fastlane/Pluginfile
# Autogenerated by fastlane
#
# Ensure this file is checked in to source control!
# ...
+gem 'fastlane-plugin-my_plugin_name', git: 'https://github.com/owner/fastlane-plugin-my_plugin_name'
これがプライベートリポジトリだと、bundle install
した時に以下のようなエラーが発生する。
% bundle install
Git error: command `git clone --bare --no-hardlinks --quiet -- https://github.com/owner/fastlane-plugin-my_plugin_name
/Users/ide/.rbenv/versions/3.3.4/lib/ruby/gems/3.3.0/cache/bundler/git/fastlane-plugin-my_plugin_name-3a9cc5d833042b0b3147a0c0d0126c19a98bf838` in directory /Users/user/work has
failed.
If this error persists you could try removing the cache directory '/Users/user/work
まずローカルで bundle install
が成功するようにする。
以下のサイトを参考に、GitHub CLIをインストールし、Webブラウザーで認証する。
% gh auth login
? What account do you want to log into? GitHub.com
? What is your preferred protocol for Git operations on this host? HTTPS
? Authenticate Git with your GitHub credentials? Yes
? How would you like to authenticate GitHub CLI? Login with a web browser
! First copy your one-time code: xxxx-xxxx
Press Enter to open github.com in your browser...
✓ Authentication complete.
- gh config set -h github.com git_protocol https
✓ Configured git protocol
✓ Logged in as user-name
GitHub Actions上で bundle install
が成功するようにする。
オリジナルのGitHub Appsに、対象プラグインのリポジトリへのReadアクセス権を付与し、そのGitHub Appsのアクセストークンにより bundle install
が実行されるようにする。
some-actions.yml
# ...
+ - name: Generate token
+ id: generate-token
+ uses: tibdex/github-app-token@v2
+ with:
+ app_id: ${{ secrets.MY_APP_ID }}
+ private_key: ${{ secrets.MY_APP_PRIVATE_KEY }}
- name: Install Ruby, bundler, fastlane and other dependencies
uses: ruby/setup-ruby@v1
with:
ruby-version: ${{ steps.get-ruby-version.outputs.ruby-version }}
bundler-cache: true
+ env:
+ BUNDLE_GITHUB__COM: x-access-token:${{ steps.generate-token.outputs.token }}
# ...
CircleCI上で bundle install
が成功するようにする。
GitHub Actionsと同様にGitHub Appsのアクセストークンにより bundle install
が実行されるようにする。
.circleci/config.yml
# ...
- jq/install
- run:
name: Generate access token for GitHub App
command: |
github_app_installation_id="${MY_GITHUB_APP_INSTALLATION_ID}"
github_app_id="${MY_GITHUB_APP_ID}"
github_app_private_key_path="private-key.pem"
github_app_private_key_pem_base64="${MY_GITHUB_APP_PRIVATE_KEY_PEM_BASE64}"
github_app_access_token_output_env_name="GITHUB_APP_ACCESS_TOKEN"
header=$(echo -n '{"alg":"RS256","typ":"JWT"}' | base64 | tr -d '\n')
now=$(date "+%s")
iat=$((${now} - 60))
exp=$((${now} + (10 * 60)))
payload=$(echo -n "{\"iat\":${iat},\"exp\":${exp},\"iss\":${github_app_id}}" | base64 | tr -d '\n')
unsigned_token="${header}.${payload}"
echo "${github_app_private_key_pem_base64}" | base64 --decode > "${github_app_private_key_path}"
signed_token=$(echo -n "${unsigned_token}" | openssl dgst -binary -sha256 -sign "${github_app_private_key_path}" | base64 | tr -d '\n')
jwt="${unsigned_token}.${signed_token}"
generate_access_token_response=$(
curl -s -X POST \
-H "Authorization: Bearer ${jwt}" \
-H "Accept: application/vnd.github.v3+json" \
"https://api.github.com/app/installations/${github_app_installation_id}/access_tokens"
)
if [[ $? -ne 0 ]]; then
echo "Failed to generate access token."
echo "Response: ${generate_access_token_response}"
exit 1
fi
echo "Succeeded to generate access token."
access_token=$(echo "${generate_access_token_response}" | jq -r ".token")
echo "${github_app_access_token_output_env_name}=${access_token}" >> $BASH_ENV
echo "The access token has been set as an environment variable: ${github_app_access_token_output_env_name}"
- run:
name: Generate access info for Bundler
command: echo "BUNDLE_GITHUB__COM=x-access-token:${GITHUB_APP_ACCESS_TOKEN}" >> $BASH_ENV
- run:
name: Install dependencies
command: bundle install
environment:
BUNDLE_GITHUB__COM: $BUNDLE_GITHUB__COM
# ...