forked from HariSekhon/DevOps-Bash-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathgithub_api.sh
More file actions
executable file
·154 lines (102 loc) · 4.04 KB
/
github_api.sh
File metadata and controls
executable file
·154 lines (102 loc) · 4.04 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
#!/usr/bin/env bash
# vim:ts=4:sts=4:sw=4:et
# args: /user | jq .
# args: /users/HariSekhon/repos | jq .
# args: /repos/HariSekhon/DevOps-Bash-tools/actions/workflows | jq.
# args: /repos/:user/:repo/actions/workflows | jq.
#
# Author: Hari Sekhon
# Date: 2020-02-12 23:43:00 +0000 (Wed, 12 Feb 2020)
#
# https://github.com/HariSekhon/DevOps-Bash-tools
#
# License: see accompanying Hari Sekhon LICENSE file
#
# If you're using my code you're welcome to connect with me on LinkedIn and optionally send me feedback to help steer this or other code I publish
#
# https://www.linkedin.com/in/HariSekhon
#
set -euo pipefail
[ -n "${DEBUG:-}" ] && set -x
srcdir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
# shellcheck disable=SC1090,SC1091
. "$srcdir/lib/utils.sh"
# shellcheck disable=SC1090,SC1091
. "$srcdir/lib/git.sh"
# shellcheck disable=SC2034,SC2154
usage_description="
Queries the GitHub.com API
Automatically handles authentication via environment variables \$GITHUB_USERNAME / \$GITHUB_USER
and \$GH_TOKEN / \$GITHUB_TOKEN / \$GITHUB_PASSWORD (password is deprecated)
Can specify \$CURL_OPTS for options to pass to curl or provide them as arguments
Set up a personal access token here - may need to click 'Enable SSO' next to each token to access corporation organizations with SSO (eg. Azure AAD SSO):
https://github.com/settings/tokens
API Reference:
https://docs.github.com/en/rest/reference
Examples:
# Get currently authenticated user:
${0##*/} /user
# Get a specific user:
${0##*/} /users/HariSekhon
# List a user's GitHub repos:
${0##*/} /users/HariSekhon/repos
# List an organization's GitHub repos:
${0##*/} /orgs/MyOrg/repos
# Get the GitHub Actions workflows for a given repo:
${0##*/} /repos/HariSekhon/DevOps-Bash-tools/actions/workflows
# List repository invitations:
${0##*/} /user/repository_invitations
# For convenience you can even copy and paste out of the documentation literally and have the script auto-determine the right settings. The following tokens in the form :token, <token>, {token} are replaced:
# Placeholders replaced by \$GITHUB_USERNAME / \$GITHUB_USER: owner, username, user
# Placeholders replaced by the local repo name of the current directory: repo
${0##*/} /repos/:user/:repo/actions/workflows
${0##*/} /users/{username}/settings/billing/actions
"
# used by usage() in lib/utils.sh
# shellcheck disable=SC2034
usage_args="/path [<curl_options>]"
url_base="https://api.github.com"
help_usage "$@"
min_args 1 "$@"
curl_api_opts "$@"
url_path="$1"
shift || :
url_path="${url_path//https:\/\/api.github.com}"
url_path="${url_path##/}"
user="${GITHUB_USERNAME:-${GITHUB_USER:-}}"
if [ -z "$user" ]; then
user="$(git remote -v 2>/dev/null | awk '/https:\/\/.+@github\.com/{print $2; exit}' | sed 's|https://||;s/@.*//;s/:.*//' || :)"
# curl_auth.sh does this automatically
#if [ -z "$user" ]; then
# user="${USERNAME:${USER:-}}"
#fi
fi
PASSWORD="${GH_TOKEN:-${GITHUB_TOKEN:-${GITHUB_PASSWORD:-}}}"
if [ -z "${PASSWORD:-}" ]; then
PASSWORD="$(git remote -v | awk '/https:\/\/[[:alnum:]]+@github\.com/{print $2; exit}' | sed 's|https://||;s/@.*//')"
fi
if [ -n "$user" ]; then
export USERNAME="$user"
fi
export PASSWORD
#if [ -n "${PASSWORD:-}" ]; then
# echo "using authenticated access" >&2
#fi
# for convenience of straight copying and pasting out of documentation pages
repo=$(git_repo | sed 's/.*\///' || :)
if [ -n "$user" ]; then
url_path="${url_path/:owner/$user}"
url_path="${url_path/<owner>/$user}"
#url_path="${url_path/\{owner\}/$user}"
url_path="${url_path/:username/$user}"
url_path="${url_path/<username>/$user}"
url_path="${url_path/\{username\}/$user}"
url_path="${url_path/:user/$user}"
url_path="${url_path/<user>/$user}"
url_path="${url_path/\{user\}/$user}"
fi
url_path="${url_path/:repo/$repo}"
url_path="${url_path/<repo>/$repo}"
#url_path="${url_path/\{repo\}/$repo}"
"$srcdir/../bin/curl_auth.sh" "$url_base/$url_path" ${CURL_OPTS:+"${CURL_OPTS[@]}"} "$@" |
jq_debug_pipe_dump