Skip to content

Latest commit

 

History

History
78 lines (58 loc) · 2.48 KB

github-replenish.md

File metadata and controls

78 lines (58 loc) · 2.48 KB

GitHub Clones Replenish

GitHub Replenish Logo

This configuration helps make my consistent pulling of repositories from GitHub a bit easier. Especially so if repositories can frequently change names, or the list of all current repositories can change.

I wrote a script to clone all (specific) repositories in an organization.

Context

My setup is currently running macOS Catalina, using iTerm2 with Bash.

You will need homebrew, jq, and gh:

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

brew install jq

brew install gh

Operation

For this configuration, ensure you're in the desired directory and this script exists in the directory. This will create a new directory (named the date, i.e. 2020-12-06T21:16:47Z) where you are, and then dump all the clones within that directory:

bash ./<SCRIPT_NAME>.sh INSERT_GITHUB_ORGANIZATION
# bash ./replenishRepos.sh accordproject

Configuration

All

My configuration within this scriptName.sh file in order to clone all repositories within an organization:

#!/bin/bash
CURRENTDATE=$(date -u +"%Y-%m-%dT%H%M%SZ")
repositories=(`gh api /orgs/$1/repos --paginate | jq -r '.[]' |  tr '\n' '  '`)

mkdir "${CURRENTDATE}"
cd "${CURRENTDATE}"

echo "####"
echo "## Cloning repositories"
echo "####"
for repo in "${repositories[@]}"
do
  echo "####"
  echo "# Cloning repo https://github.com/clauseHQ/${repo}.git"
  echo "####"
  git clone "https://github.com/clauseHQ/${repo}.git"
done

Specific

My configuration within this scriptName.sh file in order to clone only repositories within an organization that have specific prefixes, are archived, and are private:

#!/bin/bash
CURRENTDATE=$(date -u +"%Y-%m-%dT%H%M%SZ")
repositories=(`gh api /orgs/$1/repos --paginate | jq -r '.[] | select(.private == <BOOLEAN> and .archived == <BOOLEAN>) | .name | select(test("<PREFIX_1>") or test("<PREFIX_2>"))' |  tr '\n' '  '`)

mkdir "${CURRENTDATE}"
cd "${CURRENTDATE}"

echo "####"
echo "## Cloning repositories into ${CURRENTDATE}"
echo "####"
for repo in "${repositories[@]}"
do
  echo "####"
  echo "# Cloning repo https://github.com/clauseHQ/${repo}.git"
  echo "####"
  git clone "https://github.com/clauseHQ/${repo}.git"
done

In this configuration, I can select archived or private repositories, and/or repositories with a specific prefix in the name.