@@ -12,44 +12,56 @@ spotless {
1212
1313abstract class InstallFirebaseToolsTask : DefaultTask () {
1414
15- @get:Input abstract val firebaseToolsVersion : Property <String >
15+ @get:Input abstract val version : Property <String >
1616
17- @get:OutputDirectory abstract val installDir : DirectoryProperty
17+ @get:OutputDirectory abstract val destDir : DirectoryProperty
1818
1919 @get:Inject abstract val execOperations: ExecOperations
2020
2121 @TaskAction
2222 fun execute () {
23- val installDir : File = installDir .get().asFile
24- val firebaseToolsVersion : String = firebaseToolsVersion .get()
23+ val destDir : File = destDir .get().asFile
24+ val version : String = version .get()
2525
26- logger.lifecycle(" Creating directory: $installDir " )
27- installDir.mkdirs()
28-
29- val packageJsonFile = File (installDir, " package.json" )
26+ val packageJsonFile = File (destDir, " package.json" )
3027 logger.lifecycle(" Creating $packageJsonFile " )
3128 packageJsonFile.writeText(" {}" )
3229
3330 execOperations.exec {
34- workingDir = installDir
31+ workingDir = destDir
3532 setCommandLine(
3633 " npm" ,
3734 " install" ,
3835 " --fund=false" ,
3936 " --audit=false" ,
4037 " --save" ,
4138 " --save-exact" ,
42- " firebase-tools@$firebaseToolsVersion " ,
39+ " firebase-tools@$version " ,
4340 )
4441 logger.lifecycle(" Running command in directory $workingDir : ${commandLine.joinToString(" " )} " )
4542 }
4643 }
4744}
4845
49- tasks.register<InstallFirebaseToolsTask >(" installFirebaseTools" ) {
50- val projectDirectory = layout.projectDirectory
51- installDir.set(providers.gradleProperty(" installDir" ).map { projectDirectory.dir(it) })
52- firebaseToolsVersion.set(providers.gradleProperty(" firebaseToolsVersion" ))
46+ val installFirebaseToolsTask = tasks.register<InstallFirebaseToolsTask >(" installFirebaseTools" ) {
47+ group = " Data Connect CI"
48+ description = " Install the firebase-tools npm package"
49+ destDir.set(layout.buildDirectory.dir(" firebase-tools" ))
50+ version.set(providers.requiredGradleProperty(" firebaseToolsVersion" ))
5351}
5452
53+ fun ProviderFactory.requiredGradleProperty (propertyName : String ) =
54+ gradleProperty(propertyName)
55+ .orElse(
56+ providers.provider<Nothing > {
57+ throw RequiredPropertyMissing (
58+ " zzyzx=${project.property(propertyName)} Project property \" $propertyName \" was not set, " +
59+ " but is required. " +
60+ " Consider setting this project property by specifying " +
61+ " -P$propertyName =<value> on the Gradle command line, " +
62+ " or by setting the ORG_GRADLE_PROJECT_installFirebaseTools environment variable."
63+ )
64+ }
65+ )
66+
5567class RequiredPropertyMissing (message : String ) : Exception(message)
0 commit comments