From b0401ba3694b8721ba75daeda65e813fd8bed0e2 Mon Sep 17 00:00:00 2001 From: ndr_brt Date: Thu, 12 Nov 2026 14:34:35 +0100 Subject: [PATCH] feat: add content filter for snapshot repo --- .../conventions/RepositoriesConvention.java | 11 ++++- .../RepositoriesConventionTest.java | 45 +++++++++++++++++++ 2 files changed, 54 insertions(+), 2 deletions(-) create mode 100644 plugins/edc-build/src/test/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConventionTest.java diff --git a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConvention.java b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConvention.java index 456f3dc..320cfff 100644 --- a/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConvention.java +++ b/plugins/edc-build/src/main/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConvention.java @@ -9,17 +9,21 @@ * * Contributors: * Microsoft Corporation - initial API and implementation + * Think-it GmbH - restrict snapshots repository to snapshot artifacts * */ package org.eclipse.edc.plugins.edcbuild.conventions; import org.gradle.api.Project; +import org.gradle.api.artifacts.repositories.MavenRepositoryContentDescriptor; import java.net.URI; /** - * Sets default maven repositories for a project + * Sets default maven repositories for a project. + * The snapshots repository is restricted to snapshot artifacts only, to avoid looking up every release dependency + * on it, which leads to rate limiting (HTTP 429) and to the repository being disabled for the rest of the build. */ class RepositoriesConvention implements EdcConvention { @@ -27,7 +31,10 @@ class RepositoriesConvention implements EdcConvention { public void apply(Project target) { var handler = target.getRepositories(); handler.mavenLocal(); - handler.maven(r -> r.setUrl(URI.create(Repositories.SNAPSHOT_REPO_URL))); handler.mavenCentral(); + handler.maven(r -> { + r.setUrl(URI.create(Repositories.SNAPSHOT_REPO_URL)); + r.mavenContent(MavenRepositoryContentDescriptor::snapshotsOnly); + }); } } diff --git a/plugins/edc-build/src/test/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConventionTest.java b/plugins/edc-build/src/test/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConventionTest.java new file mode 100644 index 0000000..dfe52eb --- /dev/null +++ b/plugins/edc-build/src/test/java/org/eclipse/edc/plugins/edcbuild/conventions/RepositoriesConventionTest.java @@ -0,0 +1,45 @@ +/* + * Copyright (c) 2026 Think-it GmbH + * + * This program and the accompanying materials are made available under the + * terms of the Apache License, Version 2.0 which is available at + * https://www.apache.org/licenses/LICENSE-2.0 + * + * SPDX-License-Identifier: Apache-2.0 + * + * Contributors: + * Think-it GmbH - initial API and implementation + * + */ + +package org.eclipse.edc.plugins.edcbuild.conventions; + +import org.gradle.api.Project; +import org.gradle.api.artifacts.repositories.MavenArtifactRepository; +import org.gradle.testfixtures.ProjectBuilder; +import org.junit.jupiter.api.Test; + +import java.net.URI; + +import static org.assertj.core.api.Assertions.assertThat; + +class RepositoriesConventionTest { + + private final Project project = ProjectBuilder.builder().build(); + private final RepositoriesConvention convention = new RepositoriesConvention(); + + @Test + void shouldDeclareMavenCentralBeforeSnapshotsRepository() { + convention.apply(project); + + var urls = project.getRepositories().withType(MavenArtifactRepository.class).stream() + .map(MavenArtifactRepository::getUrl) + .map(URI::toString) + .toList(); + + assertThat(urls).hasSize(3); + assertThat(urls.get(0)).startsWith("file:"); + assertThat(urls.get(1)).isEqualTo("https://repo.maven.apache.org/maven2/"); + assertThat(urls.get(2)).isEqualTo(Repositories.SNAPSHOT_REPO_URL); + } +}