2017-01-24 3 views
0

Ich möchte eine Liste aller privaten Repositories in unserer Organisation github erhalten. Ich versuchte -erhalten Sie eine Liste aller privaten Repos

curl -u user:pw -X GET https://api.github.com/orgs/xxx/repos?per_page=100 >> list.txt 

ich herausfinden, dass die per_page MAX-Wert 100 ist, wie kann ich alle unsere repos in eine Datei?

Dank

Antwort

1

Sie können ein Bash-Skript verwenden, das über jede Seite springt, bis die letzte erreichte Seite leer ist.

Der Filter kann mit jq JSON-Parser getan werden, um privates Repository zu filtern, Sie können auch gegabelte Repos oder alles, was Sie wollen, ausschließen.

Bitte beachte, dass ich eine personal access token für die Authentifizierung verwendet wird (privat Repo zu bekommen):

#!/bin/bash 

# change those vars : 
GITHUB_ORG=docker 
GITHUB_ACCESS_TOKEN=12345666799897950400303332323 
OUTPUT_FILE=repo_list.json 

loop=0 
index=1 
TMP_FILE=tmpfile.txt 
PER_PAGE=100 

rm -f $TMP_FILE 
echo "[]" > $OUTPUT_FILE 

while [ "$loop" -ne 1 ] 
do 

    data=`curl -s "https://api.github.com/orgs/$GITHUB_ORG/repos?access_token=$GITHUB_ACCESS_TOKEN&page=$index&per_page=$PER_PAGE"` 

    check_error=`echo "$data" | jq 'type!="array"'` 

    if [ "$check_error" == "true" ]; then 
     echo "access token is invalid" 
    exit 1 
    fi 

    filtered=`echo "$data" | jq '[ .[] | select(.private == true) ]'` 

    if [ "$filtered" == "[]" ]; then 
     loop=1 
    else 
     echo "$filtered" > $TMP_FILE 
     concat=`jq -s add $TMP_FILE $OUTPUT_FILE` 
     echo "$concat" > $OUTPUT_FILE 
     size=`jq '. | length' $OUTPUT_FILE` 
     echo "computed $index page - fetched total repo size of : $size" 
     index=$((index+1)) 
    fi 
done 

Wenn nur ein Array von Repository-URL anstelle des gesamten JSON-Objekt haben wollen, ersetzen:

jq '[ .[] | select(.private == true) ]' 

mit:

jq '[ .[] | select(.private == true) | .html_url ]' 
Verwandte Themen