func/pkg/git/gitlab/gitlab.go

37 lines
972 B
Go

package gitlab
import (
"context"
"fmt"
"github.com/xanzy/go-gitlab"
)
type Client struct {
BaseURL string
PersonalAccessToken string
}
func (c Client) CreateWebHook(ctx context.Context, repoOwner, repoName, payloadURL, webhookSecret string) error {
t := true
f := false
glabCli, err := gitlab.NewClient(c.PersonalAccessToken,
gitlab.WithBaseURL(c.BaseURL),
gitlab.WithRequestOptions(gitlab.WithContext(ctx)))
if err != nil {
return fmt.Errorf("cannot create GitLab client: %w", err)
}
webhook := &gitlab.AddProjectHookOptions{
EnableSSLVerification: &f,
PushEvents: &t,
Token: &webhookSecret,
URL: &payloadURL,
}
// TODO check if the WebHook already exists. GitLab doesn't name WebHooks so there is never 403.
_, _, err = glabCli.Projects.AddProjectHook(repoOwner+"/"+repoName, webhook)
if err != nil {
return fmt.Errorf("cannot create gitlab webhook: %w", err)
}
return nil
}