mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-01-13 21:21:03 +00:00
57 lines
1.2 KiB
Go
57 lines
1.2 KiB
Go
package rp
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"github.com/apricote/releaser-pleaser/internal/git"
|
|
"github.com/apricote/releaser-pleaser/internal/markdown"
|
|
)
|
|
|
|
func parsePRBodyForCommitOverrides(commits []git.Commit) ([]git.Commit, error) {
|
|
result := make([]git.Commit, 0, len(commits))
|
|
|
|
for _, commit := range commits {
|
|
singleResult, err := parseSinglePRBodyForCommitOverrides(commit)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
result = append(result, singleResult...)
|
|
}
|
|
|
|
return result, nil
|
|
}
|
|
|
|
func parseSinglePRBodyForCommitOverrides(commit git.Commit) ([]git.Commit, error) {
|
|
if commit.PullRequest == nil {
|
|
return []git.Commit{commit}, nil
|
|
}
|
|
|
|
source := []byte(commit.PullRequest.Description)
|
|
var overridesText string
|
|
var found bool
|
|
err := markdown.WalkAST(source, markdown.GetCodeBlockText(source, "rp-commits", &overridesText, &found))
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if !found {
|
|
return []git.Commit{commit}, nil
|
|
}
|
|
|
|
lines := strings.Split(overridesText, "\n")
|
|
result := make([]git.Commit, 0, len(lines))
|
|
for _, line := range lines {
|
|
// Only consider lines with text
|
|
line = strings.TrimSpace(line)
|
|
if line == "" {
|
|
continue
|
|
}
|
|
|
|
newCommit := commit
|
|
newCommit.Message = line
|
|
result = append(result, newCommit)
|
|
}
|
|
|
|
return result, nil
|
|
}
|