1#!/bin/bash 2 3# For each {module}/pom.xml 4# Removes dependencyManagement and pluginManagement that should be handled in the parent 5# Also removes other configuration that is handled in google-cloud-pom-parent and google-cloud-jar-parent 6 7set -e 8 9function runRegexOnPoms { 10 perl_command=$1 11 search=$2 12 for pomFile in $(find . -mindepth 2 -maxdepth 3 -name pom.xml |sort --dictionary-order); do 13 if [[ $pomFile =~ .*google-cloud-jar-parent.* ]] || \ 14 [[ $pomFile =~ .*google-cloud-pom-parent.* ]] || \ 15 [[ $pomFile =~ .*java-shared-dependencies.* ]]; then 16 continue 17 fi 18 19 if grep -q "${search}" "$pomFile" && [[ $(wc -c < "$pomFile") != $(perl -0pe "$perl_command" "$pomFile" | wc -c) ]]; then 20 # execute the replacement in pom.xml 21 echo "Applying $perl_command for $pomFile" 22 perl -i -0pe "$perl_command" "$pomFile" 23 fi 24 25 done 26} 27 28function removeArtifact { 29 type=$1 30 name=$2 31 parent=$3 32 perl_command="s/(<${parent}>.*?)\s*<${type}>\s*?<groupId>[a-z\-\.]*<\/groupId>\s*?<artifactId>${name//-/\-}<\/artifactId>.*?<\/${type}>(.*?<\/${parent}>)/\$1\$2/s" 33 runRegexOnPoms "$perl_command" "$name" 34} 35 36function removeArtifactVersion { 37 type=$1 38 name=$2 39 perl_command="s/(\s*<${type}>\s*?<groupId>[a-z\-\.]*<\/groupId>\s*?<artifactId>${name//-/\-}<\/artifactId>\s*?(<scope>.*?<\/scope>)?)\s*?<version>[^\\n]*?<\/version>(.*?<\/${type}>)/\$1\$3/s" 40 runRegexOnPoms "$perl_command" "$name" 41} 42 43function annotateArtifactVersion { 44 type=$1 45 name=$2 46 perl_command="s/(\s*<${type}>\s*?<groupId>[a-z\-\.]*<\/groupId>\s*?<artifactId>${name//-/\-}<\/artifactId>\s*?(<scope>.*?<\/scope>)?\s*?)(<version>[^\\n]*?<\/version>)([^:\\n]*\\n.*?<\/${type}>)/\$1\$3<!-- {x-version-update:${name//-/\-}:current} -->\$4/s" 47 runRegexOnPoms "$perl_command" "$name" 48} 49 50function removeManagedDependency { 51 dependency=$1 52 removeArtifact 'dependency' "${dependency}" "dependencyManagement" 53} 54 55function removeElement { 56 element=$1 57 perl_command="s/\s*<${element}>.*?<\/${element}>//s" 58 runRegexOnPoms "$perl_command" "<${element}>" 59} 60 61function setGrafeasCheckstyleHeaderConfig { 62 perl_command="s/(\s*<properties>\s*.*?)(\s*<checkstyle.header.file>grafeas.header<\/checkstyle.header.file>)?(\s*<\/properties>)/\$1\n <checkstyle.header.file>grafeas.header<\/checkstyle.header.file>\$3/s" 63 runRegexOnPoms "$perl_command" ">Grafeas Client<" 64} 65 66setGrafeasCheckstyleHeaderConfig 67removeManagedDependency 'google-cloud-shared-dependencies' 68removeManagedDependency 'junit' 69removeManagedDependency 'joda-time' 70removeManagedDependency 'truth' 71removeManagedDependency 'easymock' 72removeManagedDependency 'perfmark-api' 73removeManagedDependency 'google-cloud-pubsub' 74removeManagedDependency 'proto-google-cloud-pubsub-v1' 75removeManagedDependency 'google-cloud-pubsub-bom' 76removeManagedDependency 'google-api-services-translate' 77removeElement 'reporting' 78removeElement 'developers' 79removeElement 'organization' 80removeElement 'scm' 81removeElement 'issueManagement' 82removeElement 'licenses' 83removeElement 'profiles' 84removeElement 'junit.version' 85removeElement 'build' 86removeElement 'url' 87removeArtifact 'plugin' 'nexus-staging-maven-plugin' 'plugins' 88removeArtifact 'dependency' 'checkstyle' 'plugins' 89removeArtifactVersion 'dependency' 'junit' 90removeArtifactVersion 'dependency' 'easymock' 91removeArtifactVersion 'dependency' 'truth' 92removeArtifactVersion 'dependency' 'grpc-google-common-protos' 93removeArtifactVersion 'dependency' 'google-api-services-dns' 94removeArtifactVersion 'dependency' 'google-api-services-translate' 95removeArtifactVersion 'dependency' 'google-api-services-cloudresourcemanager' 96removeArtifactVersion 'dependency' 'google-api-services-storage' 97removeArtifactVersion 'dependency' 'google-cloud-storage' 98removeArtifactVersion 'plugin' 'maven-checkstyle-plugin' 99removeArtifactVersion 'dependency' 'mockito-all' 100removeArtifactVersion 'dependency' 'objenesis' 101annotateArtifactVersion 'dependency' 'grafeas' 102annotateArtifactVersion 'dependency' 'proto-google-cloud-orgpolicy-v1' 103annotateArtifactVersion 'dependency' 'proto-google-identity-accesscontextmanager-v1' 104annotateArtifactVersion 'dependency' 'proto-google-cloud-os-config-v1' 105annotateArtifactVersion 'dependency' 'google-cloud-resourcemanager'