Skip to content

DOCKER

abstract

If you want to test things out or if you want to build your own action (e.g. in on prem environments) you are able to use docker images.

Use the production image

The production image runs the same synchronization script used by the GitHub Action. It expects the target repository to be mounted into the container and requires tokens for both the source and target repositories.

The image entrypoint requires these environment variables:

Variable Description
SOURCE_GH_TOKEN Token with read access to the source repository
TARGET_GH_TOKEN Token with permission to create branches and pull requests in the target repository
SOURCE_REPO_PATH Source repository path, for example owner/template-repository
SOURCE_BRANCH Optional source branch to synchronize; defaults to the source repository's default branch
GITHUB_SERVER_URL GitHub server URL, for example https://github.com

The container should run from the mounted target repository. Git, GitHub CLI, SSH, Git LFS, and the synchronization scripts are included in the image.

Pull and run

Use either registry image. Replace v2 with the desired release tag:

docker run --rm \
  --workdir /github/workspace \
  --volume "$PWD:/github/workspace" \
  --env SOURCE_GH_TOKEN \
  --env TARGET_GH_TOKEN \
  --env SOURCE_REPO_PATH=owner/template-repository \
  --env SOURCE_BRANCH=develop \
  --env UPSTREAM_BRANCH=main \
  --env GITHUB_SERVER_URL=https://github.com \
  --env GITHUB_ACTOR=automation \
  ghcr.io/andreasaugustin/actions-template-sync:v2

The same command using Docker Hub is:

docker run --rm \
  --workdir /github/workspace \
  --volume "$PWD:/github/workspace" \
  --env SOURCE_GH_TOKEN \
  --env TARGET_GH_TOKEN \
  --env SOURCE_REPO_PATH=owner/template-repository \
  --env GITHUB_SERVER_URL=https://github.com \
  andyaugustin/actions-template-sync:v2

The --env NAME form reads the value from the host environment. Set the token variables without putting their values in shell history:

export SOURCE_GH_TOKEN='source-token'
export TARGET_GH_TOKEN='target-token'
export SOURCE_REPO_PATH='owner/template-repository'

For repeatable runs, put non-secret configuration in an environment file and provide secrets through the environment or a secret manager:

SOURCE_REPO_PATH=owner/template-repository
UPSTREAM_BRANCH=main
GITHUB_SERVER_URL=https://github.com
GITHUB_ACTOR=automation
docker run --rm \
  --env-file ./templatesync.env \
  --env SOURCE_GH_TOKEN \
  --env TARGET_GH_TOKEN \
  --workdir /github/workspace \
  --volume "$PWD:/github/workspace" \
  ghcr.io/andreasaugustin/actions-template-sync:v2

Private source repositories over SSH

Set SSH_PRIVATE_KEY_SRC to use SSH instead of the GitHub CLI token for the source repository. The image already contains GitHub's SSH host key.

docker run --rm \
  --workdir /github/workspace \
  --volume "$PWD:/github/workspace" \
  --env SSH_PRIVATE_KEY_SRC \
  --env TARGET_GH_TOKEN \
  --env SOURCE_REPO_PATH=owner/private-template \
  --env GITHUB_SERVER_URL=https://github.com \
  ghcr.io/andreasaugustin/actions-template-sync:v2

For GitHub Enterprise or another Git provider, set HOSTNAME to the source host and use the matching GITHUB_SERVER_URL.

Build the image locally

Build the production target from a checkout of this repository:

docker build --target prod \
  --tag actions-template-sync:prod .

Then replace the registry image name in the examples with actions-template-sync:prod.