67 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			67 lines
		
	
	
		
			1.9 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 -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"
 |