#!/usr/bin/env groovy /* Calculate the current version by querying a list of assets in a Nexus Repository. Return '0.0.1' if there are no matching assets. Jenkins Plugin dependencies: - HTTP Request - Plugin Utilty Steps */ // Define the enum enum BuildNumFlags { IS_COMMITS_SINCE_TAG, IS_JOB_BUILD_NUMBER, IS_FROM_QUERY } Map call(Map config = [:]) { def defaults = [ nexusBase: 'https://repo.thejimnicholson.com', searchAPI: 'service/rest/v1/search', build_flag: BuildNumFlags.IS_FROM_QUERY, queryParams: [ repository: 'tools', sort: 'name', name: 'tests/test-something*' ] ] Map runConfig = defaults + config nexusURL = runConfig.nexusBase + '/' + runConfig.searchAPI nexusSearch = buildUrlWithQueryParams(nexusURL, runConfig.queryParams) response = httpRequest acceptType: 'APPLICATION_JSON', contentType: 'APPLICATION_JSON', url: nexusSearch, wrapAsMultipart: false body = response.content assets = readJSON text: body latest = assets.items.last() version = latest.version if (version == 'null') { matches = (latest.name =~ /.*-([0-9\.]+)-([0-9]+)\.)[0]/)[0] version = matches[1] query_build = matches[2] } switch (build_flag) { case BuildNumFlags.IS_COMMITS_SINCE_TAG: build = sh( script: 'git rev-list $(git tag | tail -1).. --count', returnStdout: true ).trim() break case BuildNumFlags.IS_JOB_BUILD_NUMBER: build = env.BUILD_NUMBER break case BuildNumFlags.IS_FROM_QUERY: build = query_build break default: build = query_build break } runConfig.nexusQuery = nexusSearch runConfig.latestVersion = version runConfig.latestBuild = build return runConfig } /* groovylint-disable-next-line MethodParameterTypeRequired, NoDef */ String buildUrlWithQueryParams(baseUrl, queryParams) { url = baseUrl if (!queryParams.empty) { queryParamsString = queryParams.collect { key, value -> "${URLEncoder.encode(key, 'UTF-8')}=${URLEncoder.encode(value, 'UTF-8')}" }.join('&') url += '?' + queryParamsString } return url }