]> source.dussan.org Git - sonarqube.git/commitdiff
Avoid unnecessary yarn install runs
authorPhilippe Perrin <philippe.perrin@sonarsource.com>
Fri, 24 Sep 2021 15:23:00 +0000 (17:23 +0200)
committersonartech <sonartech@sonarsource.com>
Tue, 28 Sep 2021 20:03:12 +0000 (20:03 +0000)
build.gradle
server/sonar-docs/build.gradle
server/sonar-web/build.gradle

index 4c67c8dd4d8e2cca6f997d158fa5937c6344be96..6c4d916ca5d583874c88495a4c70fde5e2036bf3 100644 (file)
@@ -666,3 +666,36 @@ dependencyUpdates {
     rejected
   }
 }
+
+// Hack to avoid unecessary yarn install.
+// This will create a avoidInstallTask task on which both installTask & runTask will depend.
+// installTask is disabled and will only be activated by avoidInstallTask when it is executed
+// Because it is set to share the same dependencies, avoidInstallTask will be executed only if
+// the runTask will be executed
+ext.avoidYarnInstallIfPossible = { taskList, installTask, runTask -> 
+  // Disable the yarn install task
+  installTask.enabled = false;
+
+  def avoidInstallTask = taskList.register('avoidInstallTask_' + runTask.name) {
+    // Copy all inputs and outputs
+    runTask.inputs.getFiles().each { fi -> 
+      if (fi.isDirectory()) inputs.dir(fi)
+      else inputs.file(fi)
+    }
+    runTask.outputs.getFiles().each { fi -> 
+      if (fi.isDirectory()) outputs.dir(fi)
+      else outputs.file(fi)
+    }
+
+    outputs.cacheIf { true }
+
+    // Activate the yarn install task
+    doLast {
+      installTask.enabled = true
+    }
+  }
+
+  runTask.dependsOn(installTask)
+  runTask.dependsOn(avoidInstallTask)
+  installTask.dependsOn(avoidInstallTask)
+}
\ No newline at end of file
index 0a60cb45dd573f16375ca54afddfc6efc87ee307..01fd51bdbea3d60a2ac055eaf5b9bcb013784b12 100644 (file)
@@ -67,6 +67,10 @@ yarn_run {
   outputs.cacheIf { true }
   args = ['build']
 }
+build.dependsOn(yarn_run)
+
+avoidYarnInstallIfPossible(tasks, yarn, yarn_run);
+
 // To clean outputs outside of "build" directory:
 clean.dependsOn(cleanYarn_run)
 
@@ -97,12 +101,15 @@ clean.dependsOn(cleanYarn_run)
   dependsOn(yarn)
 }
 
+avoidYarnInstallIfPossible(tasks, yarn, tasks.getByName("yarn_validate-ci"));
+
 // Check for known vulnerabilities
 task dependency_audit(type: Exec) {
   inputs.file('package.json')
   outputs.cacheIf { false }
   commandLine 'yarn', 'npm', 'audit', '--environment', 'production', '--severity', 'high'
   ignoreExitValue = true
+
   dependsOn(yarn)
 }
 
index 3987f4f2679d4384946a036ee5b56146f83a10c9..92cfcac711636074b57c9c0b4a8fec0c9827e5dd 100644 (file)
@@ -24,9 +24,13 @@ yarn_run {
   outputs.dir(webappDir)
   outputs.cacheIf { true }
   args = ['build-release']
+
+  dependsOn(yarn)
 }
 build.dependsOn(yarn_run)
 
+avoidYarnInstallIfPossible(tasks, yarn, yarn_run);
+
 "yarn_check-ci" {
   // Note that outputs are not relocatable, because contain absolute paths, and that's why inputs are not relativized
   ['config', 'src'].each {
@@ -54,12 +58,15 @@ build.dependsOn(yarn_run)
   dependsOn(yarn)
 }
 
+avoidYarnInstallIfPossible(tasks, yarn, tasks.getByName("yarn_validate-ci"));
+
 // Check for known vulnerabilities
 task dependency_audit(type: Exec) {
   inputs.file('package.json')
   outputs.cacheIf { false }
   commandLine 'yarn', 'npm', 'audit', '--environment', 'production', '--severity', 'high'
   ignoreExitValue = true
+
   dependsOn(yarn)
 }