gitlabwebhook

package module
v1.0.12 Latest Latest
Warning

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

Go to latest
Published: Dec 10, 2024 License: MIT Imports: 6 Imported by: 0

README

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

Documentation

Index

Constants

This section is empty.

Variables

View Source
var ErrUnsupportedEvent = errors.New("gitlab-webhook: unsupported event type")

Functions

This section is empty.

Types

type BuildListener

type BuildListener interface {
	OnBuild(ctx context.Context, event *gitlab.BuildEvent) error
}

type CommitCommentListener

type CommitCommentListener interface {
	OnCommitComment(ctx context.Context, event *gitlab.CommitCommentEvent) error
}

type DeploymentListener

type DeploymentListener interface {
	OnDeployment(ctx context.Context, event *gitlab.DeploymentEvent) error
}

type DispatchRequestOption

type DispatchRequestOption func(*dispatchRequestOptions)

func DispatchRequestWithContext

func DispatchRequestWithContext(ctx context.Context) DispatchRequestOption

type Dispatcher

type Dispatcher struct {
	// contains filtered or unexported fields
}

func NewDispatcher

func NewDispatcher(opts ...Option) *Dispatcher

func (*Dispatcher) Dispatch

func (d *Dispatcher) Dispatch(ctx context.Context, event any) error

func (*Dispatcher) DispatchRequest

func (d *Dispatcher) DispatchRequest(req *http.Request, opts ...DispatchRequestOption) error

func (*Dispatcher) DispatchWebhook

func (d *Dispatcher) DispatchWebhook(ctx context.Context, eventType gitlab.EventType, payload []byte) error

func (*Dispatcher) RegisterBuildListener

func (d *Dispatcher) RegisterBuildListener(listeners ...BuildListener)

func (*Dispatcher) RegisterCommitCommentListener

func (d *Dispatcher) RegisterCommitCommentListener(listeners ...CommitCommentListener)

func (*Dispatcher) RegisterDeploymentListener

func (d *Dispatcher) RegisterDeploymentListener(listeners ...DeploymentListener)

func (*Dispatcher) RegisterFeatureFlagListener

func (d *Dispatcher) RegisterFeatureFlagListener(listeners ...FeatureFlagListener)

func (*Dispatcher) RegisterGroupResourceAccessTokenListener

func (d *Dispatcher) RegisterGroupResourceAccessTokenListener(listeners ...GroupResourceAccessTokenListener)

func (*Dispatcher) RegisterIssueCommentListener

func (d *Dispatcher) RegisterIssueCommentListener(listeners ...IssueCommentListener)

func (*Dispatcher) RegisterIssueListener

func (d *Dispatcher) RegisterIssueListener(listeners ...IssueListener)

func (*Dispatcher) RegisterJobListener

func (d *Dispatcher) RegisterJobListener(listeners ...JobListener)

func (*Dispatcher) RegisterListeners

func (d *Dispatcher) RegisterListeners(listeners ...any)

func (*Dispatcher) RegisterMemberListener

func (d *Dispatcher) RegisterMemberListener(listeners ...MemberListener)

func (*Dispatcher) RegisterMergeCommentListener

func (d *Dispatcher) RegisterMergeCommentListener(listeners ...MergeCommentListener)

func (*Dispatcher) RegisterMergeListener

func (d *Dispatcher) RegisterMergeListener(listeners ...MergeListener)

func (*Dispatcher) RegisterPipelineListener

func (d *Dispatcher) RegisterPipelineListener(listeners ...PipelineListener)

func (*Dispatcher) RegisterProjectResourceAccessTokenListener

func (d *Dispatcher) RegisterProjectResourceAccessTokenListener(listeners ...ProjectResourceAccessTokenListener)

func (*Dispatcher) RegisterPushListener

func (d *Dispatcher) RegisterPushListener(listeners ...PushListener)

func (*Dispatcher) RegisterReleaseListener

func (d *Dispatcher) RegisterReleaseListener(listeners ...ReleaseListener)

func (*Dispatcher) RegisterSnippetCommentListener

func (d *Dispatcher) RegisterSnippetCommentListener(listeners ...SnippetCommentListener)

func (*Dispatcher) RegisterSubGroupListener

func (d *Dispatcher) RegisterSubGroupListener(listeners ...SubGroupListener)

func (*Dispatcher) RegisterTagListener

func (d *Dispatcher) RegisterTagListener(listeners ...TagListener)

func (*Dispatcher) RegisterWikiPageListener

func (d *Dispatcher) RegisterWikiPageListener(listeners ...WikiPageListener)

type FeatureFlagListener

type FeatureFlagListener interface {
	OnFeatureFlag(ctx context.Context, event *gitlab.FeatureFlagEvent) error
}

type GroupResourceAccessTokenListener

type GroupResourceAccessTokenListener interface {
	OnGroupResourceAccessToken(ctx context.Context, event *gitlab.GroupResourceAccessTokenEvent) error
}

type IssueCommentListener

type IssueCommentListener interface {
	OnIssueComment(ctx context.Context, event *gitlab.IssueCommentEvent) error
}

type IssueListener

type IssueListener interface {
	OnIssue(ctx context.Context, event *gitlab.IssueEvent) error
}

type JobListener

type JobListener interface {
	OnJob(ctx context.Context, event *gitlab.JobEvent) error
}

type MemberListener

type MemberListener interface {
	OnMember(ctx context.Context, event *gitlab.MemberEvent) error
}

type MergeCommentListener

type MergeCommentListener interface {
	OnMergeComment(ctx context.Context, event *gitlab.MergeCommentEvent) error
}

type MergeListener

type MergeListener interface {
	OnMerge(ctx context.Context, event *gitlab.MergeEvent) error
}

type Option

type Option func(*Dispatcher)

func RegisterListeners

func RegisterListeners(listeners ...any) Option

type PipelineListener

type PipelineListener interface {
	OnPipeline(ctx context.Context, event *gitlab.PipelineEvent) error
}

type ProjectResourceAccessTokenListener

type ProjectResourceAccessTokenListener interface {
	OnProjectResourceAccessToken(ctx context.Context, event *gitlab.ProjectResourceAccessTokenEvent) error
}

type PushListener

type PushListener interface {
	OnPush(ctx context.Context, event *gitlab.PushEvent) error
}

type ReleaseListener

type ReleaseListener interface {
	OnRelease(ctx context.Context, event *gitlab.ReleaseEvent) error
}

type SnippetCommentListener

type SnippetCommentListener interface {
	OnSnippetComment(ctx context.Context, event *gitlab.SnippetCommentEvent) error
}

type SubGroupListener

type SubGroupListener interface {
	OnSubGroup(ctx context.Context, event *gitlab.SubGroupEvent) error
}

type TagListener

type TagListener interface {
	OnTag(ctx context.Context, event *gitlab.TagEvent) error
}

type WikiPageListener

type WikiPageListener interface {
	OnWikiPage(ctx context.Context, event *gitlab.WikiPageEvent) error
}

Jump to

Keyboard shortcuts

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