@@ -337,4 +337,228 @@ class BuildParametersPluginFuncTest extends Specification {
337337 expect :
338338 build(" help" )
339339 }
340+
341+ def " parameter values without default can be derived from environment variable" () {
342+ given :
343+ buildLogicBuildFile << """
344+ buildParameters {
345+ string("myString") {
346+ fromEnvironment()
347+ }
348+ integer("myInt") {
349+ fromEnvironment()
350+ }
351+ bool("myBool") {
352+ fromEnvironment()
353+ }
354+ enumeration("myEnum") {
355+ fromEnvironment()
356+ values = ['A', 'B']
357+ }
358+ }
359+ """
360+ buildFile << """
361+ println "myString: " + buildParameters.myString.get()
362+ println "myInt: " + buildParameters.myInt.get()
363+ println "myBool: " + buildParameters.myBool.get()
364+ println "myEnum: " + buildParameters.myEnum.get()
365+ """
366+
367+ and :
368+ environment. MYSTRING = " something else"
369+ environment. MYINT = " 13"
370+ environment. MYBOOL = " true"
371+ environment. MYENUM = " A"
372+
373+ when :
374+ def result = build(" help" )
375+
376+ then :
377+ result. output. contains(" myString: something else" )
378+ result. output. contains(" myInt: 13" )
379+ result. output. contains(" myBool: true" )
380+ result. output. contains(" myEnum: A" )
381+ }
382+
383+ def " parameter values can be derived from environment variable" () {
384+ given :
385+ buildLogicBuildFile << """
386+ buildParameters {
387+ string("myString") {
388+ fromEnvironment()
389+ defaultValue = "fooDefault"
390+ }
391+ integer("myInt") {
392+ fromEnvironment()
393+ defaultValue = 19
394+ }
395+ bool("myBool") {
396+ fromEnvironment()
397+ defaultValue = true
398+ }
399+ enumeration("myEnum") {
400+ fromEnvironment()
401+ values = ['A', 'B']
402+ defaultValue = 'B'
403+ }
404+ }
405+ """
406+ buildFile << """
407+ println "myString: " + buildParameters.myString
408+ println "myInt: " + buildParameters.myInt
409+ println "myBool: " + buildParameters.myBool
410+ println "myEnum: " + buildParameters.myEnum
411+ """
412+
413+ and :
414+ environment. MYSTRING = " something else"
415+ environment. MYINT = " 13"
416+ environment. MYBOOL = " false"
417+ environment. MYENUM = " A"
418+
419+ when :
420+ def result = build(" help" )
421+
422+ then :
423+ result. output. contains(" myString: something else" )
424+ result. output. contains(" myInt: 13" )
425+ result. output. contains(" myBool: false" )
426+ result. output. contains(" myEnum: A" )
427+ }
428+
429+ def " parameter values can be derived from custom environment variable" () {
430+ given :
431+ buildLogicBuildFile << """
432+ buildParameters {
433+ string("myString") {
434+ fromEnvironment("CUSTOM_STRING")
435+ defaultValue = "fooDefault"
436+ }
437+ integer("myInt") {
438+ fromEnvironment("CUSTOM_INT")
439+ defaultValue = 19
440+ }
441+ bool("myBool") {
442+ fromEnvironment("CUSTOM_BOOL")
443+ defaultValue = true
444+ }
445+ enumeration("myEnum") {
446+ fromEnvironment("CUSTOM_ENUM")
447+ values = ['A', 'B']
448+ defaultValue = 'B'
449+ }
450+ }
451+ """
452+ buildFile << """
453+ println "myString: " + buildParameters.myString
454+ println "myInt: " + buildParameters.myInt
455+ println "myBool: " + buildParameters.myBool
456+ println "myEnum: " + buildParameters.myEnum
457+ """
458+
459+ and :
460+ environment. CUSTOM_STRING = " something else"
461+ environment. CUSTOM_INT = " 13"
462+ environment. CUSTOM_BOOL = " false"
463+ environment. CUSTOM_ENUM = " A"
464+
465+ when :
466+ def result = build(" help" )
467+
468+ then :
469+ result. output. contains(" myString: something else" )
470+ result. output. contains(" myInt: 13" )
471+ result. output. contains(" myBool: false" )
472+ result. output. contains(" myEnum: A" )
473+ }
474+
475+ def " parameter values can be derived from custom environment variable" () {
476+ given :
477+ buildLogicBuildFile << """
478+ buildParameters {
479+ group("group") {
480+ string("myString") {
481+ fromEnvironment()
482+ defaultValue = "fooDefault"
483+ }
484+ integer("myInt") {
485+ fromEnvironment()
486+ defaultValue = 19
487+ }
488+ bool("myBool") {
489+ fromEnvironment()
490+ defaultValue = true
491+ }
492+ enumeration("myEnum") {
493+ fromEnvironment()
494+ values = ['A', 'B']
495+ defaultValue = 'B'
496+ }
497+ }
498+ }
499+ """
500+ buildFile << """
501+ println "myString: " + buildParameters.group.myString
502+ println "myInt: " + buildParameters.group.myInt
503+ println "myBool: " + buildParameters.group.myBool
504+ println "myEnum: " + buildParameters.group.myEnum
505+ """
506+
507+ and :
508+ environment. GROUP_MYSTRING = " something else"
509+ environment. GROUP_MYINT = " 13"
510+ environment. GROUP_MYBOOL = " false"
511+ environment. GROUP_MYENUM = " A"
512+
513+ when :
514+ def result = build(" help" )
515+
516+ then :
517+ result. output. contains(" myString: something else" )
518+ result. output. contains(" myInt: 13" )
519+ result. output. contains(" myBool: false" )
520+ result. output. contains(" myEnum: A" )
521+ }
522+
523+ def " parameter values are taken from command line first" () {
524+ given :
525+ buildLogicBuildFile << """
526+ buildParameters {
527+ string("myString") {
528+ fromEnvironment()
529+ }
530+ integer("myInt") {
531+ fromEnvironment()
532+ }
533+ bool("myBool") {
534+ fromEnvironment()
535+ }
536+ enumeration("myEnum") {
537+ fromEnvironment()
538+ values = ['A', 'B']
539+ }
540+ }
541+ """
542+ buildFile << """
543+ println "myString: " + buildParameters.myString.get()
544+ println "myInt: " + buildParameters.myInt.get()
545+ println "myBool: " + buildParameters.myBool.get()
546+ println "myEnum: " + buildParameters.myEnum.get()
547+ """
548+
549+ and :
550+ environment. MYSTRING = " mystring from env"
551+ environment. MYINT = " 13"
552+ environment. MYBOOL = " true"
553+ environment. MYENUM = " A"
554+
555+ when :
556+ def result = build(" help" , " -PmyString=Something" , " -PmyInt=2" , " -PmyBool=false" , " -PmyEnum=B" )
557+
558+ then :
559+ result. output. contains(" myString: Something" )
560+ result. output. contains(" myInt: 2" )
561+ result. output. contains(" myBool: false" )
562+ result. output. contains(" myEnum: B" )
563+ }
340564}
0 commit comments