diff options
author | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-01-18 16:15:37 +0100 |
---|---|---|
committer | Bjørn Christian Seime <bjorncs@verizonmedia.com> | 2022-01-18 16:15:37 +0100 |
commit | ebdb2b9151b27a338dab6035d01c7e3c244fe5af (patch) | |
tree | f759f6bef2aaf64499d96e673995be3795a039c4 | |
parent | 6de3a640675601bfaf33d1a0bf01358fdbb5990b (diff) |
Validate repositories in pom.xml
3 files changed, 42 insertions, 2 deletions
diff --git a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java index 474043548db..922e4115177 100644 --- a/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java +++ b/config-model/src/main/java/com/yahoo/vespa/model/application/validation/BundleValidator.java @@ -157,6 +157,7 @@ public class BundleValidator extends Validator { Document pom = DocumentBuilderFactory.newDefaultInstance().newDocumentBuilder() .parse(new InputSource(new StringReader(pomXmlContent))); validateDependencies(deployLogger, jarFilename, pom); + validateRepositories(deployLogger, jarFilename, pom); } catch (ParserConfigurationException e) { throw new RuntimeException(e); } catch (Exception e) { @@ -179,6 +180,23 @@ public class BundleValidator extends Validator { }); } + private static void validateRepositories(DeployLogger deployLogger, String jarFilename, Document pom) throws XPathExpressionException { + forEachPomXmlElement(pom, "pluginRepositories/pluginRepository", + repository -> validateRepository(deployLogger, jarFilename, "pluginRepositories", repository)); + forEachPomXmlElement(pom, "repositories/repository", + repository -> validateRepository(deployLogger, jarFilename, "repositories", repository)); + } + + private static void validateRepository(DeployLogger deployLogger, String jarFilename, String parentElementName, + Element element) { + String url = element.getElementsByTagName("url").item(0).getTextContent(); + if (url.contains("vespa-maven-libs-release-local")) { + deployLogger.logApplicationPackage(Level.WARNING, + String.format("<%s> in pom.xml of '%s' uses deprecated Maven repository '%s'.\n See announcement.", + parentElementName, jarFilename, url)); + } + } + private static void forEachPomXmlElement(Document pom, String xpath, Consumer<Element> consumer) throws XPathExpressionException { NodeList dependencies = (NodeList) XPathFactory.newDefaultInstance().newXPath() .compile("/project/" + xpath) diff --git a/config-model/src/test/cfg/application/validation/testjars/pom-xml-warnings/META-INF/maven/com.yahoo.test/mybundle/pom.xml b/config-model/src/test/cfg/application/validation/testjars/pom-xml-warnings/META-INF/maven/com.yahoo.test/mybundle/pom.xml index 1d28f307824..167751f55c4 100644 --- a/config-model/src/test/cfg/application/validation/testjars/pom-xml-warnings/META-INF/maven/com.yahoo.test/mybundle/pom.xml +++ b/config-model/src/test/cfg/application/validation/testjars/pom-xml-warnings/META-INF/maven/com.yahoo.test/mybundle/pom.xml @@ -12,4 +12,17 @@ <scope>test</scope> </dependency> </dependencies> + + <pluginRepositories> + <pluginRepository> + <id>my-plugin-repository</id> + <url>http://myartifactory:8000/artifactory/vespa-maven-libs-release-local</url> + </pluginRepository> + </pluginRepositories> + <repositories> + <repository> + <id>my-repository</id> + <url>http://myartifactory:8000/artifactory/vespa-maven-libs-release-local</url> + </repository> + </repositories> </project>
\ No newline at end of file diff --git a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java index ef4353d02fb..b73b50e82a5 100644 --- a/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java +++ b/config-model/src/test/java/com/yahoo/vespa/model/application/validation/BundleValidatorTest.java @@ -70,18 +70,27 @@ public class BundleValidatorTest { } @Test - public void outputs_deploy_warning_on_deprecated_dependency() throws IOException { + public void outputs_deploy_warnings_for_pom_xml() throws IOException { StringBuffer buffer = new StringBuffer(); DeployLogger logger = createDeployLogger(buffer); BundleValidator validator = new BundleValidator(); JarFile jarFile = createTemporaryJarFile("pom-xml-warnings"); validator.validateJarFile(logger, jarFile); - assertThat(buffer.toString()) + String output = buffer.toString(); + assertThat(output) .contains("The pom.xml of bundle 'pom-xml-warnings.jar' includes a dependency to the artifact " + "'com.yahoo.vespa:vespa-http-client-extensions'. \n" + "This artifact will be removed in Vespa 8. " + "Programmatic use can be safely removed from system/staging tests. " + "See internal Vespa 8 release notes for details.\n"); + assertThat(output) + .contains("\n" + + "<pluginRepositories> in pom.xml of 'pom-xml-warnings.jar' uses deprecated Maven repository " + + "'http://myartifactory:8000/artifactory/vespa-maven-libs-release-local'.\n See announcement."); + assertThat(output) + .contains("\n" + + "<repositories> in pom.xml of 'pom-xml-warnings.jar' uses deprecated Maven repository " + + "'http://myartifactory:8000/artifactory/vespa-maven-libs-release-local'.\n See announcement."); } private JarFile createTemporaryJarFile(String testArtifact) throws IOException { |