| | | 1 | | package plugins |
| | | 2 | | |
| | | 3 | | import ( |
| | | 4 | | "context" |
| | | 5 | | |
| | | 6 | | "github.com/jedi-knights/go-semantic-release/internal/domain" |
| | | 7 | | "github.com/jedi-knights/go-semantic-release/internal/ports" |
| | | 8 | | ) |
| | | 9 | | |
| | | 10 | | // Compile-time interface compliance checks. |
| | | 11 | | var ( |
| | | 12 | | _ ports.Plugin = (*ReleaseNotesPlugin)(nil) |
| | | 13 | | _ ports.GenerateNotesPlugin = (*ReleaseNotesPlugin)(nil) |
| | | 14 | | ) |
| | | 15 | | |
| | | 16 | | // ReleaseNotesPlugin implements GenerateNotesPlugin using a changelog generator. |
| | | 17 | | type ReleaseNotesPlugin struct { |
| | | 18 | | generator ports.ChangelogGenerator |
| | | 19 | | sections []domain.ChangelogSectionConfig |
| | | 20 | | } |
| | | 21 | | |
| | | 22 | | // NewReleaseNotesPlugin creates the default release notes generator plugin. |
| | | 23 | | func NewReleaseNotesPlugin(generator ports.ChangelogGenerator, sections []domain.ChangelogSectionConfig) *ReleaseNotesPl |
| | | 24 | | return &ReleaseNotesPlugin{generator: generator, sections: sections} |
| | | 25 | | } |
| | | 26 | | |
| | 1 | 27 | | func (p *ReleaseNotesPlugin) Name() string { return "release-notes-generator" } |
| | | 28 | | |
| | 3 | 29 | | func (p *ReleaseNotesPlugin) GenerateNotes(_ context.Context, rc *domain.ReleaseContext) (string, error) { |
| | 1 | 30 | | if rc.CurrentProject == nil { |
| | 1 | 31 | | return "", nil |
| | 1 | 32 | | } |
| | 2 | 33 | | return p.generator.Generate( |
| | 2 | 34 | | rc.CurrentProject.NextVersion, |
| | 2 | 35 | | rc.CurrentProject.Project.Name, |
| | 2 | 36 | | rc.CurrentProject.Commits, |
| | 2 | 37 | | p.sections, |
| | 2 | 38 | | ) |
| | | 39 | | } |