Something went wrong. Try again.
forked from charmbracelet/soft-serve
Something went wrong. Try again.
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115package webhook
import ( "context" "fmt"
gitm "github.com/aymanbagabas/git-module" "github.com/charmbracelet/soft-serve/git" "github.com/charmbracelet/soft-serve/pkg/config" "github.com/charmbracelet/soft-serve/pkg/db" "github.com/charmbracelet/soft-serve/pkg/proto" "github.com/charmbracelet/soft-serve/pkg/store")
// PushEvent is a push event.type PushEvent struct { Common
// Ref is the branch or tag name. Ref string `json:"ref" url:"ref"` // Before is the previous commit SHA. Before string `json:"before" url:"before"` // After is the current commit SHA. After string `json:"after" url:"after"` // Commits is the list of commits. Commits []Commit `json:"commits" url:"commits"`}
// NewPushEvent sends a push event.func NewPushEvent(ctx context.Context, user proto.User, repo proto.Repository, ref, before, after string) (PushEvent, error) { event := EventPush
payload := PushEvent{ Ref: ref, Before: before, After: after, Common: Common{ EventType: event, Repository: Repository{ ID: repo.ID(), Name: repo.Name(), Description: repo.Description(), ProjectName: repo.ProjectName(), Private: repo.IsPrivate(), CreatedAt: repo.CreatedAt(), UpdatedAt: repo.UpdatedAt(), }, Sender: User{ ID: user.ID(), Username: user.Username(), }, }, }
cfg := config.FromContext(ctx) payload.Repository.HTTPURL = repoURL(cfg.HTTP.PublicURL, repo.Name()) payload.Repository.SSHURL = repoURL(cfg.SSH.PublicURL, repo.Name()) payload.Repository.GitURL = repoURL(cfg.Git.PublicURL, repo.Name())
// Find repo owner. dbx := db.FromContext(ctx) datastore := store.FromContext(ctx) owner, err := datastore.GetUserByID(ctx, dbx, repo.UserID()) if err != nil { return PushEvent{}, db.WrapError(err) }
payload.Repository.Owner.ID = owner.ID payload.Repository.Owner.Username = owner.Username
// Find commits. r, err := repo.Open() if err != nil { return PushEvent{}, err }
payload.Repository.DefaultBranch, _ = getDefaultBranch(repo)
rev := after if !git.IsZeroHash(before) { rev = fmt.Sprintf("%s..%s", before, after) }
commits, err := r.Log(rev, gitm.LogOptions{ // XXX: limit to 20 commits for now // TODO: implement a commits api MaxCount: 20, }) if err != nil { return PushEvent{}, err }
payload.Commits = make([]Commit, len(commits)) for i, c := range commits { payload.Commits[i] = Commit{ ID: c.ID.String(), Message: c.Message, Title: c.Summary(), Author: Author{ Name: c.Author.Name, Email: c.Author.Email, Date: c.Author.When, }, Committer: Author{ Name: c.Committer.Name, Email: c.Committer.Email, Date: c.Committer.When, }, Timestamp: c.Committer.When, } }
return payload, nil}