Cross-platform GitHub/Bitbucket repository automation toolkit
Project description
Repo Rover Runner
+----------------------------+
| REPO ROVER RUNNER |
+----------------------------+
Repo Rover Runner is a local automation toolkit that standardizes a small set of git workflows for both GitHub and Bitbucket repositories.
It is built around a Python CLI plus Windows (.bat) and Linux/macOS (.sh) helper scripts.
Script help documents are available under docs/utilities/.
What This Workspace Is Doing
This project automates these tasks against a remote git repository:
- Connectivity check (ping remote)
- Clone if needed
- Create or attach to a working branch
- List local and remote branches
- Copy one or more files/folders into the repo
- Commit and push to remote branch
It does not call GitHub or Bitbucket REST APIs directly. It relies on standard git commands, so it works with either provider as long as the remote URL and credentials are valid.
Core CLI
Primary entrypoint:
python repo_rover_runner_client.py --help
Installed command aliases (Windows installs .exe launchers):
repo-rover-runner --help
rrr --help
Legacy compatibility wrapper:
python repo_rover_runner_cli.py --help
MCP Server
The project now ships an MCP stdio server that exposes the same core operations.
Start it with:
repo-rover-runner-mcp
Exposed MCP tools:
ping_repoclone_repouse_branchlist_branchespush_files
MCP Client JSON Configurations
The MCP server uses stdio transport, so most clients use a JSON entry under mcpServers.
Minimal server command:
{
"mcpServers": {
"repo-rover-runner": {
"command": "repo-rover-runner-mcp"
}
}
}
If the command is not on PATH, use an explicit Python executable and script path.
Windows example (project-local virtual environment):
{
"mcpServers": {
"repo-rover-runner": {
"command": "C:\\MyProjects\\repo-rover-runner\\.venv\\Scripts\\python.exe",
"args": [
"C:\\MyProjects\\repo-rover-runner\\repo_rover_runner_mcp_server.py"
]
}
}
}
Linux/macOS example:
{
"mcpServers": {
"repo-rover-runner": {
"command": "/path/to/repo-rover-runner/.venv/bin/python",
"args": [
"/path/to/repo-rover-runner/repo_rover_runner_mcp_server.py"
]
}
}
}
Client-Specific Examples
Claude Desktop (claude_desktop_config.json):
{
"mcpServers": {
"repo-rover-runner": {
"command": "repo-rover-runner-mcp",
"env": {
"REPO_PROVIDER": "github",
"GITHUB_TOKEN": "${GITHUB_TOKEN}",
"GIT_USERNAME": "x-access-token"
}
}
}
}
VS Code MCP config (settings.json):
{
"mcp": {
"servers": {
"repo-rover-runner": {
"command": "C:\\MyProjects\\repo-rover-runner\\.venv\\Scripts\\python.exe",
"args": [
"C:\\MyProjects\\repo-rover-runner\\repo_rover_runner_mcp_server.py"
],
"env": {
"REPO_PROVIDER": "auto"
}
}
}
}
}
If repo-rover-runner-mcp is on PATH, you can also use:
{
"mcp": {
"servers": {
"repo-rover-runner": {
"command": "repo-rover-runner-mcp",
"env": {
"REPO_PROVIDER": "auto"
}
}
}
}
}
Cursor/Cline-style MCP config:
{
"mcpServers": {
"repo-rover-runner": {
"command": "repo-rover-runner-mcp",
"args": [],
"env": {
"REPO_PROVIDER": "auto"
}
}
}
}
Generic host config with explicit working defaults:
{
"mcpServers": {
"repo-rover-runner": {
"command": "repo-rover-runner-mcp",
"env": {
"REPO_PROVIDER": "bitbucket",
"BITBUCKET_USERNAME": "your-user",
"BITBUCKET_APP_PASSWORD": "your-app-password"
}
}
}
}
Recommended Environment Variables for MCP Clients
Most clients allow per-server env values. Use those to avoid embedding credentials in URLs.
GitHub HTTPS auth:
REPO_PROVIDER=githubGITHUB_TOKEN=<token>GIT_USERNAME=x-access-token(optional; default is alreadyx-access-token)
Bitbucket HTTPS auth:
REPO_PROVIDER=bitbucketBITBUCKET_USERNAME=<username>(orGIT_USERNAME)BITBUCKET_APP_PASSWORD=<app-password>(orBITBUCKET_TOKEN)
Notes:
- Keep secrets out of committed files.
- Prefer environment-variable expansion supported by your MCP host.
- If your host cannot expand
${VAR}, set values directly in that host's secure secret settings.
Supported subcommands:
pingcloneuse-branchlist-branchespush-files
Command Behavior Summary
ping
- Runs
git ls-remote <repo-url> HEAD
clone
- Clones into destination folder
- Fails if destination exists and is not empty
use-branch
- Fetches remote first
- Reuses local branch if it exists
- Otherwise tracks remote branch if it exists
- Otherwise creates from remote base branch
- Otherwise creates from local base branch
- If repository has no commits, creates orphan branch
list-branches
- Fetches remote first
- Prints local and/or remote branches by scope:
all | local | remote
push-files
- Ensures branch exists (same logic as
use-branch) - Copies provided files/folders into target directory in repo
- Stages copied paths only
- If no staged diff, exits without commit/push
- Otherwise commits and pushes with upstream tracking
Authentication Model
For SSH remotes, normal git SSH auth applies.
For HTTPS remotes, the CLI and scripts support temporary GIT_ASKPASS credentials via environment variables:
- GitHub:
GITHUB_TOKENand optionalGIT_USERNAME(defaultx-access-token) - Bitbucket:
BITBUCKET_APP_PASSWORD(orBITBUCKET_TOKEN) andBITBUCKET_USERNAME(orGIT_USERNAME)
Provider selection:
REPO_PROVIDER=githubREPO_PROVIDER=bitbucketREPO_PROVIDER=auto(default): prefers GitHub token if present, otherwise Bitbucket credentials
The project does not persist credentials.
Configuration Files
Preferred provider-specific files:
repo_rover_runner.github.envrepo_rover_runner.bitbucket.env
Legacy combined template:
repo_rover_runner.env.example- optional runtime file:
repo_rover_runner.env
Common required variables:
REPO_URLLOCAL_REPO_PATHTARGET_BRANCH
Common optional variables:
BASE_BRANCH(defaultmain)REMOTE(defaultorigin)TARGET_DIR(defaultintegration-tests)COMMIT_MESSAGEBRANCH_TO_LIST
Script config resolution order:
REPO_CONFIG_FILEif provided- provider-specific file if
REPO_PROVIDERset - auto-fallback:
repo_rover_runner.bitbucket.env, thenrepo_rover_runner.github.env, thenrepo_rover_runner.env
Helper Scripts
The workspace includes paired scripts for Windows and Linux/macOS to run end-to-end checks quickly.
Main scripted operations:
test_ping_repo- remote reachability/auth checkcreate_new_branch- clone-if-needed thenuse-branchtest_list_branches- branch listingtest_use_branch- branch checkout/create flowlist_files_in_branch- file listing from a branch reftest_push_dummy- pushdummy_payload.txt
One-command suites:
run_github_tests.bat/run_github_tests.shrun_bitbucket_tests.bat/run_bitbucket_tests.sh
Connectivity-only suites:
run_github_connectivity.bat/run_github_connectivity.shrun_bitbucket_connectivity.bat/run_bitbucket_connectivity.sh
Quick Start
- Create and fill one config file (
repo_rover_runner.github.envorrepo_rover_runner.bitbucket.env). - Set provider if needed:
REPO_PROVIDER=githuborREPO_PROVIDER=bitbucket. - Run one command:
Windows:
run_github_tests.bat
or
run_bitbucket_tests.bat
Linux/macOS:
./run_github_tests.sh
or
./run_bitbucket_tests.sh
Project Structure
Python package:
repo_rover_runner/interfaces.py: operation contractrepo_rover_runner/operations.py: shared git implementation and provider classesrepo_rover_runner/factory.py: provider selectionrepo_rover_runner/auth.py: temporary HTTPS askpass setup and env resolutionrepo_rover_runner/exceptions.py: custom error type
CLI:
repo_rover_runner_client.py: main CLIrepo_rover_runner_cli.py: legacy wrapper to main CLI
Tests:
tests/test_auth.pytests/test_factory.pytests/test_operations.pytests/test_cli_client.py
Unit Tests
Windows:
run_repo_rover_runner_unit_tests.bat
Linux/macOS:
./run_repo_rover_runner_unit_tests.sh
The test runner executes unittest with coverage and prints a coverage report.
Security Reports
Dev/security dependencies are available through either:
pip install -r requirements-dev.txt
or:
pip install ".[dev]"
Generate security reports:
Windows:
run_security_reports.bat
Linux/macOS:
./run_security_reports.sh
All generated security artifacts are written under:
test_results/Secutiry_reports/pip_audit_report.jsontest_results/Secutiry_reports/bandit_report.jsontest_results/Secutiry_reports/gitleaks_report.jsontest_results/Secutiry_reports/pip_audit_report.htmltest_results/Secutiry_reports/bandit_report.htmltest_results/Secutiry_reports/gitleaks_report.htmltest_results/Secutiry_reports/security_consolidated.html
sec-report-kit is used when available to convert JSON reports to HTML, with an automatic built-in HTML fallback to guarantee report generation.
GitHub Actions Workflows
The repository now includes these workflows under .github/workflows/:
ci.ymlpublish-testpypi.ymlpublish-pypi.yml
CI and Security
ci.yml runs on push and pull request and includes:
- Unit tests with coverage
- Dependency vulnerability scan with
pip-audit - Static security scan with
bandit - Secret scan with
gitleaks
TestPyPI Publish
publish-testpypi.yml publishes to TestPyPI:
- Manually via
workflow_dispatch - Automatically for pre-release tags like:
vX.Y.Z-rcNvX.Y.Z-betaNvX.Y.Z-alphaN
PyPI Publish
publish-pypi.yml publishes to PyPI:
- Manually via
workflow_dispatch - Automatically when a GitHub Release is published
Required Repository Setup for Publishing
Both publish workflows use trusted publishing (id-token: write) with pypa/gh-action-pypi-publish.
Configure these environments in GitHub repository settings:
testpypipypi
Then configure trusted publisher entries in TestPyPI/PyPI for this repository and workflow files.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file repo_rover_runner-0.1.17.tar.gz.
File metadata
- Download URL: repo_rover_runner-0.1.17.tar.gz
- Upload date:
- Size: 20.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0d9729d2eede05c092976dcef6cc72ad621f69d7110a5047ede7f6dfdfcd3581
|
|
| MD5 |
bcd6ceac0360bd2d3266432d3a17d007
|
|
| BLAKE2b-256 |
82f44d330dba4e3ea25265db59f87811496760cc83e66fd6d801814a836d4407
|
Provenance
The following attestation bundles were made for repo_rover_runner-0.1.17.tar.gz:
Publisher:
publish-pypi.yml on ShanKonduru/repo-rover-runner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repo_rover_runner-0.1.17.tar.gz -
Subject digest:
0d9729d2eede05c092976dcef6cc72ad621f69d7110a5047ede7f6dfdfcd3581 - Sigstore transparency entry: 1690987473
- Sigstore integration time:
-
Permalink:
ShanKonduru/repo-rover-runner@bc82edafed0d83a7c21c7bb9857847f7425c60e3 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/ShanKonduru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@bc82edafed0d83a7c21c7bb9857847f7425c60e3 -
Trigger Event:
workflow_run
-
Statement type:
File details
Details for the file repo_rover_runner-0.1.17-py3-none-any.whl.
File metadata
- Download URL: repo_rover_runner-0.1.17-py3-none-any.whl
- Upload date:
- Size: 15.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ef51def2284ecefb3c975c4383f2eda8bba3ebc4fdafcb50a93728ac600701a
|
|
| MD5 |
5bf7f4a5fe18e2d5adea600532ab2814
|
|
| BLAKE2b-256 |
810b99ed09c8c95038fa8231f93fd461942541a8b87243f5932a88e3857884af
|
Provenance
The following attestation bundles were made for repo_rover_runner-0.1.17-py3-none-any.whl:
Publisher:
publish-pypi.yml on ShanKonduru/repo-rover-runner
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
repo_rover_runner-0.1.17-py3-none-any.whl -
Subject digest:
7ef51def2284ecefb3c975c4383f2eda8bba3ebc4fdafcb50a93728ac600701a - Sigstore transparency entry: 1690987537
- Sigstore integration time:
-
Permalink:
ShanKonduru/repo-rover-runner@bc82edafed0d83a7c21c7bb9857847f7425c60e3 -
Branch / Tag:
refs/heads/master - Owner: https://github.com/ShanKonduru
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@bc82edafed0d83a7c21c7bb9857847f7425c60e3 -
Trigger Event:
workflow_run
-
Statement type: