Compare commits

...

4 Commits

Author SHA1 Message Date
lddsb 7c8a85bcc4 fix: release.yaml go-version error 2020-12-19 15:53:16 +08:00
lddsb ecf4f89e0a feat: use goreleaser for release tool 2020-12-19 15:39:10 +08:00
lddsb e7ef2de488 feat: support custom started at and finished at 2020-12-19 11:59:45 +08:00
lddsb acd708ada3 docs: update readme and changelog for 1.2.5 2020-12-16 17:48:07 +08:00
10 changed files with 195 additions and 35 deletions
+2 -2
View File
@@ -28,8 +28,8 @@ jobs:
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
MINOR=${VERSION%.*} MINOR=${VERSION%.*}
MAJOR=${MINOR%.*} MAJOR=${MINOR%.*}
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR}" TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR},${DOCKER_IMAGE}:latest"
TAGS="$TAGS,${GITHUB_IMAGE}:${VERSION},${GITHUB_IMAGE}:${MINOR},${GITHUB_IMAGE}:${MAJOR}" TAGS="$TAGS,${GITHUB_IMAGE}:${VERSION},${GITHUB_IMAGE}:${MINOR},${GITHUB_IMAGE}:${MAJOR},${GITHUB_IMAGE}:latest"
fi fi
echo ::set-output name=tags::${TAGS} echo ::set-output name=tags::${TAGS}
- name: Setup Docker Buildx - name: Setup Docker Buildx
+25
View File
@@ -0,0 +1,25 @@
name: Publish release
on:
push:
tags:
- "v*"
jobs:
release:
name: publish release, upload asset
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Go
uses: actions/setup-go@v2
with:
go-version: 1.15.6
- name: Run GoReleaser
uses: goreleaser/goreleaser-action@v2
with:
version: latest
args: release --rm-dist
env:
GITHUB_TOKEN: ${{ secrets.CR_PAT }}
+49
View File
@@ -0,0 +1,49 @@
env:
- GO111MODULE=on
before:
hooks:
- go mod download
builds:
- env:
- CGO_ENABLED=0
goos:
- linux
- darwin
- windows
goarch:
- 386
- amd64
- arm
- arm64
mod_timestamp: '{{ .CommitTimestamp }}'
binary: dingtalk-message
flags:
- -trimpath
ldflags:
- -s -w -X main.version={{.Version}} -X main.commit={{.Commit}} -X main.date={{ .CommitDate }} -X main.builtBy=goreleaser
checksum:
name_template: '{{ .ProjectName }}_checksums.txt'
changelog:
sort: asc
filters:
exclude:
- '^docs:'
- '^test:'
- Merge pull request
- Merge branch
- go mod tidy
archives:
- name_template: '{{ .ProjectName }}_{{ .Os }}_{{ .Arch }}{{ if .Arm }}v{{ .Arm }}{{ end }}'
replacements:
darwin: Darwin
linux: Linux
windows: Windows
386: i386
amd64: x86_64
format_overrides:
- goos: windows
format: zip
files:
- README.md
- LICENSE
- tpls/*
+9 -2
View File
@@ -2,6 +2,12 @@
## [Unreleased] ## [Unreleased]
## [1.2.5] - 2020-12-16
### Added:
* The TPL can use environment variables.
* Debug mode.
* Use GitHub Actions for automation.
## [1.2.4] - 2020-04-28 ## [1.2.4] - 2020-04-28
### Fixed: ### Fixed:
* kubernetes runner missing env, [details](https://docs.drone.io/runner/kubernetes/overview) * kubernetes runner missing env, [details](https://docs.drone.io/runner/kubernetes/overview)
@@ -20,7 +26,7 @@
## [1.2.0] - 2019-09-24 ## [1.2.0] - 2019-09-24
### Added: ### Added:
* Support custom tpl. * Support custom TPL.
## [1.1.4] - 2020-04-28 ## [1.1.4] - 2020-04-28
### Fixed: ### Fixed:
@@ -50,7 +56,8 @@
### Added: ### Added:
* Auto publish image to DockerHub. * Auto publish image to DockerHub.
[Unreleased]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.4...HEAD [Unreleased]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.5...HEAD
[1.2.5]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.4...v1.2.5
[1.2.4]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.3...v1.2.4 [1.2.4]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.3...v1.2.4
[1.2.3]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.2...v1.2.3 [1.2.3]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.2...v1.2.3
[1.2.2]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.1...v1.2.2 [1.2.2]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.1...v1.2.2
+8 -5
View File
@@ -1,5 +1,5 @@
# Drone CI DingTalk Message Plugin # Drone CI DingTalk Message Plugin
[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/lddsb/drone-dingtalk-message)](https://hub.docker.com/r/lddsb/drone-dingtalk-message) [![Go Report Card](https://goreportcard.com/badge/github.com/lddsb/drone-dingtalk-message)](https://goreportcard.com/report/github.com/lddsb/drone-dingtalk-message) [![codecov](https://codecov.io/gh/lddsb/drone-dingtalk-message/branch/master/graph/badge.svg)](https://codecov.io/gh/lddsb/drone-dingtalk-message) [![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=lddsb/drone-dingtalk-message&identifier=159822771)](https://app.dependabot.com/accounts/lddsb/repos/159822771) [![LICENSE: MIT](https://img.shields.io/github/license/lddsb/drone-dingtalk-message.svg?style=flat-square)](LICENSE) [![GitHub Actions](https://github.com/lddsb/drone-dingtalk-message/workflows/Publish%20to%20DockerHub%20and%20Github%20Package/badge.svg)](https://github.com/lddsb/drone-dingtalk-message/actions?query=workflow%3A%22Publish+to+DockerHub+and+Github+Package%22) [![Go Report Card](https://goreportcard.com/badge/github.com/lddsb/drone-dingtalk-message)](https://goreportcard.com/report/github.com/lddsb/drone-dingtalk-message) [![codecov](https://codecov.io/gh/lddsb/drone-dingtalk-message/branch/master/graph/badge.svg)](https://codecov.io/gh/lddsb/drone-dingtalk-message) [![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=lddsb/drone-dingtalk-message&identifier=159822771)](https://app.dependabot.com/accounts/lddsb/repos/159822771) [![LICENSE: MIT](https://img.shields.io/github/license/lddsb/drone-dingtalk-message.svg?style=flat-square)](LICENSE)
[中文说明](README_ZH.md) [中文说明](README_ZH.md)
@@ -28,9 +28,6 @@ pipeline:
`1.x` `1.x`
```yaml ```yaml
kind: pipeline
name: default
steps: steps:
... ...
- name: notification - name: notification
@@ -39,7 +36,7 @@ steps:
token: your-groupbot-token token: your-groupbot-token
type: markdown type: markdown
secret: your-secret-for-generate-sign secret: your-secret-for-generate-sign
debug: true
``` ```
### Plugin Parameter Reference ### Plugin Parameter Reference
@@ -59,6 +56,9 @@ String. Secret for generate sign.
String. Your custom `tpl`, it can be a local path, or a remote http link. String. Your custom `tpl`, it can be a local path, or a remote http link.
`debug`
Boolean. Debug mode.
`tips_title` `tips_title`
String. You can customize the title for the message tips, just work when message type is markdown. String. You can customize the title for the message tips, just work when message type is markdown.
@@ -185,6 +185,9 @@ $ ./drone-dingtalk-message -h
### Todo ### Todo
It's sad, just support `text`, `markdown` and `link` type now. It's sad, just support `text`, `markdown` and `link` type now.
- implement all message type - implement all message type
- i18N
- batch send
- retry(e.g., network error, etc.)
### Kubernetes Users ### Kubernetes Users
Attention kubernetes users, [CHANGELOG](CHANGELOG.md#124---2020-04-28).It's the available versions: Attention kubernetes users, [CHANGELOG](CHANGELOG.md#124---2020-04-28).It's the available versions:
+11 -6
View File
@@ -1,5 +1,6 @@
# Drone CI的钉钉群组机器人通知插件 # Drone CI的钉钉群组机器人通知插件
[![Docker Cloud Build Status](https://img.shields.io/docker/cloud/build/lddsb/drone-dingtalk-message)](https://hub.docker.com/r/lddsb/drone-dingtalk-message) [![Go Report Card](https://goreportcard.com/badge/github.com/lddsb/drone-dingtalk-message)](https://goreportcard.com/report/github.com/lddsb/drone-dingtalk-message) [![codecov](https://codecov.io/gh/lddsb/drone-dingtalk-message/branch/master/graph/badge.svg)](https://codecov.io/gh/lddsb/drone-dingtalk-message) [![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=lddsb/drone-dingtalk-message&identifier=159822771)](https://app.dependabot.com/accounts/lddsb/repos/159822771) [![LICENSE: MIT](https://img.shields.io/github/license/lddsb/drone-dingtalk-message.svg?style=flat-square)](LICENSE) [![GitHub Actions](https://github.com/lddsb/drone-dingtalk-message/workflows/Publish%20to%20DockerHub%20and%20Github%20Package/badge.svg)](https://github.com/lddsb/drone-dingtalk-message/actions?query=workflow%3A%22Publish+to+DockerHub+and+Github+Package%22) [![Go Report Card](https://goreportcard.com/badge/github.com/lddsb/drone-dingtalk-message)](https://goreportcard.com/report/github.com/lddsb/drone-dingtalk-message) [![codecov](https://codecov.io/gh/lddsb/drone-dingtalk-message/branch/master/graph/badge.svg)](https://codecov.io/gh/lddsb/drone-dingtalk-message) [![Dependabot](https://api.dependabot.com/badges/status?host=github&repo=lddsb/drone-dingtalk-message&identifier=159822771)](https://app.dependabot.com/accounts/lddsb/repos/159822771) [![LICENSE: MIT](https://img.shields.io/github/license/lddsb/drone-dingtalk-message.svg?style=flat-square)](LICENSE)
<!-- toc --> <!-- toc -->
@@ -28,9 +29,6 @@ pipeline:
`1.x` `1.x`
```yaml ```yaml
kind: pipeline
name: default
steps: steps:
... ...
- name: notification - name: notification
@@ -39,7 +37,7 @@ steps:
token: your-groupbot-token token: your-groupbot-token
type: markdown type: markdown
secret: your-secret-for-generate-sign secret: your-secret-for-generate-sign
debug: true
``` ```
### 插件参数 ### 插件参数
@@ -59,6 +57,10 @@ steps:
你可以通过该字段来自定义你的消息模版。该字段可以是一个本地路径也可以是一个远程的URL。 你可以通过该字段来自定义你的消息模版。该字段可以是一个本地路径也可以是一个远程的URL。
`debug`
通过该值可以打开`debug`模式,打印所有环境变量。
`tips_title` `tips_title`
你可以通过该字段自定义钉钉机器人的消息通知提醒标题。(注意,不是消息内容的标题,是收到钉钉机器人发的消息后,会有一个外显的标题) 你可以通过该字段自定义钉钉机器人的消息通知提醒标题。(注意,不是消息内容的标题,是收到钉钉机器人发的消息后,会有一个外显的标题)
@@ -186,10 +188,13 @@ $ ./drone-dingtalk-message -h
### 未来计划 ### 未来计划
目前仅支持 `text`, `markdown` 以及 `link` 类型的消息,建议使用`markdown`类型。 目前仅支持 `text`, `markdown` 以及 `link` 类型的消息,建议使用`markdown`类型。
- 实现更多的消息类型 - 实现更多的消息类型
- i18N国际化直接翻译环境变量
- 批量发送给多个群机器人
- 失败重试机制
### Kubernetes 用户请注意 ### Kubernetes 用户请注意
因为`Drone CI` [官方缺陷](https://docs.drone.io/runner/kubernetes/overview) ,所以较早版本将无法正常获取到需要用到的变量,会导致部分功能异常。为了能正常使用,所以请使用以下版本: 因为`Drone CI` [官方缺陷](https://docs.drone.io/runner/kubernetes/overview) ,所以较早版本将无法正常获取到需要用到的变量,会导致部分功能异常。为了能正常使用,所以请使用以下版本:
- `1.1`(总会是`1.1.x`的最新版本) - `1.1`(总会是`1.1.x`的最新版本)
- `>=1.1.4` - `>=1.1.4`
- `1.2`(总会是`1.2.x`的最新版本) - `1.2`(总会是`1.2.x`的最新版本)
- `>=1.2.4` - `>=1.2.4`
+38 -10
View File
@@ -11,7 +11,7 @@ import (
) )
// Version of cli // Version of cli
var Version = "0.2.1130" var Version = "0.2.1219"
func main() { func main() {
app := cli.NewApp() app := cli.NewApp()
@@ -29,7 +29,7 @@ func main() {
app.Version = Version app.Version = Version
app.Flags = []cli.Flag{ app.Flags = []cli.Flag{
cli.BoolFlag{ cli.BoolFlag{
Name: "config.debug", Name: "config.debug,debug",
Usage: "debug mode", Usage: "debug mode",
EnvVar: "PLUGIN_DEBUG", EnvVar: "PLUGIN_DEBUG",
}, },
@@ -49,17 +49,17 @@ func main() {
EnvVar: "PLUGIN_SECRET", EnvVar: "PLUGIN_SECRET",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "config.message.type,message_type", Name: "config.message.type,message_type,type",
Usage: "DingTalk message type, like text, markdown, action card, link and feed card...", Usage: "DingTalk message type, like text, markdown, action card, link and feed card...",
EnvVar: "PLUGIN_MSG_TYPE,PLUGIN_TYPE,PLUGIN_MESSAGE_TYPE", EnvVar: "PLUGIN_MSG_TYPE,PLUGIN_TYPE,PLUGIN_MESSAGE_TYPE",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "config.message.at.all", Name: "config.message.at.all,at.all",
Usage: "at all in a message(only text and markdown type message can at)", Usage: "at all in a message(only text and markdown type message can at)",
EnvVar: "PLUGIN_MSG_AT_ALL", EnvVar: "PLUGIN_MSG_AT_ALL",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "config.message.at.mobiles", Name: "config.message.at.mobiles,mobiles",
Usage: "at someone in a DingTalk group need this guy bind's mobile", Usage: "at someone in a DingTalk group need this guy bind's mobile",
EnvVar: "PLUGIN_MSG_AT_MOBILES", EnvVar: "PLUGIN_MSG_AT_MOBILES",
}, },
@@ -134,6 +134,16 @@ func main() {
Usage: "provider the owner of the repository", Usage: "provider the owner of the repository",
EnvVar: "DRONE_REPO_OWNER", EnvVar: "DRONE_REPO_OWNER",
}, },
cli.Uint64Flag{
Name: "stage.started",
Usage: "stage started ",
EnvVar: "DRONE_STAGE_STARTED",
},
cli.Uint64Flag{
Name: "stage.finished",
Usage: "stage finished",
EnvVar: "DRONE_STAGE_FINISHED",
},
cli.StringFlag{ cli.StringFlag{
Name: "build.status", Name: "build.status",
Usage: "build status", Usage: "build status",
@@ -150,12 +160,12 @@ func main() {
Usage: "build event", Usage: "build event",
EnvVar: "DRONE_BUILD_EVENT", EnvVar: "DRONE_BUILD_EVENT",
}, },
cli.StringFlag{ cli.Uint64Flag{
Name: "build.started", Name: "build.started",
Usage: "build started", Usage: "build started",
EnvVar: "DRONE_BUILD_STARTED", EnvVar: "DRONE_BUILD_STARTED",
}, },
cli.StringFlag{ cli.Uint64Flag{
Name: "build.finished", Name: "build.finished",
Usage: "build finished", Usage: "build finished",
EnvVar: "DRONE_BUILD_FINISHED", EnvVar: "DRONE_BUILD_FINISHED",
@@ -191,7 +201,7 @@ func main() {
EnvVar: "FAILURE_COLOR,PLUGIN_FAILURE_COLOR", EnvVar: "FAILURE_COLOR,PLUGIN_FAILURE_COLOR",
}, },
cli.StringFlag{ cli.StringFlag{
Name: "custom.tpl", Name: "custom.tpl,tpl",
Usage: "custom tpl", Usage: "custom tpl",
EnvVar: "PLUGIN_TPL,PLUGIN_CUSTOM_TPL", EnvVar: "PLUGIN_TPL,PLUGIN_CUSTOM_TPL",
}, },
@@ -210,6 +220,16 @@ func main() {
Usage: "tpl custom commit branch name", Usage: "tpl custom commit branch name",
EnvVar: "PLUGIN_TPL_COMMIT_BRANCH_NAME,TPL_COMMIT_BRANCH_NAME", EnvVar: "PLUGIN_TPL_COMMIT_BRANCH_NAME,TPL_COMMIT_BRANCH_NAME",
}, },
cli.StringFlag{
Name: "custom.started,started",
Usage: "started custom env name, eg., BUILD_STARTED",
EnvVar: "PLUGIN_CUSTOM_STARTED",
},
cli.StringFlag{
Name: "custom.finished,finished",
Usage: "finished custom env name, eg., BUILD_FINISHED",
EnvVar: "PLUGIN_CUSTOM_FINISHED",
},
} }
// kubernetes runner patch // kubernetes runner patch
@@ -239,8 +259,8 @@ func run(c *cli.Context) {
Status: c.String("build.status"), Status: c.String("build.status"),
Link: c.String("build.link"), Link: c.String("build.link"),
Event: c.String("build.event"), Event: c.String("build.event"),
StartAt: c.Int64("build.started"), StartAt: c.Uint64("build.started"),
FinishedAt: c.Int64("build.finished"), FinishedAt: c.Uint64("build.finished"),
}, },
Commit: Commit{ Commit: Commit{
Sha: c.String("commit.sha"), Sha: c.String("commit.sha"),
@@ -254,6 +274,10 @@ func run(c *cli.Context) {
Username: c.String("commit.author.username"), Username: c.String("commit.author.username"),
}, },
}, },
Stage: Stage{
StartedAt: c.Uint64("stage.started"),
FinishedAt: c.Uint64("stage.finished"),
},
}, },
// custom config // custom config
Config: Config{ Config: Config{
@@ -275,6 +299,10 @@ func run(c *cli.Context) {
FailureColor: c.String("custom.color.failure"), FailureColor: c.String("custom.color.failure"),
}, },
Tpl: c.String("custom.tpl"), Tpl: c.String("custom.tpl"),
Consuming: Consuming{
StartedEnv: c.String("custom.started"),
FinishedEnv: c.String("custom.finished"),
},
}, },
Tpl: Tpl{ Tpl: Tpl{
Repo: TplRepo{ Repo: TplRepo{
+40 -6
View File
@@ -9,6 +9,7 @@ import (
"net/url" "net/url"
"os" "os"
"regexp" "regexp"
"strconv"
"strings" "strings"
webhook "github.com/lddsb/dingtalk-webhook" webhook "github.com/lddsb/dingtalk-webhook"
@@ -29,8 +30,8 @@ type (
Status string // providers the current build status Status string // providers the current build status
Link string // providers the current build link Link string // providers the current build link
Event string // trigger event Event string // trigger event
StartAt int64 // build start at ( unix timestamp ) StartAt uint64 // build start at ( unix timestamp )
FinishedAt int64 // build finish at ( unix timestamp ) FinishedAt uint64 // build finish at ( unix timestamp )
} }
// Commit commit info // Commit commit info
@@ -43,6 +44,12 @@ type (
Author CommitAuthor Author CommitAuthor
} }
// Stage drone stage env
Stage struct {
StartedAt uint64
FinishedAt uint64
}
// CommitAuthor commit author info // CommitAuthor commit author info
CommitAuthor struct { CommitAuthor struct {
Avatar string // providers the author avatar for the current commit Avatar string // providers the author avatar for the current commit
@@ -56,6 +63,7 @@ type (
Repo Repo Repo Repo
Build Build Build Build
Commit Commit Commit Commit
Stage Stage
} }
// Config plugin private config // Config plugin private config
@@ -104,35 +112,48 @@ type (
Message MessageConfig Message MessageConfig
} }
// Custom user custom env
Custom struct { Custom struct {
Tpl string Tpl string
Color Color Color Color
Pic Pic Pic Pic
Consuming Consuming
} }
// Tpl TPL base
Tpl struct { Tpl struct {
Repo TplRepo Repo TplRepo
Commit TplCommit Commit TplCommit
Build TplBuild Build TplBuild
} }
// TplRepo TPL repo
TplRepo struct { TplRepo struct {
FullName string FullName string
ShortName string ShortName string
} }
// TplCommit TPL commit
TplCommit struct { TplCommit struct {
Branch string Branch string
} }
// TplBuild TPL build
TplBuild struct { TplBuild struct {
Status Status Status Status
} }
// Status status
Status struct { Status struct {
Success string Success string
Failure string Failure string
} }
// Consuming custom consuming env
Consuming struct {
StartedEnv string
FinishedEnv string
}
) )
// Exec execute WebHook // Exec execute WebHook
@@ -289,7 +310,20 @@ func (p *Plugin) getEnvs() map[string]interface{} {
envs["TPL_BUILD_STATUS"] = p.getStatus() envs["TPL_BUILD_STATUS"] = p.getStatus()
envs["TPL_BUILD_LINK"] = p.Drone.Build.Link envs["TPL_BUILD_LINK"] = p.Drone.Build.Link
envs["TPL_BUILD_EVENT"] = p.Drone.Build.Event envs["TPL_BUILD_EVENT"] = p.Drone.Build.Event
envs["TPL_BUILD_CONSUMING"] = fmt.Sprintf("%v", p.Drone.Build.FinishedAt-p.Drone.Build.StartAt)
var consuming uint64
// custom consuming env
if p.Custom.Consuming.FinishedEnv != "" && p.Custom.Consuming.StartedEnv != "" {
finishedAt, _ := strconv.ParseUint(os.Getenv(p.Custom.Consuming.FinishedEnv), 10, 64)
startedAt, _ := strconv.ParseUint(os.Getenv(p.Custom.Consuming.StartedEnv), 10, 64)
consuming = finishedAt - startedAt
} else {
consuming = p.Drone.Build.FinishedAt - p.Drone.Build.StartAt
if consuming == 0 {
consuming = p.Drone.Stage.FinishedAt - p.Drone.Stage.StartedAt
}
}
envs["TPL_BUILD_CONSUMING"] = fmt.Sprintf("%v", consuming)
envs["TPL_COMMIT_SHA"] = p.Drone.Commit.Sha envs["TPL_COMMIT_SHA"] = p.Drone.Commit.Sha
envs["TPL_COMMIT_REF"] = p.Drone.Commit.Ref envs["TPL_COMMIT_REF"] = p.Drone.Commit.Ref
+9
View File
@@ -0,0 +1,9 @@
### **[CI_PROJECT_TITLE]**'s **[CI_COMMIT_BRANCH]** build **[TPL_BUILD_STATUS]**
Message: [CI_COMMIT_MESSAGE]
Detail: [[CI_COMMIT_SHA]]([CI_PROJECT_URL]/commit/[CI_COMMIT_SHA])
Author: [[GITLAB_USER_NAME]([GITLAB_USER_EMAIL])](mailto:[GITLAB_USER_EMAIL])
[Click To The Build Detail Page [TPL_STATUS_EMOTICON]]([CI_PIPELINE_URL])
+4 -4
View File
@@ -1,9 +1,9 @@
### [TPL_REPO_SHORT_NAME] build [TPL_BUILD_STATUS] (`takes [TPL_BUILD_CONSUMING]s`) ### [TPL_REPO_SHORT_NAME] build [TPL_BUILD_STATUS] (`takes [TPL_BUILD_CONSUMING]s`)
[TPL_COMMIT_MSG] Message: [TPL_COMMIT_MSG]
[[TPL_COMMIT_SHA]]([TPL_COMMIT_LINK]) Detail: [[TPL_COMMIT_SHA]]([TPL_COMMIT_LINK])
[[TPL_AUTHOR_NAME]([TPL_AUTHOR_EMAIL])](mailto:[TPL_AUTHOR_EMAIL]) Author: [[TPL_AUTHOR_NAME]([TPL_AUTHOR_EMAIL])](mailto:[TPL_AUTHOR_EMAIL])
[Click To The Build Detail Page [TPL_STATUS_EMOTICON]]([TPL_BUILD_LINK]) [Click To The Build Detail Page [TPL_STATUS_EMOTICON]]([TPL_BUILD_LINK])