Skip to main content

Tool for maintaining mirrors of GitHub repos

Project description

replicate-github sets up and maintains mirrors of GitHub organizations and individual repos. It can serve webhook endpoints and keep the mirrors updated continuously, or it can be run ad hoc from the command line.

$ replicate-github --verbose mirror puppetlabs/puppet 'github/*'
mirror.Collection: Fetching puppetlabs/puppet
mirror.Collection: Fetching github/garethr-docker
mirror.Collection: Fetching github/github-ldap
^C
$ replicate-github --verbose serve --update-org github
WebhookServer: Webhook server listening on localhost:8080
127.0.0.1 - - [10/Aug/2016 01:18:35] "POST / HTTP/1.1" 202 -
mirror.Collection: Fetching puppetlabs/puppet
^C

Webhook

The webhook server accepts POST to any URL (the path is ignored). A shared secret should be set so that events can’t be sent from non-GitHub sources.

By default the webhook server ensures that mirrors are updated at least once a day if no events are received. See replicate-github serve --help for more information.

GitHub webhook configuration

Create the webhook with any URL under the one served by the application. Set the secret to a random string, and put it in replicate-github.yaml like so:

serve:
  secret: "secret configured for webhook in GitHub"

Select the “Repository” and “Push” events to send.

Security

If a secret is configured then any event not containing the correct secret will be rejected.

Only two parts of the payload are used: the full name of the repo, and the deleted flag. The full name of the repo is validated to ensure it contains no special characters (like / or .).

This will create or update a mirror for any repo name as long as the secret is correct. That means if you configure the webhook for a repo that hasn’t already been mirrored it will start mirroring the repo as soon as an event comes in.

Configuration file

Configuration is loaded from the value of --config-file, which defaults to /etc/replicate-github.yaml. The file requires three settings:

mirror_path: "/srv/replicate-github"
github_user: "GitHub username"
github_token: "GitHub API token"

You can generate a GitHub API token under Settings > Personal access tokens.

There is an additional top level option, workers, that sets the number of git subprocesses that can be run at once. It defaults to 1.

Optionally, defaults for subcommands (e.g. serve) may be set:

serve:
  secret: "secret configured for webhook in GitHub"
  port: 8000
  update_org:
    - github
    - puppetlabs

Note that parameter names in the configuration file use “_” instead of “-”. For example, the parameter --update-org is called update_org in the configuration file.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

replicate-github-0.6.1.tar.gz (10.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

replicate_github-0.6.1-py3-none-any.whl (13.5 kB view details)

Uploaded Python 3

File details

Details for the file replicate-github-0.6.1.tar.gz.

File metadata

File hashes

Hashes for replicate-github-0.6.1.tar.gz
Algorithm Hash digest
SHA256 b5833d8597d82df8d10be49fb01d930a0ea61c2358a077caea012e9df75f4da0
MD5 84a639daa06bfc42dfadc0fdf0ebf308
BLAKE2b-256 a25cda9a0e44af2a61bc0261d5afe36286425c1884d14ec25678170ed901775e

See more details on using hashes here.

File details

Details for the file replicate_github-0.6.1-py3-none-any.whl.

File metadata

File hashes

Hashes for replicate_github-0.6.1-py3-none-any.whl
Algorithm Hash digest
SHA256 58411210d5469e1cdff467bd9a3b7bab8f723a1d0aa85146fea9cd2962380051
MD5 7cc47699c6056da719565a52e25cf67e
BLAKE2b-256 034845946aab613f3e4c7c45e3b624f4c1ba57edd54e6335ca8987b12d12d18a

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page