Skip to main content

Project Logo

The Lupaxa GitHub Toolbox
Part of The Lupaxa Project


lupaxa-github-repo-sync

A command-line application that clones, organises, and safely synchronises large collections of GitHub repositories from a single declarative JSON5 configuration.

Unlike many repository synchronisation tools, it does not assume every repository can be updated automatically. Each repository is inspected before any Git operation, so only repositories in a safe state are modified.

Features

  • Safe repository inspection before synchronisation
  • Automatic cloning of missing repositories
  • Fast-forward updates where safe
  • Protection against unsafe local states
  • HTTPS and SSH clone protocols
  • JSON5 configuration with inherited defaults
  • Multiple GitHub organisations, aliases, and destination paths
  • Rich console output with progress reporting
  • Configuration validation and synchronisation plan preview
  • Status check (optional fetch of tracking refs)
  • Transient GitHub SSH retries during bulk sync
  • Cross-platform: macOS, Linux, and Windows

Installation

From PyPI

pip install lupaxa-github-repo-sync

Verify the installation:

grs --version

or:

github-repo-sync --version

The shorter grs command is used in the examples below.

From source (development mode)

pip install -e ".[dev]"

Quick Start

Create ~/.github-repo-sync.yaml:

config:
  clone_path: ~/Desktop/GitMaster
  clone_protocol: ssh

organisations:
  - name: the-lupaxa-project
    alias: Lupaxa/TheLupaxaProject
    repositories:
      - name: .github
        alias: github
      - name: workflows
      - name: brand-assets

Local layout resolves to clone_path/<organisation-alias>/<repository-alias-or-name>.

Organisation aliases may be a single directory name or a relative path under clone_path. Repository aliases must remain a single directory name.

If --config is not specified, the application looks for ~/.github-repo-sync.yaml, then .yml, .json, or .json5. Config files may be YAML, JSON, or JSON5.

Validate the configuration:

grs --validate

Review the synchronisation plan:

grs --plan

Synchronise your repositories:

grs

Command-Line Interface

Synchronisation is the default operation.

Command Description
grs Synchronise all configured repositories.
grs --validate Validate the configuration and exit.
grs --plan Display the resolved synchronisation plan and exit.
grs --status Check repositories for a clean, synchronised state (may fetch tracking refs).

Use -c FILE / --config FILE to point at a different JSON5 file.

grs --config work.json5 --validate
grs --status --ignore-clean --offline
grs --recover-rewritten-history
grs --results-table

Documentation

Online documentation:

Documentation

Serve the docs locally:

mkdocs serve

Then open the local URL printed by MkDocs in your browser.

Development

Clone the repository and install development dependencies:

pip install -e ".[dev]"

Useful make targets:

make test   # run tests
make type   # type checking (mypy)
make check  # lint, type check, and tests
The Lupaxa Project Footer

Download files

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

Source Distribution

lupaxa_github_repo_sync-0.1.0.tar.gz (44.4 kB view details)

Uploaded Source

Built Distribution

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

lupaxa_github_repo_sync-0.1.0-py3-none-any.whl (42.8 kB view details)

Uploaded Python 3

File details

Details for the file lupaxa_github_repo_sync-0.1.0.tar.gz.

File metadata

  • Download URL: lupaxa_github_repo_sync-0.1.0.tar.gz
  • Upload date:
  • Size: 44.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for lupaxa_github_repo_sync-0.1.0.tar.gz
Algorithm Hash digest
SHA256 ab1fe1e6d39912812d5b7593faaccfa3280922d598b874dc023ce9873285270e
MD5 f722222f2b6dfeb1162fdb7d7b102328
BLAKE2b-256 31857679d4bc44a63ddb8f25d7c412b44191e9a949ff7a25df306deed4a38820

See more details on using hashes here.

Provenance

The following attestation bundles were made for lupaxa_github_repo_sync-0.1.0.tar.gz:

Publisher: generate-release.yml on lupaxa-gh-toolbox/github-repo-sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file lupaxa_github_repo_sync-0.1.0-py3-none-any.whl.

File metadata

File hashes

Hashes for lupaxa_github_repo_sync-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 589c456fc1da70d7ba2967999478cc752348baa680ab2f53c849bdf3b2b32051
MD5 912e1656164f9dd78cbffec1664c1c5d
BLAKE2b-256 09ca33a2afdf603c5315443969fdd2fa0e83984736f173e7b11ab4bb5530f7e1

See more details on using hashes here.

Provenance

The following attestation bundles were made for lupaxa_github_repo_sync-0.1.0-py3-none-any.whl:

Publisher: generate-release.yml on lupaxa-gh-toolbox/github-repo-sync

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

0.1.3

2 files

0.1.2

2 files

0.1.1

2 files

This release

0.1.0 This release

2 files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page