diff --git a/drone/drone b/drone/drone new file mode 100755 index 0000000..7dcb63c Binary files /dev/null and b/drone/drone differ diff --git a/drone/plugins/convert/convert.go b/drone/plugins/convert/convert.go new file mode 100644 index 0000000..aa3a88a --- /dev/null +++ b/drone/plugins/convert/convert.go @@ -0,0 +1,122 @@ +package convert + +import ( + "context" + "io/ioutil" + + "github.com/drone/drone-cli/drone/internal" + "github.com/drone/drone-go/drone" + "github.com/drone/drone-go/plugin/converter" + "github.com/urfave/cli" +) + +// Command exports the registry command set. +var Command = cli.Command{ + Name: "convert", + Usage: "convert the pipeline configuration", + ArgsUsage: "[repo/name]", + Action: convert, + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "path", + Usage: "path to the configuration file", + }, + cli.StringFlag{ + Name: "ref", + Usage: "git reference", + Value: "refs/heads/master", + }, + cli.StringFlag{ + Name: "source", + Usage: "source branch", + Value: "master", + }, + cli.StringFlag{ + Name: "target", + Usage: "target branch", + Value: "master", + }, + cli.StringFlag{ + Name: "before", + Usage: "commit sha before the change", + }, + cli.StringFlag{ + Name: "after", + Usage: "commit sha after the change", + }, + cli.StringFlag{ + Name: "repository", + Usage: "repository name", + }, + + // TODO(bradrydzewski) these parameters should + // be defined globally for all plugin commands. + + cli.StringFlag{ + Name: "endpoint", + Usage: "plugin endpoint", + EnvVar: "DRONE_CONVERT_ENDPOINT", + }, + cli.StringFlag{ + Name: "secret", + Usage: "plugin secret", + EnvVar: "DRONE_CONVERT_SECRET", + }, + cli.StringFlag{ + Name: "ssl-skip-verify", + Usage: "plugin ssl verification disabled", + EnvVar: "DRONE_CONVERT_SKIP_VERIFY", + }, + }, +} + +func convert(c *cli.Context) error { + slug := c.String("repository") + owner, name, _ := internal.ParseRepo(slug) + + path := c.String("path") + if path == "" { + path = c.Args().First() + } + + raw, err := ioutil.ReadFile(path) + if err != nil { + return err + } + + req := &converter.Request{ + Repo: drone.Repo{ + Namespace: owner, + Name: name, + Slug: slug, + Config: path, + }, + Build: drone.Build{ + Ref: c.String("ref"), + Before: c.String("before"), + After: c.String("after"), + Source: c.String("source"), + Target: c.String("target"), + }, + Config: drone.Config{ + Data: string(raw), + }, + } + + client := converter.Client( + c.String("endpoint"), + c.String("secret"), + c.Bool("ssl-skip-verify"), + ) + res, err := client.Convert(context.Background(), req) + if err != nil { + return err + } + switch { + case res == nil: + println(string(raw)) + case res != nil: + println(res.Data) + } + return nil +} diff --git a/drone/plugins/plugins.go b/drone/plugins/plugins.go index 3e3a66e..59738ed 100644 --- a/drone/plugins/plugins.go +++ b/drone/plugins/plugins.go @@ -2,6 +2,7 @@ package plugins import ( "github.com/drone/drone-cli/drone/plugins/config" + "github.com/drone/drone-cli/drone/plugins/convert" "github.com/drone/drone-cli/drone/plugins/registry" "github.com/drone/drone-cli/drone/plugins/secret" @@ -14,6 +15,7 @@ var Command = cli.Command{ Usage: "plugin helper functions", Subcommands: []cli.Command{ config.Command, + convert.Command, secret.Command, registry.Command, }, diff --git a/go.mod b/go.mod index db958a9..1a4f754 100644 --- a/go.mod +++ b/go.mod @@ -11,7 +11,7 @@ require ( github.com/docker/distribution v2.7.1+incompatible github.com/docker/go-connections v0.3.0 github.com/docker/go-units v0.3.3 - github.com/drone/drone-go v0.0.0-20190809073937-cba78c0895aa + github.com/drone/drone-go v1.0.6 github.com/drone/drone-runtime v1.0.7-0.20190729070836-38f28a11afe8 github.com/drone/drone-yaml v0.0.0-20190729072335-70fa398b3560 github.com/drone/envsubst v1.0.1 diff --git a/go.sum b/go.sum index 6f0d9f9..077ad9e 100644 --- a/go.sum +++ b/go.sum @@ -21,6 +21,8 @@ github.com/docker/go-units v0.3.3 h1:Xk8S3Xj5sLGlG5g67hJmYMmUgXv5N4PhkjJHHqrwnTk github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/drone/drone-go v0.0.0-20190809073937-cba78c0895aa h1:XRCcOdGaOUd74BZRO4T0XZeEo5h4j/dkod7TV6JI0pk= github.com/drone/drone-go v0.0.0-20190809073937-cba78c0895aa/go.mod h1:GxyeGClYohaKNYJv/ZpsmVHtMJ7WhoT+uDaJNcDIrk4= +github.com/drone/drone-go v1.0.6 h1:YbMwEwlE3HC4InN0bT21EDvzImct5dGG1I56dSdUhjI= +github.com/drone/drone-go v1.0.6/go.mod h1:GxyeGClYohaKNYJv/ZpsmVHtMJ7WhoT+uDaJNcDIrk4= github.com/drone/drone-runtime v0.0.0-20190729082142-807d0aeaa221/go.mod h1:+osgwGADc/nyl40J0fdsf8Z09bgcBZXvXXnLOY48zYs= github.com/drone/drone-runtime v1.0.7-0.20190729070836-38f28a11afe8 h1:lcS2z7+ZySmVM+XJJjBZZPTcn6IB1BSfLWtDGyco3xo= github.com/drone/drone-runtime v1.0.7-0.20190729070836-38f28a11afe8/go.mod h1:+osgwGADc/nyl40J0fdsf8Z09bgcBZXvXXnLOY48zYs=