Open4

GitHub Actions上からPR作成を行う

fujiwofujiwo

実現したいこと

  • workflowを実行したブランチをbaseブランチとして、なにかしらの修正を加えてからPRを作成したい
fujiwofujiwo

📝 Actions上でcommitする時のユーザ情報

デフォルトだとgitconfigにユーザ情報がセットされてなさげで、エラーが発生した。

Author identity unknown

*** Please tell me who you are.

Run

  git config --global user.email "you@example.com"
  git config --global user.name "Your Name"

to set your account's default identity.
Omit --global to set the identity only in this repository.

fatal: empty ident name (for <runner@xxx.cloudapp.net>) not allowed

こちらの記事を参考に、github-actions[bot] として指定することにした。
https://qiita.com/thaim/items/3d1a4d09ec4a7d8844ce

emailに 41898282+github-actions[bot]@users.noreply.github.com を指定することで github-actions[bot] を利用する方法もある。
この方法はGitHub CommunityのGitHub Actions bot email address?というトピックで紹介されている。

このユーザ(APIによると厳密にはbot)は secrets.GITHUB_TOKEN によるAPI操作を行ったときに呼び出されるユーザでもある。このため、secrets.GITHUB_TOKEN を用いてプルリクやリリースノートの自動作成を行っている場合はコミットもこのユーザを指定しておくとGitHub Actionsの操作を単一ユーザに統一できる。
また、このユーザはアイコンとしてGitHubが指定されているので、actions-userより馴染みのある人が多いかもしれない。

fujiwofujiwo

📝 gh create pr時に PRを作成する権限がないと怒られる問題

pull request create failed: GraphQL: GitHub Actions is not permitted to create or approve pull requests (createPullRequest)
Error: Process completed with exit code 1.

「Actions」> 「general」> 「Workflow Permissons」の中の「Allow GitHub Actions to create and approve pull requests」
にチェックを入れることで解決できる。

参考: https://go-tech.blog/githubactions/auto-create-pr/

fujiwofujiwo

📝 gh pr create --base main --head new-branch 時に、 Head sha can't be blank, Base sha can't be blank, Head ref must be a branch と怒られる

pull request create failed: GraphQL: Head sha can't be blank, Base sha can't be blank, No commits between main and new-branch, Head ref must be a branch (createPullRequest)

Head sha can't be blank について
ローカルで作成したブランチをリモートへpushすることで回避できた。

git push --force-with-lease origin new-branch

--head オプションを使う場合は、すでにremoteにブランチが存在している状態じゃないとダメらしい。
https://github.com/cli/cli/issues/6724#issuecomment-1349782707

% gh pr create --help
Create a pull request on GitHub.
When the current branch isn't fully pushed to a git remote, a prompt will ask where
to push the branch and offer an option to fork the base repository. Use --head to
explicitly skip any forking or pushing behavior.
A prompt will also ask for the title and the body of the pull request. Use --title
and --body to skip this, or use --fill to autofill these values from git commits.
Link an issue to the pull request by referencing the issue in the body of the pull
request. If the body text mentions Fixes #123 or Closes #123, the referenced issue
will automatically get closed when the pull request gets merged.
By default, users with write access to the base repository can push new commits to the
head branch of the pull request. Disable this with --no-maintainer-edit.
Adding a pull request to projects requires authorization with the "project" scope.
To authorize, run "gh auth refresh -s project".

Base sha can't be blank
actionsの環境下にmainブランチをcheckoutできていないために発生していた。
デフォルトだと、workflowは実行対象のブランチのみをcheckoutすることを忘れていた。

対応案としては以下の2つ
1. mainブランチをcheckoutする
2. github.ref_name で、ワークフローが実行されたcommitのrefを指定する

個人的には、
- 絶対にmainブランチからPRを作りたい => 1
- workflow_dispatchなどで、mainブランチ以外をベースとしてPRを作りたい場合 => 2

mainブランチはすでにremote上にあったのにエラーになったのは謎
単に両方エラー文として出してるだけかもしれない
最後に以下の文章があったから、HEAD周りでエラーが発生したらこの文言が出るのかも。

Head ref must be a branch

このエラーメッセージはGitHub側のGraphQL APIから返ってくるから詳細は不明