Skip to content

Commit

Permalink
Merge pull request #5 from drone-plugins/webhook_support
Browse files Browse the repository at this point in the history
Added webhook support
  • Loading branch information
shubham149 authored Oct 18, 2021
2 parents 45c5927 + 5fe9cca commit d60bff8
Show file tree
Hide file tree
Showing 6 changed files with 102 additions and 16 deletions.
26 changes: 20 additions & 6 deletions cmd/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (

plugin "github.com/drone-plugins/drone-github-actions"
"github.com/drone-plugins/drone-github-actions/daemon"
"github.com/drone-plugins/drone-github-actions/pkg/encoder"
"github.com/joho/godotenv"
"github.com/pkg/errors"
"github.com/sirupsen/logrus"
Expand Down Expand Up @@ -75,6 +76,11 @@ func main() {
Value: "node:12-buster-slim",
EnvVar: "PLUGIN_ACTION_IMAGE",
},
cli.StringFlag{
Name: "event-payload",
Usage: "Webhook event payload",
EnvVar: "PLUGIN_EVENT_PAYLOAD",
},

// daemon flags
cli.StringFlag{
Expand Down Expand Up @@ -167,11 +173,12 @@ func run(c *cli.Context) error {

plugin := plugin.Plugin{
Action: plugin.Action{
Uses: c.String("action-name"),
With: actionWith,
Env: actionEnv,
Verbose: c.Bool("action-verbose"),
Image: c.String("action-image"),
Uses: c.String("action-name"),
With: actionWith,
Env: actionEnv,
Verbose: c.Bool("action-verbose"),
Image: c.String("action-image"),
EventPayload: c.String("event-payload"),
},
Daemon: daemon.Daemon{
Registry: c.String("docker.registry"),
Expand Down Expand Up @@ -199,7 +206,14 @@ func strToMap(s string) (map[string]string, error) {
}

if err := json.Unmarshal([]byte(s), &m); err != nil {
return nil, err
m1 := make(map[string]interface{})
if e := json.Unmarshal([]byte(s), &m1); e != nil {
return nil, e
}

for k, v := range m1 {
m[k] = encoder.Encode(v)
}
}
return m, nil
}
6 changes: 4 additions & 2 deletions daemon/daemon.go
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ type Daemon struct {
Insecure bool // Docker daemon enable insecure registries
StorageDriver string // Docker daemon storage driver
StoragePath string // Docker daemon storage path
Disabled bool // DOcker daemon is disabled (already running)
Disabled bool // Docker daemon is disabled (already running)
Debug bool // Docker daemon started in debug mode
Bip string // Docker daemon network bridge IP address
DNS []string // Docker daemon dns server
Expand All @@ -23,7 +23,9 @@ type Daemon struct {
}

func StartDaemon(d Daemon) error {
startDaemon(d)
if !d.Disabled {
startDaemon(d)
}
return waitForDaemon()
}

Expand Down
2 changes: 2 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ module github.com/drone-plugins/drone-github-actions
go 1.16

require (
github.com/buildkite/yaml v2.1.0+incompatible
github.com/ghodss/yaml v1.0.0
github.com/joho/godotenv v1.3.0
github.com/pkg/errors v0.9.1
github.com/sirupsen/logrus v1.8.1
Expand Down
4 changes: 4 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -1,7 +1,11 @@
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/buildkite/yaml v2.1.0+incompatible h1:xirI+ql5GzfikVNDmt+yeiXpf/v1Gt03qXTtT5WXdr8=
github.com/buildkite/yaml v2.1.0+incompatible/go.mod h1:UoU8vbcwu1+vjZq01+KrpSeLBgQQIjL/H7Y6KwikUrI=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk=
github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04=
github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc=
github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg=
github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
Expand Down
52 changes: 52 additions & 0 deletions pkg/encoder/encoder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
package encoder

import (
"encoding/base64"
"strconv"
"strings"

"github.com/buildkite/yaml"
json "github.com/ghodss/yaml"
)

// Encode encodes an interface value as a string. This function
// assumes all types were unmarshaled by the yaml.v2 library.
// The yaml.v2 package only supports a subset of primitive types.
func Encode(v interface{}) string {
switch v := v.(type) {
case string:
return v
case bool:
return strconv.FormatBool(v)
case int:
return strconv.Itoa(v)
case float64:
return strconv.FormatFloat(v, 'g', -1, 64)
case []byte:
return base64.StdEncoding.EncodeToString(v)
case []interface{}:
return encodeSlice(v)
default:
return encodeMap(v)
}
}

// helper function encodes a parameter in map format.
func encodeMap(v interface{}) string {
yml, _ := yaml.Marshal(v)
out, _ := json.YAMLToJSON(yml)
return string(out)
}

// helper function encodes a parameter in slice format.
func encodeSlice(v interface{}) string {
out, _ := yaml.Marshal(v)

in := []string{}
err := yaml.Unmarshal(out, &in)
if err == nil {
return strings.Join(in, ",")
}
out, _ = json.YAMLToJSON(out)
return string(out)
}
28 changes: 20 additions & 8 deletions plugin.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,21 @@ package plugin

import (
"fmt"
"io/ioutil"
"os"
"os/exec"
"strings"

"github.com/drone-plugins/drone-github-actions/daemon"
"github.com/drone-plugins/drone-github-actions/utils"
"github.com/pkg/errors"
)

const (
envFile = "/tmp/action.env"
secretFile = "/tmp/action.secrets"
workflowFile = "/tmp/workflow.yml"
envFile = "/tmp/action.env"
secretFile = "/tmp/action.secrets"
workflowFile = "/tmp/workflow.yml"
eventPayloadFile = "/tmp/event.json"
)

var (
Expand All @@ -22,11 +25,12 @@ var (

type (
Action struct {
Uses string
With map[string]string
Env map[string]string
Image string
Verbose bool
Uses string
With map[string]string
Env map[string]string
Image string
EventPayload string // Webhook event payload
Verbose bool
}

Plugin struct {
Expand Down Expand Up @@ -63,6 +67,14 @@ func (p Plugin) Exec() error {
"--detect-event",
}

if p.Action.EventPayload != "" {
if err := ioutil.WriteFile(eventPayloadFile, []byte(p.Action.EventPayload), 0644); err != nil {
return errors.Wrap(err, "failed to write event payload to file")
}

cmdArgs = append(cmdArgs, "--eventpath", eventPayloadFile)
}

if p.Action.Verbose {
cmdArgs = append(cmdArgs, "-v")
}
Expand Down

0 comments on commit d60bff8

Please sign in to comment.