116 lines
3.6 KiB
Go
116 lines
3.6 KiB
Go
package bintray
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"github.com/drone/drone/shared/build/buildfile"
|
|
)
|
|
|
|
const bintray_endpoint = "https://api.bintray.com/content/%s/%s/%s/%s/%s"
|
|
|
|
type Package struct {
|
|
File string `yaml:"file"`
|
|
Type string `yaml:"type"`
|
|
Owner string `yaml:"owner"`
|
|
Repository string `yaml:"repository"`
|
|
Package string `yaml:"package"`
|
|
Version string `yaml:"version"`
|
|
Target string `yaml:"target"`
|
|
Distr string `yaml:"distr,omitempty"`
|
|
Component string `yaml:"component,omitempty"`
|
|
Arch []string `yaml:"arch,omitempty"`
|
|
Publish bool `yaml:"publish,omitempty"`
|
|
Override bool `yaml:"override,omitempty"`
|
|
}
|
|
|
|
func (p *Package) Write(username, api_key string, f *buildfile.Buildfile) {
|
|
if len(p.File) == 0 || len(p.Owner) == 0 || len(p.Repository) == 0 || len(p.Package) == 0 || len(p.Version) == 0 || len(p.Target) == 0 {
|
|
f.WriteCmdSilent(`echo -e "Bintray Plugin: Missing argument(s)\n\n"`)
|
|
|
|
if len(p.Package) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage not defined in yaml config"`))
|
|
return
|
|
}
|
|
|
|
if len(p.File) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: file not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
if len(p.Owner) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: owner not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
if len(p.Repository) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: repository not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
if len(p.Version) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: version not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
if len(p.Target) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: target not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
f.WriteCmdSilent("exit 1")
|
|
|
|
return
|
|
}
|
|
|
|
switch p.Type {
|
|
case "deb":
|
|
p.debUpload(username, api_key, f)
|
|
case "rpm":
|
|
p.upload(username, api_key, f)
|
|
case "maven":
|
|
p.upload(username, api_key, f)
|
|
default:
|
|
p.upload(username, api_key, f)
|
|
}
|
|
}
|
|
|
|
func (p *Package) debUpload(username, api_key string, f *buildfile.Buildfile) {
|
|
if len(p.Distr) == 0 || len(p.Component) == 0 || len(p.Arch) == 0 {
|
|
f.WriteCmdSilent(`echo -e "Bintray Plugin: Missing argument(s)\n\n"`)
|
|
|
|
if len(p.Distr) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: distr not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
if len(p.Component) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: component not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
if len(p.Arch) == 0 {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\tpackage %s: arch not defined in yaml config"`, p.Package))
|
|
}
|
|
|
|
f.WriteCmdSilent("exit 1")
|
|
|
|
return
|
|
}
|
|
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\nUpload %s to %s/%s/%s"`, p.File, p.Owner, p.Repository, p.Package))
|
|
f.WriteCmdSilent(fmt.Sprintf("curl -s -T %s -u%s:%s %s\\;deb_distribution\\=%s\\;deb_component\\=%s\\;deb_architecture=\\%s\\;publish\\=%d\\;override\\=%d",
|
|
p.File, username, api_key, p.getEndpoint(), p.Distr, p.Component, strings.Join(p.Arch, ","), boolToInt(p.Publish), boolToInt(p.Override)))
|
|
|
|
}
|
|
|
|
func (p *Package) upload(username, api_key string, f *buildfile.Buildfile) {
|
|
f.WriteCmdSilent(fmt.Sprintf(`echo -e "\nUpload %s to %s/%s/%s"`, p.File, p.Owner, p.Repository, p.Package))
|
|
f.WriteCmdSilent(fmt.Sprintf("curl -s -T %s -u%s:%s %s\\;publish\\=%d\\;override\\=%d",
|
|
p.File, username, api_key, p.getEndpoint(), boolToInt(p.Publish), boolToInt(p.Override)))
|
|
}
|
|
|
|
func (p *Package) getEndpoint() string {
|
|
return fmt.Sprintf(bintray_endpoint, p.Owner, p.Repository, p.Package, p.Version, p.Target)
|
|
}
|
|
|
|
func boolToInt(val bool) int {
|
|
if val {
|
|
return 1
|
|
} else {
|
|
return 0
|
|
}
|
|
}
|