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 5b7135d980d700fb3b133698aa41727a1f171f20 Author: Jan Høydahl <[email protected]> AuthorDate: Tue Aug 25 01:09:21 2026 +0200 SOLR-18396: Stop dependency-locking the throwaway "...Copy" configurations (#4794) (cherry picked from commit 7669edb60eca7578aab953f293d5781b5818e83e) --- .github/renovate.json | 4 ++-- AGENTS.md | 2 +- dev-docs/gradle-help/dependencies.txt | 5 +---- dev-docs/lucene-upgrade.md | 10 +++++++--- gradle/solr/packaging.gradle | 4 ++-- gradle/validation/dependencies.gradle | 9 +++++++++ gradle/validation/jar-checks.gradle | 4 +++- 7 files changed, 25 insertions(+), 13 deletions(-) diff --git a/.github/renovate.json b/.github/renovate.json index e21907b54f3..73a766f14d1 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -9,11 +9,11 @@ "includePaths": ["gradle/libs.versions.toml", "versions.*", "build.gradle", ".github/workflows/*"], "postUpgradeTasks": { "commands": [ - "./gradlew resolveAndLockAll collectJarInfos --write-locks", + "./gradlew resolveAndLockAll --write-locks", "./gradlew kotlinUpgradeYarnLock", "./gradlew updateLicenses" ], - "fileFilters": ["solr/licenses/*.sha1", "solr/**/gradle.lockfile"], + "fileFilters": ["solr/licenses/*.sha1", "**/gradle.lockfile", "settings-gradle.lockfile"], "executionMode": "branch" }, "packageRules": [ diff --git a/AGENTS.md b/AGENTS.md index c4de7aa78e5..e7e70b3420f 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -8,7 +8,7 @@ While README.md and CONTRIBUTING.md are mainly written for humans, this file is - Always apply the Apache License to new source files - All versions must be delcared in `gradle/libs.versions.toml`, never build.gradle files - Try first declaring a dependency without a version (the version might already be in a BOM); and if fails to resolve _then_ specify a version -- Always run `gradlew updateLicenses resolveAndLockAll collectJarInfos --write-locks` after adding or changing a dependency. See `dev-docs/gradle-help/dependencies.txt` for more info +- Always run `gradlew updateLicenses resolveAndLockAll --write-locks` after adding or changing a dependency. See `dev-docs/gradle-help/dependencies.txt` for more info ## Build and Development Workflow diff --git a/dev-docs/gradle-help/dependencies.txt b/dev-docs/gradle-help/dependencies.txt index ce76d51da3e..a20e2595641 100644 --- a/dev-docs/gradle-help/dependencies.txt +++ b/dev-docs/gradle-help/dependencies.txt @@ -99,10 +99,7 @@ like when using it with "classpath [dependency]" or for version alignment. The next you want to update the lockfiles file using the following command: -gradlew resolveAndLockAll collectJarInfos --write-locks - -The collectJarInfos task is included because it also resolves the dynamic -"...Copy" configurations used by jar validation. +gradlew resolveAndLockAll --write-locks Starting in Solr 10, we also have to update a kotlin-js-store lockfile that is used by the new Admin UI WebAssembly target. This can be done by diff --git a/dev-docs/lucene-upgrade.md b/dev-docs/lucene-upgrade.md index dd17ef42380..8060a5f3de5 100644 --- a/dev-docs/lucene-upgrade.md +++ b/dev-docs/lucene-upgrade.md @@ -6,15 +6,15 @@ https://lucene.apache.org/core/9_4_0/MIGRATE.html ## Start -Create a new branch locally e.g. `git checkout -b lucene1040 -t origin/main` for upgrading to Lucene 10.4.0 version. +Create a new branch locally e.g. `git checkout -b lucene1051 -t origin/main` for upgrading to Lucene 10.5.1 version. ## Build ### `gradle/libs.versions.toml` update ``` -- apache-lucene:*=10.3.0 -+ apache-lucene:*=10.4.0 +-apache-lucene = "10.4.0" ++apache-lucene = "10.5.1" ``` ### lockfiles update @@ -31,6 +31,10 @@ Create a new branch locally e.g. `git checkout -b lucene1040 -t origin/main` for git add solr/licenses ``` +Note that `updateLicenses` compiles Solr, because it enumerates the JARs on the +compile and runtime classpaths. If Lucene made signature changes, fix the code +first (see below) and then come back to this step. + ## Code ``` diff --git a/gradle/solr/packaging.gradle b/gradle/solr/packaging.gradle index ae3bfcc765d..1984acc5a99 100644 --- a/gradle/solr/packaging.gradle +++ b/gradle/solr/packaging.gradle @@ -92,8 +92,7 @@ configure(allprojects return true } } - // The copy does not inherit consistent resolution, re-align so we ship the tested versions - alignWithRuntimeClasspath(externalLibs) + pinCopyToSource(externalLibs, configurations.runtimeLibs) return externalLibs - configurations.solrPlatformLibs }, { into "lib" @@ -120,6 +119,7 @@ configure(allprojects def testRuntimeLibs = configurations.testRuntimeClasspath.copyRecursive {dep -> !(dep instanceof org.gradle.api.artifacts.ProjectDependency) } + pinCopyToSource(testRuntimeLibs, configurations.testRuntimeClasspath) return testRuntimeLibs - configurations.runtimeLibs }) diff --git a/gradle/validation/dependencies.gradle b/gradle/validation/dependencies.gradle index d0df3444bd9..ec55c5156e3 100644 --- a/gradle/validation/dependencies.gradle +++ b/gradle/validation/dependencies.gradle @@ -56,6 +56,15 @@ allprojects { conf.shouldResolveConsistentlyWith(project.configurations.runtimeClasspath) } + // Helper for the throwaway configurations produced by Configuration.copyRecursive(). Gradle names + // them "<source>Copy" and lockAllConfigurations() above would otherwise give them lock state of + // their own, which nothing ever refreshes because they exist only while a task is executing. + // They still have to resolve to the versions the source configuration was locked to. + ext.pinCopyToSource = { Configuration copy, Configuration source -> + copy.resolutionStrategy.deactivateDependencyLocking() + copy.shouldResolveConsistentlyWith(source) + } + dependencies { modules { module("org.hamcrest:hamcrest-core") { diff --git a/gradle/validation/jar-checks.gradle b/gradle/validation/jar-checks.gradle index 24d294ef93e..0f137c68734 100644 --- a/gradle/validation/jar-checks.gradle +++ b/gradle/validation/jar-checks.gradle @@ -142,8 +142,10 @@ subprojects { return validationConf.extendsFrom.collect {conf -> if (excludeRules && excludeRules.size() > 0) { - conf = conf.copyRecursive() + def source = conf + conf = source.copyRecursive() conf.canBeResolved = true + pinCopyToSource(conf, source) excludeRuleMaps.forEach {conf.exclude(it)} } conf
