Open4

GitHub Actions周りのTipsを溜めていくスクラップ

mas0061mas0061

解決したいこと

ActionsでPull requestを作って、Approveして、マージするような時、全て同じトークンを使うと同一ユーザでApproveできないので解決策が必要。
PRを作るところと、Approveしてマージするところでstepを分けて、違うトークンを使えば良い。

例は何かしらのPATを使うようにしているけど、実際はGitHub Appsで作ったトークンを使っている。
あと、リポジトリでオートマージを許可する設定をしている。

解決例

jobs:
  example:
    runs-on: ubuntu-latest
    steps:
      - 中略
      - name: Create PR
        env:
          GITHUB_TOKEN: ${{ secrets.HOGE_PAT }}
          DEFAULT_BRANCH: ${{ github.event.repository.default_branch }}
        run: |
          URL=$(gh pr create --base "${DEFAULT_BRANCH}" --title ":ghost: auto merge PR")
          echo "PR_URL=${URL}" >> $GITHUB_ENV
    - name: Merge PR
      env:
        GITHUB_TOKEN: ${{ github.token }}
        PR_URL: ${{ env.PR_URL }}
      run: |
        gh pr review "${PR_URL}" --approve
        gh pr merge --merge --auto "${PR_URL}"
mas0061mas0061

解決したいこと

ActionsでPR作る時、ソースブランチの名称はなんでも良いからランダムに生成してほしい。
cat /dev/urandom を使う案もあるけど、Broken pipeになって面倒なので uuidgen を使った。

解決例

- run: |
  SOURCE_BRANCH="$(date +'%Y%m%d')-$(uuidgen | head -c 30 | sha256sum | head -c 10)"
mas0061mas0061

解決したいこと

stepレベルでディレクトリやファイルの存在有無によって実行有無を切り替えたい。

解決例

ファイルやディレクトリがない場合、 hashFiles は空文字を返してくるのを利用している。
コメントつけておかないと、意図が伝わらなそうなのが難点。

- name: if directory exists
  if: ${{ hashFiles('hoge') != '' }}
  run: echo "hoge directory exists"

これ を参考にした。