Skip to content

Commit

Permalink
Implement WIP status in case of issues being WIP (opendevstack#171)
Browse files Browse the repository at this point in the history
  • Loading branch information
metmajer committed Apr 2, 2020
1 parent e049a92 commit 7d89c9d
Show file tree
Hide file tree
Showing 13 changed files with 414 additions and 172 deletions.
8 changes: 4 additions & 4 deletions src/org/ods/usecase/JiraUseCase.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -261,19 +261,19 @@ class JiraUseCase {
this.jira.updateTextFieldsOnIssue(releaseStatusIssueKey, [(releaseStatusIssueBuildNumberField.id): "${this.project.buildParams.version}-${this.steps.env.BUILD_NUMBER}"])
}

void updateJiraReleaseStatusResult(Throwable error) {
void updateJiraReleaseStatusResult(String message, boolean isError) {
if (!this.jira) return

def status = error ? "Failed" : "Successful"
def status = isError ? "Failed" : "Successful"

def releaseStatusIssueKey = this.project.buildParams.releaseStatusJiraIssueKey
def releaseStatusIssueFields = this.project.getJiraFieldsForIssueType(JiraUseCase.IssueTypes.RELEASE_STATUS)

def releaseStatusIssueReleaseManagerStatusField = releaseStatusIssueFields["Release Manager Status"]
this.jira.updateSelectListFieldsOnIssue(releaseStatusIssueKey, [(releaseStatusIssueReleaseManagerStatusField.id): status])

if (error) {
this.jira.appendCommentToIssue(releaseStatusIssueKey, "${error.message}\n\nSee: ${this.steps.env.RUN_DISPLAY_URL}")
if (message) {
this.jira.appendCommentToIssue(releaseStatusIssueKey, "${message}\n\nSee: ${this.steps.env.RUN_DISPLAY_URL}")
}
}

Expand Down
140 changes: 109 additions & 31 deletions src/org/ods/usecase/LeVADocumentUseCase.groovy

Large diffs are not rendered by default.

58 changes: 54 additions & 4 deletions src/org/ods/util/Project.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -36,6 +36,16 @@ class Project {
TYPE_TESTS
]

static final List TYPES_WITH_STATUS = [
TYPE_BUGS,
TYPE_EPICS,
TYPE_MITIGATIONS,
TYPE_REQUIREMENTS,
TYPE_RISKS,
TYPE_TECHSPECS,
TYPE_TESTS
]

private final String type
private HashMap delegate

Expand Down Expand Up @@ -267,16 +277,56 @@ class Project {
this.data.jira.docs = this.loadJiraDataDocs()
this.data.jira.issueTypes = this.loadJiraDataIssueTypes()

this.data.openshift = [:]
this.data.jira.undone = this.computeWipJiraIssues(this.data.jira)
this.data.jira.undone.docChapters = [:]

if (this.hasWipJiraIssues()) {
def message = "The following issues were detected to be work in progress:"
this.getWipJiraIssues().each { type, keys ->
def values = keys instanceof Map ? keys.values().flatten() : keys
if (!values.isEmpty()) {
message += "\n\n" + type.capitalize() + ": " + values.join(", ")
}
}

this.reportPipelineStatus(message, false)
}

this.data.documents = [:]
this.data.documents.sectionsNotDone = [:]
this.data.openshift = [:]

this.jiraUseCase.updateJiraReleaseStatusBuildNumber()

return this
}

Map<String, List> getWipJiraIssues() {
return this.data.jira.undone
}

boolean hasWipJiraIssues() {
def values = this.getWipJiraIssues().values()
values = values.collect { it instanceof Map ? it.values() : it }.flatten()
return !values.isEmpty()
}

protected Map<String, List> computeWipJiraIssues(Map data) {
def result = [:]

JiraDataItem.TYPES_WITH_STATUS.each { type ->
if (data.containsKey(type)) {
result[type] = data[type].findAll { key, issue ->
issue.status != null && issue.status.toLowerCase() != "done" && issue.status.toLowerCase() != "cancelled"
}
.collect { key, issue ->
return key
}
}
}

return result
}

protected Map convertJiraDataToJiraDataItems(Map data) {
JiraDataItem.TYPES.each { type ->
if (data[type] == null) {
Expand Down Expand Up @@ -940,9 +990,9 @@ class Project {
return result
}

public void reportPipelineStatus(Throwable error) {
public void reportPipelineStatus(String message = "", boolean isError = false) {
if (!this.jiraUseCase) return
this.jiraUseCase.updateJiraReleaseStatusResult(error)
this.jiraUseCase.updateJiraReleaseStatusResult(message, isError)
}

@NonCPS
Expand Down
9 changes: 4 additions & 5 deletions test/groovy/org/ods/usecase/JiraUseCaseSpec.groovy
Original file line number Diff line number Diff line change
Expand Up @@ -403,11 +403,12 @@ class JiraUseCaseSpec extends SpecHelper {
project.buildParams.releaseStatusJiraIssueKey = "JIRA-4711"
project.buildParams.version = "1.0"
steps.env.BUILD_NUMBER = "0815"
steps.env.RUN_DISPLAY_URL = "http://jenkins"

def error = new RuntimeException("Oh no!")

when:
usecase.updateJiraReleaseStatusResult(error)
usecase.updateJiraReleaseStatusResult(error.message, true)

then:
1 * project.getJiraFieldsForIssueType(JiraUseCase.IssueTypes.RELEASE_STATUS) >> [
Expand All @@ -422,7 +423,7 @@ class JiraUseCaseSpec extends SpecHelper {
])

then:
1 * jira.appendCommentToIssue("JIRA-4711", "${error.message}\n\nSee: ${null}")
1 * jira.appendCommentToIssue("JIRA-4711", "${error.message}\n\nSee: ${steps.env.RUN_DISPLAY_URL}")
}

def "update Jira release status result without error"() {
Expand All @@ -431,10 +432,8 @@ class JiraUseCaseSpec extends SpecHelper {
project.buildParams.version = "1.0"
steps.env.BUILD_NUMBER = "0815"

def error = null

when:
usecase.updateJiraReleaseStatusResult(error)
usecase.updateJiraReleaseStatusResult("", false)

then:
1 * project.getJiraFieldsForIssueType(JiraUseCase.IssueTypes.RELEASE_STATUS) >> {
Expand Down
Loading

0 comments on commit 7d89c9d

Please sign in to comment.