target
(that you want to update) and the upstream
(where updates are coming from)upstream
repo is private, it requires authentication to get data from itClick on profile at top right of screen and got to Settings
In Settings
, scroll down to the Developer settings
on the left panel of screen
In Developer settings
, go to Personal access tokens
→ Tokens (classic)
Click on the Generate new token
button and choose Generate new token (classic)
Enter a Note
, set Expiration
and Select scopes
. E.g.
Once done, click on Generate token
button and copy the generated token
In the target
repo - where your action workflow is running - open Settings
→ Secrets
→ Actions
Click on New repository secret
Paste your PAT into the box.
Name your token something clear -like MY_TOKEN_FOR_UPSTREAM_SYNC
. Add secret.
In the target
repo, click on Actions
and click on New workflow
Click on set up a workflow yourself
Name your workflow. E.g. sync-fork-with-upstream.yml
Configure your workflow. Sample workflow below:
name: 'Sync Fork with Upstream'
on:
schedule:
- cron: '0 0,5 * * 1-5'
# cron: <https://crontab.guru/>
# scheduled at 00:00, 05:00 (UTC) every Monday to Friday
# scheduled at 08:00, 13:00 (SGT) every Monday to Friday
workflow_dispatch: # click the button on Github repo!
jobs:
sync_latest_from_upstream:
runs-on: ubuntu-latest
name: Sync latest commits from upstream repo
steps:
# REQUIRED step
# Step 1: run a standard checkout action, provided by github
- name: Checkout target repo
uses: actions/checkout@v2
with:
# optional: set the branch to checkout,
# sync action checks out your 'target_sync_branch' anyway
ref: dev
# REQUIRED if your upstream repo is private (see wiki)
persist-credentials: false
# REQUIRED step
# Step 2: run the sync action
- name: Sync upstream changes
id: sync
uses: aormsby/[email protected]
with:
target_sync_branch: dev
# REQUIRED 'target_repo_token' exactly like this!
target_repo_token: ${{ secrets.GITHUB_TOKEN }}
upstream_sync_branch: dev
upstream_sync_repo: Organization/UpstreamRepo
upstream_repo_access_token: ${{ secrets.MY_TOKEN_FOR_UPSTREAM_SYNC }}
# Set test_mode true to run tests instead of the true action!!
test_mode: false
# Step 3: Display a sample message based on the sync output var 'has_new_commits'
- name: New commits found
if: steps.sync.outputs.has_new_commits == 'true'
run: echo "New commits were found to sync."
- name: No new commits
if: steps.sync.outputs.has_new_commits == 'false'
run: echo "There were no new commits."
- name: Show value of 'has_new_commits'
run: echo ${{ steps.sync.outputs.has_new_commits }}
NOTES:
Step 2
:
target_sync_branch
. E.g. main
, dev
upstream_sync_repo
. Replace Organization/UpstreamRepo
with your upstream repo.upstream_repo_access_token
. Replace MY_TOKEN_FOR_UPSTREAM_SYNC
with your secrets token name.