webhooks

package module
Version: v3.0.0+incompatible Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 8, 2017 License: MIT Imports: 1 Imported by: 0

README

Library webhooks

Project status Build Status Coverage Status Go Report Card GoDoc License

Library webhooks allows for easy recieving and parsing of GitHub, Bitbucket and GitLab Webhook Events

Features:

  • Parses the entire payload, not just a few fields.
  • Fields + Schema directly lines up with webhook posted json

Notes:

  • Currently only accepting json payloads.

Installation

Use go get.

	go get -u gopkg.in/go-playground/webhooks.v2

Then import the package into your own code.

import "gopkg.in/go-playground/webhooks.v2"

Usage and Documentation

Please see http://godoc.org/gopkg.in/go-playground/webhooks.v2 for detailed usage docs.

Examples:

Multiple Handlers for each event you subscribe to

package main

import (
	"fmt"
	"strconv"

	"gopkg.in/go-playground/webhooks.v2"
	"gopkg.in/go-playground/webhooks.v2/github"
)

const (
	path = "/webhooks"
	port = 3016
)

func main() {

	hook := github.New(&github.Config{Secret: "MyGitHubSuperSecretSecrect...?"})
	hook.RegisterEvents(HandleRelease, github.ReleaseEvent)
	hook.RegisterEvents(HandlePullRequest, github.PullRequestEvent)

	err := webhooks.Run(hook, ":"+strconv.Itoa(port), path)
	if err != nil {
		fmt.Println(err)
	}
}

// HandleRelease handles GitHub release events
func HandleRelease(payload interface{}, header webhooks.Header) {

	fmt.Println("Handling Release")

	pl := payload.(github.ReleasePayload)

	// only want to compile on full releases
	if pl.Release.Draft || pl.Release.Prelelease || pl.Release.TargetCommitish != "master" {
		return
	}

	// Do whatever you want from here...
	fmt.Printf("%+v", pl)
}

// HandlePullRequest handles GitHub pull_request events
func HandlePullRequest(payload interface{}, header webhooks.Header) {

	fmt.Println("Handling Pull Request")

	pl := payload.(github.PullRequestPayload)

	// Do whatever you want from here...
	fmt.Printf("%+v", pl)
}

Single receiver for events you subscribe to

package main

import (
	"fmt"
	"strconv"

	"gopkg.in/go-playground/webhooks.v2"
	"gopkg.in/go-playground/webhooks.v2/github"
)

const (
	path = "/webhooks"
	port = 3016
)

func main() {

	hook := github.New(&github.Config{Secret: "MyGitHubSuperSecretSecrect...?"})
	hook.RegisterEvents(HandleMultiple, github.ReleaseEvent, github.PullRequestEvent) // Add as many as you want

	err := webhooks.Run(hook, ":"+strconv.Itoa(port), path)
	if err != nil {
		fmt.Println(err)
	}
}

// HandleMultiple handles multiple GitHub events
func HandleMultiple(payload interface{}, header webhooks.Header) {

	fmt.Println("Handling Payload..")

	switch payload.(type) {

	case github.ReleasePayload:
		release := payload.(github.ReleasePayload)
		// Do whatever you want from here...
		fmt.Printf("%+v", release)

	case github.PullRequestPayload:
		pullRequest := payload.(github.PullRequestPayload)
		// Do whatever you want from here...
		fmt.Printf("%+v", pullRequest)
	}
}

Contributing

Pull requests for other services are welcome!

If the changes being proposed or requested are breaking changes, please create an issue for discussion.

License

Distributed under MIT License, please see license file in code for more details.

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func Run

func Run(hook Webhook, addr string, path string) error

Run runs a server

func RunServer

func RunServer(s *http.Server, hook Webhook, path string) error

RunServer runs a custom server.

func RunTLSServer

func RunTLSServer(s *http.Server, hook Webhook, path string) error

RunTLSServer runs a custom server with TLS configuration. NOTE: http.Server Handler will be overridden by this library, just set it to nil. Setting the Certificates can be done in the http.Server.TLSConfig.Certificates see example here: https://github.com/go-playground/webhooks/blob/v2/webhooks_test.go#L178

Types

type Header http.Header

Header provides http.Header to minimize imports

type ProcessPayloadFunc

type ProcessPayloadFunc func(payload interface{}, header Header)

ProcessPayloadFunc is a common function for payload return values

type Provider

type Provider int

Provider defines the type of webhook

const (
	GitHub Provider = iota
	Bitbucket
	GitLab
)

webhooks available providers

func (Provider) String

func (p Provider) String() string

type Webhook

type Webhook interface {
	Provider() Provider
	ParsePayload(w http.ResponseWriter, r *http.Request)
}

Webhook interface defines a webhook to recieve events

Source Files

Directories

Path Synopsis
examples

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL