Code of Conduct
What article on docs.github.com is affected?
https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#github-context
What part(s) of the article would you like to see updated?
The description for github.ref is confusing, misleading and incorrect, particularly for PR events.
The fully-formed ref of the branch or tag that triggered the workflow run. For workflows triggered by push, this is the branch or tag ref that was pushed. For workflows triggered by pull_request that were not merged, this is the pull request merge branch. If the pull request was merged, this is the head branch. For workflows triggered by release, this is the release tag created. For other triggers, this is the branch or tag ref that triggered the workflow run. This is only set if a branch or tag is available for the event type. The ref given is fully-formed, meaning that for branches the format is refs/heads/<branch_name>. For pull requests events except pull_request_target that were not merged, it is refs/pull/<pr_number>/merge. pull_request_target events have the ref from the base branch. For tags it is refs/tags/<tag_name>. For example, refs/heads/feature-branch-1.
Firstly, it's quite hard to follow the different branching logic of that parapgrah. Can this be formatted better, e.g. with nested bullet points?
Secondly, particularly for PR events, the logic is quite unclear, and incorrect in some places. The description mentions
pull requests events
but doesn't define them what these are. Is it the following subset of triggers?
Assuming this is the case, my understanding of the logic is as follows:
pull_request events with a closed activity type that were merged: github.ref = refs/heads/<head_branch>
- All other
pull_request events: github.ref = refs/pull/<pr_number>/merge
- All
pull_request_target events (potentially excluding merged events): github.ref = refs/heads/<base_branch>
issue_comment, pull_request_review and pull_request_review_comment (and potentially merged pull_request_target) events: github.ref = refs/pull/<pr_number>/merge
Problems to highlight:
- It's unclear whether "pull requests events except
pull_request_target that were not merged" includes merged pull_request_target events. My tests suggest it doesn't; merged pull_request_target events show refs/heads/main, not refs/pull/<pr_number>/merge. What is this line trying to say?
- On a merged
pull_request event, my tests show <base_branch>, not <head_branch>. There is a mistake in the description.
- For
pull_request_target events, regardless of PR direction (main -> test or test -> main), my tests show refs/heads/main. Is it always the repo default, not the PR base?
- My tests show
issue_comment events use refs/heads/main (regardless of PR direction), not refs/pull/<pr_number>/merge. Are these events not part of the PR logic? Does it always use the repo default?
- If we're being picky, there's a case to be made that "workflows triggered by
pull_request that were not merged" means "closed and not merged" - meaning other activity types might not be included in the list. This could be worded better
Is the following summary more accurate?
- All
pull_request_target events: refs/heads/<default_branch>
- Merged
pull_request events: refs/heads/<base_branch>
- All other
pull_request events, and all pull_request_review and pull_request_review_comment events: refs/pull/<pr_number>/merge
issue_comment events: refs/heads/<default_branch>
Additional information
No response
Code of Conduct
What article on docs.github.com is affected?
https://docs.github.com/en/actions/reference/workflows-and-actions/contexts#github-context
What part(s) of the article would you like to see updated?
The description for
github.refis confusing, misleading and incorrect, particularly for PR events.Firstly, it's quite hard to follow the different branching logic of that parapgrah. Can this be formatted better, e.g. with nested bullet points?
Secondly, particularly for PR events, the logic is quite unclear, and incorrect in some places. The description mentions
but doesn't define them what these are. Is it the following subset of triggers?
pull_requestissue_commentpull_request_reviewpull_request_review_commentpull_request_targetAssuming this is the case, my understanding of the logic is as follows:
pull_requestevents with aclosedactivity type that were merged:github.ref=refs/heads/<head_branch>pull_requestevents:github.ref=refs/pull/<pr_number>/mergepull_request_targetevents (potentially excluding merged events):github.ref=refs/heads/<base_branch>issue_comment,pull_request_reviewandpull_request_review_comment(and potentially mergedpull_request_target) events:github.ref=refs/pull/<pr_number>/mergeProblems to highlight:
pull_request_targetthat were not merged" includes mergedpull_request_targetevents. My tests suggest it doesn't; mergedpull_request_targetevents showrefs/heads/main, notrefs/pull/<pr_number>/merge. What is this line trying to say?pull_requestevent, my tests show<base_branch>, not<head_branch>. There is a mistake in the description.pull_request_targetevents, regardless of PR direction (main->testortest->main), my tests showrefs/heads/main. Is it always the repo default, not the PR base?issue_commentevents userefs/heads/main(regardless of PR direction), notrefs/pull/<pr_number>/merge. Are these events not part of the PR logic? Does it always use the repo default?pull_requestthat were not merged" means "closedand not merged" - meaning other activity types might not be included in the list. This could be worded betterIs the following summary more accurate?
pull_request_targetevents:refs/heads/<default_branch>pull_requestevents:refs/heads/<base_branch>pull_requestevents, and allpull_request_reviewandpull_request_review_commentevents:refs/pull/<pr_number>/mergeissue_commentevents:refs/heads/<default_branch>Additional information
No response