Skip to content
git-merge

GitHub Action

Sync and merge upstream repository with your current repository

v1.2.0.b Latest version

Sync and merge upstream repository with your current repository

git-merge

Sync and merge upstream repository with your current repository

Syncs and merges your current repository with the upstream repository. Fork of https://github.com/mheene/sync-upstream-repo

Installation

Copy and paste the following snippet into your .yml file.

              

- name: Sync and merge upstream repository with your current repository

uses: dabreadman/[email protected]

Learn more about this action in dabreadman/sync-upstream-repo

Choose a version

Sync Upstream Repo Fork

This is a Github Action used to merge changes from remote.

This is forked from mheene, with me adding authentication using GitHub Token and downstream branch options due to the default branch naming changes.

Use case

  • Perserve a repo while keeping up-to-date (rather than to clone it).
  • Have a branch in sync with upstream, and pull changes into dev branch.

Usage

Example github action here:

name: Sync Upstream

env:
  # Required, URL to upstream (fork base)
  UPSTREAM_URL: "https://github.com/dabreadman/go-web-proxy.git"
  # Required, token to authenticate bot, could use ${{ secrets.GITHUB_TOKEN }} 
  # Over here, we use a PAT instead to authenticate workflow file changes.
  WORKFLOW_TOKEN: ${{ secrets.WORKFLOW_TOKEN }}
  # Optional, defaults to main
  UPSTREAM_BRANCH: "main"
  # Optional, defaults to UPSTREAM_BRANCH
  DOWNSTREAM_BRANCH: ""
  # Optional fetch arguments
  FETCH_ARGS: ""
  # Optional merge arguments
  MERGE_ARGS: ""
  # Optional push arguments
  PUSH_ARGS: ""
  # Optional toggle to spawn time logs (keeps action active) 
  SPAWN_LOGS: "false" # "true" or "false"

# This runs every day on 1801 UTC
on:
  schedule:
    - cron: '1 18 * * *'
  # Allows manual workflow run (must in default branch to work)
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: GitHub Sync to Upstream Repository
        uses: dabreadman/[email protected]
        with: 
          upstream_repo: ${{ env.UPSTREAM_URL }}
          upstream_branch: ${{ env.UPSTREAM_BRANCH }}
          downstream_branch: ${{ env.DOWNSTREAM_BRANCH }}
          token: ${{ env.WORKFLOW_TOKEN }}
          fetch_args: ${{ env.FETCH_ARGS }}
          merge_args: ${{ env.MERGE_ARGS }}
          push_args: ${{ env.PUSH_ARGS }}
          spawn_logs: ${{ env.SPAWN_LOGS }}

This action syncs your repo (merge changes from remote) at branch main with the upstream repo https://github.com/dabreadman/go-web-proxy.git every day on 1801 UTC.
Do note GitHub Action scheduled workflow usually face delay as it is pushed onto a queue, the delay is usually within 1 hour long.

Note: If SPAWN_LOGS is set to true, this action will create a sync-upstream-repo file at root directory with timestamps of when the action is ran. This is to mitigate the hassle of GitHub disabling actions for a repo when inactivity was detected.

Development

In action.yml, we define inputs.
We then pass these arguments into Dockerfile, which then passed onto entrypoint.sh.

entrypoint.sh does the heavy-lifting,

  • Set up variables.
  • Set up git config.
  • Clone downstream repository.
  • Fetch upstream repository.
  • Attempt merge if behind, and push to downstream.