@@ -85,7 +85,7 @@ const (
85
85
StageInputInstance
86
86
StageInputToken
87
87
StageInputRunnerName
88
- StageInputCustomLabels
88
+ StageInputLabels
89
89
StageWaitingForRegistration
90
90
StageExit
91
91
)
@@ -101,7 +101,7 @@ type registerInputs struct {
101
101
InstanceAddr string
102
102
Token string
103
103
RunnerName string
104
- CustomLabels []string
104
+ Labels []string
105
105
}
106
106
107
107
func (r * registerInputs ) validate () error {
@@ -111,8 +111,8 @@ func (r *registerInputs) validate() error {
111
111
if r .Token == "" {
112
112
return fmt .Errorf ("token is empty" )
113
113
}
114
- if len (r .CustomLabels ) > 0 {
115
- return validateLabels (r .CustomLabels )
114
+ if len (r .Labels ) > 0 {
115
+ return validateLabels (r .Labels )
116
116
}
117
117
return nil
118
118
}
@@ -126,7 +126,7 @@ func validateLabels(ls []string) error {
126
126
return nil
127
127
}
128
128
129
- func (r * registerInputs ) assignToNext (stage registerStage , value string ) registerStage {
129
+ func (r * registerInputs ) assignToNext (stage registerStage , value string , cfg * config. Config ) registerStage {
130
130
// must set instance address and token.
131
131
// if empty, keep current stage.
132
132
if stage == StageInputInstance || stage == StageInputToken {
@@ -154,16 +154,33 @@ func (r *registerInputs) assignToNext(stage registerStage, value string) registe
154
154
return StageInputRunnerName
155
155
case StageInputRunnerName :
156
156
r .RunnerName = value
157
- return StageInputCustomLabels
158
- case StageInputCustomLabels :
159
- r .CustomLabels = defaultLabels
157
+ // if there are some labels configured in config file, skip input labels stage
158
+ if len (cfg .Runner .Labels ) > 0 {
159
+ ls := make ([]string , 0 , len (cfg .Runner .Labels ))
160
+ for _ , l := range cfg .Runner .Labels {
161
+ _ , err := labels .Parse (l )
162
+ if err != nil {
163
+ log .WithError (err ).Warnf ("ignored invalid label %q" , l )
164
+ continue
165
+ }
166
+ ls = append (ls , l )
167
+ }
168
+ if len (ls ) == 0 {
169
+ log .Warn ("no valid labels configured in config file, runner may not be able to pick up jobs" )
170
+ }
171
+ r .Labels = ls
172
+ return StageWaitingForRegistration
173
+ }
174
+ return StageInputLabels
175
+ case StageInputLabels :
176
+ r .Labels = defaultLabels
160
177
if value != "" {
161
- r .CustomLabels = strings .Split (value , "," )
178
+ r .Labels = strings .Split (value , "," )
162
179
}
163
180
164
- if validateLabels (r .CustomLabels ) != nil {
181
+ if validateLabels (r .Labels ) != nil {
165
182
log .Infoln ("Invalid labels, please input again, leave blank to use the default labels (for example, ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster,linux_arm:host)" )
166
- return StageInputCustomLabels
183
+ return StageInputLabels
167
184
}
168
185
return StageWaitingForRegistration
169
186
}
@@ -192,10 +209,10 @@ func registerInteractive(configFile string) error {
192
209
if err != nil {
193
210
return err
194
211
}
195
- stage = inputs .assignToNext (stage , strings .TrimSpace (cmdString ))
212
+ stage = inputs .assignToNext (stage , strings .TrimSpace (cmdString ), cfg )
196
213
197
214
if stage == StageWaitingForRegistration {
198
- log .Infof ("Registering runner, name=%s, instance=%s, labels=%v." , inputs .RunnerName , inputs .InstanceAddr , inputs .CustomLabels )
215
+ log .Infof ("Registering runner, name=%s, instance=%s, labels=%v." , inputs .RunnerName , inputs .InstanceAddr , inputs .Labels )
199
216
if err := doRegister (cfg , inputs ); err != nil {
200
217
return fmt .Errorf ("Failed to register runner: %w" , err )
201
218
} else {
@@ -226,7 +243,7 @@ func printStageHelp(stage registerStage) {
226
243
case StageInputRunnerName :
227
244
hostname , _ := os .Hostname ()
228
245
log .Infof ("Enter the runner name (if set empty, use hostname: %s):\n " , hostname )
229
- case StageInputCustomLabels :
246
+ case StageInputLabels :
230
247
log .Infoln ("Enter the runner labels, leave blank to use the default labels (comma-separated, for example, ubuntu-20.04:docker://node:16-bullseye,ubuntu-18.04:docker://node:16-buster,linux_arm:host):" )
231
248
case StageWaitingForRegistration :
232
249
log .Infoln ("Waiting for registration..." )
@@ -242,12 +259,21 @@ func registerNoInteractive(configFile string, regArgs *registerArgs) error {
242
259
InstanceAddr : regArgs .InstanceAddr ,
243
260
Token : regArgs .Token ,
244
261
RunnerName : regArgs .RunnerName ,
245
- CustomLabels : defaultLabels ,
262
+ Labels : defaultLabels ,
246
263
}
247
264
regArgs .Labels = strings .TrimSpace (regArgs .Labels )
265
+ // command line flag.
248
266
if regArgs .Labels != "" {
249
- inputs .CustomLabels = strings .Split (regArgs .Labels , "," )
267
+ inputs .Labels = strings .Split (regArgs .Labels , "," )
250
268
}
269
+ // specify labels in config file.
270
+ if len (cfg .Runner .Labels ) > 0 {
271
+ if regArgs .Labels != "" {
272
+ log .Warn ("Labels from command will be ignored, use labels defined in config file." )
273
+ }
274
+ inputs .Labels = cfg .Runner .Labels
275
+ }
276
+
251
277
if inputs .RunnerName == "" {
252
278
inputs .RunnerName , _ = os .Hostname ()
253
279
log .Infof ("Runner name is empty, use hostname '%s'." , inputs .RunnerName )
@@ -302,7 +328,7 @@ func doRegister(cfg *config.Config, inputs *registerInputs) error {
302
328
Name : inputs .RunnerName ,
303
329
Token : inputs .Token ,
304
330
Address : inputs .InstanceAddr ,
305
- Labels : inputs .CustomLabels ,
331
+ Labels : inputs .Labels ,
306
332
}
307
333
308
334
ls := make ([]string , len (reg .Labels ))
@@ -314,7 +340,9 @@ func doRegister(cfg *config.Config, inputs *registerInputs) error {
314
340
resp , err := cli .Register (ctx , connect .NewRequest (& runnerv1.RegisterRequest {
315
341
Name : reg .Name ,
316
342
Token : reg .Token ,
317
- AgentLabels : ls ,
343
+ Version : ver .Version (),
344
+ AgentLabels : ls , // Could be removed after Gitea 1.20
345
+ Labels : ls ,
318
346
}))
319
347
if err != nil {
320
348
log .WithError (err ).Error ("poller: cannot register new runner" )
0 commit comments