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