diff --git a/context/context.go b/context/context.go index b31a464..3469acc 100644 --- a/context/context.go +++ b/context/context.go @@ -50,7 +50,7 @@ func (c *Context) Initialize() { l := mogrus.New() l.Initialize() c.Log = l.CreateLogger("opensaps") - c.Log.CreateOutput("stdout", os.Stdout, true) + c.Log.CreateOutput("stdout", os.Stdout, true, "debug") c.Flagger = flagger.New(c.Log) c.Flagger.Initialize() diff --git a/parsers/gitea/giteaparser.go b/parsers/gitea/giteaparser.go index d0bcd63..82046a9 100644 --- a/parsers/gitea/giteaparser.go +++ b/parsers/gitea/giteaparser.go @@ -18,86 +18,239 @@ package giteaparser import ( - // stdlib - "fmt" - "regexp" - "strconv" - "strings" + // stdlib + "fmt" + "regexp" + "strconv" + "strings" - // local - "lab.pztrn.name/pztrn/opensaps/slack/message" + // local + "lab.pztrn.name/pztrn/opensaps/slack/message" ) -type GiteaParser struct {} +type GiteaParser struct{} func (gp GiteaParser) Initialize() { - c.Log.Infoln("Initializing Gitea parser...") + c.Log.Infoln("Initializing Gitea parser...") +} + +func (gp GiteaParser) parseBranchNew(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo} | Branch: {branch}] {header_message}." + + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["repo"] = header_data[0][1] + data["repo_url"] = header_data[0][0] + data["branch"] = header_data[1][1] + data["branch_url"] = header_data[1][0] + + header_msg := strings.Split(message.Text, "] ")[1] + data["header_message"] = header_msg + + return data } func (gp GiteaParser) cutLinks(data string) [][]string { - c.Log.Debugln("Passed:", data) + c.Log.Debugln("Passed:", data) - r := regexp.MustCompile("((https??://[a-zA-Z0-9.#!*/ _-]+)\\|([a-zA-Z0-9.#!*/ _-]+))") + r := regexp.MustCompile("((https??://[a-zA-Z0-9.#!*/ _-]+)\\|([a-zA-Z0-9.#!*/ _+-]+))") - found := r.FindAllStringSubmatch(data, -1) + found := r.FindAllStringSubmatch(data, -1) - // [i][0] - link - // [i][1] - string for link - var result [][]string - for i := range found { - res := make([]string, 0, 2) - res = append(res, found[i][2]) - res = append(res, found[i][3]) - result = append(result, res) - } + // [i][0] - link + // [i][1] - string for link + var result [][]string + for i := range found { + res := make([]string, 0, 2) + res = append(res, found[i][2]) + res = append(res, found[i][3]) + result = append(result, res) + } - c.Log.Debugln("Links cutted:", result) - return result + c.Log.Debugln("Links cutted:", result) + return result } func (gp GiteaParser) parseCommitNew(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[Repo: {repo} | Branch: {branch}] {header_message}{newline}{repeatables}" + data := make(map[string]string) + data["message"] = "[Repo: {repo} | Branch: {branch}] {header_message}{newline}{repeatables}" - // Parse header. - // [0] is repo, [1] is branch. - header_data := gp.cutLinks(message.Text) - data["repo"] = header_data[0][1] - data["repo_url"] = header_data[0][0] - data["branch"] = header_data[1][1] - data["branch_url"] = header_data[1][0] + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["repo"] = header_data[0][1] + data["repo_url"] = header_data[0][0] + data["branch"] = header_data[1][1] + data["branch_url"] = header_data[1][0] - header_msg := strings.Split(message.Text, "] ")[1] - data["header_message"] = header_msg + header_msg := strings.Split(message.Text, "] ")[1] + data["header_message"] = header_msg - // Parse commits. - data["repeatable_message"] = "{commit}: {message}{newline}" - data["repeatables"] = "commit,message" - idx := 0 - for i := range message.Attachments { - attachment_link := gp.cutLinks(message.Attachments[i].Text) - data["repeatable_item_commit" + strconv.Itoa(idx)] = attachment_link[0][1] - data["repeatable_item_commit" + strconv.Itoa(idx) + "_url"] = attachment_link[0][0] - data["repeatable_item_message" + strconv.Itoa(idx)] = strings.Split(message.Attachments[i].Text, ">: ")[1] + // Parse commits. + data["repeatable_message"] = "{commit}: {message}{newline}" + data["repeatables"] = "commit,message" + idx := 0 + for i := range message.Attachments { + attachment_link := gp.cutLinks(message.Attachments[i].Text) + data["repeatable_item_commit"+strconv.Itoa(idx)] = attachment_link[0][1] + data["repeatable_item_commit"+strconv.Itoa(idx)+"_url"] = attachment_link[0][0] + data["repeatable_item_message"+strconv.Itoa(idx)] = strings.Split(message.Attachments[i].Text, ">: ")[1] - idx += 1 - } - data["repeatables_count"] = strconv.Itoa(idx) + idx += 1 + } + data["repeatables_count"] = strconv.Itoa(idx) - return data + return data } func (gp GiteaParser) ParseMessage(message slackmessage.SlackMessage) map[string]string { - c.Log.Debugln("Parsing Gitea message...") + c.Log.Debugln("Parsing Gitea message...") - var data map[string]string - if strings.Contains(message.Text, "new commit") && strings.Contains(message.Text, "pushed by ") { - data = gp.parseCommitNew(message) - } else { - return map[string]string{"message": "Unknown message type:
" + fmt.Sprintf("%+v", message)} - } + var data map[string]string + if strings.Contains(message.Text, "new commit") && strings.Contains(message.Text, "pushed by ") { + data = gp.parseCommitNew(message) + } else if strings.Contains(message.Text, "Pull request closed") { + data = gp.parsePullRequestClosed(message) + } else if strings.Contains(message.Text, "Pull request edited") { + data = gp.parsePullRequestEdited(message) + } else if strings.Contains(message.Text, "Pull request labels updated") { + data = gp.parsePullRequestLabelsUpdated(message) + } else if strings.Contains(message.Text, "Pull request merged") { + data = gp.parsePullRequestMerged(message) + } else if strings.Contains(message.Text, "Pull request re-opened") { + data = gp.parsePullRequestReopened(message) + } else if strings.Contains(message.Text, "Pull request submitted") { + data = gp.parsePullRequestSubmitted(message) + } else if strings.Contains(message.Text, "branch created by") { + data = gp.parseBranchNew(message) + } else { + return map[string]string{"message": "Unknown message type:
" + fmt.Sprintf("%+v", message)} + } - c.Log.Debugln("Message:", fmt.Sprintf("%+x", data)) + c.Log.Debugln("Message:", fmt.Sprintf("%+x", data)) - return data + return data +} + +func (gp GiteaParser) parsePullRequestClosed(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo}] Pull request {pr} by {user} was closed." + + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["pr"] = header_data[0][1] + data["pr_url"] = header_data[0][0] + data["user"] = header_data[1][1] + data["user_url"] = header_data[1][0] + + repo := strings.Split(message.Text, "Pull request")[0] + repo = strings.TrimLeft(repo, "[") + repo = strings.TrimRight(repo, "] ") + data["repo"] = repo + + return data +} + +func (gp GiteaParser) parsePullRequestEdited(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo}] Pull request {pr} was edited by {user}." + + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["pr"] = header_data[0][1] + data["pr_url"] = header_data[0][0] + data["user"] = header_data[1][1] + data["user_url"] = header_data[1][0] + + repo := strings.Split(message.Text, "Pull request")[0] + repo = strings.TrimLeft(repo, "[") + repo = strings.TrimRight(repo, "] ") + data["repo"] = repo + + return data +} + +func (gp GiteaParser) parsePullRequestLabelsUpdated(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo}] Pull request {pr} by {user} labels was updated." + + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["pr"] = header_data[0][1] + data["pr_url"] = header_data[0][0] + data["user"] = header_data[1][1] + data["user_url"] = header_data[1][0] + + repo := strings.Split(message.Text, "Pull request")[0] + repo = strings.TrimLeft(repo, "[") + repo = strings.TrimRight(repo, "] ") + data["repo"] = repo + + return data +} + +func (gp GiteaParser) parsePullRequestMerged(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo}] Pull request {pr} by {user} was merged." + + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["pr"] = header_data[0][1] + data["pr_url"] = header_data[0][0] + data["user"] = header_data[1][1] + data["user_url"] = header_data[1][0] + + repo := strings.Split(message.Text, "Pull request")[0] + repo = strings.TrimLeft(repo, "[") + repo = strings.TrimRight(repo, "] ") + data["repo"] = repo + + return data +} + +func (gp GiteaParser) parsePullRequestReopened(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo}] Pull request {pr} by {user} was re-opened." + + // Parse header. + // [0] is repo, [1] is branch. + header_data := gp.cutLinks(message.Text) + data["pr"] = header_data[0][1] + data["pr_url"] = header_data[0][0] + data["user"] = header_data[1][1] + data["user_url"] = header_data[1][0] + + repo := strings.Split(message.Text, "Pull request")[0] + repo = strings.TrimLeft(repo, "[") + repo = strings.TrimRight(repo, "] ") + data["repo"] = repo + + return data +} + +func (gp GiteaParser) parsePullRequestSubmitted(message slackmessage.SlackMessage) map[string]string { + data := make(map[string]string) + data["message"] = "[Repo: {repo}] Pull request {pr} submitted by {user}." + + header_data := gp.cutLinks(message.Text) + data["user"] = header_data[0][1] + data["user_url"] = header_data[0][0] + + repo := strings.Split(message.Text, "Pull request")[0] + repo = strings.TrimLeft(repo, "[") + repo = strings.TrimRight(repo, "] ") + data["repo"] = repo + + // There is a pull request description in attachments. + prdata := gp.cutLinks(message.Attachments[0].Title) + data["pr"] = prdata[0][1] + data["pr_url"] = prdata[0][0] + + return data } diff --git a/parsers/gitlab/gitlabparser.go b/parsers/gitlab/gitlabparser.go index 8437770..4b355d9 100644 --- a/parsers/gitlab/gitlabparser.go +++ b/parsers/gitlab/gitlabparser.go @@ -18,333 +18,333 @@ package gitlabparser import ( - // stdlib - "fmt" - "regexp" - "strconv" - "strings" + // stdlib + "fmt" + "regexp" + "strconv" + "strings" - // local - "lab.pztrn.name/pztrn/opensaps/slack/message" + // local + "lab.pztrn.name/pztrn/opensaps/slack/message" ) -type GitlabParser struct {} +type GitlabParser struct{} func (gp GitlabParser) cutLinks(data string) [][]string { - r := regexp.MustCompile("((https??://[a-zA-Z0-9.#!*/ _-]+)\\|([a-zA-Z0-9.#!*/ _-]+))") + r := regexp.MustCompile("((https??://[a-zA-Z0-9.#!*/ _-]+)\\|([a-zA-Z0-9.#!*/ _+-]+))") - found := r.FindAllStringSubmatch(data, -1) + found := r.FindAllStringSubmatch(data, -1) - // [i][0] - link - // [i][1] - string for link - var result [][]string - for i := range found { - res := make([]string, 0, 2) - res = append(res, found[i][2]) - res = append(res, found[i][3]) - result = append(result, res) - } + // [i][0] - link + // [i][1] - string for link + var result [][]string + for i := range found { + res := make([]string, 0, 2) + res = append(res, found[i][2]) + res = append(res, found[i][3]) + result = append(result, res) + } - c.Log.Debugln("Links cutted:", result) - return result + c.Log.Debugln("Links cutted:", result) + return result } func (gp GitlabParser) Initialize() { - c.Log.Infoln("Initializing Gitlab parser...") + c.Log.Infoln("Initializing Gitlab parser...") } func (gp GitlabParser) parseCommit(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{repo}] {user} pushed to {branch}, {compare_changes}. Commits:{newline}{repeatables}" - data["user"] = strings.TrimSpace(strings.Split(message.Text, "pushed to")[0]) + data := make(map[string]string) + data["message"] = "[{repo}] {user} pushed to {branch}, {compare_changes}. Commits:{newline}{repeatables}" + data["user"] = strings.TrimSpace(strings.Split(message.Text, "pushed to")[0]) - // Parse links. - links_data := gp.cutLinks(message.Text) - data["branch"] = links_data[0][1] - data["branch_url"] = links_data[0][0] - data["repo"] = links_data[1][1] - data["repo_url"] = links_data[1][0] - data["compare_changes"] = "compare changes" - data["compare_changes_url"] = links_data[2][0] + // Parse links. + links_data := gp.cutLinks(message.Text) + data["branch"] = links_data[0][1] + data["branch_url"] = links_data[0][0] + data["repo"] = links_data[1][1] + data["repo_url"] = links_data[1][0] + data["compare_changes"] = "compare changes" + data["compare_changes_url"] = links_data[2][0] - // Parse commits. - data["repeatable_message"] = "{commit}: {commit_text}" - data["repeatables"] = "commit,commit_text" - idx := 0 - for i := range message.Attachments { - commit_data := gp.cutLinks(message.Attachments[i].Text) - data["repeatable_item_commit" + strconv.Itoa(idx)] = commit_data[0][1] - data["repeatable_item_commit" + strconv.Itoa(idx) + "_url"] = commit_data[0][0] - data["repeatable_item_commit_text" + strconv.Itoa(idx)] = strings.Split(message.Attachments[i].Text, ">: ")[1] + // Parse commits. + data["repeatable_message"] = "{commit}: {commit_text}" + data["repeatables"] = "commit,commit_text" + idx := 0 + for i := range message.Attachments { + commit_data := gp.cutLinks(message.Attachments[i].Text) + data["repeatable_item_commit"+strconv.Itoa(idx)] = commit_data[0][1] + data["repeatable_item_commit"+strconv.Itoa(idx)+"_url"] = commit_data[0][0] + data["repeatable_item_commit_text"+strconv.Itoa(idx)] = strings.Split(message.Attachments[i].Text, ">: ")[1] - idx += 1 - } - data["repeatables_count"] = strconv.Itoa(idx) + idx += 1 + } + data["repeatables_count"] = strconv.Itoa(idx) - return data + return data } func (gp GitlabParser) parseCommitLinks(data string) [][]string { - r := regexp.MustCompile("((htt[?p|ps]://[a-zA-Z0-9./-]+)\\|([a-zA-Z0-9./ _-]+))") + r := regexp.MustCompile("((htt[?p|ps]://[a-zA-Z0-9./-]+)\\|([a-zA-Z0-9./ _-]+))") - found := r.FindAllStringSubmatch(data, -1) + found := r.FindAllStringSubmatch(data, -1) - // [i][0] - link - // [i][1] - string for link - var result [][]string - for i := range found { - res := make([]string, 0, 2) - res = append(res, found[i][2]) - res = append(res, found[i][3]) - result = append(result, res) - } + // [i][0] - link + // [i][1] - string for link + var result [][]string + for i := range found { + res := make([]string, 0, 2) + res = append(res, found[i][2]) + res = append(res, found[i][3]) + result = append(result, res) + } - c.Log.Debugln("Links cutted:", result) - return result + c.Log.Debugln("Links cutted:", result) + return result } func (gp GitlabParser) parseIssueClosed(text string) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} closed issue {issue}" + data := make(map[string]string) + data["message"] = "[{project}] {user} closed issue {issue}" - // User name comes after "closed by" words. - data["user"] = strings.Split(text, "closed by ")[1] + // User name comes after "closed by" words. + data["user"] = strings.Split(text, "closed by ")[1] - // Parse links. - // Same as for parseIssueComment because this regexp returns - // needed data. - links_data := gp.cutLinks(text) - data["project"] = links_data[0][1] - data["project_url"] = links_data[0][0] - data["issue"] = links_data[1][1] - data["issue_url"] = links_data[1][0] + // Parse links. + // Same as for parseIssueComment because this regexp returns + // needed data. + links_data := gp.cutLinks(text) + data["project"] = links_data[0][1] + data["project_url"] = links_data[0][0] + data["issue"] = links_data[1][1] + data["issue_url"] = links_data[1][0] - return data + return data } func (gp GitlabParser) parseIssueComment(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} {commented_on_issue} ({issue_name}):{newline}{repeatables}" - data["user"] = strings.TrimSpace(strings.Split(message.Text, " <")[0]) + data := make(map[string]string) + data["message"] = "[{project}] {user} {commented_on_issue} ({issue_name}):{newline}{repeatables}" + data["user"] = strings.TrimSpace(strings.Split(message.Text, " <")[0]) - // Parse links in main message. - links_data := gp.cutLinks(message.Text) - data["commented_on_issue"] = links_data[0][1] - data["commented_on_issue_url"] = links_data[0][0] - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] - data["issue_name"] = strings.Split(message.Text, links_data[1][1] + ">: ")[1] + // Parse links in main message. + links_data := gp.cutLinks(message.Text) + data["commented_on_issue"] = links_data[0][1] + data["commented_on_issue_url"] = links_data[0][0] + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] + data["issue_name"] = strings.Split(message.Text, links_data[1][1]+">: ")[1] - // Parse attachments, which contains comments. - data["repeatable_message"] = "{comment}{newline}" - data["repeatables"] = "comment" - idx := 0 - for i := range message.Attachments { - data["repeatable_item_comment" + strconv.Itoa(idx)] = message.Attachments[i].Text - idx += 1 - } - data["repeatables_count"] = strconv.Itoa(idx) + // Parse attachments, which contains comments. + data["repeatable_message"] = "{comment}{newline}" + data["repeatables"] = "comment" + idx := 0 + for i := range message.Attachments { + data["repeatable_item_comment"+strconv.Itoa(idx)] = message.Attachments[i].Text + idx += 1 + } + data["repeatables_count"] = strconv.Itoa(idx) - return data + return data } func (gp GitlabParser) parseIssueOpened(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} opened an issue: {issue}{newline}{issue_text}" + data := make(map[string]string) + data["message"] = "[{project}] {user} opened an issue: {issue}{newline}{issue_text}" - links_data := gp.cutLinks(message.Text) - data["project"] = links_data[0][1] - data["project_url"] = links_data[0][0] - data["user"] = strings.Split(message.Text, "Issue opened by ")[1] - if len(message.Attachments) > 0 { - data["issue"] = message.Attachments[0].Title + links_data := gp.cutLinks(message.Text) + data["project"] = links_data[0][1] + data["project_url"] = links_data[0][0] + data["user"] = strings.Split(message.Text, "Issue opened by ")[1] + if len(message.Attachments) > 0 { + data["issue"] = message.Attachments[0].Title - // Generate valid issue URL. - issue_number_raw := strings.Fields(message.Attachments[0].Title)[0] - // Remove "#" and compose URL. - issue_number := strings.Replace(issue_number_raw, "#", "", 1) - data["issue_url"] = links_data[0][0] + "/issues/" + issue_number - data["issue_text"] = message.Attachments[0].Text - } else { - // Issue was reopened. - data["message"] = strings.Replace(data["message"], ": {issue}{newline}{issue_text}", "", 1) - data["message"] = strings.Replace(data["message"], "opened", "reopened", 1) - } + // Generate valid issue URL. + issue_number_raw := strings.Fields(message.Attachments[0].Title)[0] + // Remove "#" and compose URL. + issue_number := strings.Replace(issue_number_raw, "#", "", 1) + data["issue_url"] = links_data[0][0] + "/issues/" + issue_number + data["issue_text"] = message.Attachments[0].Text + } else { + // Issue was reopened. + data["message"] = strings.Replace(data["message"], ": {issue}{newline}{issue_text}", "", 1) + data["message"] = strings.Replace(data["message"], "opened", "reopened", 1) + } - return data + return data } func (gp GitlabParser) parseMergeRequestClosed(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} closed merge request: {merge_request}" - data["user"] = strings.Split(message.Text, " closed <")[0] + data := make(map[string]string) + data["message"] = "[{project}] {user} closed merge request: {merge_request}" + data["user"] = strings.Split(message.Text, " closed <")[0] - links_data := gp.cutLinks(message.Text) - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] - data["merge_request"] = links_data[0][1] - data["merge_request_url"] = links_data[0][0] + links_data := gp.cutLinks(message.Text) + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] + data["merge_request"] = links_data[0][1] + data["merge_request_url"] = links_data[0][0] - return data + return data } func (gp GitlabParser) parseMergeRequestComment(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} {commented_on_merge_request} ({merge_request_name}):{newline}{repeatables}" - data["user"] = strings.TrimSpace(strings.Split(message.Text, " <")[0]) + data := make(map[string]string) + data["message"] = "[{project}] {user} {commented_on_merge_request} ({merge_request_name}):{newline}{repeatables}" + data["user"] = strings.TrimSpace(strings.Split(message.Text, " <")[0]) - // Parse links in main message. - links_data := gp.cutLinks(message.Text) - data["commented_on_merge_request"] = links_data[0][1] - data["commented_on_merge_request_url"] = links_data[0][0] - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] - data["merge_request_name"] = strings.Split(message.Text, links_data[1][1] + ">: ")[1] + // Parse links in main message. + links_data := gp.cutLinks(message.Text) + data["commented_on_merge_request"] = links_data[0][1] + data["commented_on_merge_request_url"] = links_data[0][0] + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] + data["merge_request_name"] = strings.Split(message.Text, links_data[1][1]+">: ")[1] - // Parse attachments, which contains comments. - data["repeatable_message"] = "{comment}{newline}" - data["repeatables"] = "comment" - idx := 0 - for i := range message.Attachments { - data["repeatable_item_comment" + strconv.Itoa(idx)] = message.Attachments[i].Text - idx += 1 - } - data["repeatables_count"] = strconv.Itoa(idx) + // Parse attachments, which contains comments. + data["repeatable_message"] = "{comment}{newline}" + data["repeatables"] = "comment" + idx := 0 + for i := range message.Attachments { + data["repeatable_item_comment"+strconv.Itoa(idx)] = message.Attachments[i].Text + idx += 1 + } + data["repeatables_count"] = strconv.Itoa(idx) - return data + return data } func (gp GitlabParser) parseMergeRequestMerged(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} merged {merge_request}" - data["user"] = strings.Split(message.Text, " merged <")[0] + data := make(map[string]string) + data["message"] = "[{project}] {user} merged {merge_request}" + data["user"] = strings.Split(message.Text, " merged <")[0] - links_data := gp.cutLinks(message.Text) - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] - data["merge_request"] = links_data[0][1] - data["merge_request_url"] = links_data[0][0] + links_data := gp.cutLinks(message.Text) + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] + data["merge_request"] = links_data[0][1] + data["merge_request_url"] = links_data[0][0] - return data + return data } func (gp GitlabParser) parseMergeRequestOpened(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} opened new merge request: {merge_request}" - data["user"] = strings.Split(message.Text, " opened <")[0] + data := make(map[string]string) + data["message"] = "[{project}] {user} opened new merge request: {merge_request}" + data["user"] = strings.Split(message.Text, " opened <")[0] - links_data := gp.cutLinks(message.Text) - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] - data["merge_request"] = links_data[0][1] - data["merge_request_url"] = links_data[0][0] + links_data := gp.cutLinks(message.Text) + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] + data["merge_request"] = links_data[0][1] + data["merge_request_url"] = links_data[0][0] - return data + return data } func (gp GitlabParser) parsePipelineMessage(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] Pipeline {pipeline_number} of branch {branch} by {user} {status} in {time}" + data := make(map[string]string) + data["message"] = "[{project}] Pipeline {pipeline_number} of branch {branch} by {user} {status} in {time}" - var status string = "" - if strings.Contains(message.Attachments[0].Text, "failed") { - status = "failed" - } else if strings.Contains(message.Attachments[0].Text, "passed") { - status = "passed" - } + var status string = "" + if strings.Contains(message.Attachments[0].Text, "failed") { + status = "failed" + } else if strings.Contains(message.Attachments[0].Text, "passed") { + status = "passed" + } - data["status"] = status + data["status"] = status - user := strings.Split(message.Attachments[0].Text, "> by ")[1] - data["user"] = strings.Split(user, " " + status + " in")[0] - data["time"] = strings.Split(message.Attachments[0].Text, " " + status + " in ")[1] + user := strings.Split(message.Attachments[0].Text, "> by ")[1] + data["user"] = strings.Split(user, " "+status+" in")[0] + data["time"] = strings.Split(message.Attachments[0].Text, " "+status+" in ")[1] - links_data := gp.cutLinks(message.Attachments[0].Text) - data["project"] = links_data[0][1] - data["project_url"] = links_data[0][0] - data["pipeline_number"] = links_data[1][1] - data["pipeline_number_url"] = links_data[1][0] - data["branch"] = links_data[2][1] - data["branch_url"] = links_data[2][0] + links_data := gp.cutLinks(message.Attachments[0].Text) + data["project"] = links_data[0][1] + data["project_url"] = links_data[0][0] + data["pipeline_number"] = links_data[1][1] + data["pipeline_number_url"] = links_data[1][0] + data["branch"] = links_data[2][1] + data["branch_url"] = links_data[2][0] - return data + return data } func (gp GitlabParser) parsePushedNewBranch(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} pushed new branch: {branch}" + data := make(map[string]string) + data["message"] = "[{project}] {user} pushed new branch: {branch}" - links_data := gp.cutLinks(message.Text) - data["branch"] = links_data[0][1] - data["branch_url"] = links_data[0][0] - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] + links_data := gp.cutLinks(message.Text) + data["branch"] = links_data[0][1] + data["branch_url"] = links_data[0][0] + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] - data["user"] = strings.Split(message.Text, " pushed new branch")[0] + data["user"] = strings.Split(message.Text, " pushed new branch")[0] - return data + return data } func (gp GitlabParser) parseTagPush(message slackmessage.SlackMessage) map[string]string { - data := make(map[string]string) - data["message"] = "[{project}] {user} pushed new tag: {tag}" - data["user"] = strings.Split(message.Text, " pushed new tag")[0] + data := make(map[string]string) + data["message"] = "[{project}] {user} pushed new tag: {tag}" + data["user"] = strings.Split(message.Text, " pushed new tag")[0] - links_data := gp.cutLinks(message.Text) - data["tag"] = links_data[0][1] - data["tag_url"] = links_data[0][0] - data["project"] = links_data[1][1] - data["project_url"] = links_data[1][0] + links_data := gp.cutLinks(message.Text) + data["tag"] = links_data[0][1] + data["tag_url"] = links_data[0][0] + data["project"] = links_data[1][1] + data["project_url"] = links_data[1][0] - return data + return data } func (gp GitlabParser) parseAttachments(message slackmessage.SlackMessage) map[string]string { - c.Log.Debugln("Parsing attachments...") + c.Log.Debugln("Parsing attachments...") - var data map[string]string - if strings.Contains(message.Attachments[0].Text, "Pipeline") && strings.Contains(message.Attachments[0].Text, "of branch") { - data = gp.parsePipelineMessage(message) - } + var data map[string]string + if strings.Contains(message.Attachments[0].Text, "Pipeline") && strings.Contains(message.Attachments[0].Text, "of branch") { + data = gp.parsePipelineMessage(message) + } - return data + return data } func (gp GitlabParser) ParseMessage(message slackmessage.SlackMessage) map[string]string { - c.Log.Debugln("Parsing Gitlab message...") + c.Log.Debugln("Parsing Gitlab message...") - var data map[string]string + var data map[string]string - if len(message.Attachments) > 0 && message.Text == "" { - return gp.parseAttachments(message) - } + if len(message.Attachments) > 0 && message.Text == "" { + return gp.parseAttachments(message) + } - if strings.Contains(message.Text, "pushed to") { - data = gp.parseCommit(message) - } else if strings.Contains(message.Text, "commented on issue") { - data = gp.parseIssueComment(message) - } else if strings.Contains(message.Text, "closed by ") { - data = gp.parseIssueClosed(message.Text) - } else if strings.Contains(message.Text, "Issue opened by ") { - data = gp.parseIssueOpened(message) - } else if strings.Contains(message.Text, "merge_requests") && strings.Contains(message.Text, " closed <") { - data = gp.parseMergeRequestClosed(message) - } else if strings.Contains(message.Text, "commented on merge request") { - data = gp.parseMergeRequestComment(message) - } else if strings.Contains(message.Text, "merge_requests") && strings.Contains(message.Text, " merged <") { - data = gp.parseMergeRequestMerged(message) - } else if strings.Contains(message.Text, "merge_requests") && strings.Contains(message.Text, " opened <") { - data = gp.parseMergeRequestOpened(message) - } else if strings.Contains(message.Text, "pushed new branch") { - data = gp.parsePushedNewBranch(message) - } else if strings.Contains(message.Text, " pushed new tag ") { - data = gp.parseTagPush(message) - } else { - return map[string]string{"message": "Unknown message type:
" + fmt.Sprintf("%+v", message)} - } + if strings.Contains(message.Text, "pushed to") { + data = gp.parseCommit(message) + } else if strings.Contains(message.Text, "commented on issue") { + data = gp.parseIssueComment(message) + } else if strings.Contains(message.Text, "closed by ") { + data = gp.parseIssueClosed(message.Text) + } else if strings.Contains(message.Text, "Issue opened by ") { + data = gp.parseIssueOpened(message) + } else if strings.Contains(message.Text, "merge_requests") && strings.Contains(message.Text, " closed <") { + data = gp.parseMergeRequestClosed(message) + } else if strings.Contains(message.Text, "commented on merge request") { + data = gp.parseMergeRequestComment(message) + } else if strings.Contains(message.Text, "merge_requests") && strings.Contains(message.Text, " merged <") { + data = gp.parseMergeRequestMerged(message) + } else if strings.Contains(message.Text, "merge_requests") && strings.Contains(message.Text, " opened <") { + data = gp.parseMergeRequestOpened(message) + } else if strings.Contains(message.Text, "pushed new branch") { + data = gp.parsePushedNewBranch(message) + } else if strings.Contains(message.Text, " pushed new tag ") { + data = gp.parseTagPush(message) + } else { + return map[string]string{"message": "Unknown message type:
" + fmt.Sprintf("%+v", message)} + } - c.Log.Debugln("Message:", fmt.Sprintf("%+v", data)) + c.Log.Debugln("Message:", fmt.Sprintf("%+v", data)) - return data + return data }