0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

「あ、private repo は操作できないんだ?」と思ったときに確認すべき箇所

Posted at

コンテキスト

  • GitHub App の installation token を利用して org 配下のリポジトリを操作している
  • 適切な権限を付与している(つもり)にもかかわらずうまくいかない:
    • public repo は操作できる
    • private repo は操作できない

結論から言うと

「public repo は操作できるが private repo は操作できない」ように見えるときには、おそらく下記のいずれかに該当しているので一つずつ見直すとよい。

  • a. 適切なトークンを生成できていない
  • b. 権限を付与できていない
  • c. トークンを利用できていない

いずれも基本的な事項なので大丈夫と思いがちだが、取り組んでいるタスクが、public repo に対しては特別な権限が不要なタスク(例:「issue 作成」)であった場合、原因特定が遅れてしまうことがある。
というのも、上記 a~c のいずれかに失敗していた場合、権限獲得はまったくできていないにもかかわらず、public repo に対してだけは操作が可能であるため、「この操作は public repo に対しては可能だが private repo では可能なのかもしれない」と勘違いしてしまうからだ。要注意。

状況例

  • やりたいこと: あるリポジトリの GitHub Actions から、organization 配下の別リポジトリに issue を作る
organization
├── issue-creator-repo
├── target-public-repo
└── target-private-repo

issue-create-repo から、target-public-repo および target-private-repo に issue を作りたい

  • 確認済みの事項:
    • organization の GitHub App に付与している権限: repo:issue の 'write' 権限
    • インストール先: all repositories

見落としパターン 1: 生成しているトークンが全リポジトリ操作用になっていない

actions/create-github-app-token を利用している場合には "Create a token for multiple repositories in the current owner's installation" に該当

on: [issues]

jobs:
  hello-world:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/create-github-app-token@v1
        id: app-token
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.PRIVATE_KEY }}
          owner: ${{ github.repository_owner }}   # この行を忘れていると、生成されるトークンは全く役に立たない
      - uses: peter-evans/create-or-update-comment@v3
        with:
          token: ${{ steps.app-token.outputs.token }}
          issue-number: ${{ github.event.issue.number }}
          body: "Hello, World!"

全く役に立たないトークンを使った場合にも public repo だけは操作できているように見えるので気づくのが遅れることがある。

見落としパターン 2: 実際に必要な権限を把握できていない

GitHub CLI を使っていると起こりがち

      - uses: actions/create-github-app-token@v1
        id: generate_token
        with:
          app-id: ${{ vars.APP_ID }}
          private-key: ${{ secrets.PRIVATE_KEY }}
          owner: ${{ github.repository_owner }}

      - run: |
          # 実は背後で repository.defaultBranchRef の GraphQL クエリが実行されるため `repo:contents` の read 権限が必要
          gh issue create \
          --repo rindrics-sandbox-org/private-repo \
          --title foo \
          --body bar
        env:
          GITHUB_TOKEN: ${{ steps.generate_token.outputs.token }}

実際にはトークンの権限が足りていないのだが public repo だけは操作できているように見えるので気づくのが遅れることがある。

見落としパターン 3: 権限を付与したつもりになっている

GitHub App の権限不足に気づき、画面から権限を追加した場合、権限の更新を「承認」する必要がある

image.png
image.png

実際にはトークンの権限が足りていないのだが public repo だけは操作できているように見えるので気づくのが遅れることがある。


気をつけましょう

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?