Open8
fork されたリポジトリからのプルリクで Actions のシークレットを参照できるようにしたい
メンテナンスしている OSS にたまにプルリクが飛んでくる
この OSS ではテストの中に GCP/AWS にアクセスするものがある
他人から飛んてきたプルリクでもいい感じにテストを実行したい
pull_request_target を使えばシークレットにアクセスできるのは知っているけど、任意のプルリクでそれをやるのは怖いので何か承認をはさみたい
なんて考えてたけど GitHub 公式ブログにやり方が解説されていた
日本語の解説も見つかった
sandbox で試してみた
name: CI
on:
pull_request:
pull_request_target:
types: [labeled]
jobs:
build:
runs-on: ubuntu-latest
if: ${{ github.event_name == 'pull_request' || (github.event_name == 'pull_request_target' && contains(github.event.pull_request.labels.*.name, 'safe to test')) }}
steps:
- uses: actions/checkout@v3
- run: ./scripts/echo-foo.sh
env:
FOO: ${{ secrets.FOO }}
job に対する if で pull_request_target
の場合は label を見る感じ
当然意図したとおりに secret にアクセスできていた
GitHub で pull_request_target labeled "safe to test"
で検索すると色々ヒットする
このリポジトリではイベントは pull_request_target
をだけにしている
依存している別の Actions はこれ
'safe to test'
がついているプルリクに push があると何でもかんでも実行するっぽい...?
後から攻撃のコードを追加されるとやばそう
このリポジトリは github.event.pull_request.head.repo.fork == false
を見ていて面白い
こうやってステータスが2つに分かれるのなんとかしたい
- fork が false のとき
- テストを実行
- fork が true のとき
- event がラベルの追加である
-
safe to test
ラベルが追加されている- テストを実行
-
- event がラベルの追加である
というのが良さそう?