Closed6
GitHub Appsを利用してGitHub Actionsから別プライベートリポジトリのデータを参照したい
やりたいこと
Backend/Frontendが別のリポジトリに分かれていて、Backend側のファイルの変更を検知してFrontend側でファイルの内容を参照し処理したい
→このうちまず別リポジトリのデータ参照をprivate access tokenなしに行いたい
GitHub Appsを使えばPATなしにプライベートリポジトリにアクセスできるという噂を聞いた
GitHub Appsの作成をしてみる。最終的にはOrganizationに導入するが、今回は検証目的で個人のアカウントに紐づける。
https://github.com/settings/apps にアクセスし、以下のように設定する。
- 名前 ... GitHub Apps全体で一意な名前でないとダメらしい
- ホームページ ... 一旦暫定でexampleに
- 今回はコンテンツのreadだけできれば良い
- 自身のみインストールできるように
https://github.com/settings/apps/{作成したアプリのID}/installations
にアクセスし、アプリのインストールを進める
参照したいリポジトリを選択しsave
今回は https://github.com/MH4GF/test-github-apps-read というリポジトリから、https://github.com/MH4GF/test-github-apps-content (プライベートリポジトリ) にあるsample.jsonを参照してみる。
該当のリポジトリでワークフローを作っていく。
GitHub App Tokenというカスタムアクションを利用する。
とりあえず暫定でこのように設定してみる
name: Read another repository
on: [push]
jobs:
read:
runs-on: ubuntu-latest
steps:
- name: Generate token
id: generate_token
uses: tibdex/github-app-token@v1
with:
app_id: ${{ secrets.APP_ID }}
private_key: ${{ secrets.PRIVATE_KEY }}
- uses: actions/github-script@v6
with:
github-token: ${{ steps.generate_token.outputs.token }}
script: |
const result = await github.rest.repos.getContent({
owner: "MH4GF",
repo: "test-github-apps-content",
path: 'sample.json'
})
console.log(result)
repository secretsにAPP_IDとPRIVATE_KEYを追加しておく。
- APP_ID ... 作成したGitHub Appに表示されているID
- PRIVATE_KEY ... 作成したGitHub Appのgenerate keyにて手に入るpem
とりあえず参照できていることが確認できた👍🏻
{
status: 200,
url: 'https://api.github.com/repos/MH4GF/test-github-apps-content/contents/sample.json',
headers: {
'access-control-allow-origin': '*',
'access-control-expose-headers': 'ETag, Link, Location, Retry-After, X-GitHub-OTP, X-RateLimit-Limit, X-RateLimit-Remaining, X-RateLimit-Used, X-RateLimit-Resource, X-RateLimit-Reset, X-OAuth-Scopes, X-Accepted-OAuth-Scopes, X-Poll-Interval, X-GitHub-Media-Type, X-GitHub-SSO, X-GitHub-Request-Id, Deprecation, Sunset',
'cache-control': 'private, max-age=60, s-maxage=60',
connection: 'close',
'content-encoding': 'gzip',
'content-security-policy': "default-src 'none'",
'content-type': 'application/json; charset=utf-8',
date: 'Mon, 18 Jul 2022 10:46:53 GMT',
etag: 'W/"ebf753a4c9af5e6003674ae2a2c4d0a03e1dbed7"',
'last-modified': 'Mon, 18 Jul 2022 09:43:56 GMT',
'referrer-policy': 'origin-when-cross-origin, strict-origin-when-cross-origin',
server: 'GitHub.com',
'strict-transport-security': 'max-age=31536000; includeSubdomains; preload',
'transfer-encoding': 'chunked',
vary: 'Accept, Authorization, Cookie, X-GitHub-OTP, Accept-Encoding, Accept, X-Requested-With',
'x-content-type-options': 'nosniff',
'x-frame-options': 'deny',
'x-github-media-type': 'github.v3',
'x-github-request-id': '0604:7334:1866FCF:2D9CB60:62D53A1D',
'x-ratelimit-limit': '5000',
'x-ratelimit-remaining': '4999',
'x-ratelimit-reset': '1658144813',
'x-ratelimit-resource': 'core',
'x-ratelimit-used': '1',
'x-xss-protection': '0'
},
data: {
name: 'sample.json',
path: 'sample.json',
sha: 'ebf753a4c9af5e6003674ae2a2c4d0a03e1dbed7',
size: 36,
url: 'https://api.github.com/repos/MH4GF/test-github-apps-content/contents/sample.json?ref=main',
html_url: 'https://github.com/MH4GF/test-github-apps-content/blob/main/sample.json',
git_url: 'https://api.github.com/repos/MH4GF/test-github-apps-content/git/blobs/ebf753a4c9af5e6003674ae2a2c4d0a03e1dbed7',
download_url: 'https://raw.githubusercontent.com/MH4GF/test-github-apps-content/main/sample.json?token=A2DROYJCFJZ33GF5ZIP3NGTC2U5FTAVPNFXHG5DBNRWGC5DJN5XF62LEZYA2GVFYWFUW443UMFWGYYLUNFXW4X3UPFYGLN2JNZ2GKZ3SMF2GS33OJFXHG5DBNRWGC5DJN5XA',
type: 'file',
content: 'ewogICJmb28iOiAiYmFyIiwKICAiYmF6IjogInBpeW8iCn0K\n',
encoding: 'base64',
_links: {
self: 'https://api.github.com/repos/MH4GF/test-github-apps-content/contents/sample.json?ref=main',
git: 'https://api.github.com/repos/MH4GF/test-github-apps-content/git/blobs/ebf753a4c9af5e6003674ae2a2c4d0a03e1dbed7',
html: 'https://github.com/MH4GF/test-github-apps-content/blob/main/sample.json'
}
}
}
このdownload_urlを使って、ファイルのダウンロードをしたりなどの処理をすれば良い
このスクラップは2022/07/18にクローズされました