Skip to content

Latest commit

 

History

History
113 lines (85 loc) · 3.73 KB

README.md

File metadata and controls

113 lines (85 loc) · 3.73 KB

Gitlab Webhook Dispatcher 🚀

Supported Go Versions Package Version GoDoc codecov Go Report Card lint tests MIT license

This is a simple webhook dispatcher for Gitlab. It listens for incoming webhooks and dispatches them to the appropriate handler.

✨ Features

  • 📋 Very convenient registration of listeners
  • 🔄 A single listener can implement multiple different webhook functions
  • ⚡ Support asynchronous and efficient processing
  • 🚀 Multiple dispatch methods

📦 Installation

go get github.com/flc1125/go-gitlab-webhook

💻 Usage

package main

import (
	"context"
	"net/http"

	"github.com/xanzy/go-gitlab"

	"github.com/flc1125/go-gitlab-webhook"
)

var (
	_ gitlabwebhook.BuildListener         = (*testBuildListener)(nil)
	_ gitlabwebhook.CommitCommentListener = (*testCommitCommentListener)(nil)
	_ gitlabwebhook.BuildListener         = (*testBuildAndCommitCommentListener)(nil)
	_ gitlabwebhook.CommitCommentListener = (*testBuildAndCommitCommentListener)(nil)
)

type testBuildListener struct{}

func (l *testBuildListener) OnBuild(ctx context.Context, event *gitlab.BuildEvent) error {
	// do something
	return nil
}

type testCommitCommentListener struct{}

func (l *testCommitCommentListener) OnCommitComment(ctx context.Context, event *gitlab.CommitCommentEvent) error {
	// do something
	return nil
}

type testBuildAndCommitCommentListener struct{}

func (l *testBuildAndCommitCommentListener) OnBuild(ctx context.Context, event *gitlab.BuildEvent) error {
	// do something
	return nil
}

func (l *testBuildAndCommitCommentListener) OnCommitComment(ctx context.Context, event *gitlab.CommitCommentEvent) error {
	// do something
	return nil
}

func main() {
	dispatcher := gitlabwebhook.NewDispatcher(
		gitlabwebhook.RegisterListeners(
			&testBuildListener{},
			&testCommitCommentListener{},
			&testBuildAndCommitCommentListener{},
		),
	)

	dispatcher.RegisterListeners(
		&testBuildListener{},
		&testCommitCommentListener{},
		&testBuildAndCommitCommentListener{},
	)

	http.Handle("/webhook", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
		if err := dispatcher.DispatchRequest(r,
			gitlabwebhook.DispatchRequestWithContext(context.Background()), // custom context
		); err != nil {
			http.Error(w, err.Error(), http.StatusInternalServerError)
			return
		}

		w.WriteHeader(http.StatusNoContent)
	}))

	if err := http.ListenAndServe(":8080", nil); err != nil {
		panic(err)
	}
}

📜 License

MIT License. See LICENSE for the full license text.

💖 Thanks

  • xanzy/go-gitlab: Go library for accessing the GitLab API
  • stretchr/testify: A toolkit with common assertions and mocks that plays nicely with the standard library