aboutsummaryrefslogtreecommitdiffstats
path: root/version-manifest
diff options
context:
space:
mode:
Diffstat (limited to 'version-manifest')
-rw-r--r--version-manifest/pom.xml74
-rw-r--r--version-manifest/src/main/docker-manifest.csv1
-rw-r--r--version-manifest/src/main/java-manifest.csv2
-rw-r--r--version-manifest/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java121
4 files changed, 198 insertions, 0 deletions
diff --git a/version-manifest/pom.xml b/version-manifest/pom.xml
new file mode 100644
index 000000000..11318e612
--- /dev/null
+++ b/version-manifest/pom.xml
@@ -0,0 +1,74 @@
+<?xml version="1.0"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.onap.oparent</groupId>
+ <artifactId>version</artifactId>
+ <version>0.1.0</version>
+ </parent>
+ <groupId>org.onap.integration</groupId>
+ <artifactId>version-manifest</artifactId>
+ <packaging>maven-plugin</packaging>
+ <name>ONAP Version Manifest and Maven Plugin</name>
+ <url>https://www.onap.org</url>
+ <properties>
+ <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+ <mavenVersion>3.2.3</mavenVersion>
+ </properties>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-plugin-api</artifactId>
+ <version>2.0</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven.plugin-tools</groupId>
+ <artifactId>maven-plugin-annotations</artifactId>
+ <version>3.2</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.codehaus.plexus</groupId>
+ <artifactId>plexus-utils</artifactId>
+ <version>3.0.8</version>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.maven</groupId>
+ <artifactId>maven-core</artifactId>
+ <version>${mavenVersion}</version>
+ </dependency>
+ <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-csv -->
+ <dependency>
+ <groupId>org.apache.commons</groupId>
+ <artifactId>commons-csv</artifactId>
+ <version>1.4</version>
+ </dependency>
+ </dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-plugin-plugin</artifactId>
+ <version>3.2</version>
+ <configuration>
+ <goalPrefix>version-check</goalPrefix>
+ <skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
+ </configuration>
+ <executions>
+ <execution>
+ <id>mojo-descriptor</id>
+ <goals>
+ <goal>descriptor</goal>
+ </goals>
+ </execution>
+ <execution>
+ <id>help-goal</id>
+ <goals>
+ <goal>helpmojo</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+</project>
diff --git a/version-manifest/src/main/docker-manifest.csv b/version-manifest/src/main/docker-manifest.csv
new file mode 100644
index 000000000..dba913291
--- /dev/null
+++ b/version-manifest/src/main/docker-manifest.csv
@@ -0,0 +1 @@
+image,tag
diff --git a/version-manifest/src/main/java-manifest.csv b/version-manifest/src/main/java-manifest.csv
new file mode 100644
index 000000000..8baa86884
--- /dev/null
+++ b/version-manifest/src/main/java-manifest.csv
@@ -0,0 +1,2 @@
+groupId,artifactId,version
+org.onap.oparent,oparent,0.1.0
diff --git a/version-manifest/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java b/version-manifest/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java
new file mode 100644
index 000000000..0bb94f2d6
--- /dev/null
+++ b/version-manifest/src/main/java/org/onap/oparent/versioncheck/VersionCheckMojo.java
@@ -0,0 +1,121 @@
+/*
+ * Copyright 2017 Huawei Technologies, Ltd. and others.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.onap.oparent.versioncheck;
+
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.nio.charset.StandardCharsets;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
+import java.util.TreeSet;
+
+import org.apache.commons.csv.CSVFormat;
+import org.apache.commons.csv.CSVRecord;
+import org.apache.maven.model.Dependency;
+import org.apache.maven.plugin.AbstractMojo;
+import org.apache.maven.plugin.MojoExecutionException;
+import org.apache.maven.plugin.logging.Log;
+import org.apache.maven.plugins.annotations.LifecyclePhase;
+import org.apache.maven.plugins.annotations.Mojo;
+import org.apache.maven.plugins.annotations.Parameter;
+import org.apache.maven.project.MavenProject;
+
+@Mojo(name = "version-check", defaultPhase = LifecyclePhase.PROCESS_SOURCES)
+public class VersionCheckMojo extends AbstractMojo {
+
+ /**
+ * The Maven Project.
+ *
+ * @since 1.0-alpha-1
+ */
+ @Parameter(defaultValue = "${project}", required = true, readonly = true)
+ protected MavenProject project;
+
+ /**
+ * Location of the file.
+ */
+ @Parameter(property = "manifestUri", required = true)
+ private URI manifestUri;
+
+ public void execute() throws MojoExecutionException {
+ final Log log = getLog();
+
+ log.info("Checking version manifest " + manifestUri);
+
+ Map<String, String> expectedVersions = new HashMap<>();
+
+ try (InputStreamReader in = new InputStreamReader(manifestUri.toURL().openStream(),
+ StandardCharsets.ISO_8859_1)) {
+ Iterable<CSVRecord> records = CSVFormat.DEFAULT.withFirstRecordAsHeader().parse(in);
+ for (CSVRecord record : records) {
+ String groupId = record.get("groupId");
+ String artifactId = record.get("artifactId");
+ String version = record.get("version");
+ log.debug("Expected version: " + groupId + ":" + artifactId + ":" + version);
+ expectedVersions.put(groupId + ":" + artifactId, version);
+ }
+ } catch (MalformedURLException e) {
+ log.error(e);
+ throw new MojoExecutionException(e.getMessage());
+ } catch (IOException e) {
+ log.error(e);
+ throw new MojoExecutionException(e.getMessage());
+ }
+
+ Map<String, String> actualVersions = new HashMap<>();
+ MavenProject parent = project.getParent();
+ if (parent != null) {
+ log.debug("Parent: " + parent);
+ actualVersions.put(parent.getGroupId() + ":" + parent.getArtifactId(), parent.getVersion());
+ } else {
+ log.debug("No parent");
+ }
+
+ for (Dependency dep : project.getDependencies()) {
+ log.debug("Dependency: " + dep.toString());
+ actualVersions.put(dep.getGroupId() + ":" + dep.getArtifactId(), dep.getVersion());
+ }
+
+ Set<String> mismatches = new TreeSet<>();
+ for (Entry<String, String> expected : expectedVersions.entrySet()) {
+ String artifact = expected.getKey();
+ String expectedVersion = expectedVersions.get(artifact);
+ String actualVersion = actualVersions.get(artifact);
+ if (actualVersion != null && !actualVersion.equals(expectedVersion)) {
+ mismatches.add(artifact);
+ }
+ }
+
+ if (mismatches.isEmpty()) {
+ log.debug("No version mismatches found");
+ } else {
+ log.warn("The following dependencies should be updated to match the version manifest:");
+ for (String artifact : mismatches) {
+ String expectedVersion = expectedVersions.get(artifact);
+ String actualVersion = actualVersions.get(artifact);
+ if (actualVersion != null && !actualVersion.equals(expectedVersion)) {
+ log.warn(" " + artifact + " " + actualVersion + " -> " + expectedVersion);
+ }
+ }
+ }
+
+ }
+}