67 lines
2.0 KiB
Bash
Executable File
67 lines
2.0 KiB
Bash
Executable File
#!/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 -o errexit -o noclobber -o nounset -o pipefail
|
||
shopt -s failglob inherit_errexit
|
||
|
||
function checkCommits {
|
||
local ret status tmp user
|
||
user="$1"
|
||
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
|
||
status=$(tail -n1 "$tmp")
|
||
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
|
||
|
||
# To check some arbitrary users:
|
||
# parallel -j100 checkUser ::: "eelco" "profpatsch" "Profpatsch" "a"
|