github.com/ouraigua/jenkins-library@v0.0.0-20231028010029-fbeaf2f3aa9b/src/com/sap/piper/DescriptorUtils.groovy (about) 1 package com.sap.piper 2 3 import com.cloudbees.groovy.cps.NonCPS 4 import groovy.transform.Field 5 6 import java.util.regex.Matcher 7 import java.util.regex.Pattern 8 9 @Field 10 def name = Pattern.compile("(.*)name=['\"](.*?)['\"](.*)", Pattern.DOTALL) 11 @Field 12 def version = Pattern.compile("(.*)version=['\"](.*?)['\"](.*)", Pattern.DOTALL) 13 @Field 14 def method = Pattern.compile("(.*)\\(\\)", Pattern.DOTALL) 15 16 def getMavenGAV(file = 'pom.xml') { 17 def result = [:] 18 def descriptor = readMavenPom(file: file) 19 def group = descriptor.getGroupId() 20 def artifact = descriptor.getArtifactId() 21 def version = descriptor.getVersion() 22 result['packaging'] = descriptor.getPackaging() 23 result['group'] = (null != group && group.length() > 0) ? group : sh(returnStdout: true, script: "mvn -f ${file} help:evaluate -Dexpression=project.groupId | grep -Ev '(^\\s*\\[|Download|Java\\w+:)'").trim() 24 result['artifact'] = (null != artifact && artifact.length() > 0) ? artifact : sh(returnStdout: true, script: "mvn -f ${file} help:evaluate -Dexpression=project.artifactId | grep -Ev '(^\\s*\\[|Download|Java\\w+:)'").trim() 25 result['version'] = (null != version && version.length() > 0) ? version : sh(returnStdout: true, script: "mvn -f ${file} help:evaluate -Dexpression=project.version | grep ^[0-9].*").trim() 26 echo "loaded ${result} from ${file}" 27 return result 28 } 29 30 def getNpmGAV(file = 'package.json') { 31 def result = [:] 32 def descriptor = readJSON(file: file) 33 34 if (descriptor.name.startsWith('@')) { 35 def packageNameArray = descriptor.name.split('/') 36 if (packageNameArray.length != 2) 37 error "Unable to parse package name '${descriptor.name}'" 38 result['group'] = packageNameArray[0] 39 result['artifact'] = packageNameArray[1] 40 } else { 41 result['group'] = '' 42 result['artifact'] = descriptor.name 43 } 44 result['version'] = descriptor.version 45 echo "loaded ${result} from ${file}" 46 return result 47 } 48 49 def getDubGAV(file = 'dub.json') { 50 def result = [:] 51 def descriptor = readJSON(file: file) 52 53 result['group'] = 'com.sap.dlang' 54 result['artifact'] = descriptor.name 55 result['version'] = descriptor.version 56 result['packaging'] = 'tar.gz' 57 echo "loaded ${result} from ${file}" 58 return result 59 } 60 61 def getSbtGAV(file = 'sbtDescriptor.json') { 62 def result = [:] 63 def descriptor = readJSON(file: file) 64 65 result['group'] = descriptor.group 66 result['artifact'] = descriptor.artifactId 67 result['version'] = descriptor.version 68 result['packaging'] = descriptor.packaging 69 echo "loaded ${result} from ${file}" 70 return result 71 } 72 73 def getPipGAV(file = 'setup.py') { 74 def result = [:] 75 def descriptor = readFile(file: file) 76 77 result['group'] = '' 78 result['packaging'] = '' 79 result['artifact'] = matches(name, descriptor) 80 result['version'] = matches(version, descriptor) 81 82 if (result['version'] == '' || matches(method, result['version'])) { 83 file = file.replace('setup.py', 'version.txt') 84 result['version'] = getVersionFromFile(file) 85 } 86 87 echo "loaded ${result} from ${file}" 88 return result 89 } 90 91 def getGoGAV(file = 'Gopkg.toml', URI repoUrl) { 92 def name = "${repoUrl.getHost()}${repoUrl.getPath().replaceAll(/\.git/, '')}" 93 def path = file.substring(0, file.lastIndexOf('/') + 1) 94 def module = path?.replaceAll(/\./, '')?.replaceAll('/', '') 95 def result = [:] 96 97 result['group'] = '' 98 result['packaging'] = '' 99 result['artifact'] = "${name}${module?'.':''}${module?:''}".toString() 100 file = path + 'version.txt' 101 result['version'] = getVersionFromFile(file) 102 103 if (!result['version']) { 104 file = path + 'VERSION' 105 result['version'] = getVersionFromFile(file) 106 } 107 108 echo "loaded ${result} from ${file}" 109 return result 110 } 111 112 private getVersionFromFile(file) { 113 try { 114 def versionString = readFile(file: file) 115 if (versionString) { 116 return versionString.trim() 117 } 118 } catch (java.nio.file.NoSuchFileException e) { 119 echo "Failed to load version string from file ${file} due to ${e}" 120 } 121 return '' 122 } 123 124 @NonCPS 125 private def matches(regex, input) { 126 def m = new Matcher(regex, input) 127 return m.matches() ? m.group(2) : '' 128 }