Setup Access Token

  1. There are two repos involved - the target (that you want to update) and the upstream (where updates are coming from)
  2. If the upstream repo is private, it requires authentication to get data from it
  3. From an account with token creation rights on upstream repo, create a new PAT. Give it whatever permissions you see fit. (At least read from repos.)
    1. Click on profile at top right of screen and got to Settings

      Untitled

    2. In Settings, scroll down to the Developer settings on the left panel of screen

      1. In Developer settings, go to Personal access tokensTokens (classic)

        Untitled

      2. Click on the Generate new token button and choose Generate new token (classic)

        Untitled

      3. Enter a Note, set Expiration and Select scopes. E.g.

        Untitled

      4. Once done, click on Generate token button and copy the generated token

        Untitled

    3. In the target repo - where your action workflow is running - open SettingsSecretsActions

      1. Click on New repository secret

        Untitled

      2. Paste your PAT into the box.

      3. Name your token something clear -like MY_TOKEN_FOR_UPSTREAM_SYNC. Add secret.

Setup GitHub Action

  1. In the target repo, click on Actions and click on New workflow

    Untitled

  2. Click on set up a workflow yourself

    Untitled

  3. Name your workflow. E.g. sync-fork-with-upstream.yml

    Untitled

  4. 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:

Resources