diff --git a/cmd/rp/cmd/run.go b/cmd/rp/cmd/run.go index de10927..d0fc0ab 100644 --- a/cmd/rp/cmd/run.go +++ b/cmd/rp/cmd/run.go @@ -71,7 +71,7 @@ func run(cmd *cobra.Command, _ []string) error { f, logger, flagBranch, - conventionalcommits.NewParser(), + conventionalcommits.NewParser(logger), versioning.SemVerNextVersion, extraFiles, []updater.NewUpdater{updater.Generic}, diff --git a/internal/commitparser/conventionalcommits/conventionalcommits.go b/internal/commitparser/conventionalcommits/conventionalcommits.go index 665a02d..b253354 100644 --- a/internal/commitparser/conventionalcommits/conventionalcommits.go +++ b/internal/commitparser/conventionalcommits/conventionalcommits.go @@ -2,6 +2,7 @@ package conventionalcommits import ( "fmt" + "log/slog" "github.com/leodido/go-conventionalcommits" "github.com/leodido/go-conventionalcommits/parser" @@ -12,9 +13,10 @@ import ( type Parser struct { machine conventionalcommits.Machine + logger *slog.Logger } -func NewParser() *Parser { +func NewParser(logger *slog.Logger) *Parser { parserMachine := parser.NewMachine( parser.WithBestEffort(), parser.WithTypes(conventionalcommits.TypesConventional), @@ -22,6 +24,7 @@ func NewParser() *Parser { return &Parser{ machine: parserMachine, + logger: logger, } } @@ -31,8 +34,10 @@ func (c *Parser) Analyze(commits []git.Commit) ([]commitparser.AnalyzedCommit, e for _, commit := range commits { msg, err := c.machine.Parse([]byte(commit.Message)) if err != nil { - return nil, fmt.Errorf("failed to parse message of commit %q: %w", commit.Hash, err) + c.logger.Warn("failed to parse message of commit, skipping", "commit.hash", commit.Hash, "err", err) + continue } + conventionalCommit, ok := msg.(*conventionalcommits.ConventionalCommit) if !ok { return nil, fmt.Errorf("unable to get ConventionalCommit from parser result: %T", msg) diff --git a/internal/commitparser/conventionalcommits/conventionalcommits_test.go b/internal/commitparser/conventionalcommits/conventionalcommits_test.go index 837035b..bc969de 100644 --- a/internal/commitparser/conventionalcommits/conventionalcommits_test.go +++ b/internal/commitparser/conventionalcommits/conventionalcommits_test.go @@ -1,6 +1,7 @@ package conventionalcommits import ( + "log/slog" "testing" "github.com/stretchr/testify/assert" @@ -23,14 +24,14 @@ func TestAnalyzeCommits(t *testing.T) { wantErr: assert.NoError, }, { - name: "malformed commit message", + name: "skips malformed commit message", commits: []git.Commit{ { Message: "aksdjaklsdjka", }, }, - expectedCommits: nil, - wantErr: assert.Error, + expectedCommits: []commitparser.AnalyzedCommit{}, + wantErr: assert.NoError, }, { name: "drops unreleasable", @@ -114,7 +115,7 @@ func TestAnalyzeCommits(t *testing.T) { } for _, tt := range tests { t.Run(tt.name, func(t *testing.T) { - analyzedCommits, err := NewParser().Analyze(tt.commits) + analyzedCommits, err := NewParser(slog.Default()).Analyze(tt.commits) if !tt.wantErr(t, err) { return }