mirror of
https://github.com/apricote/releaser-pleaser.git
synced 2026-02-09 19:27:04 +00:00
Compare commits
3 commits
74122b69e7
...
e2e0246004
| Author | SHA1 | Date | |
|---|---|---|---|
| e2e0246004 | |||
|
|
e7333e4603 | ||
| 2621c48d75 |
6 changed files with 72 additions and 34 deletions
|
|
@ -7,6 +7,7 @@
|
|||
- add support for GitLab repositories (#49)
|
||||
- add shell to container image (#59)
|
||||
- **gitlab**: add CI/CD component (#55)
|
||||
- **changelog**: omit version heading in forge release notes
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
|
|
|
|||
|
|
@ -26,27 +26,37 @@ func init() {
|
|||
}
|
||||
}
|
||||
|
||||
func NewChangelogEntry(logger *slog.Logger, commits []commitparser.AnalyzedCommit, version, link, prefix, suffix string) (string, error) {
|
||||
features := make([]commitparser.AnalyzedCommit, 0)
|
||||
fixes := make([]commitparser.AnalyzedCommit, 0)
|
||||
func DefaultTemplate() *template.Template {
|
||||
return changelogTemplate
|
||||
}
|
||||
|
||||
for _, commit := range commits {
|
||||
switch commit.Type {
|
||||
case "feat":
|
||||
features = append(features, commit)
|
||||
case "fix":
|
||||
fixes = append(fixes, commit)
|
||||
type Data struct {
|
||||
Commits map[string][]commitparser.AnalyzedCommit
|
||||
Version string
|
||||
VersionLink string
|
||||
Prefix string
|
||||
Suffix string
|
||||
}
|
||||
|
||||
func New(commits map[string][]commitparser.AnalyzedCommit, version, versionLink, prefix, suffix string) Data {
|
||||
return Data{
|
||||
Commits: commits,
|
||||
Version: version,
|
||||
VersionLink: versionLink,
|
||||
Prefix: prefix,
|
||||
Suffix: suffix,
|
||||
}
|
||||
}
|
||||
|
||||
type Formatting struct {
|
||||
HideVersionTitle bool
|
||||
}
|
||||
|
||||
func Entry(logger *slog.Logger, tpl *template.Template, data Data, formatting Formatting) (string, error) {
|
||||
var changelog bytes.Buffer
|
||||
err := changelogTemplate.Execute(&changelog, map[string]any{
|
||||
"Features": features,
|
||||
"Fixes": fixes,
|
||||
"Version": version,
|
||||
"VersionLink": link,
|
||||
"Prefix": prefix,
|
||||
"Suffix": suffix,
|
||||
err := tpl.Execute(&changelog, map[string]any{
|
||||
"Data": data,
|
||||
"Formatting": formatting,
|
||||
})
|
||||
if err != nil {
|
||||
return "", err
|
||||
|
|
|
|||
|
|
@ -1,22 +1,24 @@
|
|||
## [{{.Version}}]({{.VersionLink}})
|
||||
{{- if .Prefix }}
|
||||
{{ .Prefix }}
|
||||
{{define "entry" -}}
|
||||
- {{ if .Scope }}**{{.Scope}}**: {{end}}{{.Description}}
|
||||
{{ end }}
|
||||
|
||||
{{- if not .Formatting.HideVersionTitle }}
|
||||
## [{{.Data.Version}}]({{.Data.VersionLink}})
|
||||
{{ end -}}
|
||||
{{- if (gt (len .Features) 0) }}
|
||||
{{- if .Data.Prefix }}
|
||||
{{ .Data.Prefix }}
|
||||
{{ end -}}
|
||||
{{- with .Data.Commits.feat }}
|
||||
### Features
|
||||
|
||||
{{ range .Features -}}
|
||||
- {{ if .Scope }}**{{.Scope}}**: {{end}}{{.Description}}
|
||||
{{ end -}}
|
||||
{{ range . -}}{{template "entry" .}}{{end}}
|
||||
{{- end -}}
|
||||
{{- if (gt (len .Fixes) 0) }}
|
||||
{{- with .Data.Commits.fix }}
|
||||
### Bug Fixes
|
||||
|
||||
{{ range .Fixes -}}
|
||||
- {{ if .Scope }}**{{.Scope}}**: {{end}}{{.Description}}
|
||||
{{ end -}}
|
||||
{{ range . -}}{{template "entry" .}}{{end}}
|
||||
{{- end -}}
|
||||
|
||||
{{- if .Suffix }}
|
||||
{{ .Suffix }}
|
||||
{{- if .Data.Suffix }}
|
||||
{{ .Data.Suffix }}
|
||||
{{ end }}
|
||||
|
|
|
|||
|
|
@ -168,7 +168,8 @@ This version is compatible with flux-compensator v2.2 - v2.9.
|
|||
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
got, err := NewChangelogEntry(slog.Default(), tt.args.analyzedCommits, tt.args.version, tt.args.link, tt.args.prefix, tt.args.suffix)
|
||||
data := New(commitparser.ByType(tt.args.analyzedCommits), tt.args.version, tt.args.link, tt.args.prefix, tt.args.suffix)
|
||||
got, err := Entry(slog.Default(), DefaultTemplate(), data, Formatting{})
|
||||
if !tt.wantErr(t, err) {
|
||||
return
|
||||
}
|
||||
|
|
|
|||
|
|
@ -15,3 +15,18 @@ type AnalyzedCommit struct {
|
|||
Scope *string
|
||||
BreakingChange bool
|
||||
}
|
||||
|
||||
// ByType groups the Commits by the type field. Used by the Changelog.
|
||||
func ByType(in []AnalyzedCommit) map[string][]AnalyzedCommit {
|
||||
out := map[string][]AnalyzedCommit{}
|
||||
|
||||
for _, commit := range in {
|
||||
if out[commit.Type] == nil {
|
||||
out[commit.Type] = make([]AnalyzedCommit, 0, 1)
|
||||
}
|
||||
|
||||
out[commit.Type] = append(out[commit.Type], commit)
|
||||
}
|
||||
|
||||
return out
|
||||
}
|
||||
|
|
|
|||
|
|
@ -243,7 +243,9 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
|
|||
return err
|
||||
}
|
||||
|
||||
changelogEntry, err := changelog.NewChangelogEntry(logger, analyzedCommits, nextVersion, rp.forge.ReleaseURL(nextVersion), releaseOverrides.Prefix, releaseOverrides.Suffix)
|
||||
changelogData := changelog.New(commitparser.ByType(analyzedCommits), nextVersion, rp.forge.ReleaseURL(nextVersion), releaseOverrides.Prefix, releaseOverrides.Suffix)
|
||||
|
||||
changelogEntry, err := changelog.Entry(logger, changelog.DefaultTemplate(), changelogData, changelog.Formatting{})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to build changelog entry: %w", err)
|
||||
}
|
||||
|
|
@ -289,9 +291,16 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
|
|||
logger.InfoContext(ctx, "file content is already up-to-date in remote branch, skipping push")
|
||||
}
|
||||
|
||||
// We do not need the version title here. In the pull request the version is available from the title, and in the
|
||||
// release on the Forge its usually in a heading somewhere above the text.
|
||||
changelogEntryPullRequest, err := changelog.Entry(logger, changelog.DefaultTemplate(), changelogData, changelog.Formatting{HideVersionTitle: true})
|
||||
if err != nil {
|
||||
return fmt.Errorf("failed to build pull request changelog entry: %w", err)
|
||||
}
|
||||
|
||||
// Open/Update PR
|
||||
if pr == nil {
|
||||
pr, err = releasepr.NewReleasePullRequest(rpBranch, rp.targetBranch, nextVersion, changelogEntry)
|
||||
pr, err = releasepr.NewReleasePullRequest(rpBranch, rp.targetBranch, nextVersion, changelogEntryPullRequest)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -308,7 +317,7 @@ func (rp *ReleaserPleaser) runReconcileReleasePR(ctx context.Context) error {
|
|||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = pr.SetDescription(changelogEntry, overrides)
|
||||
err = pr.SetDescription(changelogEntryPullRequest, overrides)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue