mirror of
https://github.com/lddsb/drone-dingtalk-message.git
synced 2026-06-16 14:50:42 +08:00
Compare commits
12 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 5bcf803346 | |||
| 1b219624cd | |||
| d409acce48 | |||
| 2e94325c0e | |||
| 1622a2beaa | |||
| d2ab02e29c | |||
| d0284b2434 | |||
| c8bc5d889d | |||
| d4dc439671 | |||
| 8d0434b308 | |||
| 8aafd04b82 | |||
| a651a73cbd |
@@ -0,0 +1,55 @@
|
||||
name: Publish to DockerHub and Github Package
|
||||
|
||||
on:
|
||||
push:
|
||||
tags:
|
||||
- "v*"
|
||||
|
||||
jobs:
|
||||
dockerhub:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- name: Checkout
|
||||
uses: actions/checkout@v2
|
||||
- name: Repo metadata
|
||||
id: repo
|
||||
uses: actions/github-script@v3
|
||||
with:
|
||||
script: |
|
||||
const repo = await github.repos.get(context.repo)
|
||||
return repo.data
|
||||
- name: Prepare
|
||||
id: prep
|
||||
run: |
|
||||
DOCKER_IMAGE=lddsb/drone-dingtalk-message
|
||||
GITHUB_IMAGE=ghcr.io/lddsb/drone-dingtalk-message
|
||||
VERSION=${GITHUB_REF#refs/tags/v}
|
||||
TAGS="${DOCKER_IMAGE}:${VERSION}"
|
||||
if [[ $VERSION =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then
|
||||
MINOR=${VERSION%.*}
|
||||
MAJOR=${MINOR%.*}
|
||||
TAGS="$TAGS,${DOCKER_IMAGE}:${MINOR},${DOCKER_IMAGE}:${MAJOR}"
|
||||
TAGS="$TAGS,${GITHUB_IMAGE}:${VERSION},${GITHUB_IMAGE}:${MINOR},${GITHUB_IMAGE}:${MAJOR}"
|
||||
fi
|
||||
echo ::set-output name=tags::${TAGS}
|
||||
- name: Setup Docker Buildx
|
||||
uses: docker/setup-buildx-action@v1
|
||||
- name: Login to DockerHub
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
username: ${{ secrets.DOCKERHUB_USERNAME }}
|
||||
password: ${{ secrets.DOCKERHUB_TOKEN }}
|
||||
- name: Login to GitHub Container Register
|
||||
uses: docker/login-action@v1
|
||||
with:
|
||||
registry: ghcr.io
|
||||
username: ${{ github.repository_owner }}
|
||||
password: ${{ secrets.CR_PAT }}
|
||||
- name: Build and push
|
||||
id: docker_build
|
||||
uses: docker/build-push-action@v2
|
||||
with:
|
||||
context: .
|
||||
file: ./Dockerfile
|
||||
push: true
|
||||
tags: ${{ steps.prep.outputs.tags }}
|
||||
@@ -0,0 +1,65 @@
|
||||
# Changelog
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [1.2.4] - 2020-04-28
|
||||
### Fixed:
|
||||
* kubernetes runner missing env, [details](https://docs.drone.io/runner/kubernetes/overview)
|
||||
|
||||
## [1.2.3] - 2020-01-20
|
||||
### Fixed:
|
||||
* CDN url of default image.
|
||||
|
||||
## [1.2.2] - 2019-12-07
|
||||
### Added:
|
||||
* Support DingTalk `sign secret`, please see the [README](README.md) for instructions.
|
||||
|
||||
## [1.2.1] - 2019-11-07
|
||||
### Added:
|
||||
* Support customize message tips title by `tips_title` option.
|
||||
|
||||
## [1.2.0] - 2019-09-24
|
||||
### Added:
|
||||
* Support custom tpl.
|
||||
|
||||
## [1.1.4] - 2020-04-28
|
||||
### Fixed:
|
||||
* kubernetes runner missing env, [details](https://docs.drone.io/runner/kubernetes/overview)
|
||||
|
||||
## [1.1.3] - 2020-01-20
|
||||
### Fixed:
|
||||
* CDN url of default image.
|
||||
|
||||
## [1.1.2] - 2019-11-07
|
||||
### Added:
|
||||
* Support customize message tips title by `tips_title` option.
|
||||
|
||||
## [1.1.1] - 2019-09-24
|
||||
### Added:
|
||||
* Support full token url as `token`.
|
||||
|
||||
## [1.1.0] - 2019-03-09
|
||||
### Added:
|
||||
* Package management tools migrate from dep to go mod, 1.0.x version stopped supporting new features.
|
||||
|
||||
## [1.0.2] - 2020-01-20
|
||||
### Fixed:
|
||||
* CDN url of default image.
|
||||
|
||||
## [1.0.1] - 2019-03-09
|
||||
### Added:
|
||||
* Auto publish image to DockerHub.
|
||||
|
||||
[Unreleased]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.4...HEAD
|
||||
[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.2]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.1...v1.2.2
|
||||
[1.2.1]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.2.0...v1.2.1
|
||||
[1.2.0]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.1.0...v1.2.0
|
||||
[1.1.4]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.1.3...v1.1.4
|
||||
[1.1.3]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.1.2...v1.1.3
|
||||
[1.1.2]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.1.1...v1.1.2
|
||||
[1.1.1]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.1.0...v1.1.1
|
||||
[1.1.0]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.0.0...v1.1.0
|
||||
[1.0.2]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.0.1...v1.0.2
|
||||
[1.0.1]: https://github.com/lddsb/drone-dingtalk-message/compare/v1.0.0...v1.0.1
|
||||
+1
-1
@@ -6,6 +6,6 @@ RUN GO111MODULE=on CGO_ENABLED=0 GOOS=linux go build -a -o drone-dingtalk .
|
||||
FROM alpine:latest
|
||||
RUN apk update && apk add ca-certificates && rm -rf /var/cache/apk/*
|
||||
COPY --from=builder /app/drone-dingtalk /bin
|
||||
COPY --from=builder /app/tpls /app/tpls
|
||||
COPY --from=builder /app/tpls /app/drone/dingtalk/message/tpls
|
||||
|
||||
ENTRYPOINT ["/bin/drone-dingtalk"]
|
||||
|
||||
@@ -3,7 +3,18 @@
|
||||
|
||||
[中文说明](README_ZH.md)
|
||||
|
||||
just support `text`, `markdown` and `link` type now
|
||||
<!-- toc -->
|
||||
|
||||
- [Drone CI Plugin Config](#drone-ci-plugin-config)
|
||||
- [Plugin Parameter Reference](#plugin-parameter-reference)
|
||||
- [TPL](#tpl)
|
||||
- [Screen Shot](#screen-shot)
|
||||
- [Development](#development)
|
||||
- [Todo](#todo)
|
||||
- [Kubernetes Users](#kubernetes-users)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
### Drone CI Plugin Config
|
||||
`0.8.x`
|
||||
```yaml
|
||||
@@ -15,7 +26,7 @@ pipeline:
|
||||
type: markdown
|
||||
```
|
||||
|
||||
`1.0.x`
|
||||
`1.x`
|
||||
```yaml
|
||||
kind: pipeline
|
||||
name: default
|
||||
@@ -46,7 +57,7 @@ String. Secret for generate sign.
|
||||
|
||||
`tpl`
|
||||
|
||||
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.
|
||||
|
||||
`tips_title`
|
||||
|
||||
@@ -91,7 +102,7 @@ String. You can customize the [TPL_BUILD_STATUS] (when status=`failure`) by this
|
||||
### TPL
|
||||
> `tpl` won't work with message type `link` !!!
|
||||
|
||||
That's a good news, we support `tpl` now.This is a example for `markdown` message:
|
||||
That's a good news, we support `tpl` now.This is an example for `markdown` message:
|
||||
|
||||
# [TPL_REPO_FULL_NAME] build [TPL_BUILD_STATUS], takes [TPL_BUILD_CONSUMING]s
|
||||
[TPL_COMMIT_MSG]
|
||||
@@ -172,4 +183,14 @@ $ ./drone-dingtalk-message -h
|
||||
```
|
||||
|
||||
### Todo
|
||||
It's sad, just support `text`, `markdown` and `link` type now.
|
||||
- implement all message type
|
||||
|
||||
### Kubernetes Users
|
||||
Attention kubernetes users, [CHANGELOG](CHANGELOG.md#124---2020-04-28).It's the available versions:
|
||||
|
||||
- `1.1`(always latest for `1.1.x`)
|
||||
- `>=1.1.4`
|
||||
- `1.2`(always latest for `1.2.x`)
|
||||
- `>=1.2.4`
|
||||
- latest(always latest)
|
||||
|
||||
+45
-26
@@ -1,9 +1,20 @@
|
||||
# Drone CI的钉钉群组机器人通知插件
|
||||
[](https://hub.docker.com/r/lddsb/drone-dingtalk-message) [](https://goreportcard.com/report/github.com/lddsb/drone-dingtalk-message) [](https://codecov.io/gh/lddsb/drone-dingtalk-message) [](https://app.dependabot.com/accounts/lddsb/repos/159822771) [](LICENSE)
|
||||
|
||||
目前仅支持 `text`, `markdown` 以及 `link` 类型的消息,建议使用`markdown`类型。
|
||||
<!-- toc -->
|
||||
|
||||
- [怎么使用本插件](#%E6%80%8E%E4%B9%88%E4%BD%BF%E7%94%A8%E6%9C%AC%E6%8F%92%E4%BB%B6)
|
||||
- [插件参数](#%E6%8F%92%E4%BB%B6%E5%8F%82%E6%95%B0)
|
||||
- [模版](#%E6%A8%A1%E7%89%88)
|
||||
- [截图展示](#%E6%88%AA%E5%9B%BE%E5%B1%95%E7%A4%BA)
|
||||
- [贡献代码](#%E8%B4%A1%E7%8C%AE%E4%BB%A3%E7%A0%81)
|
||||
- [未来计划](#%E6%9C%AA%E6%9D%A5%E8%AE%A1%E5%88%92)
|
||||
- [Kubernetes 用户请注意](#kubernetes-%E7%94%A8%E6%88%B7%E8%AF%B7%E6%B3%A8%E6%84%8F)
|
||||
|
||||
<!-- tocstop -->
|
||||
|
||||
### 怎么使用本插件
|
||||
添加一个`step`到你的`.drone.yml`中,下面是简单的例子:
|
||||
添加一个`step`到你的`.drone.yml`中,下面是例子:
|
||||
|
||||
`0.8.x`
|
||||
```yaml
|
||||
@@ -15,7 +26,7 @@ pipeline:
|
||||
type: markdown
|
||||
```
|
||||
|
||||
`1.0.x`
|
||||
`1.x`
|
||||
```yaml
|
||||
kind: pipeline
|
||||
name: default
|
||||
@@ -102,31 +113,31 @@ steps:
|
||||
|
||||
[Click To The Build Detail Page [TPL_STATUS_EMOTICON)]]([TPL_BUILD_LINK])
|
||||
|
||||
你可以写自己喜欢的模版,终于不用再对着默认模版发愁啦!并且模版的语法非常简单!比较可惜的是目前支持的变量还比较少,下面是当前支持的变量的列表:
|
||||
你可以写自己喜欢的模版,终于不用再对默认模版发愁啦!并且模版的语法非常简单!比较可惜的是目前支持的变量还比较少,下面是当前支持的变量的列表:
|
||||
|
||||
| Variable | Value |
|
||||
| :-------------------: | :-------------------------------------------------: |
|
||||
| [TPL_REPO_SHORT_NAME] | current repo name(bare name) |
|
||||
| [TPL_REPO_FULL_NAME] | the full name(with group name) of current repo |
|
||||
| [TPL_REPO_GROUP_NAME] | the group name of current repo |
|
||||
| [TPL_REPO_OWNER_NAME] | the owner name of current repo |
|
||||
| [TPL_REPO_REMOTE_URL] | the remote url of current repo |
|
||||
| [TPL_BUILD_STATUS] | current build status(e.g., success, failure) |
|
||||
| [TPL_BUILD_LINK] | current build link |
|
||||
| [TPL_BUILD_EVENT] | current build event(e.g., push, pull request, etc.) |
|
||||
| [TPL_BUILD_CONSUMING] | current build consuming, second |
|
||||
| [TPL_COMMIT_SHA] | current commit sha |
|
||||
| [TPL_COMMIT_REF] | current commit ref(e.g., refs/heads/master, etc.) |
|
||||
| [TPL_COMMIT_LINK] | current commit remote url link |
|
||||
| [TPL_COMMIT_BRANCH] | current branch name(e.g., dev, etc) |
|
||||
| [TPL_COMMIT_MSG] | current commit message |
|
||||
| [TPL_AUTHOR_NAME] | current commit author name |
|
||||
| [TPL_AUTHOR_EMAIL] | current commit author email |
|
||||
| [TPL_AUTHOR_USERNAME] | current commit author username |
|
||||
| [TPL_AUTHOR_AVATAR] | current commit author avatar |
|
||||
| [TPL_STATUS_PIC] | custom pic for build status |
|
||||
| [TPL_STATUS_COLOR] | custom color for build status |
|
||||
| [TPL_STATUS_EMOTICON] | custom emoticon for build status |
|
||||
| [TPL_REPO_SHORT_NAME] | 当前仓库的名称,比如本仓库 `drone-dingtalk-message` |
|
||||
| [TPL_REPO_FULL_NAME] | 当前仓库的名称,比如本仓库 `lddsb/drone-dingtalk-message` |
|
||||
| [TPL_REPO_GROUP_NAME] | 当前仓库的组织名称,比如本仓库 `lddsb` |
|
||||
| [TPL_REPO_OWNER_NAME] | 当前仓库拥有者的名称 |
|
||||
| [TPL_REPO_REMOTE_URL] | 当前仓库的远程地址 |
|
||||
| [TPL_BUILD_STATUS] | 当前编译的状态(比如, success, failure) |
|
||||
| [TPL_BUILD_LINK] | 当前编译的链接 |
|
||||
| [TPL_BUILD_EVENT] | 触发当前编译的动作(比如, push, pull request等) |
|
||||
| [TPL_BUILD_CONSUMING] | 当前编译耗时,单位秒 |
|
||||
| [TPL_COMMIT_SHA] | 当前提交的sha |
|
||||
| [TPL_COMMIT_REF] | 当前提交的ref(比如, refs/heads/master等) |
|
||||
| [TPL_COMMIT_LINK] | 当前提交的远程地址 |
|
||||
| [TPL_COMMIT_BRANCH] | 当前分之名称(比如, dev, master等) |
|
||||
| [TPL_COMMIT_MSG] | 当前提交的信息 |
|
||||
| [TPL_AUTHOR_NAME] | 当前提交作者名称 |
|
||||
| [TPL_AUTHOR_EMAIL] | 当前提交作者邮箱地址 |
|
||||
| [TPL_AUTHOR_USERNAME] | 当前提交作者的用户名 |
|
||||
| [TPL_AUTHOR_AVATAR] | 当前提交作者的头像 |
|
||||
| [TPL_STATUS_PIC] | 根据编译状态显示不同的图片 |
|
||||
| [TPL_STATUS_COLOR] | 根据编译状态显示不同的颜色 |
|
||||
| [TPL_STATUS_EMOTICON] | 根据编译状态显示不同的表情,比如 `:)` `:(` |
|
||||
|
||||
|
||||
|
||||
@@ -172,5 +183,13 @@ $ cd /path/to/you/want && GO111MODULE=on go build .
|
||||
$ ./drone-dingtalk-message -h
|
||||
```
|
||||
|
||||
### 待办
|
||||
### 未来计划
|
||||
目前仅支持 `text`, `markdown` 以及 `link` 类型的消息,建议使用`markdown`类型。
|
||||
- 实现更多的消息类型
|
||||
|
||||
### Kubernetes 用户请注意
|
||||
因为`Drone CI` [官方缺陷](https://docs.drone.io/runner/kubernetes/overview) ,所以较早版本将无法正常获取到需要用到的变量,会导致部分功能异常。为了能正常使用,所以请使用以下版本:
|
||||
- `1.1`(总会是`1.1.x`的最新版本)
|
||||
- `>=1.1.4`
|
||||
- `1.2`(总会是`1.2.x`的最新版本)
|
||||
- `>=1.2.4`
|
||||
@@ -5,5 +5,5 @@ go 1.12
|
||||
require (
|
||||
github.com/joho/godotenv v1.3.0
|
||||
github.com/lddsb/dingtalk-webhook v0.0.4
|
||||
github.com/urfave/cli v1.22.2
|
||||
github.com/urfave/cli v1.22.5
|
||||
)
|
||||
|
||||
@@ -13,5 +13,11 @@ github.com/shurcooL/sanitized_anchor_name v1.0.0 h1:PdmoCO6wvbs+7yrJyMORt4/BmY5I
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/urfave/cli v1.22.2 h1:gsqYFH8bb9ekPA12kRo0hfjngWQjkJPlN9R0N78BoUo=
|
||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.3 h1:FpNT6zq26xNpHZy08emi755QwzLPs6Pukqjlc7RfOMU=
|
||||
github.com/urfave/cli v1.22.3/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.4 h1:u7tSpNPPswAFymm8IehJhy4uJMlUuU/GmqSkvJ1InXA=
|
||||
github.com/urfave/cli v1.22.4/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.5 h1:lNq9sAHXK2qfdI8W+GRItjCEkI+2oR4d+MEHy1CKXoU=
|
||||
github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
|
||||
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
|
||||
|
||||
@@ -4,8 +4,9 @@ import (
|
||||
"fmt"
|
||||
"log"
|
||||
"os"
|
||||
"time"
|
||||
|
||||
_ "github.com/joho/godotenv/autoload"
|
||||
"github.com/joho/godotenv"
|
||||
"github.com/urfave/cli"
|
||||
)
|
||||
|
||||
@@ -16,7 +17,8 @@ func main() {
|
||||
app := cli.NewApp()
|
||||
app.Name = "Drone DingTalk Message Plugin"
|
||||
app.Usage = "Sending message to DingTalk group by robot using WebHook"
|
||||
app.Copyright = "© 2018 Dee Luo"
|
||||
year := time.Now().Year()
|
||||
app.Copyright = fmt.Sprintf("© 2018-%d Dee Luo", year)
|
||||
app.Authors = []cli.Author{
|
||||
{
|
||||
Name: "Dee Luo",
|
||||
@@ -210,6 +212,11 @@ func main() {
|
||||
},
|
||||
}
|
||||
|
||||
// kubernetes runner patch
|
||||
if _, err := os.Stat("/run/drone/env"); err == nil {
|
||||
godotenv.Overload("/run/drone/env")
|
||||
}
|
||||
|
||||
if err := app.Run(os.Args); nil != err {
|
||||
log.Println(err)
|
||||
}
|
||||
|
||||
@@ -137,6 +137,12 @@ type (
|
||||
|
||||
// Exec execute WebHook
|
||||
func (p *Plugin) Exec() error {
|
||||
if p.Config.Debug {
|
||||
for _, e := range os.Environ() {
|
||||
log.Println(e)
|
||||
}
|
||||
}
|
||||
|
||||
var err error
|
||||
if "" == p.Config.AccessToken {
|
||||
msg := "missing DingTalk access token"
|
||||
@@ -194,7 +200,7 @@ func fileExists(filePath string) bool {
|
||||
// getTpl get tpl from local file or remote file
|
||||
func (p *Plugin) getTpl() (tpl string, err error) {
|
||||
//var tpl string
|
||||
tplDir := "/app/tpls"
|
||||
tplDir := "/app/drone/dingtalk/message/tpls"
|
||||
if "" == p.Custom.Tpl {
|
||||
p.Custom.Tpl = fmt.Sprintf("%s/%s.tpl", tplDir, strings.ToLower(p.Config.MsgType))
|
||||
}
|
||||
@@ -249,6 +255,11 @@ func (p *Plugin) fillTpl(tpl string) string {
|
||||
reg := regexp.MustCompile(`\[([^\[\]]*)]`)
|
||||
match := reg.FindAllStringSubmatch(tpl, -1)
|
||||
for _, m := range match {
|
||||
// from environment
|
||||
if envStr := os.Getenv(m[1]); envStr != "" {
|
||||
tpl = strings.ReplaceAll(tpl, m[0], envStr)
|
||||
}
|
||||
|
||||
// check if the keyword is legal
|
||||
if _, ok := envs[m[1]]; ok {
|
||||
// replace keyword
|
||||
@@ -345,12 +356,12 @@ func (p *Plugin) getEmoticon() string {
|
||||
func (p *Plugin) getPicURL() string {
|
||||
pics := make(map[string]string)
|
||||
// success picture url
|
||||
pics["success"] = "https://ws4.sinaimg.cn/large/006tNc79gy1fz05g5a7utj30he0bfjry.jpg"
|
||||
pics["success"] = "https://wx1.sinaimg.cn/large/006tNc79gy1fz05g5a7utj30he0bfjry.jpg"
|
||||
if p.Custom.Pic.SuccessPicURL != "" {
|
||||
pics["success"] = p.Custom.Pic.SuccessPicURL
|
||||
}
|
||||
// failure picture url
|
||||
pics["failure"] = "https://ws1.sinaimg.cn/large/006tNc79gy1fz0b4fghpnj30hd0bdmxn.jpg"
|
||||
pics["failure"] = "https://wx1.sinaimg.cn/large/006tNc79gy1fz0b4fghpnj30hd0bdmxn.jpg"
|
||||
if p.Custom.Pic.FailurePicURL != "" {
|
||||
pics["failure"] = p.Custom.Pic.FailurePicURL
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user