For the record, recently I ran into this same problem and addressed it with Github Actions. The solution is rather easy: an scheduled action fetches the upstream repository and merges it into mine.
# .github/workflows/example.yml
name: Merge upstream branches
on:
schedule:
# actually, ~5 minutes is the highest
# effective frequency you will get
- cron: '* * * * *'
jobs:
merge:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- name: Merge upstream
run: |
git config --global user.name 'your-name'
git config --global user.email 'your-username@users.noreply.github.com'
# "git checkout master" is unnecessary, already here by default
git pull --unshallow # this option is very important, you would get
# complains about unrelated histories without it.
# (but actions/checkout@v2 can also be instructed
# to fetch all git depth right from the start)
git remote add upstream https://github.com/example/test.git
git fetch upstream
# Neither forget the -b opt,
# the feature/x ref is ambiguous at this stage
git checkout -b feature/x origin/feature/x
git merge --no-edit upstream/feature/x
git push origin feature/x
git checkout master
git merge --no-edit upstream/master
git push origin master
# etc
I run it every Sunday which is more than enough for me. Just schedule this to whatever is fine for you.
Also, it is probably wiser to sync every branch in a different job since they will run in parallel and can independently succeed or fail if conflicts occur.
If you need to merge an arbitrary number of branches, you can refer to questions like How to fetch all Git branches to find shell tricks to do it.
I noticed a public action exists to address this by rebasing. It looked promising but it was fairly undocumented so here is my snippet instead. Hope it helps!