add Maven plugin to return a YaCy style Git repository build release number and timestamp

- it injects properties which can be used in pom via ${DSTAMP} ${releaseNr} if added as plugin via
<plugin>
<groupId>net.yacy</groupId>
<artifactId>maven-plugin-gitrevisionnumber</artifactId>
<version>1.0</version>
<executions><execution>
<phase>initialize</phase>
<goals><goal>create</goal></goals>
</execution></executions>
</plugin>
pull/1/head
reger 11 years ago
parent b38de92a16
commit 62c591ffd1

@ -0,0 +1,119 @@
import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.List;
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.Component;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
import org.apache.maven.project.MavenProject;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.lib.ObjectId;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
import org.eclipse.jgit.revwalk.RevTag;
import org.eclipse.jgit.revwalk.RevWalk;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
/**
* Maven plugin to create property with YaCy release number,
* a 4 digit number based on commits to the Git repository
*
* @phase initialize
*/
@Mojo(name = "create")
public class GitRevMavenTask extends AbstractMojo {
@Component
private MavenProject project;
/**
* Name of the buildNumber property
*
* parameter expression="${maven.buildNumber.buildNumberPropertyName}"
* default-value="releaseNr"
*/
@Parameter
private String branchPropertyName = "branch";
@Parameter
private String buildNumberPropertyName = "releaseNr";
@Parameter
private String commitDatePropertyName = "DSTAMP";
Log log = this.getLog();
public void setBuildNumberPropertyName(String revprop) {
this.buildNumberPropertyName = revprop;
}
public void setCommitDatePropertyName(String dateprop) {
this.commitDatePropertyName = dateprop;
}
@Override
public void execute() throws MojoExecutionException {
String branch = null;
String revision = null;
String lastTag = null;
String commitDate = null;
try {
final File src = project.getBasedir(); // set Git root path to project root
final Repository repo = new FileRepositoryBuilder().readEnvironment()
.findGitDir(src).build();
branch = repo.getBranch();
branch = "master".equals(branch) ? "" : "_" + branch;
final ObjectId head = repo.resolve("HEAD");
final Git git = new Git(repo);
final List<RevTag> tags = git.tagList().call();
final RevWalk walk = new RevWalk(repo);
final RevCommit headCommit = walk.parseCommit(head);
final SimpleDateFormat df = new SimpleDateFormat("yyyyMMdd");
commitDate = df.format(headCommit.getAuthorIdent().getWhen());
walk.markStart(headCommit);
int distance = 0;
for (final RevCommit commit : walk) {
for (final RevTag tag : tags) {
if (commit.equals(tag.getObject())) {
lastTag = tag.getShortMessage();
break;
}
}
if (lastTag != null || distance++ > 999) {
break;
}
}
walk.dispose();
if (lastTag == null) {
revision = "0000";
} else {
revision = Integer.toString(distance + 9000);
}
} catch (final IOException e) {
e.printStackTrace();
}
if (project != null) {
project.getProperties().put(this.branchPropertyName, branch);
log.info("GitrevMavenTask: set property " + this.branchPropertyName + "='" + branch + "'");
project.getProperties().put(this.buildNumberPropertyName, revision);
log.info("GitrevMavenTask: set property " + this.buildNumberPropertyName + "=" + revision);
project.getProperties().put(this.commitDatePropertyName, commitDate);
log.info("GitrevMavenTask: set property " + this.commitDatePropertyName + "=" + commitDate);
} else {
log.error("GitrevMavenTask: no Maven project");
System.out.println(this.branchPropertyName + "=" + branch);
System.out.println(this.buildNumberPropertyName + "=" + revision);
System.out.println(this.commitDatePropertyName + "=" + commitDate);
}
}
}

@ -3,11 +3,11 @@
<modelVersion>4.0.0</modelVersion>
<groupId>net.yacy</groupId>
<artifactId>GitRevTask</artifactId>
<version>1.3</version>
<packaging>jar</packaging>
<description>YaCy - version tool</description>
<name>YaCy</name>
<artifactId>maven-plugin-gitrevisionnumber</artifactId>
<version>1.0</version>
<packaging>maven-plugin</packaging>
<name>YaCy - Build Properties Utility</name>
<description>This plugin gives you a Git repository release number. in the format 9000 as maven property "releaseNr" and a Git repository timestamp as Maven property "DSTAMP" in the format yyyymmdd </description>
<url>http://www.yacy.net</url>
<scm>
@ -26,8 +26,7 @@
</properties>
<build>
<sourceDirectory>GitRevTask</sourceDirectory>
<sourceDirectory>GitRevMavenTask</sourceDirectory>
<plugins>
@ -68,8 +67,6 @@
</configuration>
</plugin>
<!-- exec:exec goal to provide start YaCy by Maven (just to have it for cases were the ide not provides a run command) -->
<plugin>
<groupId>org.codehaus.mojo</groupId>
@ -85,26 +82,60 @@
</arguments>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-plugin-plugin</artifactId>
<version>3.2</version>
<configuration>
<!-- see http://jira.codehaus.org/browse/MNG-5346 -->
<skipErrorNoDescriptorsFound>true</skipErrorNoDescriptorsFound>
</configuration>
<executions>
<execution>
<id>mojo-descriptor</id>
<goals>
<goal>descriptor</goal>
</goals>
</execution>
<!-- if you want to generate help goal -->
<!-- <execution> <id>help-goal</id> <goals> <goal>helpmojo</goal> </goals> </execution> -->
</executions>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<type>jar</type>
<groupId>org.apache.maven</groupId>
<artifactId>maven-plugin-api</artifactId>
<version>3.1.0</version>
</dependency>
<dependency>
<groupId>org.eclipse.jgit</groupId>
<artifactId>org.eclipse.jgit</artifactId>
<version>1.2.0.201112221803-r</version>
<version>1.3.0.201202151440-r</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>org.apache.ant</groupId>
<artifactId>ant</artifactId>
<version>1.8.3</version>
<version>1.9.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-project</artifactId>
<version>3.0-alpha-2</version>
</dependency>
<dependency>
<groupId>org.apache.maven.plugin-tools</groupId>
<artifactId>maven-plugin-annotations</artifactId>
<version>3.2</version>
</dependency>
<dependency>
<groupId>org.apache.maven</groupId>
<artifactId>maven-core</artifactId>
<version>3.1.1</version>
</dependency>
</dependencies>
</project>

Loading…
Cancel
Save