336 lines
9.0 KiB
Go
336 lines
9.0 KiB
Go
package main
|
|
|
|
import (
|
|
"log"
|
|
"os"
|
|
|
|
"github.com/joho/godotenv"
|
|
"github.com/urfave/cli"
|
|
)
|
|
|
|
// Version set at compile-time
|
|
var (
|
|
Version string
|
|
)
|
|
|
|
func main() {
|
|
// Load env-file if it exists first
|
|
if filename, found := os.LookupEnv("PLUGIN_ENV_FILE"); found {
|
|
godotenv.Load(filename)
|
|
}
|
|
|
|
if _, err := os.Stat("/run/drone/env"); err == nil {
|
|
godotenv.Overload("/run/drone/env")
|
|
}
|
|
|
|
app := cli.NewApp()
|
|
app.Name = "telegram plugin"
|
|
app.Usage = "telegram plugin"
|
|
app.Action = run
|
|
app.Version = Version
|
|
app.Flags = []cli.Flag{
|
|
cli.StringFlag{
|
|
Name: "token",
|
|
Usage: "telegram token",
|
|
EnvVar: "PLUGIN_TOKEN,TELEGRAM_TOKEN,INPUT_TOKEN",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "to",
|
|
Usage: "telegram user",
|
|
EnvVar: "PLUGIN_TO,TELEGRAM_TO,INPUT_TO",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "message",
|
|
Usage: "send telegram message",
|
|
EnvVar: "PLUGIN_MESSAGE,TELEGRAM_MESSAGE,INPUT_MESSAGE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "message.file",
|
|
Usage: "send telegram message from file",
|
|
EnvVar: "PLUGIN_MESSAGE_FILE,TELEGRAM_MESSAGE_FILE,INPUT_MESSAGE_FILE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "template.vars",
|
|
Usage: "additional template vars to be used in message, as JSON string",
|
|
EnvVar: "PLUGIN_TEMPLATE_VARS,TELEGRAM_TEMPLATE_VARS,INPUT_TEMPLATE_VARS",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "template.vars.file",
|
|
Usage: "load additional template vars to be used in message, from json file",
|
|
EnvVar: "PLUGIN_TEMPLATE_VARS_FILE,TELEGRAM_TEMPLATE_VARS_FILE",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "photo",
|
|
Usage: "send photo message",
|
|
EnvVar: "PLUGIN_PHOTO,PHOTO,INPUT_PHOTO",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "document",
|
|
Usage: "send document message",
|
|
EnvVar: "PLUGIN_DOCUMENT,DOCUMENT,INPUT_DOCUMENT",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "sticker",
|
|
Usage: "send sticker message",
|
|
EnvVar: "PLUGIN_STICKER,STICKER,INPUT_STICKER",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "audio",
|
|
Usage: "send audio message",
|
|
EnvVar: "PLUGIN_AUDIO,AUDIO,INPUT_AUDIO",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "voice",
|
|
Usage: "send voice message",
|
|
EnvVar: "PLUGIN_VOICE,VOICE,INPUT_VOICE",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "location",
|
|
Usage: "send location message",
|
|
EnvVar: "PLUGIN_LOCATION,LOCATION,INPUT_LOCATION",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "venue",
|
|
Usage: "send venue message",
|
|
EnvVar: "PLUGIN_VENUE,VENUE,INPUT_VENUE",
|
|
},
|
|
cli.StringSliceFlag{
|
|
Name: "video",
|
|
Usage: "send video message",
|
|
EnvVar: "PLUGIN_VIDEO,VIDEO,INPUT_VIDEO",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "debug",
|
|
Usage: "enable debug message",
|
|
EnvVar: "PLUGIN_DEBUG,DEBUG,INPUT_DEBUG",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "match.email",
|
|
Usage: "send message when only match email",
|
|
EnvVar: "PLUGIN_ONLY_MATCH_EMAIL,INPUT_ONLY_MATCH_EMAIL",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "disable.webpage.preview",
|
|
Usage: "disables link previews for links in this message",
|
|
EnvVar: "PLUGIN_DISABLE_WEB_PAGE_PREVIEW,INPUT_DISABLE_WEB_PAGE_PREVIEW",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "disable.notification",
|
|
Usage: "sends the message silently. users will receive a notification with no sound.",
|
|
EnvVar: "PLUGIN_DISABLE_NOTIFICATION,INPUT_DISABLE_NOTIFICATION",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "format",
|
|
Value: formatMarkdown,
|
|
Usage: "telegram message format (Markdown or HTML)",
|
|
EnvVar: "PLUGIN_FORMAT,FORMAT,INPUT_FORMAT",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo",
|
|
Usage: "repository owner and repository name",
|
|
EnvVar: "DRONE_REPO,GITHUB_REPOSITORY",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.namespace",
|
|
Usage: "repository namespace",
|
|
EnvVar: "DRONE_REPO_OWNER,DRONE_REPO_NAMESPACE,GITHUB_ACTOR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "repo.name",
|
|
Usage: "repository name",
|
|
EnvVar: "DRONE_REPO_NAME",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.sha",
|
|
Usage: "git commit sha",
|
|
EnvVar: "DRONE_COMMIT_SHA,GITHUB_SHA",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.ref",
|
|
Usage: "git commit ref",
|
|
EnvVar: "DRONE_COMMIT_REF,GITHUB_REF",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.branch",
|
|
Value: "master",
|
|
Usage: "git commit branch",
|
|
EnvVar: "DRONE_COMMIT_BRANCH",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.link",
|
|
Usage: "git commit link",
|
|
EnvVar: "DRONE_COMMIT_LINK",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author",
|
|
Usage: "git author name",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author.email",
|
|
Usage: "git author email",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR_EMAIL",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.author.avatar",
|
|
Usage: "git author avatar",
|
|
EnvVar: "DRONE_COMMIT_AUTHOR_AVATAR",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "commit.message",
|
|
Usage: "commit message",
|
|
EnvVar: "DRONE_COMMIT_MESSAGE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "build.event",
|
|
Value: "push",
|
|
Usage: "build event",
|
|
EnvVar: "DRONE_BUILD_EVENT",
|
|
},
|
|
cli.IntFlag{
|
|
Name: "build.number",
|
|
Usage: "build number",
|
|
EnvVar: "DRONE_BUILD_NUMBER",
|
|
},
|
|
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.tag",
|
|
Usage: "build tag",
|
|
EnvVar: "DRONE_TAG",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "pull.request",
|
|
Usage: "pull request",
|
|
EnvVar: "DRONE_PULL_REQUEST",
|
|
},
|
|
cli.Int64Flag{
|
|
Name: "build.started",
|
|
Usage: "build started",
|
|
EnvVar: "DRONE_BUILD_STARTED",
|
|
},
|
|
cli.Int64Flag{
|
|
Name: "build.finished",
|
|
Usage: "build finished",
|
|
EnvVar: "DRONE_BUILD_FINISHED",
|
|
},
|
|
cli.BoolFlag{
|
|
Name: "github",
|
|
Usage: "Boolean value, indicates the runtime environment is GitHub Action.",
|
|
EnvVar: "PLUGIN_GITHUB,GITHUB",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "github.workflow",
|
|
Usage: "The name of the workflow.",
|
|
EnvVar: "GITHUB_WORKFLOW",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "github.action",
|
|
Usage: "The name of the action.",
|
|
EnvVar: "GITHUB_ACTION",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "github.event.name",
|
|
Usage: "The webhook name of the event that triggered the workflow.",
|
|
EnvVar: "GITHUB_EVENT_NAME",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "github.event.path",
|
|
Usage: "The path to a file that contains the payload of the event that triggered the workflow. Value: /github/workflow/event.json.",
|
|
EnvVar: "GITHUB_EVENT_PATH",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "github.workspace",
|
|
Usage: "The GitHub workspace path. Value: /github/workspace.",
|
|
EnvVar: "GITHUB_WORKSPACE",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "deploy.to",
|
|
Usage: "Provides the target deployment environment for the running build. This value is only available to promotion and rollback pipelines.",
|
|
EnvVar: "DRONE_DEPLOY_TO",
|
|
},
|
|
cli.StringFlag{
|
|
Name: "socks5",
|
|
Usage: "Socks5 proxy URL",
|
|
EnvVar: "PLUGIN_SOCKS5,SOCKS5,INPUT_SOCKS5",
|
|
},
|
|
}
|
|
|
|
if err := app.Run(os.Args); err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func run(c *cli.Context) error {
|
|
plugin := Plugin{
|
|
GitHub: GitHub{
|
|
Workflow: c.String("github.workflow"),
|
|
Workspace: c.String("github.workspace"),
|
|
Action: c.String("github.action"),
|
|
EventName: c.String("github.event.name"),
|
|
EventPath: c.String("github.event.path"),
|
|
},
|
|
Repo: Repo{
|
|
FullName: c.String("repo"),
|
|
Namespace: c.String("repo.namespace"),
|
|
Name: c.String("repo.name"),
|
|
},
|
|
Commit: Commit{
|
|
Sha: c.String("commit.sha"),
|
|
Ref: c.String("commit.ref"),
|
|
Branch: c.String("commit.branch"),
|
|
Link: c.String("commit.link"),
|
|
Author: c.String("commit.author"),
|
|
Email: c.String("commit.author.email"),
|
|
Avatar: c.String("commit.author.avatar"),
|
|
Message: c.String("commit.message"),
|
|
},
|
|
Build: Build{
|
|
Tag: c.String("build.tag"),
|
|
Number: c.Int("build.number"),
|
|
Event: c.String("build.event"),
|
|
Status: c.String("build.status"),
|
|
Link: c.String("build.link"),
|
|
Started: c.Int64("build.started"),
|
|
Finished: c.Int64("build.finished"),
|
|
PR: c.String("pull.request"),
|
|
DeployTo: c.String("deploy.to"),
|
|
},
|
|
Config: Config{
|
|
Token: c.String("token"),
|
|
Debug: c.Bool("debug"),
|
|
MatchEmail: c.Bool("match.email"),
|
|
To: c.StringSlice("to"),
|
|
Message: c.String("message"),
|
|
MessageFile: c.String("message.file"),
|
|
TemplateVars: c.String("template.vars"),
|
|
TemplateVarsFile: c.String("template.vars.file"),
|
|
Photo: c.StringSlice("photo"),
|
|
Document: c.StringSlice("document"),
|
|
Sticker: c.StringSlice("sticker"),
|
|
Audio: c.StringSlice("audio"),
|
|
Voice: c.StringSlice("voice"),
|
|
Location: c.StringSlice("location"),
|
|
Video: c.StringSlice("video"),
|
|
Venue: c.StringSlice("venue"),
|
|
Format: c.String("format"),
|
|
GitHub: c.Bool("github"),
|
|
Socks5: c.String("socks5"),
|
|
|
|
DisableWebPagePreview: c.Bool("disable.webpage.preview"),
|
|
DisableNotification: c.Bool("disable.notification"),
|
|
},
|
|
}
|
|
|
|
return plugin.Exec()
|
|
}
|