about summary refs log tree commit diff
path: root/maintainers/scripts/get-maintainer.sh
blob: 3061d2ccc72f9a1f97806cd587133de6760f00db (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
#!/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)"