67 lines
1.9 KiB
Bash
67 lines
1.9 KiB
Bash
|
#!/usr/bin/env nix-shell
|
|||
|
#!nix-shell -i bash -p jq parallel
|
|||
|
|
|||
|
# Example how to work with the `lib.maintainers` attrset.
|
|||
|
# Can be used to check whether all user handles are still valid.
|
|||
|
|
|||
|
set -e
|
|||
|
|
|||
|
# 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 github’s 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 {
|
|||
|
local user="$1"
|
|||
|
local status=
|
|||
|
status="$(curl --silent --head "https://github.com/${user}" | grep Status)"
|
|||
|
# 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
|
|||
|
|
|||
|
# output the maintainers set as json
|
|||
|
# and filter out the github username of each maintainer (if it exists)
|
|||
|
# then check some at the same time
|
|||
|
nix-instantiate -A lib.maintainers --eval --strict --json \
|
|||
|
| jq -r '.[]|.github|select(.)' \
|
|||
|
| parallel -j5 checkUser
|
|||
|
|
|||
|
# parallel -j100 checkUser ::: "eelco" "profpatsch" "Profpatsch" "a"
|