Skip to content

Commit

Permalink
feat:MR 事件触发器支持 WIP TencentBlueKing#10683
Browse files Browse the repository at this point in the history
  • Loading branch information
hejieehe committed Jul 31, 2024
1 parent 4b3d87b commit 7da3458
Show file tree
Hide file tree
Showing 13 changed files with 80 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -160,7 +160,8 @@ class TriggerTransfer @Autowired(required = false) constructor(
repositoryName = triggerOn.repoName,
enableThirdFilter = !mr.custom?.url.isNullOrBlank(),
thirdUrl = mr.custom?.url,
thirdSecretToken = mr.custom?.credentials
thirdSecretToken = mr.custom?.credentials,
skipWip = mr.skipWip
).checkTriggerElementEnable(mr.enable).apply {
version = "2.*"
}
Expand Down Expand Up @@ -296,7 +297,8 @@ class TriggerTransfer @Autowired(required = false) constructor(
custom = if (git.enableThirdFilter == true) CustomFilter(
url = git.thirdUrl,
credentials = git.thirdSecretToken
) else null
) else null,
skipWip = git.skipWip
)
CodeEventType.MERGE_REQUEST_ACCEPT ->
throw PipelineTransferException(
Expand Down Expand Up @@ -463,7 +465,8 @@ class TriggerTransfer @Autowired(required = false) constructor(
),
eventType = CodeEventType.MERGE_REQUEST,
repositoryType = repositoryType,
repositoryName = triggerOn.repoName
repositoryName = triggerOn.repoName,
skipWip = mr.skipWip
)
)
).checkTriggerElementEnable(mr.enable).apply {
Expand Down Expand Up @@ -598,7 +601,8 @@ class TriggerTransfer @Autowired(required = false) constructor(
includeMrAction = mr.action,
eventType = CodeEventType.PULL_REQUEST,
repositoryType = repositoryType,
repositoryName = triggerOn.repoName
repositoryName = triggerOn.repoName,
skipWip = mr.skipWip
).checkTriggerElementEnable(mr.enable)
)
}
Expand Down Expand Up @@ -824,7 +828,8 @@ class TriggerTransfer @Autowired(required = false) constructor(
),
eventType = CodeEventType.MERGE_REQUEST,
repositoryType = repositoryType,
repositoryName = triggerOn.repoName
repositoryName = triggerOn.repoName,
skipWip = mr.skipWip
).checkTriggerElementEnable(mr.enable).apply {
version = "2.*"
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,7 +100,9 @@ data class WebHookTriggerElementChanger(
@get:Schema(title = "第三方应用鉴权token")
val thirdSecretToken: String? = null,
@get:Schema(title = "是否启用插件")
val enable: Boolean
val enable: Boolean,
@get:Schema(title = "跳过WIP")
val skipWip: Boolean? = false
) {
constructor(data: CodeGitWebHookTriggerElement) : this(
name = data.name,
Expand Down Expand Up @@ -133,7 +135,8 @@ data class WebHookTriggerElementChanger(
enableThirdFilter = data.enableThirdFilter,
thirdUrl = data.thirdUrl,
thirdSecretToken = data.thirdSecretToken,
enable = data.isElementEnable()
enable = data.isElementEnable(),
skipWip = data.skipWip
)

constructor(data: CodeTGitWebHookTriggerElement) : this(
Expand Down Expand Up @@ -165,7 +168,8 @@ data class WebHookTriggerElementChanger(
includeMrAction = data.data.input.includeMrAction,
includePushAction = data.data.input.includePushAction,
enableThirdFilter = data.data.input.enableThirdFilter,
enable = data.isElementEnable()
enable = data.isElementEnable(),
skipWip = data.data.input.skipWip
)

constructor(data: CodeGithubWebHookTriggerElement) : this(
Expand Down Expand Up @@ -196,7 +200,8 @@ data class WebHookTriggerElementChanger(
includeMrAction = data.includeMrAction,
includePushAction = data.includePushAction,
enableThirdFilter = data.enableThirdFilter,
enable = data.isElementEnable()
enable = data.isElementEnable(),
skipWip = data.skipWip
)

constructor(data: CodeSVNWebHookTriggerElement) : this(
Expand Down Expand Up @@ -244,6 +249,7 @@ data class WebHookTriggerElementChanger(
includeSourceBranchName = data.includeSourceBranchName,
includeMrAction = data.includeMrAction,
includePushAction = data.includePushAction,
enable = data.isElementEnable()
enable = data.isElementEnable(),
skipWip = data.skipWip
)
}
Original file line number Diff line number Diff line change
Expand Up @@ -88,5 +88,9 @@ data class MrRule(

@get:Schema(title = "custom-filter")
@JsonProperty("custom-filter")
val custom: CustomFilter? = null
val custom: CustomFilter? = null,

@JsonProperty("skip-wip")
@get:Schema(title = "skip-wip")
var skipWip: Boolean? = null
)
Original file line number Diff line number Diff line change
Expand Up @@ -102,7 +102,9 @@ data class CodeGitWebHookTriggerElement(
@get:Schema(title = "第三方应用地址")
val thirdUrl: String? = null,
@get:Schema(title = "第三方应用鉴权token")
val thirdSecretToken: String? = null
val thirdSecretToken: String? = null,
@get:Schema(title = "跳过WIP")
val skipWip: Boolean? = false
) : WebHookTriggerElement(name, id, status) {
companion object {
const val classType = "codeGitWebHookTrigger"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -94,7 +94,9 @@ data class CodeGithubWebHookTriggerElement(
@get:Schema(title = "issue事件action")
val includeIssueAction: List<String>? = null,
@get:Schema(title = "pull request事件action")
val includeMrAction: List<String>? = listOf(MERGE_ACTION_OPEN, MERGE_ACTION_REOPEN, MERGE_ACTION_PUSH_UPDATE)
val includeMrAction: List<String>? = listOf(MERGE_ACTION_OPEN, MERGE_ACTION_REOPEN, MERGE_ACTION_PUSH_UPDATE),
@get:Schema(title = "跳过WIP")
val skipWip: Boolean? = false
) : WebHookTriggerElement(name, id, status) {
companion object {
const val classType = "codeGithubWebHookTrigger"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -83,7 +83,9 @@ data class CodeGitlabWebHookTriggerElement(
@get:Schema(title = "push事件action")
val includePushAction: List<String>? = null,
@get:Schema(title = "mr事件action")
val includeMrAction: List<String>? = null
val includeMrAction: List<String>? = null,
@get:Schema(title = "跳过WIP")
val skipWip: Boolean? = false
) : WebHookTriggerElement(name, id, status) {
companion object {
const val classType = "codeGitlabWebHookTrigger"
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -215,5 +215,7 @@ data class CodeTGitWebHookTriggerInput(
@get:Schema(title = "push事件action")
val includePushAction: List<String>? = null,
@get:Schema(title = "是否启用第三方过滤")
val enableThirdFilter: Boolean? = false
val enableThirdFilter: Boolean? = false,
@get:Schema(title = "跳过WIP")
val skipWip: Boolean? = false
)
Original file line number Diff line number Diff line change
Expand Up @@ -73,5 +73,7 @@ data class WebHookParams(
var thirdUrl: String? = null,
var thirdSecretToken: String? = null,
// 插件版本
var version: String? = null
var version: String? = null,
// 跳过WIP
var skipWip: Boolean? = false
)
Original file line number Diff line number Diff line change
Expand Up @@ -27,16 +27,27 @@

package com.tencent.devops.common.webhook.service.code.filter

class SkipCiFilter(
import org.slf4j.LoggerFactory

class KeywordSkipFilter(
private val pipelineId: String,
private val keyWord: List<String>,
private val enable: Boolean? = true,
private val triggerOnMessage: String?
) : WebhookFilter {

companion object {
private const val SKIP_CI = "[skip ci]"
private val logger = LoggerFactory.getLogger(KeywordSkipFilter::class.java)
val KEYWORD_SKIP_CI = listOf("[skip ci]")
val KEYWORD_SKIP_WIP = listOf("[WIP]", "WIP")
}

override fun doFilter(response: WebhookFilterResponse): Boolean {
return triggerOnMessage?.contains(SKIP_CI) != true
logger.info("$pipelineId|triggerOnMessage:$triggerOnMessage|skipWord:$keyWord|enable:$enable")
return when{
enable == false -> true
keyWord.none { triggerOnMessage?.contains(it) == true } -> false
else -> true
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -84,6 +84,7 @@ import com.tencent.devops.common.webhook.pojo.code.WebHookParams
import com.tencent.devops.common.webhook.pojo.code.github.GithubPullRequestEvent
import com.tencent.devops.common.webhook.service.code.filter.BranchFilter
import com.tencent.devops.common.webhook.service.code.filter.ContainsFilter
import com.tencent.devops.common.webhook.service.code.filter.KeywordSkipFilter
import com.tencent.devops.common.webhook.service.code.filter.UserFilter
import com.tencent.devops.common.webhook.service.code.filter.WebhookFilter
import com.tencent.devops.common.webhook.service.code.handler.GitHookTriggerHandler
Expand Down Expand Up @@ -182,6 +183,12 @@ class GithubPrTriggerHandler : GitHookTriggerHandler<GithubPullRequestEvent> {
webHookParams: WebHookParams
): List<WebhookFilter> {
with(webHookParams) {
val wipFilter = KeywordSkipFilter(
pipelineId = pipelineId,
enable = skipWip,
keyWord = KeywordSkipFilter.KEYWORD_SKIP_WIP,
triggerOnMessage = getMessage(event)
)
val userId = getUsername(event)
val actionFilter = ContainsFilter(
pipelineId = pipelineId,
Expand Down Expand Up @@ -222,7 +229,7 @@ class GithubPrTriggerHandler : GitHookTriggerHandler<GithubPullRequestEvent> {
params = listOf(targetBranch)
).toJsonStr()
)
return listOf(actionFilter, userFilter, targetBranchFilter)
return listOf(wipFilter, actionFilter, userFilter, targetBranchFilter)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,9 @@ import com.tencent.devops.common.webhook.service.code.EventCacheService
import com.tencent.devops.common.webhook.service.code.filter.BranchFilter
import com.tencent.devops.common.webhook.service.code.filter.ContainsFilter
import com.tencent.devops.common.webhook.service.code.filter.PathFilterFactory
import com.tencent.devops.common.webhook.service.code.filter.SkipCiFilter
import com.tencent.devops.common.webhook.service.code.filter.KeywordSkipFilter
import com.tencent.devops.common.webhook.service.code.filter.KeywordSkipFilter.Companion.KEYWORD_SKIP_CI
import com.tencent.devops.common.webhook.service.code.filter.KeywordSkipFilter.Companion.KEYWORD_SKIP_WIP
import com.tencent.devops.common.webhook.service.code.filter.ThirdFilter
import com.tencent.devops.common.webhook.service.code.filter.UserFilter
import com.tencent.devops.common.webhook.service.code.filter.WebhookFilter
Expand Down Expand Up @@ -192,6 +194,12 @@ class TGitMrTriggerHandler(
webHookParams: WebHookParams
): List<WebhookFilter> {
with(webHookParams) {
val wipFilter = KeywordSkipFilter(
pipelineId = pipelineId,
enable = skipWip,
keyWord = KEYWORD_SKIP_WIP,
triggerOnMessage = getMessage(event)
)
val userId = getUsername(event)
val userFilter = UserFilter(
pipelineId = pipelineId,
Expand Down Expand Up @@ -237,8 +245,9 @@ class TGitMrTriggerHandler(
params = listOf(sourceBranch)
).toJsonStr()
)
val skipCiFilter = SkipCiFilter(
val skipCiFilter = KeywordSkipFilter(
pipelineId = pipelineId,
keyWord = KEYWORD_SKIP_CI,
triggerOnMessage = event.object_attributes.last_commit.message
)
val actionFilter = ContainsFilter(
Expand Down Expand Up @@ -309,7 +318,7 @@ class TGitMrTriggerHandler(
callbackCircuitBreakerRegistry = callbackCircuitBreakerRegistry
)
return listOf(
userFilter, targetBranchFilter,
wipFilter, userFilter, targetBranchFilter,
sourceBranchFilter, skipCiFilter, pathFilter,
commitMessageFilter, actionFilter, thirdFilter
)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,8 @@ import com.tencent.devops.common.webhook.service.code.GitScmService
import com.tencent.devops.common.webhook.service.code.filter.BranchFilter
import com.tencent.devops.common.webhook.service.code.filter.ContainsFilter
import com.tencent.devops.common.webhook.service.code.filter.PathFilterFactory
import com.tencent.devops.common.webhook.service.code.filter.SkipCiFilter
import com.tencent.devops.common.webhook.service.code.filter.KeywordSkipFilter
import com.tencent.devops.common.webhook.service.code.filter.KeywordSkipFilter.Companion.KEYWORD_SKIP_CI
import com.tencent.devops.common.webhook.service.code.filter.ThirdFilter
import com.tencent.devops.common.webhook.service.code.filter.UserFilter
import com.tencent.devops.common.webhook.service.code.filter.WebhookFilter
Expand Down Expand Up @@ -216,8 +217,9 @@ class TGitPushTriggerHandler(
params = listOf(triggerOnBranchName)
).toJsonStr()
)
val skipCiFilter = SkipCiFilter(
val skipCiFilter = KeywordSkipFilter(
pipelineId = pipelineId,
keyWord = KEYWORD_SKIP_CI,
triggerOnMessage = event.commits?.get(0)?.message ?: ""
)
val commits = event.commits
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -121,6 +121,7 @@ class GitWebhookElementParams : ScmWebhookElementParams<CodeGitWebHookTriggerEle
params.enableThirdFilter = element.enableThirdFilter
params.thirdUrl = EnvUtils.parseEnv(element.thirdUrl ?: "", variables)
params.thirdSecretToken = EnvUtils.parseEnv(element.thirdSecretToken ?: "", variables)
params.skipWip = element.skipWip
return params
}

Expand Down

0 comments on commit 7da3458

Please sign in to comment.