This is an automated email from the ASF dual-hosted git repository.

dsmiley pushed a commit to branch branch_10x
in repository https://gitbox.apache.org/repos/asf/solr.git

commit 19321739bc1372735f0e9ff1d2a120251b986613
Author: David Smiley <[email protected]>
AuthorDate: Thu Jul 2 12:13:48 2026 -0400

    build: fetch BATS test libs via HTTP instead of npm/node (#4587)
    
    motivation: architecturally simpler even though more lines.
    
    And removed unused gradle plugin "undercouch.download"
    
    (cherry picked from commit 3bd2ede5d1f5aec32d034760f7e58de0fb430ad2)
---
 build.gradle                |  1 -
 gradle/libs.versions.toml   | 10 +++++-----
 gradle/node.gradle          |  2 +-
 solr/packaging/build.gradle | 46 +++++++++++++++++++++++++++++++++------------
 4 files changed, 40 insertions(+), 19 deletions(-)

diff --git a/build.gradle b/build.gradle
index 19056ceea67..88acc7403bb 100644
--- a/build.gradle
+++ b/build.gradle
@@ -27,7 +27,6 @@ plugins {
   alias(libs.plugins.kotlin.multiplatform) apply false
   alias(libs.plugins.littlerobots.versioncatalogupdate) apply false
   alias(libs.plugins.thetaphi.forbiddenapis) apply false
-  alias(libs.plugins.undercouch.download) apply false
   alias(libs.plugins.ltgt.errorprone) apply false
   alias(libs.plugins.diffplug.spotless) apply false
   alias(libs.plugins.nodegradle.node) apply false
diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml
index 1ad4a93ed0a..6b2630e36e1 100644
--- a/gradle/libs.versions.toml
+++ b/gradle/libs.versions.toml
@@ -52,12 +52,14 @@ asciidoctor-mathjax = "0.0.9"
 # @keep Asciidoctor tabs version used in ref-guide
 asciidoctor-tabs = "1.0.0-beta.6"
 azagniotov-langdetect = "12.5.2"
-# @keep bats-assert (node) version used in packaging
+# @keep bats-assert version used in packaging
 bats-assert = "2.0.0"
-# @keep bats-core (node) version used in packaging
+# @keep bats-core version used in packaging
 bats-core = "1.8.2"
-# @keep bats-file (node) version used in packaging
+# @keep bats-file version used in packaging
 bats-file = "0.3.0"
+# @keep bats-support version used in packaging
+bats-support = "0.2.0"
 bc-jose4j = "0.9.6"
 benmanes-caffeine = "3.2.3"
 benmanes-versions = "0.53.0"
@@ -195,7 +197,6 @@ tdunning-tdigest = "3.3"
 testcontainers = "2.0.5"
 thetaphi-forbiddenapis = "3.10"
 threeten-bp = "1.7.3"
-undercouch-download = "5.7.0"
 xerial-snappy = "1.1.10.8"
 
 [plugins]
@@ -214,7 +215,6 @@ openapi-generator = { id = "org.openapi.generator", 
version.ref = "openapi" }
 owasp-dependencycheck = { id = "org.owasp.dependencycheck", version.ref = 
"owasp-dependencycheck" }
 swagger3-core = { id = "io.swagger.core.v3.swagger-gradle-plugin", version.ref 
= "swagger3" }
 thetaphi-forbiddenapis = { id = "de.thetaphi.forbiddenapis", version.ref = 
"thetaphi-forbiddenapis" }
-undercouch-download = { id = "de.undercouch.download", version.ref = 
"undercouch-download" }
 
 [libraries]
 adobe-testing-s3mock-junit4 = { module = "com.adobe.testing:s3mock-junit4", 
version.ref = "adobe-testing-s3mock" }
diff --git a/gradle/node.gradle b/gradle/node.gradle
index 067b56f4471..0cf7923bac0 100644
--- a/gradle/node.gradle
+++ b/gradle/node.gradle
@@ -15,7 +15,7 @@
  * limitations under the License.
  */
 
-configure([project(":solr:packaging"), project(":solr:solr-ref-guide"), 
project(":solr:webapp")]) {
+configure([project(":solr:solr-ref-guide"), project(":solr:webapp")]) {
   apply plugin: libs.plugins.nodegradle.node.get().pluginId
 
   def npmRegistry = "${-> propertyOrEnvOrDefault("solr.npm.registry", 
"SOLR_NPM_REGISTRY", '')}"
diff --git a/solr/packaging/build.gradle b/solr/packaging/build.gradle
index a5205ab74fb..72a8ddc42dc 100644
--- a/solr/packaging/build.gradle
+++ b/solr/packaging/build.gradle
@@ -32,6 +32,7 @@ ext {
   slimDistDir = file("$buildDir/solr-${version}-slim")
   devDir = file("$buildDir/dev")
   slimDevDir = file("$buildDir/dev-slim")
+  batsLibsDir = file("$buildDir/bats-libs")
 }
 
 configurations {
@@ -249,18 +250,39 @@ tasks.register('runDev', JavaExec) {
   args((project.findProperty('args') ?: '--module=http').split())
 }
 
-task downloadBats(type: NpmTask) {
+tasks.register('downloadBats') {
   group = 'Build Dependency Download'
-  args = ["install", 
"https://github.com/bats-core/bats-core#v${libs.versions.bats.core.get()}",
-      
"https://github.com/bats-core/bats-assert#v${libs.versions.bats.assert.get()}",
-      
"https://github.com/bats-core/bats-file#v${libs.versions.bats.file.get()}",
+  description =
+      'Downloads BATS and its helper libraries (bats-support, bats-assert, 
bats-file) used by integrationTests'
+
+  def batsLibs = [
+      [org: 'bats-core', repo: 'bats-core', version: 
libs.versions.bats.core.get()],
+      [org: 'ztombol', repo: 'bats-support', version: 
libs.versions.bats.support.get()],
+      [org: 'bats-core', repo: 'bats-assert', version: 
libs.versions.bats.assert.get()],
+      [org: 'bats-core', repo: 'bats-file', version: 
libs.versions.bats.file.get()],
   ]
-
-  inputs.files("${project.ext.nodeProjectDir}/package.json")
-  outputs.dir("${project.ext.nodeProjectDir}/node_modules/bats")
-  outputs.dir("${project.ext.nodeProjectDir}/node_modules/bats-support")
-  outputs.dir("${project.ext.nodeProjectDir}/node_modules/bats-assert")
-  outputs.dir("${project.ext.nodeProjectDir}/node_modules/bats-file")
+  def downloadDir = file("$buildDir/bats-downloads")
+
+  inputs.property('batsLibs', batsLibs)
+  outputs.dir(batsLibsDir)
+
+  doLast {
+    delete batsLibsDir
+    mkdir downloadDir
+    batsLibs.each {lib ->
+      def archiveUrl = 
"https://github.com/${lib.org}/${lib.repo}/archive/refs/tags/v${lib.version}.tar.gz";
+      def archiveFile = new File(downloadDir, 
"${lib.repo}-${lib.version}.tar.gz")
+      ant.get(src: archiveUrl, dest: archiveFile, skipexisting: true)
+      copy {
+        from(tarTree(resources.gzip(archiveFile))) {
+          // Strip the leading "<repo>-<version>/" directory that GitHub's 
archive adds.
+          eachFile {details -> details.path = 
details.path.substring(details.path.indexOf('/') + 1)}
+          includeEmptyDirs = false
+        }
+        into "$batsLibsDir/${lib.repo}"
+      }
+    }
+  }
 }
 
 task integrationTests(type: BatsTask) {
@@ -312,7 +334,7 @@ task integrationTests(type: BatsTask) {
   environment SOLR_LOGS_DIR: "$solrHome/logs"
   environment TEST_OUTPUT_DIR: integrationTestOutput
   environment TEST_FAILURE_DIR: solrTestFailuresDir
-  environment BATS_LIB_PREFIX: "$nodeProjectDir/node_modules"
+  environment BATS_LIB_PREFIX: batsLibsDir
 }
 
 abstract class BatsTask extends Exec {
@@ -337,7 +359,7 @@ abstract class BatsTask extends Exec {
   @Override
   @TaskAction
   protected void exec() {
-    executable "$project.ext.nodeProjectDir/node_modules/bats/bin/bats"
+    executable "$project.ext.batsLibsDir/bats-core/bin/bats"
 
     def batsArgs = []
     if (logger.isInfoEnabled()) {

Reply via email to