A GitHub Action for mirroring repositories.
# File: .github/workflows/mirror.yml
on:
schedule:
- cron: "15 * * * *"
workflow_dispatch:
jobs:
mirror:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
with:
persist-credentials: false
- name: mirror
uses: bhcleek/github-mirror@v1
with:
source_repo: "source/repository"
destination_repo: "destination/repository"
github_token: "${{ secrets.GITHUB_TOKEN }}" # optional
ssh_private_key: "${{ secrets.SSH_PRIVATE_KEY }}" # optional
source_ssh_private_key: "${{ secrets.SOURCE_SSH_PRIVATE_KEY }}" # optional, will override `SSH_PRIVATE_KEY`
destination_ssh_private_key: "${{ secrets.DESTINATION_SSH_PRIVATE_KEY }}" # optional, will override `SSH_PRIVATE_KEY`
If source_repo
is private or with another provider, either (1) use an authenticated HTTPS repo clone url like https://${access_token}@github.com/owner/repository.git
or (2) set a SSH_PRIVATE_KEY
secret environment variable and use the SSH clone url
If destination_repo
is private or with another provider, either (1) use an authenticated HTTPS repo clone url like https://${access_token}@github.com/owner/repository.git
or (2) set a SSH_PRIVATE_KEY
secret environment variable and use the SSH clone url
Either destination_repo
or source_repo
can be omitted or left empty. The current repository will be used for the respective value in that case.
The workflow will need to be defined in the upstream repository in order to continue mirroring if destination_repo
is not defined or refers to the current repository.
You can use GitHub repo shorthand like username/repository
.
When using a GitHub repos with shorthand, the github_token
must be set. Note that GitHub Actions automatically inject a secret with write access to the current repository.
The
ssh_private_key
, orsource_ssh_private_key
anddestination_ssh_private_key
must be supplied if using ssh clone urls.
source_repo: "[email protected]:username/repository.git"
Users may find the scripts in the scripts
directory useful.
scripts/create-mirror-keys.sh
will create SSH keys for a set of repositories and will set the respective public key as a deploy key in the respective destination repository. It is up to the user to copy the generated private key to the secrets that will be used by the action.