Skip to content

Instantly share code, notes, and snippets.

@onthedesk
Forked from JonasGroeger/sync-projects
Last active July 1, 2018 02:40
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save onthedesk/0ecffcce8182b32855d7549b23f71862 to your computer and use it in GitHub Desktop.
Save onthedesk/0ecffcce8182b32855d7549b23f71862 to your computer and use it in GitHub Desktop.
Gitlab: Clone / Pull all projects in a group
#!/usr/bin/env bash
# Documentation
# https://docs.gitlab.com/ce/api/projects.html#list-projects
# NAMESPACE="YOUR_NAMESPACE"
BASE_PATH="YOUR_GIT_SERVER_PATH"
# PROJECT_SEARCH_PARAM="YOUR_SEARCH_PARAM"
if [ -z "$GITLAB_PRIVATE_TOKEN" ]; then
echo "Please set the environment variable GITLAB_PRIVATE_TOKEN"
echo "See ${BASE_PATH}profile/account"
exit 1
fi
FILENAME="repos.json"
#curl -s "${BASE_PATH}api/v3/projects?private_token=$GITLAB_PRIVATE_TOKEN&search=$PROJECT_SEARCH_PARAM" \
# | jq --raw-output --compact-output ".[] | select(.namespace.name == \"$NAMESPACE\") | { "path": .path, "git": .ssh_url_to_repo }" > "$FILENAME"
curl -s "${BASE_PATH}api/v3/projects?private_token=$GITLAB_PRIVATE_TOKEN" \
| jq --raw-output --compact-output ".[] | { "path": .path, "git": .ssh_url_to_repo, "path_with_namespace": .path_with_namespace}" > "$FILENAME"
while read repo; do
THEPATH=$(echo "$repo" | jq -r ".path")
GIT=$(echo "$repo" | jq -r ".git")
PATH_WITH_NAMESPACE=$(echo "$repo" | jq -r ".path_with_namespace" | sed 's/\//_/g')
if [ ! -d "$THEPATH" ]; then
echo "Cloning $THEPATH ( $GIT )"
git clone "$GIT" --quiet "$PATH_WITH_NAMESPACE"
else
echo "Pulling $THEPATH"
(cd "$THEPATH" && git pull --quiet)
fi
done < "$FILENAME"
rm "$FILENAME"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment