smeserver-gitutils/git-list-all-org-repos.sh
2023-07-20 20:00:36 +01:00

149 lines
4.6 KiB
Bash
Executable File

#!/bin/bash
# Pull in parameters from a ini file
#
# Pull in parameters from a config file ~/.smegit/config
#
inifilename=$(echo ~)"/.smegit/config"
if [ ! -e $inifilename ] ; then
# Not here, look at system default
if [ ! -e /etc/smegit.ini ] ; then
echo "No ini file found $inifilename or /etc/smegit.ini"
echo "git-list-all-org-repos.sh <organisation> [draftrelease | prerelease | release | allreleases] [cloneurl] [zipurl] [asseturls]"
exit 1
else
inifilename="/etc/smegit.ini"
fi
fi
while read -r line || [[ -n "$line" ]]; do
if [[ $line =~ ^\[.*\]$ ]]
then
section=${line#*[}
section=${section%]*}
else
if [[ $line =~ ^[^#]*= ]]
then
key=${line%=*}
value=${line#*=}
declare "${section}_${key}=$value"
fi
fi
done < "$inifilename"
GITEAUser=${remote_USER}
GITEAACCESSTOKEN=${remote_GITEAACCESSTOKEN}
GITEAHOST=${remote_GITEAHOST}
NOISY=
EXTRAPARAMS=
DEBUG=
for param in $2 $3 $4 $5 $6 $7 $8 $9 $10; do
if [ $param ] ; then
case $param in
local )
GITEAUser=${local_USER}
GITEAACCESSTOKEN=${local_GITEAACCESSTOKEN}
GITEAHOST=${local_GITEAHOST}
;;
debug )
DEBUG=true ;;
noisy )
NOISY=true ;;
release )
SHOWRELEASE=true;SHOWPRERELEASE=false;SHOWDRAFT=false ;;
draftrelease )
SHOWRELEASE=true;SHOWPRERELEASE=false;SHOWDRAFT=true ;;
prerelease )
SHOWRELEASE=true;SHOWPRERELEASE=true;SHOWDRAFT=false ;;
allreleases )
SHOWRELEASE=true;SHOWALLRELEASES=true ;;
cloneurl )
SHOWCLONEURL=true ;;
zipurl )
SHOWZIPURL=true ;;
id )
SHOWID=true ;;
asseturls )
SHOWASSETURLS=true ;;
* )
EXTRAPARAMS=$EXTRAPARAMS" "$param ;;
esac
else
break
fi
done
if [[ -z $1 ]] ; then
echo "git-list-all-org-repos.sh <organisation> [draftrelease | prerelease | release | allreleases] [cloneurl] [zipurl] [asseturls]"
exit 0
fi
ORG_NAME="$1"
PAGE_COUNTER=1
REPO_LIST=""
while true; do
REPO_PAGE=$(curl -s -H "Authorization: token $GITEAACCESSTOKEN" "$GITEAHOST/api/v1/orgs/$ORG_NAME/repos?page=$PAGE_COUNTER")
if [[ $(echo $REPO_PAGE | jq length) -eq 0 ]]; then
break
fi
REPO_LIST="$REPO_LIST $(echo $REPO_PAGE | jq -r .[].full_name | cut -d / -f 2 )"
PAGE_COUNTER=$((PAGE_COUNTER+1))
done
REPO_LIST=$(echo $REPO_LIST | tr -s '[:space:]' '\n' | sort)
for item in $REPO_LIST ; do
line=$item
if [[ $SHOWID || $SHOWRELEASE || $SHOWCLONEURL || $ZIPURL || $SHOWALLRELEASES ]] ; then
#Find and show releases
# echo "$GITEAHOST/api/v1/repos/$ORG_NAME/$item/releases?draft=true&pre-release=true&limit=100" \
# -H 'accept: application/json' \
# -H "Authorization: token $GITEAACCESSTOKEN"
if [ $SHOWALLRELEASES ] ; then
RESPONSE=$(curl -s -X 'GET' \
"$GITEAHOST/api/v1/repos/$ORG_NAME/$item/releases" \
-H 'accept: application/json' \
-H "Authorization: token $GITEAACCESSTOKEN");
else
RESPONSE=$(curl -s -X 'GET' \
"$GITEAHOST/api/v1/repos/$ORG_NAME/$item/releases?draft=$SHOWDRAFT&pre-release=$SHOWPRERELEASE&limit=100" \
-H 'accept: application/json' \
-H "Authorization: token $GITEAACCESSTOKEN");
fi
if [ $DEBUG ] ; then echo "$RESPONSE"; fi
if [ $SHOWRELEASE ] ; then
# Will need to use " jq 'map(.name)'" once we have more than one release.
REL=$(echo $RESPONSE | jq -r '.[0].tag_name')
ID=$(echo $RESPONSE | jq -r '.[0].id')
PRE=$(echo $RESPONSE | jq -r '.[0].prerelease')
DRAFT=$(echo $RESPONSE | jq -r '.[0].draft')
# Get assets - json for any files uploaded
ASSETS=$(echo $RESPONSE | jq -r '.[0].assets')
# Number of assets
NUMASSETS=$(echo $ASSETS | jq length)
if [ $DEBUG ]; then echo "Assets:$NUMASSETS"; fi
if [ $PRE = "true" ] ; then PRE="pre";
else PRE=""; fi
if [ $DRAFT = "true" ] ; then DRAFT="draft";
else DRAFT=""; fi
if [ $DEBUG ] ; then echo "pre:$PRE Draft:$DRAFT"; fi
if [ $DEBUG ] ; then echo $REL; fi
if [ "$REL" ] ; then line="$line $REL $ID $PRE $DRAFT $NUMASSETS"; fi
if [ $SHOWCLONEURL ] ; then
URL=$(echo $RESPONSE | jq -r '.[0].url')
if [ "$URL" ] ; then line="$line $URL"; fi
fi
if [ $SHOWZIPURL ] ; then
URL=$(echo $RESPONSE | jq -r '.[0].zipball_url')
if [ "$URL" ] ; then line="$line $URL"; fi
fi
if [[ $NUMASSETS -gt 0 && $SHOWASSETURLS ]]; then
ASSETURLS=$(echo $ASSETS | jq 'map("\(.name):\(.browser_download_url).")')
if [ $DEBUG ]; then echo "$ASSETURLS"; fi
# Turn the json into a list one on each line
ASSETURLS=$(echo $ASSETURLS | sed 's/\[//' | sed 's/\]//' | sed 's/,/\\n/g' | sed 's/\"//g')
line="$line\n$ASSETURLS";
fi
fi
fi
echo -e $line;
done