Skip to content

Instantly share code, notes, and snippets.

@riprasad
Last active March 7, 2023 08:01
Show Gist options
  • Save riprasad/a16a71a3062021739f025b763f95bab3 to your computer and use it in GitHub Desktop.
Save riprasad/a16a71a3062021739f025b763f95bab3 to your computer and use it in GitHub Desktop.
import groovy.util.logging.Slf4j
import org.apache.maven.model.Build
import org.apache.maven.model.Dependency
import org.apache.maven.model.DependencyManagement
import org.apache.maven.model.Plugin
import org.codehaus.plexus.util.xml.Xpp3Dom
import org.commonjava.maven.atlas.ident.ref.SimpleProjectVersionRef
import org.commonjava.maven.ext.common.ManipulationException
import org.commonjava.maven.ext.common.model.Project
import org.commonjava.maven.ext.core.groovy.BaseScript
import org.commonjava.maven.ext.core.groovy.InvocationPoint
import org.commonjava.maven.ext.core.groovy.InvocationStage
import org.commonjava.maven.ext.core.groovy.PMEBaseScript
import org.commonjava.maven.ext.core.ManipulationSession
import org.commonjava.maven.ext.core.state.RESTState
import org.commonjava.maven.ext.io.rest.Translator
import org.commonjava.maven.atlas.ident.ref.SimpleProjectRef
@InvocationPoint(invocationPoint = InvocationStage.FIRST)
@PMEBaseScript BaseScript pme
@Slf4j
public class MangleVersion {
BaseScript pme;
def execute() {
log.info "##########################################################################################################################################"
// Quarkus doesn't productize test dependencies
// Inlining property version to use community version of quarkus-test-common
log.info "--------------------------------------------------------------------------------------------------------"
log.info "Custom Adjustments : Inlining version for io.quarkus:quarkus-test-common"
log.info "--------------------------------------------------------------------------------------------------------"
for ( Project p : pme.getProjects() ) {
pme.inlineProperty(pme.getProject(), SimpleProjectRef.parse("io.quarkus:quarkus-test-common"))
}
log.info "---------------------------------------- Inlining Complete ---------------------------------------------"
log.info ""
// Use Red Hat Build of Quarkus(RHBQ)
overrideProperty("quarkus.version", "2.13.7.Final-redhat-00003")
// use productized version
//overrideProperty("apicurio-common-rest-client.version", "0.1.14.Final-managedsvc-redhat-00001")
//overrideProperty("apicurio-common-app-components.version", "0.1.14.Final-managedsvc-redhat-00001")
pme.projects.each {
project ->
def deps = [project.model?.dependencies, project.model?.dependencyManagement?.dependencies].flatten() //aggregate the 2 sets in a single list
deps.removeAll { it == null } // remove nulls
log.info " # Scanning Module => $project.groupId:$project.artifactId"
// artifact 'org.everit.json.schema' is available from group 'org.everit.json' in Indy
//overrideGroupId(deps, "com.github.everit-org.json-schema", "org.everit.json")
//enableDeployForSpecificModule(project, "io.apicurio", "apicurio-registry-storage-kafkasql")
//enableDeployForSpecificModule(project, "io.apicurio", "apicurio-registry-storage-sql")
//enableDeployForSpecificModule(project, "io.apicurio", "apicurio-registry-utils-exportV1")
// adding junit dependency to avoid compilation failure
/*if (project.groupId == "io.apicurio" && project.artifactId == "apicurio-registry-tests") {
addDependency(project, "junit", "junit", "4.12", "compile")
}
// avoid using a vulnerable version of jackson-databind pulled transitively
if (project.groupId == "io.apicurio" && project.artifactId == "apicurio-registry") {
addDependencyInDependencyManagemnt(project, "com.fasterxml.jackson.core", "jackson-databind", "2.11.0", "compile")
}*/
}
log.info "##########################################################################################################################################"
}
def overrideProperty(String propertyName, String newValue) {
log.info "--------------------------------------------------------------------------------------------------------"
log.info "Custom Adjustments : Overriding value of the property '$propertyName'"
log.info "--------------------------------------------------------------------------------------------------------"
String existingValue = pme.project.model.properties.get(propertyName)
pme.getProject().getModel().getProperties().setProperty(propertyName, newValue) // overriding the property value
String overriddenValue = pme.project.model.properties.get(propertyName)
log.info "Old Value: $existingValue"
log.info "New Value: $overriddenValue"
log.info "-------------------------------------- Property Value Overriden -----------------------------------------"
log.info ""
}
def overrideGroupId(deps, String oldGroup, String newGroup) {
deps.each {
dep ->
log.debug "$dep"
if (dep.groupId == oldGroup) {
log.info "\t--------------------------------------------------------------------------------------------------------"
log.info "\tCustom Adjustments : Overriding groupId: '$oldGroup' ---> $newGroup"
log.info "\t--------------------------------------------------------------------------------------------------------"
log.info "\tOld Coordinates: $dep"
dep.groupId = newGroup
log.info "\tNew Coordinates: $dep"
log.info "\t------------------------------------------ GroupId Overriden -------------------------------------------"
log.info ""
}
}
}
def addDependency(project, String groupId, String artifactId, String version, String scope) {
log.info "\t--------------------------------------------------------------------------------------------------------"
log.info "\tCustom Adjustments : Adding a new Dependency"
log.info "\t--------------------------------------------------------------------------------------------------------"
def dep = new Dependency()
dep.groupId = groupId
dep.artifactId = artifactId
dep.version = version
dep.scope = scope
project.model.dependencies.add(dep)
log.info "\t$groupId:$artifactId:$version:$scope ---> in project '$project'"
log.info "\t------------------------------------------ Dependency Added --------------------------------------------"
log.info ""
}
def addDependencyInDependencyManagemnt(project, String groupId, String artifactId, String version, String scope) {
log.info "\t--------------------------------------------------------------------------------------------------------"
log.info "\tCustom Adjustments : Added a new Dependency in DependencyManagement"
log.info "\t--------------------------------------------------------------------------------------------------------"
def dep = new Dependency()
dep.groupId = groupId
dep.artifactId = artifactId
dep.version = version
dep.scope = scope
project.model.dependencyManagement.dependencies.add(dep)
log.info "\t$groupId:$artifactId:$version:$scope ---> in project '$project'"
log.info "\t------------------------------------------ Dependency Added --------------------------------------------"
log.info ""
}
def enableDeployForSpecificModule (project, String groupId, String artifactId) {
if (project.groupId == groupId && project.artifactId == artifactId) {
log.info "\t--------------------------------------------------------------------------------------------------------"
log.info "\tCustom Adjustments : Enabling Deploy for module $groupId:$artifactId"
log.info "\t--------------------------------------------------------------------------------------------------------"
if (project.model.build == null){
log.info "\tCreating build"
project.model.build = new Build()
}
if (project.model.build.plugins == null){
log.info "\tCreating plugins"
project.model.build.plugins = new ArrayList<Plugin>()
}
def plugin = project.model.build.plugins.find {
it.groupId == "org.apache.maven.plugins" &&
it.artifactId == "maven-deploy-plugin"
}
if (plugin == null){
log.info "\tPlugin not found"
plugin = new Plugin()
plugin.groupId = "org.apache.maven.plugins"
plugin.artifactId = "maven-deploy-plugin"
project.model.build.plugins.add(plugin)
}
log.info "\tPlugin: $plugin"
if (plugin.configuration == null) {
log.info "\tCreating configuration"
def configuration = new Xpp3Dom("configuration")
def skip = new Xpp3Dom("skip")
skip.value = "false"
configuration.addChild(skip)
plugin.configuration = configuration
} else {
log.info "\tPlugin configuration not empty"
def config = plugin.configuration as Xpp3Dom
def skip = config.getChild("skip")
if (skip == null){
log.info "\tModifying configuration"
skip = new Xpp3Dom("skip")
config.addChild(skip)
}
else if (skip.value == "true") {
log.info "\texisting skip value is '$skip.value'. Thus, the module won't get deployed."
log.info "\tModifying the skip value to 'false'"
skip.value = "false"
}
else {
log.info "\texisting skip value is '$skip.value'. Thus, the module will get deployed."
}
}
log.info "\t------------------------------------------ Deployment Enabled ------------------------------------------"
log.info ""
}
}
}
MangleVersion mangleVersion = new MangleVersion(pme: pme)
mangleVersion.execute()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment