Compare commits

..

No commits in common. "main" and "0.2.1" have entirely different histories.
main ... 0.2.1

6 changed files with 53 additions and 55 deletions

View File

@ -9,7 +9,6 @@ steps:
- name: deps - name: deps
path: /go path: /go
commands: commands:
- go mod tidy
- GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bin/ cmd/drone-ntfy/main.go - GOOS=linux GOARCH=amd64 CGO_ENABLED=0 go build -o bin/ cmd/drone-ntfy/main.go
- name: Build docker image - name: Build docker image

View File

@ -81,5 +81,4 @@ DRONE_STAGE_STATUS=
DRONE_TAG= DRONE_TAG=
DRONE_BUILD_LINK= DRONE_BUILD_LINK=
DRONE_COMMIT_LINK= DRONE_COMMIT_LINK=
DRONE_REPO_NAME=
``` ```

View File

@ -1,4 +1,4 @@
package model package config
type App struct { type App struct {
BaseUrl string `env:"PLUGIN_URL" envDefault:"https://ntfy.sh"` BaseUrl string `env:"PLUGIN_URL" envDefault:"https://ntfy.sh"`

View File

@ -6,93 +6,93 @@ import (
"net/http" "net/http"
"strings" "strings"
"git.parravidales.es/parra/drone-ntfy/pkg/model" "git.parravidales.es/parra/drone-ntfy/cmd/drone-ntfy/config"
"github.com/caarlos0/env/v7" "github.com/caarlos0/env/v7"
"github.com/joho/godotenv" "github.com/joho/godotenv"
) )
type Data struct { type Config struct {
App model.App App config.App
Drone model.Drone Drone config.Drone
Ci model.Ci Ci config.Ci
} }
func main() { func main() {
data := loadData() cfg := loadCfg()
buildAppData(&data) updateAppConfig(&cfg)
addResultToTags(&data) addTagsBasedOnResult(&cfg)
sendNotification(&data) sendNotification(&cfg)
} }
func loadData() Data { func loadCfg() Config {
envErr := godotenv.Load() envErr := godotenv.Load()
if envErr == nil { if envErr == nil {
fmt.Printf("loaded .env file.") fmt.Printf("loaded .env file.")
} }
data := Data{ conf := Config{
App: model.App{}, App: config.App{},
Drone: model.Drone{}, Drone: config.Drone{},
Ci: model.Ci{}, Ci: config.Ci{},
} }
loadDataFromEnv(&data.App) loadConfig(&conf.App)
loadDataFromEnv(&data.Drone) loadConfig(&conf.Drone)
loadDataFromEnv(&data.Ci) loadConfig(&conf.Ci)
data.App.Tags = append(data.App.DefaultTags, data.App.Tags...) conf.App.Tags = append(conf.App.DefaultTags, conf.App.Tags...)
return data return conf
} }
func loadDataFromEnv(data any) { func loadConfig(cfg any) {
err := env.Parse(data) err := env.Parse(cfg)
if err != nil { if err != nil {
log.Fatalf("unable to parse environment variables: %e", err) log.Fatalf("unable to parse environment variables: %e", err)
} }
} }
func buildAppData(data *Data) { func updateAppConfig(cfg *Config) {
data.App.Title = data.Drone.RepoName + " - Build #" + data.Drone.BuildNumber + " " + data.Drone.BuildStatus cfg.App.Title = "Build #" + cfg.Drone.BuildNumber + " " + cfg.Drone.BuildStatus
if strings.Contains(data.Ci.CommitRef, "refs/tags/") { if strings.Contains(cfg.Ci.CommitRef, "refs/tags/") {
data.App.Tags = append(data.App.Tags, data.Drone.Tag) cfg.App.Tags = append(cfg.App.Tags, cfg.Drone.Tag)
data.App.Message = "Tag " + data.Drone.Tag + " created" cfg.App.Message = "Tag " + cfg.Drone.Tag + " created"
} else { } else {
data.App.Tags = append(data.App.Tags, data.Drone.RepoName+"/"+data.Ci.CommitBranch) cfg.App.Tags = append(cfg.App.Tags, cfg.Drone.RepoName+"/"+cfg.Ci.CommitBranch)
data.App.Message = "[" + data.Ci.CommitSha[0:8] + "] " + data.Ci.CommitMessage cfg.App.Message = "[" + cfg.Ci.CommitSha[0:8] + "] " + cfg.Ci.CommitMessage
} }
} }
func addResultToTags(data *Data) { func addTagsBasedOnResult(cfg *Config) {
if data.Drone.BuildStatus == "success" { if cfg.Drone.BuildStatus == "success" {
data.App.Tags = append(data.App.Tags, "white_check_mark") cfg.App.Tags = append(cfg.App.Tags, "white_check_mark")
} else if data.Drone.BuildStatus == "failure" { } else if cfg.Drone.BuildStatus == "failure" {
data.App.Tags = append(data.App.Tags, "x") cfg.App.Tags = append(cfg.App.Tags, "x")
} else { } else {
data.App.Tags = append(data.App.Tags, "grey_question") cfg.App.Tags = append(cfg.App.Tags, "grey_question")
} }
} }
func sendNotification(data *Data) { func sendNotification(cfg *Config) {
req, _ := http.NewRequest("POST", req, _ := http.NewRequest("POST",
data.App.BaseUrl+"/"+data.App.Topic, cfg.App.BaseUrl+"/"+cfg.App.Topic,
strings.NewReader(data.App.Message)) strings.NewReader(cfg.App.Message))
if data.App.Token != "" { if cfg.App.Token != "" {
req.Header.Add("Authorization", "Bearer "+data.App.Token) req.Header.Add("Authorization", "Bearer "+cfg.App.Token)
} else { } else {
req.SetBasicAuth(data.App.Username, data.App.Password) req.SetBasicAuth(cfg.App.Username, cfg.App.Password)
} }
req.Header.Set("Title", data.App.Title) req.Header.Set("Title", cfg.App.Title)
req.Header.Set("Priority", data.App.Priority) req.Header.Set("Priority", cfg.App.Priority)
req.Header.Set("Tags", strings.Join(data.App.Tags, ",")) req.Header.Set("Tags", strings.Join(cfg.App.Tags, ","))
req.Header.Set("Actions", getActions(data)) req.Header.Set("Actions", getActions(cfg))
res, err := http.DefaultClient.Do(req) res, err := http.DefaultClient.Do(req)
if err != nil { if err != nil {
log.Fatalf("error trying to notify the result. Error: %+v", err) log.Fatalf("error trying to notify the result. Error: %+v", err)
@ -102,10 +102,10 @@ func sendNotification(data *Data) {
} }
} }
func getActions(data *Data) string { func getActions(cfg *Config) string {
var buildLink = "view, Build, " + data.Drone.BuildLink var buildLink = "view, Build, " + cfg.Drone.BuildLink
if strings.Contains(data.Ci.CommitRef, "refs/tags/") { if strings.Contains(cfg.Ci.CommitRef, "refs/tags/") {
return buildLink return buildLink
} }
return buildLink + "; view, Changes, " + data.Drone.CommitLink return buildLink + "; view, Changes, " + cfg.Drone.CommitLink
} }

4
go.mod
View File

@ -1,8 +1,8 @@
module git.parravidales.es/parra/drone-ntfy module git.parravidales.es/parra/drone-ntfy
go 1.22 go 1.19
require ( require (
github.com/caarlos0/env/v7 v7.1.0 github.com/caarlos0/env/v7 v7.0.0
github.com/joho/godotenv v1.5.1 github.com/joho/godotenv v1.5.1
) )

4
go.sum
View File

@ -1,4 +1,4 @@
github.com/caarlos0/env/v7 v7.1.0 h1:9lzTF5amyQeWHZzuZeKlCb5FWSUxpG1js43mhbY8ozg= github.com/caarlos0/env/v7 v7.0.0 h1:cyczlTd/zREwSr9ch/mwaDl7Hse7kJuUY8hvHfXu5WI=
github.com/caarlos0/env/v7 v7.1.0/go.mod h1:LPPWniDUq4JaO6Q41vtlyikhMknqymCLBw0eX4dcH1E= github.com/caarlos0/env/v7 v7.0.0/go.mod h1:LPPWniDUq4JaO6Q41vtlyikhMknqymCLBw0eX4dcH1E=
github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0= github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4= github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=