maintainers/scripts: improve github handle checker

Now also finds name-clashes for github handles who never contributed to nixpkgs
before. Also deals with too many request errors.
This commit is contained in:
Profpatsch 2018-03-03 03:18:37 +01:00
parent aa47bac04f
commit a2c708c256

View file

@ -6,18 +6,61 @@
set -e set -e
# checks whether a user handle can be found on github # nixpkgs='<nixpkgs>'
# if [ -n "$1" ]; then
function checkCommits {
local user="$1"
local tmp=$(mktemp)
curl --silent -w "%{http_code}" \
"https://github.com/NixOS/nixpkgs/commits?author=$user" \
> "$tmp"
# the last line of tmp contains the http status
local status=$(tail -n1 "$tmp")
local ret=
case $status in
200) if <"$tmp" grep -i "no commits found" > /dev/null; then
ret=1
else
ret=0
fi
;;
# because of githubs hard request limits, this can take some time
429) sleep 2
printf "."
checkCommits "$user"
ret=$?
;;
*) printf "BAD STATUS: $(tail -n1 $tmp) for %s\n" "$user"; ret=1
ret=1
;;
esac
rm "$tmp"
return $ret
}
export -f checkCommits
function checkUser { function checkUser {
local user="$1" local user="$1"
local status= local status=
status="$(curl --silent --head "https://github.com/${user}" | grep Status)" status="$(curl --silent --head "https://github.com/${user}" | grep Status)"
printf "%s\t\t\t\t%s\n" "$status" "$user" # checks whether a user handle can be found on github
if [[ "$status" =~ 404 ]]; then
printf "%s\t\t\t\t%s\n" "$status" "$user"
# checks whether the user handle has any nixpkgs commits
elif checkCommits "$user"; then
printf "OK!\t\t\t\t%s\n" "$user"
else
printf "No Commits!\t\t\t%s\n" "$user"
fi
} }
export -f checkUser export -f checkUser
# output the maintainers set as json # output the maintainers set as json
# and filter out the github username of each maintainer (if it exists) # and filter out the github username of each maintainer (if it exists)
# then check 100 at the same time # then check some at the same time
nix-instantiate -A lib.maintainers --eval --strict --json \ nix-instantiate -A lib.maintainers --eval --strict --json \
| jq -r '.[]|.github' \ | jq -r '.[]|.github|select(.)' \
| parallel -j100 checkUser | parallel -j5 checkUser
# parallel -j100 checkUser ::: "eelco" "profpatsch" "Profpatsch" "a"