From 849dc6c5b76736d8958412fd2b7e76a303102b3c Mon Sep 17 00:00:00 2001 From: Felix Wiedmann Date: Thu, 20 Jun 2019 00:46:59 +0200 Subject: [PATCH] feat(analyzer): add 'DRAFT' as messeage identifier --- internal/analyzer/analyzer.go | 8 ++++-- internal/analyzer/angular.go | 34 +++++++++++++++++-------- internal/shared/shared.go | 7 ++--- pkg/semanticrelease/semantic-release.go | 6 ++++- 4 files changed, 39 insertions(+), 16 deletions(-) diff --git a/internal/analyzer/analyzer.go b/internal/analyzer/analyzer.go index 7f1f21f..a5b1def 100644 --- a/internal/analyzer/analyzer.go +++ b/internal/analyzer/analyzer.go @@ -24,7 +24,7 @@ type Rule struct { } type analyzeCommit interface { - analyze(commit gitutil.Commit, tag Rule) (AnalyzedCommit, bool, error) + analyze(commit gitutil.Commit, tag Rule) (AnalyzedCommit, bool, bool, error) getRules() []Rule } @@ -34,6 +34,7 @@ type AnalyzedCommit struct { ParsedMessage string Scope string ParsedBreakingChangeMessage string + ParsedDraftMessage string Tag string TagString string Print bool @@ -68,11 +69,12 @@ func (a *Analyzer) Analyze(commits []gitutil.Commit) map[string][]AnalyzedCommit analyzedCommits["major"] = make([]AnalyzedCommit, 0) analyzedCommits["minor"] = make([]AnalyzedCommit, 0) analyzedCommits["patch"] = make([]AnalyzedCommit, 0) + analyzedCommits["draft"] = make([]AnalyzedCommit, 0) analyzedCommits["none"] = make([]AnalyzedCommit, 0) for _, commit := range commits { for _, rule := range a.analyzeCommit.getRules() { - analyzedCommit, hasBreakingChange, err := a.analyzeCommit.analyze(commit, rule) + analyzedCommit, hasBreakingChange, isDraft, err := a.analyzeCommit.analyze(commit, rule) if err == nil { if a.Config.PrintAll { analyzedCommit.Print = true @@ -81,6 +83,8 @@ func (a *Analyzer) Analyze(commits []gitutil.Commit) map[string][]AnalyzedCommit } if hasBreakingChange { analyzedCommits["major"] = append(analyzedCommits["major"], analyzedCommit) + } else if isDraft { + analyzedCommits["draft"] = append(analyzedCommits["draft"], analyzedCommit) } else { analyzedCommits[rule.Release] = append(analyzedCommits[rule.Release], analyzedCommit) } diff --git a/internal/analyzer/angular.go b/internal/analyzer/angular.go index e36499a..8fdf7f5 100644 --- a/internal/analyzer/angular.go +++ b/internal/analyzer/angular.go @@ -76,7 +76,7 @@ func (a *angular) getRules() []Rule { return a.rules } -func (a *angular) analyze(commit gitutil.Commit, rule Rule) (AnalyzedCommit, bool, error) { +func (a *angular) analyze(commit gitutil.Commit, rule Rule) (AnalyzedCommit, bool, bool, error) { analyzed := AnalyzedCommit{ Commit: commit, @@ -92,21 +92,35 @@ func (a *angular) analyze(commit gitutil.Commit, rule Rule) (AnalyzedCommit, boo analyzed.Scope = matches[0][2] message := strings.Join(matches[0][3:], "") - splitted := strings.SplitN(message, "BREAKING CHANGE:", 1) + breakingChange := strings.SplitN(message, "BREAKING CHANGE:", 1) + draft := strings.SplitN(message, "DRAFT:", 1) - if len(splitted) == 1 { - analyzed.ParsedMessage = splitted[0] + if len(breakingChange) == 1 && len(draft) == 1 { + analyzed.ParsedMessage = breakingChange[0] log.Tracef("%s: found %s", commit.Message, rule.Tag) - return analyzed, false, nil + return analyzed, false, false, nil + + } + + if len(breakingChange) > 1 { + + analyzed.ParsedMessage = breakingChange[0] + analyzed.ParsedBreakingChangeMessage = breakingChange[1] + + log.Tracef(" %s, BREAKING CHANGE found", commit.Message) + + return analyzed, true, false, nil + + } else if len(draft) > 1 { + analyzed.ParsedMessage = draft[0] + analyzed.ParsedDraftMessage = draft[1] + log.Tracef(" %s, DRAFT found", commit.Message) + } - analyzed.ParsedMessage = splitted[0] - analyzed.ParsedBreakingChangeMessage = splitted[1] - log.Tracef(" %s, BREAKING CHANGE found", commit.Message) - return analyzed, true, nil } } log.Tracef("%s does not match %s, skip", commit.Message, rule.Tag) - return analyzed, false, fmt.Errorf("not found") + return analyzed, false, false, fmt.Errorf("not found") } diff --git a/internal/shared/shared.go b/internal/shared/shared.go index 3d0154a..b3579c7 100644 --- a/internal/shared/shared.go +++ b/internal/shared/shared.go @@ -13,8 +13,9 @@ type ReleaseVersion struct { //ReleaseVersionEntry struct type ReleaseVersionEntry struct { - Commit string - Version *semver.Version + Commit string + Draft bool + *semver.Version } //GeneratedChangelog struct @@ -23,7 +24,7 @@ type GeneratedChangelog struct { Content string } -//GenerateChangelogConfig struct +//ChangelogTemplateConfig struct type ChangelogTemplateConfig struct { CommitURL string CompareURL string diff --git a/pkg/semanticrelease/semantic-release.go b/pkg/semanticrelease/semantic-release.go index 52c6f25..63f2552 100644 --- a/pkg/semanticrelease/semantic-release.go +++ b/pkg/semanticrelease/semantic-release.go @@ -100,7 +100,7 @@ func (s *SemanticRelease) GetNextVersion(force bool) (*shared.ReleaseVersion, er return nil, err } result := a.Analyze(commits) - + var isDraft bool = false for branch, releaseType := range s.config.Branch { if currentBranch == branch || strings.HasPrefix(currentBranch, branch) { log.Debugf("Found branch config for branch %s with release type %s", currentBranch, releaseType) @@ -115,6 +115,9 @@ func (s *SemanticRelease) GetNextVersion(force bool) (*shared.ReleaseVersion, er } else if len(result["patch"]) > 0 { newVersion = newVersion.IncPatch() } + if len(result["draft"]) > 0 { + isDraft = true + } } } } @@ -123,6 +126,7 @@ func (s *SemanticRelease) GetNextVersion(force bool) (*shared.ReleaseVersion, er Next: shared.ReleaseVersionEntry{ Commit: hash, Version: &newVersion, + Draft: isDraft, }, Last: shared.ReleaseVersionEntry{ Commit: lastVersionHash,