From 297ead2d7e28a4aa15ba52873ec5680c7c91a060 Mon Sep 17 00:00:00 2001 From: William Petit Date: Thu, 19 Mar 2020 17:00:36 +0100 Subject: [PATCH] Add debian repository helpers --- vars/debian.groovy | 80 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 vars/debian.groovy diff --git a/vars/debian.groovy b/vars/debian.groovy new file mode 100644 index 0000000..d1be7b4 --- /dev/null +++ b/vars/debian.groovy @@ -0,0 +1,80 @@ +def waitForRepoPackage(String packageName, Map params = [:]) { + def expectedVersion = params.expectedVersion ? params.expectedVersion : null + def delay = params.delay ? params.delay : 30 + def waitTimeout = params.timeout ? params.timeout : 600 + + def message = "Waiting for package '${packageName}'" + if (expectedVersion != null) { + message += "with version '${expectedVersion}'" + } + message += '...' + println(message) + + timeout(time: waitTimeout, unit: 'SECONDS') { + while(true) { + println("Retrieving packages list...") + def repo = listRepoPackages(params) + + def packages = repo[packageName] + if (!packages) { + println("Package not found.") + sleep(time: delay, unit: 'SECONDS') + continue + } + + if (expectedVersion == null) { + println("Package found !") + break + } + + def versionFound = packages.find { + return it['version'] =~ expectedVersion + } + + if (versionFound) { + println("Expected package version found !") + break + } + + println("Package version not found.") + sleep(time: delay, unit: 'SECONDS') + } + } +} + +def listRepoPackages(Map params = [:]) { + def baseURL = params.baseURL ? params.baseURL : 'https://vulcain.cadoles.com' + def distrib = params.distrib ? params.distrib : '2.7.0-dev' + def component = params.component ? params.component : 'main' + def type = params.type ? params.type : 'binary' + def arch = params.arch ? params.arch : 'amd64' + + def response = httpRequest(url: "${baseURL}/dists/${distrib}/${component}/${type}-${arch}/Packages") + + def packages = [:] + def lines = response.content.split('\n') + + def currentPackage + lines.each { + def packageMatch = (it =~ /^Package: (.*)$/) + if (packageMatch.find()) { + def packageName = packageMatch.group(1) + + if (!packages[packageName]) { + packages[packageName] = [] + } + + currentPackage = [:] + currentPackage['name'] = packageName + packages[packageName] += currentPackage + } + + def versionMatch = (it =~ /^Version: (.*)$/) + if (versionMatch.find()) { + def version = versionMatch.group(1) + currentPackage['version'] = version + } + } + + return packages +} \ No newline at end of file