package org.wikimedia.integration
|
|
|
|
import java.net.URLEncoder
|
|
|
|
import static org.wikimedia.integration.Utility.arg
|
|
|
|
/**
|
|
* Provides an interface to Blubber for generating Dockerfiles.
|
|
*/
|
|
class Blubber implements Serializable {
|
|
/**
|
|
* Blubber config path.
|
|
*/
|
|
final String configPath
|
|
|
|
/**
|
|
* Jenkins pipeline workflow script context.
|
|
*/
|
|
final def workflowScript
|
|
|
|
/**
|
|
* Blubberoid base service URL.
|
|
*/
|
|
final String blubberoidURL
|
|
|
|
/**
|
|
* Blubber constructor.
|
|
*
|
|
* @param workflowScript Jenkins workflow script context.
|
|
* @param configPath Blubber config path.
|
|
* @param blubberoidURL Blubberoid service URL.
|
|
*/
|
|
Blubber(workflowScript, String configPath, String blubberoidURL) {
|
|
this.workflowScript = workflowScript
|
|
this.configPath = configPath
|
|
this.blubberoidURL = blubberoidURL
|
|
}
|
|
|
|
/**
|
|
* Returns a valid Dockerfile for the given variant.
|
|
*
|
|
* @param variant Blubber variant name.
|
|
*/
|
|
String generateDockerfile(String variant) {
|
|
def config = workflowScript.readFile(file: configPath)
|
|
def headers = [[name: "content-type", value: getConfigMediaType()]]
|
|
def response = workflowScript.httpRequest(url: getRequestURL(variant),
|
|
httpMode: "POST",
|
|
customHeaders: headers,
|
|
requestBody: config,
|
|
consoleLogResponseBody: true,
|
|
validResponseCodes: "200")
|
|
|
|
response.content
|
|
}
|
|
|
|
/**
|
|
* Returns a request media type based on the config file extension.
|
|
*/
|
|
String getConfigMediaType() {
|
|
def ext = configPath.substring(configPath.lastIndexOf(".") + 1)
|
|
|
|
switch (ext) {
|
|
case ["yaml", "yml"]:
|
|
return "application/yaml"
|
|
default:
|
|
return "application/json"
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Return a request URL for the given variant.
|
|
*/
|
|
String getRequestURL(String variant) {
|
|
blubberoidURL + URLEncoder.encode(variant, "UTF-8")
|
|
}
|
|
}
|