backup-my-github/backup.sh

89 lines
2.3 KiB
Bash

#!/usr/bin/env bash
set -e
RESET_COLOR="\\033[0m"
RED_COLOR="\\033[0;31m"
GREEN_COLOR="\\033[0;32m"
BLUE_COLOR="\\033[0;34m"
function reset_color() {
echo -e "${RESET_COLOR}\\c"
}
function red_color() {
echo -e "${RED_COLOR}\\c"
}
function green_color() {
echo -e "${GREEN_COLOR}\\c"
}
function blue_color() {
echo -e "${BLUE_COLOR}\\c"
}
function hello() {
blue_color
echo " "
echo " Backup My GitHub "
echo " "
echo " "
echo "This script will clone all your repositories from provided username to your machine"
echo "It will prompt you for your username account and personal access token"
echo "To generate token, please, refer this guide - https://help.github.com/articles/creating-a-personal-access-token-for-the-command-line"
echo "Make sure, that your token has full access to repo scope!"
reset_color
}
function checkForCurl() {
if ! [ "$(command -v curl)" ]; then
red_color
echo "You don't have installed curl"
exit 1
else
green_color
echo "curl is present on your machine, continue..."
fi
reset_color
}
function checkForJQ() {
if ! [ "$(command -v jq)" ]; then
red_color
echo "You don't have installed jq"
exit 1
else
green_color
echo "jq is present on your machine, continue..."
fi
reset_color
}
function cloneRepositories() {
green_color
echo
read -r -p "What is your username on GitHub: " username
read -r -p "What is your personal access token: " token
echo
blue_color
repository_count=$(curl -XGET -s https://"${username}":"${token}"@api.github.com/users/"${username}" | jq -c --raw-output ".public_repos")
repositories=$(curl -XGET -s https://"${username}":"${token}"@api.github.com/users/"${username}"/repos?per_page="${repository_count}" | jq -c --raw-output ".[].ssh_url")
for repository in ${repositories}; do
echo "Cloning ${repository}..."
git clone --quiet "${repository}"
done
green_color
echo "All your repositories are successfully cloned in current directory"
}
hello
checkForCurl
checkForJQ
cloneRepositories