Files
plugin-drone-docker-manifest/plugin.go
T
2018-01-09 11:08:16 +01:00

128 lines
2.2 KiB
Go

package main
import (
"errors"
"log"
"strings"
"github.com/drone-plugins/drone-manifest/command"
)
type (
Repo struct {
Owner string
Name string
Branch string
}
Build struct {
Path string
Tag string
Event string
Number int
Commit string
Ref string
Branch string
Author string
Pull string
Message string
DeployTo string
Status string
Link string
Started int64
Created int64
Tags []string
}
Job struct {
Started int64
}
Auto struct {
Tags []string
}
Config struct {
Username string
Password string
Platforms []string
Target string
Template string
Spec string
IgnoreMissing bool
}
Plugin struct {
Repo Repo
Build Build
Job Job
Auto Auto
Config Config
}
)
func (p *Plugin) Exec() error {
opts := make([]command.Option, 0)
if p.Config.Username == "" {
return errors.New("you must provide a username")
} else {
opts = append(opts, command.WithUsername(p.Config.Username))
}
if p.Config.Password == "" {
return errors.New("you must provide a password")
} else {
opts = append(opts, command.WithPassword(p.Config.Password))
}
if p.Config.Spec != "" {
spec, err := RenderTrim(p.Config.Spec, p)
if err != nil {
return err
}
opts = append(opts, command.WithSpec(spec))
log.Printf(
"pushing by spec",
)
} else {
if len(p.Config.Platforms) == 0 {
return errors.New("you must provide platforms")
} else {
opts = append(opts, command.WithPlatforms(p.Config.Platforms))
}
if p.Config.Target == "" {
return errors.New("you must provide a target")
} else {
opts = append(opts, command.WithTarget(p.Config.Target))
}
if p.Config.Template == "" {
return errors.New("you must provide a template")
} else {
opts = append(opts, command.WithTemplate(p.Config.Template))
}
log.Printf(
"pushing %s to %s for %s",
p.Config.Template,
p.Config.Target,
strings.Join(p.Config.Platforms, ", "),
)
}
if p.Config.IgnoreMissing {
opts = append(opts, command.IgnoreMissing())
}
if p.Build.Path != "" {
opts = append(opts, command.WithPath(p.Build.Path))
}
return command.New(opts...).Exec()
}