In workflow post function i have added script runner where i written code as below,
def issueKeys = ["MYQCMR-42", "MYQCMR-59", "MYQCMR-60", "MYQCMR-78", "MYQCMR-128"]
// Check if the issue key is in the list, the issue type is 'CMR v2', and custom field 'customfield_23961' is not present
def isConditionMet = issueKeys.contains(issueKey) && issueTypeName == 'CMR v2' && !customField23961 logger.info("Condition met: ${isConditionMet}")
@grab(group='com.konghq', module='unirest-java', version='3.11.09') import org.apache.http.entity.ContentType;
import kong.unirest.Unirest;
import kong.unirest.HttpResponse
import kong.unirest.JsonNode
import kong.unirest.HttpRequest
import org.apache.http.entity.ContentType
def issueKey = issue.key
logger.info("It ran!")
//ISSUE DETAILS
def taskTemplate = getIssueDetails(issueKey,"customField","customfield_18811")
if (taskTemplate) {
switch(taskTemplate) {
case {it.contains("MYQCMR-42")}:
def templateKey = "MYQCMR-42"
def proFormaCF = "customfield_22200"
updateIssueFromTemplate(issueKey, templateKey, proFormaCF)
break
case {it.contains("MYQCMR-59")}: a
def templateKey = "MYQCMR-59"
def proFormaCF = "customfield_22201"
updateIssueFromTemplate(issueKey, templateKey, proFormaCF)
break
case {it.contains("MYQCMR-60")}:
def templateKey = "MYQCMR-60"
def proFormaCF = "customfield_22202"
updateIssueFromTemplate(issueKey, templateKey, proFormaCF)
break
case {it.contains("MYQCMR-78")}:
def templateKey = "MYQCMR-78"
def proFormaCF = "customfield_22703"
updateIssueFromTemplate(issueKey, templateKey, proFormaCF)
break
case {it.contains("MYQCMR-128")}:
def templateKey = "MYQCMR-128"
def proFormaCF = "customfield_22801"
updateIssueFromTemplate(issueKey, templateKey, proFormaCF)
break
default:
logger.info("Issue: ${issueKey} - No template!")
break
}
}
def updateIssueFromTemplate(issueKey, templateKey, proFormaCF) {
def newSummary = getIssueDetails(issueKey,"proFormaField",proFormaCF)
def newDescription = getIssueDetails(templateKey,"systemField","description")
updateIssue(issueKey, newSummary, newDescription)
def attachments = getIssueDetails(templateKey,"attachment","attachment")
if (attachments) { copyIssueAttachments(issueKey, attachments) }
}
def getIssueDetails(issueKey, type, fieldName) {
def result = get("/rest/api/2/issue/${issueKey}?fields=${fieldName}")
.header('Content-Type', 'application/json')
.asObject(Map)
if (result.status == 200) {
if (type == "systemField") {
return result.body.fields[fieldName]
} else if (type == "customField") {
return result.body.fields[fieldName].value
} else if (type == "proFormaField") {
return result.body.fields[fieldName]
} else if (type == "attachment") {
return [result.body.fields[fieldName].filename, result.body.fields[fieldName].content, result.body.fields[fieldName].mimeType]
}
} else {
logger.info("Error retrieving issue ${result}")
}
}
def updateIssue(issueKey,summary, description){
def resp = put("/rest/api/2/issue/${issueKey}")
.header('Content-Type', 'application/json')
.body([
fields: [
summary : summary,
description : description,
customfield_23961 : [[value: 'Yes']]
]
])
.asString()
assert resp.status == 204
}
def copyIssueAttachments(issueKey, attachments){
if (attachments) {
for(int i = 0; i < attachments[0].size(); i++ ){
def fileName = attachments[0][i]
def downloadUrl = attachments[1][i]
def mimeType = attachments[2][i]
logger.info("fileName: ${fileName} - downloadUrl: ${downloadUrl} - mimeType: ${mimeType}")
def readFileResp = Unirest.get(downloadUrl).asBinary()
def resp = Unirest.post("/rest/api/2/issue/${issueKey}/attachments")
//.header('Content-Type', 'application/json')
.header('X-Atlassian-Token', 'no-check')
.field("file", readFileResp.body, ContentType.create(mimeType as String), fileName as String)
.asObject(Map)
assert resp.status >= 200 && resp.status < 300
}
} else logger.info("Template has no attachment.")
}