mirror of
https://github.com/lddsb/drone-dingtalk-message.git
synced 2026-06-04 10:23:48 +08:00
329 lines
8.8 KiB
Go
329 lines
8.8 KiB
Go
package main
|
|
|
|
import (
|
|
"fmt"
|
|
"log"
|
|
"os"
|
|
"time"
|
|
|
|
"github.com/joho/godotenv"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
// Version of cli
|
|
var Version = "0.2.1219"
|
|
|
|
func main() {
|
|
app := cli.NewApp()
|
|
app.Name = "Drone DingTalk Message Plugin"
|
|
app.Usage = "Sending message to DingTalk group by robot using WebHook"
|
|
year := time.Now().Year()
|
|
app.Copyright = fmt.Sprintf("© 2018-%d Dee Luo", year)
|
|
app.Authors = []cli.Author{
|
|
{
|
|
Name: "Dee Luo",
|
|
Email: "luodi0128@gmail.com",
|
|
},
|
|
}
|
|
app.Action = run
|
|
app.Version = Version
|
|
app.Flags = []cli.Flag{
|
|
cli.BoolFlag{
|
|
Name: "config.debug,debug",
|
|
Usage: "debug mode",
|
|
EnvVar: "PLUGIN_DEBUG",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "config.tips.title",
|
|
Usage: "customize the tips title",
|
|
EnvVar: "PLUGIN_TIPS_TITLE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "config.token,access_token,token",
|
|
Usage: "DingTalk webhook access token",
|
|
EnvVar: "PLUGIN_ACCESS_TOKEN,PLUGIN_TOKEN",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "config.secret,secret",
|
|
Usage: "DingTalk WebHook secret for generate sign",
|
|
EnvVar: "PLUGIN_SECRET",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "config.message.type,message_type,type",
|
|
Usage: "DingTalk message type, like text, markdown, action card, link and feed card...",
|
|
EnvVar: "PLUGIN_MSG_TYPE,PLUGIN_TYPE,PLUGIN_MESSAGE_TYPE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "config.message.at.all,at.all",
|
|
Usage: "at all in a message(only text and markdown type message can at)",
|
|
EnvVar: "PLUGIN_MSG_AT_ALL",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "config.message.at.mobiles,mobiles",
|
|
Usage: "at someone in a DingTalk group need this guy bind's mobile",
|
|
EnvVar: "PLUGIN_MSG_AT_MOBILES",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author.username",
|
|
Usage: "providers the author username for the current commit",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author.avatar",
|
|
Usage: "providers the author avatar url for the current commit",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR_AVATAR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author.email",
|
|
Usage: "providers the author email for the current commit",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR_EMAIL",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author.name",
|
|
Usage: "providers the author name for the current commit",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.branch",
|
|
Usage: "providers the branch for the current build",
|
|
EnvVar: "DRONE_COMMIT_BRANCH",
|
|
Value: "master",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.link",
|
|
Usage: "providers the http link to the current commit in the remote source code management system(e.g.GitHub)",
|
|
EnvVar: "DRONE_COMMIT_LINK",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.message",
|
|
Usage: "providers the commit message for the current build",
|
|
EnvVar: "DRONE_COMMIT_MESSAGE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.sha",
|
|
Usage: "providers the commit sha for the current build",
|
|
EnvVar: "DRONE_COMMIT_SHA",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.ref",
|
|
Usage: "provider the commit ref for the current build",
|
|
EnvVar: "DRONE_COMMIT_REF",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.full.name",
|
|
Usage: "providers the full name of the repository",
|
|
EnvVar: "DRONE_REPO",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.name",
|
|
Usage: "provider the name of the repository",
|
|
EnvVar: "DRONE_REPO_NAME",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.group",
|
|
Usage: "provider the group of the repository",
|
|
EnvVar: "DRONE_REPO_NAMESPACE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.remote.url",
|
|
Usage: "provider the remote url of the repository",
|
|
EnvVar: "DRONE_REMOTE_URL",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.owner",
|
|
Usage: "provider the owner of the repository",
|
|
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{
|
|
Name: "build.status",
|
|
Usage: "build status",
|
|
Value: "success",
|
|
EnvVar: "DRONE_BUILD_STATUS",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "build.link",
|
|
Usage: "build link",
|
|
EnvVar: "DRONE_BUILD_LINK",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "build.event",
|
|
Usage: "build event",
|
|
EnvVar: "DRONE_BUILD_EVENT",
|
|
},
|
|
cli.Uint64Flag{
|
|
Name: "build.started",
|
|
Usage: "build started",
|
|
EnvVar: "DRONE_BUILD_STARTED",
|
|
},
|
|
cli.Uint64Flag{
|
|
Name: "build.finished",
|
|
Usage: "build finished",
|
|
EnvVar: "DRONE_BUILD_FINISHED",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "tpl.build.status.success",
|
|
Usage: "tpl.build status for replace success",
|
|
EnvVar: "TPL_BUILD_STATUS_SUCCESS, PLUGIN_TPL_BUILD_STATUS_SUCCESS",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "tpl.build.status.failure",
|
|
Usage: "tpl.build status for replace failure",
|
|
EnvVar: "TPL_BUILD_STATUS_FAILURE, PLUGIN_TPL_BUILD_STATUS_FAILURE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "custom.pic.url.success",
|
|
Usage: "custom success picture url",
|
|
EnvVar: "SUCCESS_PICTURE_URL,PLUGIN_SUCCESS_PIC",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "custom.pic.url.failure",
|
|
Usage: "custom failure picture url",
|
|
EnvVar: "FAILURE_PICTURE_URL,PLUGIN_FAILURE_PIC",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "custom.color.success",
|
|
Usage: "custom success color for title in markdown",
|
|
EnvVar: "SUCCESS_COLOR,PLUGIN_SUCCESS_COLOR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "custom.color.failure",
|
|
Usage: "custom failure color for title in markdown",
|
|
EnvVar: "FAILURE_COLOR,PLUGIN_FAILURE_COLOR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "custom.tpl,tpl",
|
|
Usage: "custom tpl",
|
|
EnvVar: "PLUGIN_TPL,PLUGIN_CUSTOM_TPL",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "tpl.repo.full.name",
|
|
Usage: "tpl custom repo full name",
|
|
EnvVar: "PLUGIN_TPL_REPO_FULL_NAME,TPL_REPO_FULL_NAME",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "tpl.repo.short.name",
|
|
Usage: "tpl custom repo short name",
|
|
EnvVar: "PLUGIN_TPL_REPO_SHORT_NAME,TPL_REPO_SHORT_NAME",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "tpl.commit.branch.name",
|
|
Usage: "tpl custom 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
|
|
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)
|
|
}
|
|
}
|
|
|
|
// run with args
|
|
func run(c *cli.Context) {
|
|
plugin := Plugin{
|
|
Drone: Drone{
|
|
// repo info
|
|
Repo: Repo{
|
|
ShortName: c.String("repo.name"),
|
|
GroupName: c.String("repo.group"),
|
|
OwnerName: c.String("repo.owner"),
|
|
RemoteURL: c.String("repo.remote.url"),
|
|
FullName: c.String("repo.full.name"),
|
|
},
|
|
// build info
|
|
Build: Build{
|
|
Status: c.String("build.status"),
|
|
Link: c.String("build.link"),
|
|
Event: c.String("build.event"),
|
|
StartAt: c.Uint64("build.started"),
|
|
FinishedAt: c.Uint64("build.finished"),
|
|
},
|
|
Commit: Commit{
|
|
Sha: c.String("commit.sha"),
|
|
Branch: c.String("commit.branch"),
|
|
Message: c.String("commit.message"),
|
|
Link: c.String("commit.link"),
|
|
Author: CommitAuthor{
|
|
Avatar: c.String("commit.author.avatar"),
|
|
Email: c.String("commit.author.email"),
|
|
Name: c.String("commit.author.name"),
|
|
Username: c.String("commit.author.username"),
|
|
},
|
|
},
|
|
Stage: Stage{
|
|
StartedAt: c.Uint64("stage.started"),
|
|
FinishedAt: c.Uint64("stage.finished"),
|
|
},
|
|
},
|
|
// custom config
|
|
Config: Config{
|
|
AccessToken: c.String("config.token"),
|
|
Secret: c.String("config.secret"),
|
|
IsAtALL: c.Bool("config.message.at.all"),
|
|
MsgType: c.String("config.message.type"),
|
|
Mobiles: c.String("config.message.at.mobiles"),
|
|
Debug: c.Bool("config.debug"),
|
|
TipsTitle: c.String("config.tips.title"),
|
|
},
|
|
Custom: Custom{
|
|
Pic: Pic{
|
|
SuccessPicURL: c.String("custom.pic.url.success"),
|
|
FailurePicURL: c.String("custom.pic.url.failure"),
|
|
},
|
|
Color: Color{
|
|
SuccessColor: c.String("custom.color.success"),
|
|
FailureColor: c.String("custom.color.failure"),
|
|
},
|
|
Tpl: c.String("custom.tpl"),
|
|
Consuming: Consuming{
|
|
StartedEnv: c.String("custom.started"),
|
|
FinishedEnv: c.String("custom.finished"),
|
|
},
|
|
},
|
|
Tpl: Tpl{
|
|
Repo: TplRepo{
|
|
FullName: c.String("tpl.repo.full.name"),
|
|
ShortName: c.String("tpl.repo.short.name"),
|
|
},
|
|
Commit: TplCommit{
|
|
Branch: c.String("tpl.commit.branch.name"),
|
|
},
|
|
Build: TplBuild{
|
|
Status: Status{
|
|
Success: c.String("tpl.build.status.success"),
|
|
Failure: c.String("tpl.build.status.failure"),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
if err := plugin.Exec(); nil != err {
|
|
fmt.Println(err)
|
|
os.Exit(1)
|
|
}
|
|
}
|