Пример #1
0
func onPush(body io.Reader) error {
	var pe api.PushEvent
	if err := json.NewDecoder(body).Decode(&pe); err != nil {
		return fmt.Errorf("invalid push event body: %v", err)
	}
	repo, err := getRepo(pe.Repository)
	if err != nil {
		return err
	}
	user, err := repo.GetUser(pe.UserID)
	if err != nil {
		return fmt.Errorf("unknown user: %v", err)
	}
	branch := getBranch(pe.Ref)
	if branch == "" {
		return fmt.Errorf("no branch")
	}
	commits := make([]*api.Commit, 0, len(pe.Commits))
	for _, c := range pe.Commits {
		if mergeMessage.MatchString(c.Message) {
			continue
		}
		commits = append(commits, c)
	}
	var message string
	switch len(commits) {
	case 0:
		return fmt.Errorf("empty commits")
	case 1:
		// Message here means Title, how useful.
		title := gitlab.ShortTitle(commits[0].Message)
		short := gitlab.ShortCommit(commits[0].ID)
		message = fmt.Sprintf("%s pushed to %s: %s - %s",
			user.Username, branch, title, repo.CommitURL(short))
	default:
		url := repo.CompareURL(pe.Before, pe.After)
		message = fmt.Sprintf("%s pushed %d commits to %s - %s",
			user.Username, len(commits), branch, url)
	}
	sendNotices(config.Feeds, repo.Name, message)
	return nil
}
Пример #2
0
func onMergeRequest(body io.Reader) error {
	var me api.MergeEvent
	if err := json.NewDecoder(body).Decode(&me); err != nil {
		return fmt.Errorf("invalid issue event body: %v", err)
	}
	attrs := me.ObjectAttributes
	title := gitlab.ShortTitle(attrs.Title)
	var message string
	switch attrs.Action {
	case "open":
		message = fmt.Sprintf("%s opened !%d: %s - %s",
			me.User.Username, attrs.Iid, title, attrs.URL)
	case "close", "reopen", "update", "merge":
		return nil
	default:
		return fmt.Errorf("merge action we don't handle: %s", attrs.Action)
	}
	repo, err := getRepo(me.Repository)
	if err != nil {
		return err
	}
	sendNotices(config.Feeds, repo.Name, message)
	return nil
}