@@ -121,6 +121,17 @@ function str::varNotEmpty {
121
121
done
122
122
}
123
123
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
+
124
135
# Check if varible value of given varible name is IN subsequent arguments
125
136
# $1: varible name
126
137
# $N: arguments as candidate set
@@ -177,10 +188,17 @@ function mr::nproc {
177
188
# $2: repository, registration on organization if empty
178
189
function mr::pat2token {
179
190
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
184
202
api=" $MR_GIHUB_API_BASEURL /$middle /actions/runners/registration-token"
185
203
186
204
log::_ DEBUG " Calling API: $api "
@@ -236,10 +254,11 @@ function mr::downloadRunner {
236
254
# $7: lines to set in runner's '.env' files, optional
237
255
# $?: 0 if successful and non-zero otherwise
238
256
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 $?
241
260
tarpath=" $( mr::downloadRunner) " || return $?
242
- [[ -z " $token " ]] && { token=" $( mr::pat2token " $org " " $repo " ) " || return $? ; }
261
+ [[ -z " $token " ]] && { token=" $( mr::pat2token " $enterprise " " $ org" " $repo " ) " || return $? ; }
243
262
user=" $( mr::addUser " $user " ) " || return $?
244
263
245
264
local name=" $user @$HOSTNAME "
@@ -249,13 +268,21 @@ function mr::addRunner {
249
268
[[ -n " $repo " ]] && labels=" $labels ,$org /$repo " || labels=" $labels ,$org "
250
269
[[ -n " $extraLabels " ]] && labels=" $labels ,$extraLabels "
251
270
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
+
252
279
local url=' '
253
- [[ -n " $repo " ]] && url=" $MR_GIHUB_BASEURL /$org / $repo " || url= " $MR_GIHUB_BASEURL / $org "
280
+ url=" $MR_GIHUB_BASEURL /$middle "
254
281
255
282
log::_ INFO " Adding runner into local user '$user ' for $url "
256
283
run::logFailed sudo su --login " $user " -- -eo pipefail << -__
257
284
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
259
286
echo -n '$name ' > name && echo -n '$labels ' > labels && echo -n '$tarpath ' > tarpath
260
287
cd .. && tar -xzf "$tarpath "
261
288
echo "$dotenv " >> .env
275
302
# $4: runner registration token, optional
276
303
# $?: 0 if successful and non-zero otherwise
277
304
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 "
279
306
str::varNotEmpty user || return $?
280
307
281
308
if [[ -z " $token " ]]; then
309
+ [[ -z " $enterprise " ]] && enterprise=" $( run::logFailed sudo -Hiu " $user " -- cat runner/mr.d/org) "
282
310
[[ -z " $org " ]] && org=" $( run::logFailed sudo -Hiu " $user " -- cat runner/mr.d/org) "
283
311
[[ -z " $repo " ]] && repo=" $( run::logFailed sudo -Hiu " $user " -- cat runner/mr.d/repo) "
284
312
token=" $( mr::pat2token " $org " " $repo " ) "
@@ -342,14 +370,15 @@ Sub-commands:
342
370
e.g. ${BASH_SOURCE[0]} pat2token --org SOME_OWNER --repo SOME_REPO
343
371
344
372
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.
353
382
"
354
383
declare -rg HELP
355
384
@@ -360,13 +389,17 @@ function mr::main {
360
389
local org=' ' repo=' ' user=' ' labels=' ' token=' ' group=' ' dotenv=' '
361
390
362
391
# 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 " -- " $@ " ) "
364
393
log::failed $? " getopt failed!" || return $?
365
394
eval set -- " $getopt_output "
366
395
367
396
while true ; do
368
397
case " $1 " in
369
398
-h | --help) echo -n " $HELP " && return ;;
399
+ --enterprise)
400
+ enterprise=" $2 "
401
+ shift 2
402
+ ;;
370
403
--org)
371
404
org=" $2 "
372
405
shift 2
@@ -410,12 +443,12 @@ function mr::main {
410
443
subCmd=" $1 "
411
444
shift
412
445
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 " ;;
415
448
list) mr::listRunners ;;
416
449
status) mr::statusRunner " $user " ;;
417
450
download) mr::downloadRunner ;;
418
- pat2token) mr::pat2token " $org " " $repo " ;;
451
+ pat2token) mr::pat2token " $enterprise " " $ org" " $repo " ;;
419
452
help | ' ' ) echo -n " $HELP " >&2 ;;
420
453
test) mr::test " $@ " ;;
421
454
* )
0 commit comments