diff --git a/build-logic/src/main/kotlin/buildlogic.adapter.gradle.kts b/build-logic/src/main/kotlin/buildlogic.adapter.gradle.kts index 58fce0a239..fc60734259 100644 --- a/build-logic/src/main/kotlin/buildlogic.adapter.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.adapter.gradle.kts @@ -12,6 +12,21 @@ configure { banSlf4j = false } +paperweight { + injectPaperRepository = false +} + +repositories { + maven { + name = "EngineHub" + url = uri("https://maven.enginehub.org/repo/") + } + mavenCentral() + afterEvaluate { + replaceNonEngineHubRepositoriesUrl() + } +} + dependencies { "implementation"(project(":worldedit-bukkit")) constraints { diff --git a/build-logic/src/main/kotlin/buildlogic.common.gradle.kts b/build-logic/src/main/kotlin/buildlogic.common.gradle.kts index 1a84a95388..aa94bbe814 100644 --- a/build-logic/src/main/kotlin/buildlogic.common.gradle.kts +++ b/build-logic/src/main/kotlin/buildlogic.common.gradle.kts @@ -9,14 +9,6 @@ plugins { group = rootProject.group version = rootProject.version -repositories { - mavenCentral() - maven { - name = "EngineHub" - url = uri("https://maven.enginehub.org/repo/") - } -} - configurations.all { resolutionStrategy { cacheChangingModulesFor(1, TimeUnit.DAYS) diff --git a/build-logic/src/main/kotlin/repositoriesHelper.kt b/build-logic/src/main/kotlin/repositoriesHelper.kt new file mode 100644 index 0000000000..e5fb37afe4 --- /dev/null +++ b/build-logic/src/main/kotlin/repositoriesHelper.kt @@ -0,0 +1,36 @@ +import org.gradle.api.artifacts.dsl.RepositoryHandler +import org.gradle.api.artifacts.repositories.MavenArtifactRepository +import org.gradle.api.logging.Logging +import java.net.URI + +// The primary point of this is repository up-time. We replace most other repositories with EngineHub's repository. +// This is because we have stronger up-time guarantees for our repository. However, Maven Central and Sonatype are +// clearly even better, so we allow those as well. We also allow Gradle's plugin repository. +private val ALLOWED_PREFIXES = listOf( + "https://maven.enginehub.org", + "https://repo.maven.apache.org/maven2/", + "https://s01.oss.sonatype.org/content/repositories/snapshots/", + "https://plugins.gradle.org", + "file:" +) +private val LOGGER = Logging.getLogger("repositoriesHelper") + +fun RepositoryHandler.replaceNonEngineHubRepositoriesUrl() { + for (repo in this) { + if (repo is MavenArtifactRepository && !ALLOWED_PREFIXES.any { repo.url.toString().startsWith(it) }) { + LOGGER.info("Replacing non-EngineHub repository: {}", repo.url) + repo.url = URI.create("https://maven.enginehub.org/repo/") + } + } +} + +fun RepositoryHandler.verifyEngineHubRepositories() { + for (repo in this) { + if (repo is MavenArtifactRepository) { + val urlString = repo.url.toString() + check(ALLOWED_PREFIXES.any { urlString.startsWith(it) }) { + "Only EngineHub/Central repositories are allowed: ${repo.url} found" + } + } + } +} diff --git a/gradle.properties b/gradle.properties index 51078e9ed9..20ffc9071a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -3,3 +3,6 @@ version=7.3.5-SNAPSHOT org.gradle.jvmargs=-Xmx1500M org.gradle.parallel=true + +loom_fabric_repository=https://maven.enginehub.org/artifactory/fabricmc/ +loom_libraries_base=https://maven.enginehub.org/artifactory/minecraft/ diff --git a/gradle/wrapper/gradle-wrapper.jar b/gradle/wrapper/gradle-wrapper.jar index e6441136f3..2c3521197d 100644 Binary files a/gradle/wrapper/gradle-wrapper.jar and b/gradle/wrapper/gradle-wrapper.jar differ diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index a4413138c9..09523c0e54 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-8.8-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.9-bin.zip networkTimeout=10000 validateDistributionUrl=true zipStoreBase=GRADLE_USER_HOME diff --git a/gradlew b/gradlew index b740cf1339..f5feea6d6b 100755 --- a/gradlew +++ b/gradlew @@ -15,6 +15,8 @@ # See the License for the specific language governing permissions and # limitations under the License. # +# SPDX-License-Identifier: Apache-2.0 +# ############################################################################## # @@ -84,7 +86,8 @@ done # shellcheck disable=SC2034 APP_BASE_NAME=${0##*/} # Discard cd standard output in case $CDPATH is set (https://github.com/gradle/gradle/issues/25036) -APP_HOME=$( cd "${APP_HOME:-./}" > /dev/null && pwd -P ) || exit +APP_HOME=$( cd -P "${APP_HOME:-./}" > /dev/null && printf '%s +' "$PWD" ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum diff --git a/gradlew.bat b/gradlew.bat index 7101f8e467..9b42019c79 100644 --- a/gradlew.bat +++ b/gradlew.bat @@ -13,6 +13,8 @@ @rem See the License for the specific language governing permissions and @rem limitations under the License. @rem +@rem SPDX-License-Identifier: Apache-2.0 +@rem @if "%DEBUG%"=="" @echo off @rem ########################################################################## diff --git a/settings.gradle.kts b/settings.gradle.kts index 050f55e0c1..b0bec82f46 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -5,17 +5,54 @@ pluginManagement { name = "EngineHub" url = uri("https://maven.enginehub.org/repo/") } - maven { - name = "SpongePowered" - url = uri("https://repo.spongepowered.org/repository/maven-public/") - } } } plugins { id("org.gradle.toolchains.foojay-resolver-convention") version "0.8.0" + id("fabric-loom") version "1.6.12" +} +dependencyResolutionManagement { + repositories { + maven { + name = "EngineHub" + url = uri("https://maven.enginehub.org/repo/") + } + ivy { + url = uri("https://repo.enginehub.org/language-files/") + name = "EngineHub Language Files" + patternLayout { + artifact("[organisation]/[module]/[revision]/[artifact]-[revision](+[classifier])(.[ext])") + setM2compatible(true) + } + metadataSources { + artifact() + } + content { + includeModuleByRegex(".*", "worldedit-lang") + } + } + gradle.settingsEvaluated { + // Duplicates repositoriesHelper.kt, since we can't import it + val allowedPrefixes = listOf( + "https://maven.enginehub.org", + "https://repo.maven.apache.org/maven2/", + "file:" + ) + + for (repo in this@repositories) { + if (repo is MavenArtifactRepository) { + val urlString = repo.url.toString() + check(allowedPrefixes.any { urlString.startsWith(it) }) { + "Only EngineHub/Central repositories are allowed: ${repo.url} found" + } + } + } + } + } } -logger.lifecycle(""" +logger.lifecycle( + """ ******************************************* You are building WorldEdit! @@ -27,7 +64,8 @@ logger.lifecycle(""" Output files will be in [subproject]/build/libs ******************************************* -""") +""" +) rootProject.name = "worldedit" diff --git a/verification/build.gradle.kts b/verification/build.gradle.kts index 18efa04e9f..4d85a2c695 100644 --- a/verification/build.gradle.kts +++ b/verification/build.gradle.kts @@ -11,21 +11,6 @@ plugins { id("me.champeau.gradle.japicmp") } -repositories { - maven { - name = "EngineHub Repository (Releases Only)" - url = uri("https://maven.enginehub.org/artifactory/libs-release-local/") - } - maven { - name = "EngineHub Repository (Snapshots Only)" - url = uri("https://maven.enginehub.org/artifactory/libs-snapshot-local/") - content { - excludeGroup("com.sk89q.worldedit") - } - } - mavenCentral() -} - val resetAcceptedApiChangesFiles by tasks.registering { group = "API Compatibility" description = "Resets ALL the accepted API changes files" diff --git a/worldedit-bukkit/build.gradle.kts b/worldedit-bukkit/build.gradle.kts index e5b6e41089..70801d5974 100644 --- a/worldedit-bukkit/build.gradle.kts +++ b/worldedit-bukkit/build.gradle.kts @@ -11,13 +11,6 @@ platform { includeClasspath = true } -repositories { - maven { - name = "Spigot" - url = uri("https://hub.spigotmc.org/nexus/content/groups/public") - } -} - val localImplementation = configurations.create("localImplementation") { description = "Dependencies used locally, but provided by the runtime Bukkit implementation" isCanBeConsumed = false diff --git a/worldedit-core/build.gradle.kts b/worldedit-core/build.gradle.kts index 6780e68712..e403541638 100644 --- a/worldedit-core/build.gradle.kts +++ b/worldedit-core/build.gradle.kts @@ -7,20 +7,6 @@ plugins { id("buildlogic.core-and-platform") } -repositories { - ivy { - url = uri("https://repo.enginehub.org/language-files/") - name = "EngineHub Language Files" - patternLayout { - artifact("[organisation]/[module]/[revision]/[artifact]-[revision](+[classifier])(.[ext])") - setM2compatible(true) - } - metadataSources { - artifact() - } - } -} - configurations { register("languageFiles") } diff --git a/worldedit-fabric/build.gradle.kts b/worldedit-fabric/build.gradle.kts index 273b6d5693..a6af19e7bd 100644 --- a/worldedit-fabric/build.gradle.kts +++ b/worldedit-fabric/build.gradle.kts @@ -31,14 +31,8 @@ tasks.withType().configureEach { } repositories { - maven { - name = "EngineHub" - url = uri("https://maven.enginehub.org/repo/") - } - getByName("Mojang") { - content { - includeGroupAndSubgroups("com.mojang") - } + afterEvaluate { + verifyEngineHubRepositories() } } diff --git a/worldedit-neoforge/build.gradle.kts b/worldedit-neoforge/build.gradle.kts index a039185c5f..449a4cc6d2 100644 --- a/worldedit-neoforge/build.gradle.kts +++ b/worldedit-neoforge/build.gradle.kts @@ -27,16 +27,9 @@ val apiClasspath = configurations.create("apiClasspath") { } repositories { - val toRemove = mutableListOf() - for (repo in project.repositories) { - if (repo is MavenArtifactRepository && repo.url.toString() == "https://maven.neoforged.net/releases/") { - toRemove.add(repo) - } - } - toRemove.forEach { remove(it) } - maven { - name = "EngineHub" - url = uri("https://maven.enginehub.org/repo/") + mavenCentral() + afterEvaluate { + replaceNonEngineHubRepositoriesUrl() } } @@ -72,6 +65,7 @@ subsystems { parchment { minecraftVersion = libs.versions.parchment.minecraft.get() mappingsVersion = libs.versions.parchment.mappings.get() + addRepository = false } decompiler { maxMemory("3G") diff --git a/worldedit-sponge/build.gradle.kts b/worldedit-sponge/build.gradle.kts index 33ebe5dd1c..77745a5c8a 100644 --- a/worldedit-sponge/build.gradle.kts +++ b/worldedit-sponge/build.gradle.kts @@ -18,14 +18,17 @@ commonJava { banSlf4j = false } -repositories { - mavenCentral() -} - minecraft { version(libs.versions.sponge.minecraft.get()) } +repositories { + mavenCentral() + afterEvaluate { + replaceNonEngineHubRepositoriesUrl() + } +} + sponge { apiVersion(libs.versions.sponge.api.asProvider().get()) license("GPL-3.0-or-later")