Closed16

Github ActionsでGITHUB_TOKEN以外を使用する

checkout時に別のtokenを使う方法

https://github.com/actions/checkout/tree/main#checkout-multiple-repos-private

- name: Checkout private tools
  uses: actions/checkout@v3
  with:
    repository: my-org/my-private-tools
    token: ${{ secrets.GH_PAT }} # `GH_PAT` is a secret that contains your PAT
    path: my-tools

他のstepで別のtokenを使う方法

分からない

ユースケース

ansible-galaxy install -r requirements.yml
で別のPrivateリポジトリから取得したい(Publicリポジトリから取得できることは確認済み)

tokenの取得方法

https://zenn.dev/suzutan/articles/how-to-use-github-apps-token-in-github-actions

GITHUB_TOKENを書き換えてもダメっぽい

checkoutと同時にtokenがセットされるらしいので、checkoutをappのtokenにすればできるかもしれない。
https://github.com/marketplace/actions/setup-git-token

本来自己リポジトリのcheckoutはGITHUB_TOKENでできるのに余計な権限を付ける事になるのが気持ち悪い

そもそもcheckout時にtokenセットしても同じエラー
checkout時のログを見ると.extraheaderを設定することで認証情報をセットしてるもよう

https://zenn.dev/tfukumori/articles/376c4c2f83e06e

これだとchekoutしたリポジトリ自体はtokenで認証できても、Ansibleで持ってきたいリポジトリには及ばないので当然か。
ログをよく見ると、リポジトリ単体じゃなくて全体の設定になってるのでセットできてる?
いやgit config localだからダメなのか

ローカルでhttp.extraHeaderを使用してpullできることは確認した[1]

$ b64_token=$(echo -n "${token}" | base64)
$ git config --global http.extraHeader "Authorization: Basic ${b64_token}"
$ git clone target-repo

同じことをGithub Actionsでやると失敗する。checkout時の設定のほうが優先されてる?[2]
できた
もっと具体的なURLを指定すればいいかと思ったが、そもそもローカルでcheckoutと同様にセットしても認証できなかった
git config --global http.https://github.com/.extraheader "Authorization: Basic ${b64_token}"
↓と同じようなことをしようとしてるだけなのになぜ・・・?
なんかGitHub Actions上だといけた
https://zenn.dev/tfukumori/articles/376c4c2f83e06e

脚注
  1. Azureのドキュメントのコマンドだと余計なコロンが入ってて失敗した。なんでそういう記述になってるのか不明 ↩︎

  2. git config --localが効いているのだとすれば、checkoutをtoken使ってやればOKな筈だが何故失敗したのか ↩︎

GitHub Actions上でPATを使って認証するのをちゃんと試してなかったのでPATに変えてみたところ成功した

    - name: Set app token
      run: |
        b64_token=$(echo -n "${{ secrets.TMP_PAT }}" | base64)
        git config --global http.extraheader "Authorization: Basic ${b64_token}"
        git clone target-repo

http.extraheaderを使えばできるのは合ってたけど、GitHub Appからtoken取るところがなんかおかしいっぽい

GitHub Actions上だとhttp.https://github.com/.extraheader指定でもいけた
なんでローカルで失敗したのか不明

    - name: Set app token
      run: |
        b64_token=$(echo -n "${{ secrets.TMP_PAT }}" | base64)
        git config --global http.https://github.com/.extraheader "Authorization: Basic ${b64_token}"
        git clone target-repo
このスクラップは2022/08/04にクローズされました
作成者以外のコメントは許可されていません