From 8d458a0a725cced4b963486d7f02f19d51447d55 Mon Sep 17 00:00:00 2001 From: zenggang Date: Tue, 23 Nov 2021 11:08:15 +0000 Subject: [PATCH] * Finish task#44404 --- module/action/config.php | 1 + module/action/lang/en.php | 1 + module/action/lang/zh-cn.php | 3 +++ module/ci/model.php | 8 ++++++++ module/compile/model.php | 4 ++-- module/mail/model.php | 27 +++++++++++++++++++++++++-- module/message/config.php | 3 +++ module/message/lang/en.php | 2 ++ module/message/lang/zh-cn.php | 2 ++ module/message/model.php | 1 + module/mr/lang/en.php | 7 +++++-- module/mr/lang/zh-cn.php | 7 +++++-- module/mr/model.php | 16 ++++++++++++++-- 13 files changed, 72 insertions(+), 10 deletions(-) diff --git a/module/action/config.php b/module/action/config.php index 58d0f4a69c..77e42915ac 100755 --- a/module/action/config.php +++ b/module/action/config.php @@ -32,6 +32,7 @@ $config->action->objectNameFields['budget'] = 'name'; $config->action->objectNameFields['job'] = 'name'; $config->action->objectNameFields['team'] = 'name'; $config->action->objectNameFields['pipeline'] = 'name'; +$config->action->objectNameFields['mr'] = 'title'; $config->action->commonImgSize = 870; diff --git a/module/action/lang/en.php b/module/action/lang/en.php index 28641f6e8d..c40d71e681 100755 --- a/module/action/lang/en.php +++ b/module/action/lang/en.php @@ -114,6 +114,7 @@ $lang->action->objectTypes['whitelist'] = 'Whitelist'; $lang->action->objectTypes['pipeline'] = 'GitLab'; $lang->action->objectTypes['gitlab'] = 'GitLab'; $lang->action->objectTypes['jenkins'] = 'Jenkins'; +$lang->action->objectTypes['mr'] = 'Merge Request'; /* Used to describe operation history. */ $lang->action->desc = new stdclass(); diff --git a/module/action/lang/zh-cn.php b/module/action/lang/zh-cn.php index a0a170f5a0..aad7e30549 100755 --- a/module/action/lang/zh-cn.php +++ b/module/action/lang/zh-cn.php @@ -114,6 +114,7 @@ $lang->action->objectTypes['whitelist'] = '白名单'; $lang->action->objectTypes['pipeline'] = 'GitLab'; $lang->action->objectTypes['gitlab'] = 'GitLab'; $lang->action->objectTypes['jenkins'] = 'Jenkins'; +$lang->action->objectTypes['mr'] = '合并请求'; /* 用来描述操作历史记录。*/ $lang->action->desc = new stdclass(); @@ -281,6 +282,8 @@ $lang->action->label->commitsummary = '提交培训总结'; $lang->action->label->updatetrainee = '更新培训人员'; $lang->action->label->createmr = 'MR关联了'; $lang->action->label->mergedmr = 'MR合并了'; +$lang->action->label->compilepass = '构建成功'; +$lang->action->label->compilefail = '构建失败'; /* 动态信息按照对象分组 */ $lang->action->dynamicAction = new stdclass(); diff --git a/module/ci/model.php b/module/ci/model.php index d37d81d82e..0bf3b7ca57 100644 --- a/module/ci/model.php +++ b/module/ci/model.php @@ -157,6 +157,14 @@ class ciModel extends model $this->dao->update(TABLE_COMPILE)->data($data)->where('id')->eq($compile->id)->exec(); $this->dao->update(TABLE_JOB)->set('lastExec')->eq($now)->set('lastStatus')->eq($pipeline->status)->where('id')->eq($compile->job)->exec(); + + /* Send mr message by compile status. */ + $relateMR = $this->dao->select('*')->from(TABLE_MR)->where('compileID')->eq($compile->id)->fetch(); + if($relateMR) + { + if($data->status == 'success') $this->loadModel('action')->create('mr', $relateMR->id, 'compilePass'); + if($data->status == 'failed') $this->loadModel('action')->create('mr', $relateMR->id, 'compileFail'); + } } /** diff --git a/module/compile/model.php b/module/compile/model.php index 6336d7e8a6..07738955a0 100644 --- a/module/compile/model.php +++ b/module/compile/model.php @@ -149,7 +149,7 @@ class compileModel extends model */ public function exec($compile) { - $job = $this->dao->select('t1.id,t1.name,t1.repo,t1.engine,t1.pipeline,t2.name as jenkinsName,t2.url,t2.account,t2.token,t2.password') + $job = $this->dao->select('t1.id,t1.name,t1.repo,t1.engine,t1.pipeline,t2.name as jenkinsName,t2.url,t2.account,t2.token,t2.password,t1.triggerType,t1.customParam,t1.server') ->from(TABLE_JOB)->alias('t1') ->leftJoin(TABLE_PIPELINE)->alias('t2')->on('t1.server=t2.id') ->where('t1.id')->eq($compile->job) @@ -162,7 +162,7 @@ class compileModel extends model if($job->triggerType == 'tag') { - $lastTag = $this->loadModel('job')->getLastTagByRepo($repo); + $lastTag = $this->loadModel('job')->getLastTagByRepo($repo, $job); if($lastTag) { $job->lastTag = $lastTag; diff --git a/module/mail/model.php b/module/mail/model.php index 67ef56e317..5c1421c697 100644 --- a/module/mail/model.php +++ b/module/mail/model.php @@ -741,14 +741,37 @@ class mailModel extends model } else { - $sendUsers = $this->{$objectType}->getToAndCcList($object); + $sendUsers = $this->{$objectType}->getToAndCcList($object); } if(!$sendUsers) return; list($toList, $ccList) = $sendUsers; /* Send it. */ - $this->send($toList, $subject, $mailContent, $ccList); + if($objectType == 'mr') + { + $MRLink = common::getSysURL() . helper::createLink('mr', 'view', "id={$object->id}"); + if($action->action == 'compilepass') + { + $mailContent = sprintf($this->lang->mr->toCreatedMessage, $MRLink, $title); + $this->send($toList, $subject, $mailContent); + + $mailContent = sprintf($this->lang->mr->toReviewerMessage, $MRLink, $title); + $this->send($ccList, $subject, $mailContent); + + /* Create a todo item for this MR. */ + $this->loadModel('mr')->apiCreateMRTodo($object->gitlabID, $object->targetProject, $object->mriid); + } + elseif($action->action == 'compilefail') + { + $mailContent = sprintf($this->lang->mr->failMessage, $MRLink, $title); + $this->send($toList, $subject, $mailContent, $ccList); + } + } + else + { + $this->send($toList, $subject, $mailContent, $ccList); + } if($this->isError()) error_log(join("\n", $this->getError())); } diff --git a/module/message/config.php b/module/message/config.php index 6cd71ac977..8a43c85f6b 100644 --- a/module/message/config.php +++ b/module/message/config.php @@ -11,6 +11,7 @@ $config->message->objectTypes['testtask'] = array('opened', 'edited', 'starte $config->message->objectTypes['todo'] = array('opened', 'edited'); $config->message->objectTypes['doc'] = array('created', 'edited'); $config->message->objectTypes['release'] = array('opened', 'edited'); +$config->message->objectTypes['mr'] = array('compilepass', 'compilefail'); $config->message->available = array(); $config->message->available['mail']['story'] = $config->message->objectTypes['story']; @@ -19,6 +20,7 @@ $config->message->available['mail']['bug'] = $config->message->objectTypes[ $config->message->available['mail']['testtask'] = array('opened', 'edited', 'closed'); $config->message->available['mail']['doc'] = $config->message->objectTypes['doc']; $config->message->available['mail']['release'] = $config->message->objectTypes['release']; +$config->message->available['mail']['mr'] = $config->message->objectTypes['mr']; $config->message->available['webhook'] = $config->message->objectTypes; @@ -29,6 +31,7 @@ $config->message->available['message']['testtask'] = $config->message->objectTyp $config->message->available['message']['todo'] = $config->message->objectTypes['todo']; $config->message->available['message']['doc'] = $config->message->objectTypes['doc']; $config->message->available['message']['release'] = $config->message->objectTypes['release']; +$config->message->available['message']['mr'] = $config->message->objectTypes['mr']; $config->message->typeLink = array(); $config->message->typeLink['mail'] = 'mail|index'; diff --git a/module/message/lang/en.php b/module/message/lang/en.php index f3d02119da..60a7358700 100644 --- a/module/message/lang/en.php +++ b/module/message/lang/en.php @@ -41,3 +41,5 @@ $lang->message->label->canceled = 'cancel'; $lang->message->label->restarted = 'continue'; $lang->message->label->blocked = 'block'; $lang->message->label->bugconfirmed = 'confirm'; +$lang->message->label->compilepass = 'compile pass'; +$lang->message->label->compilefail = 'compile fail'; diff --git a/module/message/lang/zh-cn.php b/module/message/lang/zh-cn.php index 3edad2389b..2d04f53a59 100644 --- a/module/message/lang/zh-cn.php +++ b/module/message/lang/zh-cn.php @@ -41,3 +41,5 @@ $lang->message->label->canceled = '取消'; $lang->message->label->restarted = '继续'; $lang->message->label->blocked = '阻塞'; $lang->message->label->bugconfirmed = '确认'; +$lang->message->label->compilepass = '构建通过'; +$lang->message->label->compilefail = '构建失败'; diff --git a/module/message/model.php b/module/message/model.php index cdb2e3a35e..4aed08c917 100644 --- a/module/message/model.php +++ b/module/message/model.php @@ -163,6 +163,7 @@ class messageModel extends model if(empty($toList) and $objectType == 'todo') $toList = $object->account; if(empty($toList) and $objectType == 'testtask') $toList = $object->owner; if(empty($toList) and $objectType == 'meeting') $toList = $object->host . $object->participant; + if(empty($toList) and $objectType == 'mr') $toList = $object->createdBy . ',' . $object->assignee; if(empty($toList) and $objectType == 'release') { /* Get notifiy persons. */ diff --git a/module/mr/lang/en.php b/module/mr/lang/en.php index 86a7eb1a41..181966e383 100644 --- a/module/mr/lang/en.php +++ b/module/mr/lang/en.php @@ -71,8 +71,11 @@ $lang->mr->sourceBranch = 'Source branch'; $lang->mr->targetProject = 'Target project'; $lang->mr->targetBranch = 'Target branch'; -$lang->mr->usersTips = 'Tip: If you cannot choose the assignee, please go to the GitLab page to bind the user first.'; -$lang->mr->notFound = "Merge Request does not exist!"; +$lang->mr->usersTips = 'Tip: If you cannot choose the assignee, please go to the GitLab page to bind the user first.'; +$lang->mr->notFound = "Merge Request does not exist!"; +$lang->mr->toCreatedMessage = "The merge request you submitted:%s, the build task succeeded."; +$lang->mr->toReviewerMessage = "有一个合并请求:%s 待审核。"; +$lang->mr->failMessage = "您提交的合并请求:%s 构建任务执行失败,查看执行结果。"; $lang->mr->apiError = new stdclass; $lang->mr->apiError->createMR = "Failed to create a merge request through API. Reason: %s"; diff --git a/module/mr/lang/zh-cn.php b/module/mr/lang/zh-cn.php index 81d6a1e1b1..48a58054bb 100644 --- a/module/mr/lang/zh-cn.php +++ b/module/mr/lang/zh-cn.php @@ -76,8 +76,11 @@ $lang->mr->targetBranch = '目标分支'; $lang->mr->noCompileJob = '没有构建任务'; $lang->mr->compileUnexecuted = '还未执行'; -$lang->mr->usersTips = '提示:如果无法选择指派人,请先前往GitLab页面绑定用户。'; -$lang->mr->notFound = "此{$lang->mr->common}不存在。"; +$lang->mr->usersTips = '提示:如果无法选择指派人,请先前往GitLab页面绑定用户。'; +$lang->mr->notFound = "此{$lang->mr->common}不存在。"; +$lang->mr->toCreatedMessage = "您提交的合并请求:%s 构建任务执行通过。"; +$lang->mr->toReviewerMessage = "有一个合并请求:%s 待审核。"; +$lang->mr->failMessage = "您提交的合并请求:%s 构建任务执行失败,查看执行结果。"; $lang->mr->apiError = new stdclass; $lang->mr->apiError->createMR = "通过API创建合并请求失败,失败原因:%s"; diff --git a/module/mr/model.php b/module/mr/model.php index f3af5e42ff..a791934c21 100644 --- a/module/mr/model.php +++ b/module/mr/model.php @@ -45,7 +45,7 @@ class mrModel extends model * @access public * @return array */ - public function getList($mode = 'all', $param = 'all', $orderBy = 'id_desc', $pager) + public function getList($mode = 'all', $param = 'all', $orderBy = 'id_desc', $pager = null) { $MRList = $this->dao->select('*') ->from(TABLE_MR) @@ -158,7 +158,7 @@ class mrModel extends model } /* Create a todo item for this MR. */ - $this->apiCreateMRTodo($this->post->gitlabID, $this->post->targetProject, $rawMR->iid); + if(empty($MR->jobID)) $this->apiCreateMRTodo($this->post->gitlabID, $this->post->targetProject, $rawMR->iid); $newMR = new stdclass; $newMR->mriid = $rawMR->iid; @@ -1149,6 +1149,18 @@ class mrModel extends model return $product; } + /** + * Get toList and ccList. + * + * @param object $mr + * @access public + * @return bool|array + */ + public function getToAndCcList($mr) + { + return array($mr->createdBy, $mr->assignee); + } + /** * Log merged action to links. *