Skip to content

Commit 20673df

Browse files
authored
Merge pull request #18 from Paymentology/feature/enterprise-level-runners
feat: support true enterprise runners
2 parents 5f957c5 + a4aa883 commit 20673df

File tree

1 file changed

+55
-22
lines changed

1 file changed

+55
-22
lines changed

mr.bash

+55-22
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,17 @@ function str::varNotEmpty {
121121
done
122122
}
123123

124+
# Check if any varible value of given varible names are not empty
125+
# $@: varible names
126+
# $?: 0 if non-empty and non-zero otherwise
127+
function str::varsNotEmpty {
128+
local each=''
129+
for each in "$@"; do
130+
[[ -n "${!each}" ]] && return
131+
done
132+
log::failed 1 "Vars '$@' are all empty!" || return $?
133+
}
134+
124135
# Check if varible value of given varible name is IN subsequent arguments
125136
# $1: varible name
126137
# $N: arguments as candidate set
@@ -177,10 +188,17 @@ function mr::nproc {
177188
# $2: repository, registration on organization if empty
178189
function mr::pat2token {
179190
run::exists jq || return $?
180-
local org="$1" repo="$2" api='' middle='' res=''
181-
str::varNotEmpty MR_GITHUB_PAT org || return $?
182-
183-
[[ -z "$repo" ]] && middle="orgs/$org" || middle="repos/$org/$repo"
191+
local enterprise="$1" org="$2" repo="$3" api='' middle='' res=''
192+
str::varNotEmpty MR_GITHUB_PAT || return $?
193+
str::varsNotEmpty org enterprise || return $?
194+
195+
if [[ -n "$enterprise" ]]; then
196+
middle="enterprises/$enterprise"
197+
elif [[ -z "$repo" ]]; then
198+
middle="orgs/$org"
199+
else
200+
middle="repos/$org/$repo"
201+
fi
184202
api="$MR_GIHUB_API_BASEURL/$middle/actions/runners/registration-token"
185203

186204
log::_ DEBUG "Calling API: $api"
@@ -236,10 +254,11 @@ function mr::downloadRunner {
236254
# $7: lines to set in runner's '.env' files, optional
237255
# $?: 0 if successful and non-zero otherwise
238256
function mr::addRunner {
239-
local user="$1" org="$2" repo="$3" token="$4" extraLabels="$5" group="${6:-default}" dotenv="$7" tarpath=''
240-
str::varNotEmpty org || return $?
257+
local user="$1" enterprise="$2" org="$3" repo="$4" token="$5" extraLabels="$6" group="${7:-default}" dotenv="$8" tarpath=''
258+
259+
str::varsNotEmpty enterprise org || return $?
241260
tarpath="$(mr::downloadRunner)" || return $?
242-
[[ -z "$token" ]] && { token="$(mr::pat2token "$org" "$repo")" || return $?; }
261+
[[ -z "$token" ]] && { token="$(mr::pat2token "$enterprise" "$org" "$repo")" || return $?; }
243262
user="$(mr::addUser "$user")" || return $?
244263

245264
local name="$user@$HOSTNAME"
@@ -249,13 +268,21 @@ function mr::addRunner {
249268
[[ -n "$repo" ]] && labels="$labels,$org/$repo" || labels="$labels,$org"
250269
[[ -n "$extraLabels" ]] && labels="$labels,$extraLabels"
251270

271+
if [[ -n "$enterprise" ]]; then
272+
middle="enterprises/$enterprise"
273+
elif [[ -z "$repo" ]]; then
274+
middle="orgs/$org"
275+
else
276+
middle="repos/$org/$repo"
277+
fi
278+
252279
local url=''
253-
[[ -n "$repo" ]] && url="$MR_GIHUB_BASEURL/$org/$repo" || url="$MR_GIHUB_BASEURL/$org"
280+
url="$MR_GIHUB_BASEURL/$middle"
254281

255282
log::_ INFO "Adding runner into local user '$user' for $url"
256283
run::logFailed sudo su --login "$user" -- -eo pipefail <<-__
257284
mkdir -p runner/mr.d && cd runner/mr.d
258-
echo -n '$org' > org && echo -n '$repo' > repo && echo -n '$url' > url
285+
echo -n '$enterprise' > enterprise && echo -n '$org' > org && echo -n '$repo' > repo && echo -n '$url' > url
259286
echo -n '$name' > name && echo -n '$labels' > labels && echo -n '$tarpath' > tarpath
260287
cd .. && tar -xzf "$tarpath"
261288
echo "$dotenv" >> .env
@@ -275,10 +302,11 @@ __
275302
# $4: runner registration token, optional
276303
# $?: 0 if successful and non-zero otherwise
277304
function mr::delRunner {
278-
local user="$1" org="$2" repo="$3" token="$4"
305+
local user="$1" enterprise="$2" org="$3" repo="$4" token="$5"
279306
str::varNotEmpty user || return $?
280307

281308
if [[ -z "$token" ]]; then
309+
[[ -z "$enterprise" ]] && enterprise="$(run::logFailed sudo -Hiu "$user" -- cat runner/mr.d/org)"
282310
[[ -z "$org" ]] && org="$(run::logFailed sudo -Hiu "$user" -- cat runner/mr.d/org)"
283311
[[ -z "$repo" ]] && repo="$(run::logFailed sudo -Hiu "$user" -- cat runner/mr.d/repo)"
284312
token="$(mr::pat2token "$org" "$repo")"
@@ -342,14 +370,15 @@ Sub-commands:
342370
e.g. ${BASH_SOURCE[0]} pat2token --org SOME_OWNER --repo SOME_REPO
343371
344372
Options:
345-
--org GitHub organization name
346-
--repo GitHub repository name, registration on organization-level if empty
347-
--user Linux local username of runner
348-
--labels Extra labels for the runner
349-
--group Runner group for the runner
350-
--token Runner registration token, takes precedence over MR_GITHUB_PAT
351-
--dotenv The lines to set in runner's '.env' files
352-
-h --help Show this help.
373+
--enterprise GitHub Enterprise name
374+
--org GitHub organization name
375+
--repo GitHub repository name, registration on organization-level if empty
376+
--user Linux local username of runner
377+
--labels Extra labels for the runner
378+
--group Runner group for the runner
379+
--token Runner registration token, takes precedence over MR_GITHUB_PAT
380+
--dotenv The lines to set in runner's '.env' files
381+
-h --help Show this help.
353382
"
354383
declare -rg HELP
355384

@@ -360,13 +389,17 @@ function mr::main {
360389
local org='' repo='' user='' labels='' token='' group='' dotenv=''
361390

362391
# parse options into variables
363-
getopt_output="$(getopt -o h -l help,org:,repo:,user:,labels:,token:,group:,dotenv: -n "$FILE_THIS" -- "$@")"
392+
getopt_output="$(getopt -o h -l help,enterprise:,org:,repo:,user:,labels:,token:,group:,dotenv: -n "$FILE_THIS" -- "$@")"
364393
log::failed $? "getopt failed!" || return $?
365394
eval set -- "$getopt_output"
366395

367396
while true; do
368397
case "$1" in
369398
-h | --help) echo -n "$HELP" && return ;;
399+
--enterprise)
400+
enterprise="$2"
401+
shift 2
402+
;;
370403
--org)
371404
org="$2"
372405
shift 2
@@ -410,12 +443,12 @@ function mr::main {
410443
subCmd="$1"
411444
shift
412445
case "$subCmd" in
413-
add) mr::addRunner "$user" "$org" "$repo" "$token" "$labels" "$group" "$dotenv" ;;
414-
del) mr::delRunner "$user" "$org" "$repo" "$token" ;;
446+
add) mr::addRunner "$user" "$enterprise" "$org" "$repo" "$token" "$labels" "$group" "$dotenv" ;;
447+
del) mr::delRunner "$user" "$enterprise" "$org" "$repo" "$token" ;;
415448
list) mr::listRunners ;;
416449
status) mr::statusRunner "$user" ;;
417450
download) mr::downloadRunner ;;
418-
pat2token) mr::pat2token "$org" "$repo" ;;
451+
pat2token) mr::pat2token "$enterprise" "$org" "$repo" ;;
419452
help | '') echo -n "$HELP" >&2 ;;
420453
test) mr::test "$@" ;;
421454
*)

0 commit comments

Comments
 (0)