@@ -19,13 +19,37 @@ jobs:
19
19
jsChanged : ${{ steps.filter.outputs.jsChanged }}
20
20
steps :
21
21
- uses : actions/checkout@v4
22
+
23
+ # Warning: This is kinda gnarly and weird! GitHub doesn't expose the `pull_request`
24
+ # data if the PR is from a fork, nor does it let you access that data via their API
25
+ # (by querying for PRs associated with the commit or querying the commit itself, both
26
+ # come up empty for forked commits). As such, to get the base SHA of the PR we need to
27
+ # query for all PRs on the repo and match the owner+branch to find the right one and
28
+ # then extract the base SHA from that.
29
+ #
30
+ # I see no reason why GitHub shouldn't expose this, it's just an SHA, branch name, and
31
+ # URL, but they don't so we're doing it this way. Hopefully we can remove this one day.
32
+ - name : Get PR Base SHA
33
+ id : get_pr_base_sha
34
+ env :
35
+ GH_TOKEN : ${{ secrets.GITHUB_TOKEN }}
36
+ FORK_OWNER : ${{ github.event.workflow_run.head_repository.owner.login }}
37
+ FORK_BRANCH : ${{ github.event.workflow_run.head_branch }}
38
+ run : |
39
+ set -euo pipefail
40
+
41
+ PR_JSON=$(gh api "repos/preactjs/preact/pulls?state=all&head=$FORK_OWNER:$FORK_BRANCH")
42
+ BASE_SHA=$(jq -r '.[0].base.sha' <<< "$PR_JSON")
43
+
44
+ echo "base_sha=$BASE_SHA" >> "$GITHUB_OUTPUT"
45
+
22
46
- uses : dorny/paths-filter@v3
23
47
id : filter
24
48
with :
25
49
# As this Workflow is triggered by a `workflow_run` event, the filter action
26
50
# can't automatically assume we're working with PR data. As such, we need to
27
51
# wire it up manually with a base (merge target) and ref (source branch).
28
- base : ${{ github.sha }}
52
+ base : ${{ steps.get_pr_base_sha.outputs.base_sha }}
29
53
ref : ${{ github.event.workflow_run.head_sha }}
30
54
# Should be kept in sync with the filter in the CI workflow
31
55
predicate-quantifier : ' every'
0 commit comments