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  }