mirror of
https://github.com/NixOS/nixpkgs.git
synced 2024-11-18 03:30:45 +00:00
1d7f14656a
* maintainer-list: Document automatic invites to @NixOS/nixpkgs-maintainers * maintainers/scripts: Add `get-maintainer.sh` Supports querying `maintainers-list.nix` by Nix attribute, email address, github name or id, matrix account, or name. * maintainers/scripts/get-maintainer.sh: More verbose help message * maintainers/scripts/get-maintainer.sh: Fix (some) `shellcheck` lints * maintainers/scripts: Add README * maintainers/scripts/get-maintainer.sh: Put inline documentation at the top of the file * maintainers/scripts: Document this is not a stable interfact to nixpkgs Co-authored-by: Silvan Mosberger <github@infinisil.com> * scripts/README: Add example for `get-maintainer.sh` --------- Co-authored-by: Silvan Mosberger <github@infinisil.com>
74 lines
1.5 KiB
Bash
Executable file
74 lines
1.5 KiB
Bash
Executable file
#!/usr/bin/env nix-shell
|
|
#!nix-shell -i bash -p jq ncurses
|
|
# shellcheck shell=bash
|
|
|
|
# Get a nixpkgs maintainer's metadata as a JSON object
|
|
# see HELP_MESSAGE just below, or README.md.
|
|
|
|
set -euo pipefail
|
|
|
|
declare -A SELECTORS=( [handle]= [email]= [github]= [githubId]= [matrix]= [name]= )
|
|
HELP_MESSAGE="usage: '$0' [selector] value
|
|
examples:
|
|
get-maintainer.sh nicoo
|
|
get-maintainer.sh githubId 1155801
|
|
|
|
\`selector\` defaults to 'handle', can be one of:
|
|
${!SELECTORS[*]}
|
|
"
|
|
|
|
MAINTAINERS_DIR="$(dirname "$0")/.."
|
|
|
|
die() {
|
|
tput setaf 1 # red
|
|
echo "'$0': $*"
|
|
tput setaf 0 # back to black
|
|
exit 1
|
|
}
|
|
|
|
listAsJSON() {
|
|
nix-instantiate --eval --strict --json "${MAINTAINERS_DIR}/maintainer-list.nix"
|
|
}
|
|
|
|
parseArgs() {
|
|
[ $# -gt 0 -a $# -lt 3 ] || {
|
|
echo "$HELP_MESSAGE"
|
|
die "invalid number of arguments (must be 1 or 2)"
|
|
}
|
|
|
|
if [ $# -eq 1 ]; then
|
|
selector=handle
|
|
else
|
|
selector="$1"
|
|
shift
|
|
fi
|
|
[ -z "${SELECTORS[$selector]-n}" ] || {
|
|
echo "Valid selectors are:" "${!SELECTORS[@]}" >&2
|
|
die "invalid selector '$selector'"
|
|
}
|
|
|
|
value="$1"
|
|
shift
|
|
}
|
|
|
|
query() {
|
|
# explode { a: A, b: B, ... } into A + {handle: a}, B + {handle: b}, ...
|
|
local explode="to_entries[] | .value + { \"handle\": .key }"
|
|
|
|
# select matching items from the list
|
|
# TODO(nicoo): Support approximate matching for `name` ?
|
|
local select
|
|
case "$selector" in
|
|
githubId)
|
|
select="select(.${selector} == $value)"
|
|
;;
|
|
*)
|
|
select="select(.${selector} == \"$value\")"
|
|
esac
|
|
|
|
echo "$explode | $select"
|
|
}
|
|
|
|
parseArgs "$@"
|
|
listAsJSON | jq -e "$(query)"
|