View on GitHub

repo-pull-tool

This tool is designed to automate the task of pulling multiple git repositories.

Download this project as a .zip file Download this project as a tar.gz file

rpt - repo-pull-tool.sh

Windows Ubuntu MacOS shellcheck

$ rpt -h
Clone or pull multiple GitHub organization repositories.
Usage: rpt [-f|--filter <arg>] [-g|--github-org <arg>] [-h|--help] <workspace>
        <workspace>: directory where git repositories are located
        -f, --filter: regex filters, space separated list (no default)
        -g, --github-org: GitHub Organisation name (no default)
        -h, --help: Prints help

This tool is designed to automate the task of pulling multiple git repositories. It will scan your GitHub organization’s repos based on a filter and clone or pull them.

Install rpt

Depedencies

This script requires:

Install from source

Installing is just cloning the repository.

git clone git@github.com:Hallian/repo-pull-tool.git ~/.rpt

Create alias

You can either just run the script directly with ~/.rpt/repo-pull-tool.sh or you can make an alias, e.g. rpt:

echo 'alias rpt="~/.rpt/repo-pull-tool.sh"' >> ~/.bashrc
# OR:
echo 'alias rpt="~/.rpt/repo-pull-tool.sh"' >> ~/.bash_profile

Usage

Prerequisites

GitHub personal access token

This script needs a GitHub personal access token token to query the GitHub API for your organization’s repositories. You can either supply this each time your run the script or put it in some place convenient, e.g. ~/.bashrc, ~/.bash_profile, …

export GITHUB_TOKEN="github-token-with-repo-access"

Run repo-pull-tool.sh

The script takes GitHub organization name as the first parameter, a workspace directory i.e. where the repositories are/will be cloned to and finally a list of regex filters.

rpt ~/workspace -g GitHubOrgName -f "^awesome-project- ^boring-project"

The above pull all repositories starting with awesome-project- and boring-project into ~/workspace.

Make an alias

To make things easy and quick, make aliases to your ~/.bashrc:

alias awesome-pull='rpt GitHubOrgName ~/workspace "^awesome-project-"'
alias boring-pull='rpt GitHubOrgName ~/workspace "^boring-project-"'

Help

To get details on the various parameters you can obtain help with the -h flag.

rpt -h

Testing

This project endevours to provide extensive shellspec tests to ensure functionality of the script on all OSes. The aim of this tool is to be 100% covered with tests and work on all major operating systems.

Running tests

shellspec

Motivation

Why write this script? Partly because I got tired of writing the same repo pull script every time I switched consulting gigs to a new client and partly due to a desire to see if one could in fact write maintainable bash scripts that could be expected to run on all operating systems and not break at the drop of a hat. Extensive automated testing seems like the only feasible way to approach the matter.