Closed6

GitHub Appsを利用してGitHub Actionsから別プライベートリポジトリのデータを参照したい

Hirotaka MiyagiHirotaka Miyagi

やりたいこと

Backend/Frontendが別のリポジトリに分かれていて、Backend側のファイルの変更を検知してFrontend側でファイルの内容を参照し処理したい
→このうちまず別リポジトリのデータ参照をprivate access tokenなしに行いたい

Hirotaka MiyagiHirotaka Miyagi

GitHub Appsの作成をしてみる。最終的にはOrganizationに導入するが、今回は検証目的で個人のアカウントに紐づける。
https://github.com/settings/apps にアクセスし、以下のように設定する。

  1. 名前 ... GitHub Apps全体で一意な名前でないとダメらしい
  2. ホームページ ... 一旦暫定でexampleに
  3. 今回はコンテンツのreadだけできれば良い
  4. 自身のみインストールできるように
Hirotaka MiyagiHirotaka Miyagi

該当のリポジトリでワークフローを作っていく。
GitHub App Tokenというカスタムアクションを利用する。

https://github.com/marketplace/actions/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
Hirotaka MiyagiHirotaka Miyagi

とりあえず参照できていることが確認できた👍🏻

{
  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'
    }
  }
}

https://github.com/MH4GF/test-github-apps-read/runs/7387750691?check_suite_focus=true

このdownload_urlを使って、ファイルのダウンロードをしたりなどの処理をすれば良い

このスクラップは2022/07/18にクローズされました