Für das Releasen eines Maven Projekts gibt es das Maven Release-Plugin. Also kein Grund das Rad neu zu erfinden?
Richtig. Naja. Also für eine kleine Übung mit Groovy ist das Thema perfekt. Technisch interessieren mich hier die folgenden Dinge:
- Wie bekomme ich farbige Ausgaben auf die Konsole?
- Wie leicht kann ich XML Dokumente mit Groovy einlesen?
- Wie greife ich auf andere Command-Line Werkzeuge zu?
Das Ergebnis findet sich in meinem Repository auf GitHub: validate-pom.groovy.
Gleich zu Beginn definiere ich mir ein paar Helfer-Methoden, die die Konsolenausgaben bunt anpinseln. Die Farbgebung funktioniert übrigens nur in einer Cygwin Konsole. Unter Linux habe ich das bisher nicht ausprobiert. Mit einer Powershell funktioniert das jedenfalls nicht. Z.B.:
def red() {
print "\033[31;1m"
}
In Zeile 38 öffne ich die pom.xml
und suche nach allen SNAPSHOT Abhängigkeiten. Falls eine SNAPSHOT Abhängigkeit gefunden wird, wird diese mit gelben Textzeichen ausgegeben.
pom.dependencies.dependency.each { dependency ->
if (dependency.version.toString().contains('SNAPSHOT')) {
yellow()
enableWarning = true
}
println " ${dependency.groupId}:${dependency.artifactId}:${dependency.version}"
reset()
}
Als nächstes wird die changes.xml
untersucht. Ich untersuche das letzte release
Element, ob dort das aktuelle Datum drin steht.
def changesXmlAsFile = new File("./src/changes/changes.xml")
def changesXml = new XmlSlurper().parse(changesXmlAsFile)
def lastReleaseElement = changesXml.body.release[0]
def today = new Date().format('yyyy-MM-dd')
if (lastReleaseElement.@date.toString().contains('??-??')) {
enableWarning = true
yellow()
println " Release date is undefined: ${lastReleaseElement.@date.toString()}"
reset()
} else if (!lastReleaseElement.@date.toString().contains(today)) {
enableWarning = true
yellow();
println " Release date is not today: ${lastReleaseElement.@date.toString()}"
reset()
} else {
ok()
}
Im letzten Schritt wird git
aufgerufen und geprüft, ob un-commited changes vorliegen.
def sout = new StringBuilder()
def serr = new StringBuilder()
def proc = 'git status'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(1000)
println ""
println "Git repository:"
if (sout.toString().contains('git add')) {
enableWarning = true
yellow()
println " Uncommited changes! Check with git status."
} else {
ok()
}
Ist das nicht der Fall, dann ist alles in Ordnung. Das Skript lässt sich natürlich wunderbar mit weiteren Funktionen erweitern. Wie oben bereits im Link angegeben, liegt das Skript in einem GIT Repository auf GitHub. In meiner Arbeitsumgebung habe ich das Projekt reingeclont. Im Anschluss passe ich die .bashrc
an und lege einen alias
auf das Skript. Z.B.:
alias pomcheck='groovy path.to.script/validate-pom.groovy
Fertig.
Keine Kommentare:
Kommentar veröffentlichen