feat(analyzer): add conventional commit format

See: [conventional](https://www.conventionalcommits.org/en/v1.0.0/#summaryhttps://www.conventionalcommits.org/en/v1.0.0/#summary)
This commit is contained in:
Sebastian Beisch
2021-01-21 21:41:14 +01:00
parent 01af837b40
commit 8db8b0d72c
19 changed files with 613 additions and 125 deletions

View File

@@ -38,6 +38,9 @@ func New(format string, config config.ChangelogConfig) (*Analyzer, error) {
case ANGULAR:
analyzer.analyzeCommits = newAngular()
log.Debugf("Commit format set to %s", ANGULAR)
case CONVENTIONAL:
analyzer.analyzeCommits = newConventional()
log.Debugf("Commit format set to %s", CONVENTIONAL)
default:
return nil, fmt.Errorf("invalid commit format: %s", format)
}

View File

@@ -17,7 +17,7 @@ type angular struct {
log *log.Entry
}
// ANGULAR identifer
// ANGULAR identifier
const ANGULAR = "angular"
func newAngular() *angular {

View File

@@ -19,8 +19,8 @@ func TestAngular(t *testing.T) {
{
testCase: "feat",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
@@ -33,12 +33,12 @@ func TestAngular(t *testing.T) {
Print: true,
},
},
"major": []shared.AnalyzedCommit{},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"major": {},
"patch": {},
"none": {},
},
commits: []shared.Commit{
shared.Commit{
{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
@@ -48,8 +48,8 @@ func TestAngular(t *testing.T) {
{
testCase: "feat breaking change",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
@@ -62,8 +62,8 @@ func TestAngular(t *testing.T) {
Print: true,
},
},
"major": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"major": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first break BREAKING CHANGE: change api to v2",
Author: "me",
@@ -77,38 +77,38 @@ func TestAngular(t *testing.T) {
ParsedBreakingChangeMessage: "change api to v2",
},
},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"patch": {},
"none": {},
},
commits: []shared.Commit{
shared.Commit{
{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
},
shared.Commit{
{
Message: "feat(internal/changelog): my first break BREAKING CHANGE: change api to v2",
Author: "me",
Hash: "12345668",
},
},
},
{ testCase: "feat breaking change footer",
{testCase: "feat breaking change footer",
commits: []shared.Commit{
shared.Commit{
{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
},
shared.Commit{
Message: "feat(internal/changelog): my first break \n\nBREAKING CHANGE: change api to v2\n",
},
{
Message: "feat(internal/changelog): my first break \n\nBREAKING CHANGE: change api to v2\n",
Author: "me",
Hash: "12345668",
},
},
},
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
@@ -121,8 +121,8 @@ func TestAngular(t *testing.T) {
Print: true,
},
},
"major": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"major": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first break \n\nBREAKING CHANGE: change api to v2\n",
Author: "me",
@@ -136,25 +136,25 @@ func TestAngular(t *testing.T) {
ParsedBreakingChangeMessage: "change api to v2",
},
},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"patch": {},
"none": {},
},
},
{
testCase: "invalid",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{},
"major": []shared.AnalyzedCommit{},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"minor": {},
"major": {},
"patch": {},
"none": {},
},
commits: []shared.Commit{
shared.Commit{
{
Message: "internal/changelog: my first commit",
Author: "me",
Hash: "12345667",
},
shared.Commit{
{
Message: "Merge feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
@@ -164,8 +164,8 @@ func TestAngular(t *testing.T) {
{
testCase: "feat and build",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
@@ -178,8 +178,8 @@ func TestAngular(t *testing.T) {
Print: true,
},
},
"none": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"none": {
{
Commit: shared.Commit{
Message: "build(internal/changelog): my first build",
Author: "me",
@@ -193,16 +193,16 @@ func TestAngular(t *testing.T) {
ParsedBreakingChangeMessage: "",
},
},
"patch": []shared.AnalyzedCommit{},
"major": []shared.AnalyzedCommit{},
"patch": {},
"major": {},
},
commits: []shared.Commit{
shared.Commit{
{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
},
shared.Commit{
{
Message: "build(internal/changelog): my first build",
Author: "me",
Hash: "12345668",

View File

@@ -0,0 +1,130 @@
// Package analyzer provides different commit analyzer
package analyzer
import (
"fmt"
"regexp"
"strings"
log "github.com/sirupsen/logrus"
"github.com/Nightapes/go-semantic-release/internal/shared"
)
type conventional struct {
rules []Rule
regex string
log *log.Entry
}
// CONVENTIONAL identifier
const CONVENTIONAL = "conventional"
func newConventional() *conventional {
return &conventional{
regex: `^(TAG)(?:\((.*)\))?(\!)?: (?s)(.*)`,
log: log.WithField("analyzer", CONVENTIONAL),
rules: []Rule{
{
Tag: "feat",
TagString: "Features",
Release: "minor",
Changelog: true,
},
{
Tag: "fix",
TagString: "Bug fixes",
Release: "patch",
Changelog: true,
}, {
Tag: "perf",
TagString: "Performance improvments",
Release: "patch",
Changelog: true,
}, {
Tag: "docs",
TagString: "Documentation changes",
Release: "none",
Changelog: false,
},
{
Tag: "style",
TagString: "Style",
Release: "none",
Changelog: false,
}, {
Tag: "refactor",
TagString: "Code refactor",
Release: "none",
Changelog: false,
}, {
Tag: "test",
TagString: "Testing",
Release: "none",
Changelog: false,
}, {
Tag: "chore",
TagString: "Changes to the build process or auxiliary tools and libraries such as documentation generation",
Release: "none",
Changelog: false,
}, {
Tag: "build",
TagString: "Changes to CI/CD",
Release: "none",
Changelog: false,
},
},
}
}
func (a *conventional) getRules() []Rule {
return a.rules
}
func (a *conventional) analyze(commit shared.Commit, rule Rule) (shared.AnalyzedCommit, bool, error) {
analyzed := shared.AnalyzedCommit{
Commit: commit,
Tag: rule.Tag,
TagString: rule.TagString,
}
re := regexp.MustCompile(strings.Replace(a.regex, "TAG", rule.Tag, -1))
matches := re.FindAllStringSubmatch(commit.Message, -1)
if len(matches) >= 1 {
if len(matches[0]) >= 4 {
analyzed.Scope = shared.Scope(matches[0][2])
message := strings.Join(matches[0][4:], "")
if matches[0][3] == "" && !strings.Contains(message, "BREAKING CHANGE:") {
analyzed.ParsedMessage = strings.Trim(message, " ")
a.log.Tracef("%s: found %s", commit.Message, rule.Tag)
return analyzed, false, nil
}
if matches[0][3] == "" {
breakingChange := strings.SplitN(message, "BREAKING CHANGE:", 2)
analyzed.ParsedMessage = strings.TrimSpace(breakingChange[0])
analyzed.ParsedBreakingChangeMessage = strings.TrimSpace(breakingChange[1])
a.log.Tracef(" %s, BREAKING CHANGE found", commit.Message)
return analyzed, true, nil
}
breakingChange := strings.SplitN(message, "BREAKING CHANGE:", 2)
if len(breakingChange) > 1 {
analyzed.ParsedMessage = strings.TrimSpace(breakingChange[0])
analyzed.ParsedBreakingChangeMessage = strings.TrimSpace(breakingChange[1])
} else {
analyzed.ParsedBreakingChangeMessage = breakingChange[0]
}
a.log.Infof(" %s, BREAKING CHANGE found", commit.Message)
return analyzed, true, nil
}
}
a.log.Tracef("%s does not match %s, skip", commit.Message, rule.Tag)
return analyzed, false, fmt.Errorf("not found")
}

View File

@@ -0,0 +1,261 @@
package analyzer_test
import (
"testing"
"github.com/Nightapes/go-semantic-release/internal/analyzer"
"github.com/Nightapes/go-semantic-release/internal/shared"
"github.com/Nightapes/go-semantic-release/pkg/config"
"github.com/stretchr/testify/assert"
)
func TestConventional(t *testing.T) {
testConfigs := []struct {
testCase string
commits []shared.Commit
analyzedCommits map[shared.Release][]shared.AnalyzedCommit
}{
{
testCase: "feat",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
},
Scope: "internal/changelog",
ParsedMessage: "my first commit",
Tag: "feat",
TagString: "Features",
Print: true,
},
{
Commit: shared.Commit{
Message: "feat: no scope",
Author: "me",
Hash: "12345667",
},
Scope: "",
ParsedMessage: "no scope",
Tag: "feat",
TagString: "Features",
Print: true,
},
},
"major": {},
"patch": {},
"none": {},
},
commits: []shared.Commit{
{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
},
{
Message: "feat: no scope",
Author: "me",
Hash: "12345667",
},
},
},
{
testCase: "feat breaking change",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat: my first commit",
Author: "me",
Hash: "12345667",
},
Scope: "",
ParsedMessage: "my first commit",
Tag: "feat",
TagString: "Features",
Print: true,
},
},
"major": {
{
Commit: shared.Commit{
Message: "feat!: my first break",
Author: "me",
Hash: "12345668",
},
Scope: "",
ParsedMessage: "",
Tag: "feat",
TagString: "Features",
Print: true,
ParsedBreakingChangeMessage: "my first break",
},
},
"patch": {},
"none": {},
},
commits: []shared.Commit{
{
Message: "feat: my first commit",
Author: "me",
Hash: "12345667",
},
{
Message: "feat!: my first break",
Author: "me",
Hash: "12345668",
},
},
},
{
testCase: "feat breaking change footer",
commits: []shared.Commit{
{
Message: "feat: my first commit",
Author: "me",
Hash: "12345667",
},
{
Message: "feat: my first break \n\nBREAKING CHANGE: change api to v2\n",
Author: "me",
Hash: "12345668",
},
{
Message: "feat!: my first break \n\nBREAKING CHANGE: hey from the change",
Author: "me",
Hash: "12345669",
},
},
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat: my first commit",
Author: "me",
Hash: "12345667",
},
Scope: "",
ParsedMessage: "my first commit",
Tag: "feat",
TagString: "Features",
Print: true,
},
},
"major": {
{
Commit: shared.Commit{
Message: "feat: my first break \n\nBREAKING CHANGE: change api to v2\n",
Author: "me",
Hash: "12345668",
},
Scope: "",
ParsedMessage: "my first break",
Tag: "feat",
TagString: "Features",
Print: true,
ParsedBreakingChangeMessage: "change api to v2",
},
{
Commit: shared.Commit{
Message: "feat!: my first break \n\nBREAKING CHANGE: hey from the change",
Author: "me",
Hash: "12345669",
},
Scope: "",
ParsedMessage: "my first break",
Tag: "feat",
TagString: "Features",
Print: true,
ParsedBreakingChangeMessage: "hey from the change",
},
},
"patch": {},
"none": {},
},
},
{
testCase: "invalid",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": {},
"major": {},
"patch": {},
"none": {},
},
commits: []shared.Commit{
{
Message: "internal/changelog: my first commit",
Author: "me",
Hash: "12345667",
},
{
Message: "Merge feat: my first commit",
Author: "me",
Hash: "12345667",
},
},
},
{
testCase: "feat and build",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat: my first commit",
Author: "me",
Hash: "12345667",
},
Scope: "",
ParsedMessage: "my first commit",
Tag: "feat",
TagString: "Features",
Print: true,
},
},
"none": {
{
Commit: shared.Commit{
Message: "build: my first build",
Author: "me",
Hash: "12345668",
},
Scope: "",
ParsedMessage: "my first build",
Tag: "build",
TagString: "Changes to CI/CD",
Print: false,
ParsedBreakingChangeMessage: "",
},
},
"patch": {},
"major": {},
},
commits: []shared.Commit{
{
Message: "feat: my first commit",
Author: "me",
Hash: "12345667",
},
{
Message: "build: my first build",
Author: "me",
Hash: "12345668",
},
},
},
}
conventional, err := analyzer.New("conventional", config.ChangelogConfig{})
assert.NoError(t, err)
for _, test := range testConfigs {
analyzedCommits := conventional.Analyze(test.commits)
assert.Equalf(t, test.analyzedCommits["major"], analyzedCommits["major"], "Testcase %s should have major commits", test.testCase)
assert.Equalf(t, test.analyzedCommits["minor"], analyzedCommits["minor"], "Testcase %s should have minor commits", test.testCase)
assert.Equalf(t, test.analyzedCommits["patch"], analyzedCommits["patch"], "Testcase %s should have patch commits", test.testCase)
assert.Equalf(t, test.analyzedCommits["none"], analyzedCommits["none"], "Testcase %s should have none commits", test.testCase)
}
}

View File

@@ -56,8 +56,8 @@ func TestWriteAndReadCache(t *testing.T) {
},
Branch: "master",
Commits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"major": {
{
Commit: shared.Commit{
Message: "Message",
Author: "Author",

View File

@@ -83,12 +83,12 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "1.1.0-alpha.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{},
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{},
"major": {},
"minor": {
{},
},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"patch": {},
"none": {},
},
isFirst: false,
},
@@ -98,12 +98,12 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "1.1.0-beta.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{},
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{},
"major": {},
"minor": {
{},
},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"patch": {},
"none": {},
},
isFirst: false,
},
@@ -113,10 +113,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "1.0.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{},
"minor": []shared.AnalyzedCommit{},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"major": {},
"minor": {},
"patch": {},
"none": {},
},
isFirst: false,
},
@@ -126,10 +126,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "1.0.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"minor": []shared.AnalyzedCommit{},
"patch": []shared.AnalyzedCommit{},
"none": []shared.AnalyzedCommit{},
"major": {{}},
"minor": {},
"patch": {},
"none": {},
},
isFirst: true,
},
@@ -139,10 +139,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "2.0.0-rc.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"minor": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"patch": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"none": []shared.AnalyzedCommit{},
"major": {{}},
"minor": {{}},
"patch": {{}},
"none": {},
},
isFirst: false,
},
@@ -152,10 +152,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0-rc.0"),
nextVersion: "1.0.0-rc.1",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{},
"minor": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"patch": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"none": []shared.AnalyzedCommit{},
"major": {},
"minor": {{}},
"patch": {{}},
"none": {},
},
isFirst: false,
},
@@ -165,10 +165,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "2.0.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"minor": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"patch": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"none": []shared.AnalyzedCommit{},
"major": {{}},
"minor": {{}},
"patch": {{}},
"none": {},
},
isFirst: false,
},
@@ -178,10 +178,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "1.1.0",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{},
"minor": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"patch": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"none": []shared.AnalyzedCommit{},
"major": {},
"minor": {{}},
"patch": {{}},
"none": {},
},
isFirst: false,
},
@@ -191,10 +191,10 @@ func TestCalculator_CalculateNewVersion(t *testing.T) {
lastVersion: createVersion("1.0.0"),
nextVersion: "1.0.1",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"major": []shared.AnalyzedCommit{},
"minor": []shared.AnalyzedCommit{},
"patch": []shared.AnalyzedCommit{shared.AnalyzedCommit{}},
"none": []shared.AnalyzedCommit{},
"major": {},
"minor": {},
"patch": {{}},
"none": {},
},
isFirst: false,
},

View File

@@ -29,8 +29,8 @@ func TestChangelog(t *testing.T) {
{
testCase: "feat",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
@@ -53,8 +53,8 @@ func TestChangelog(t *testing.T) {
{
testCase: "feat no scope",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat: my first commit",
Author: "me",
@@ -76,8 +76,8 @@ func TestChangelog(t *testing.T) {
{
testCase: "feat breaking change",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": []shared.AnalyzedCommit{
shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
@@ -89,7 +89,7 @@ func TestChangelog(t *testing.T) {
TagString: "Features",
Print: true,
},
shared.AnalyzedCommit{
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first break: BREAKING CHANGE: change api to v2",
Author: "me",
@@ -110,6 +110,81 @@ func TestChangelog(t *testing.T) {
},
hasError: false,
},
{
testCase: "conventional commits",
analyzedCommits: map[shared.Release][]shared.AnalyzedCommit{
"minor": {
{
Commit: shared.Commit{
Message: "feat!: my first break \n\nBREAKING CHANGE: hey from the change",
Author: "me",
Hash: "12345669",
},
Scope: "",
ParsedMessage: "my first break",
Tag: "feat",
TagString: "Features",
Print: true,
ParsedBreakingChangeMessage: "hey from the change",
},
{
Commit: shared.Commit{
Message: "feat(internal/changelog): my first commit",
Author: "me",
Hash: "12345667",
},
Scope: "internal/changelog",
ParsedMessage: "my first commit",
Tag: "feat",
TagString: "Features",
Print: true,
},
{
Commit: shared.Commit{
Message: "feat: my second commit",
Author: "me",
Hash: "12345667",
},
Scope: "",
ParsedMessage: "my first commit",
Tag: "feat",
TagString: "Features",
Print: true,
},
{
Commit: shared.Commit{
Message: "feat: my new commit \n\nmy first break: BREAKING CHANGE: change api to v2",
Author: "me",
Hash: "12345668",
},
Scope: "",
ParsedMessage: "my first break",
Tag: "feat",
TagString: "Features",
Print: true,
ParsedBreakingChangeMessage: "change api to v2",
},
{
Commit: shared.Commit{
Message: "feat!: my next commit",
Author: "me",
Hash: "12345668",
},
Scope: "",
ParsedMessage: "",
Tag: "feat",
TagString: "Features",
Print: true,
ParsedBreakingChangeMessage: "my next commit",
},
},
},
result: &shared.GeneratedChangelog{
Title: "v1.0.0 (2019-07-19)",
Content: "# v1.0.0 (2019-07-19)\n## BREAKING CHANGES\n* hey from the change \nintroduced by commit: \nmy first break ([1234566](https://commit.url))\n* change api to v2 \nintroduced by commit: \nmy first break ([1234566](https://commit.url))\n* my next commit \nintroduced by commit: \n ([1234566](https://commit.url))\n### Features\n* **`internal/changelog`** my first commit ([1234566](https://commit.url))\n* my first commit ([1234566](https://commit.url))\n",
},
hasError: false,
},
}
cl := changelog.New(&config.ReleaseConfig{}, []analyzer.Rule{

View File

@@ -6,11 +6,11 @@ import (
"github.com/Nightapes/go-semantic-release/internal/ci"
"github.com/Nightapes/go-semantic-release/internal/gitutil"
"github.com/stretchr/testify/assert"
"github.com/go-git/go-billy/v5/memfs"
"github.com/go-git/go-git/v5"
"github.com/go-git/go-git/v5/plumbing/object"
"github.com/go-git/go-git/v5/storage/memory"
"github.com/stretchr/testify/assert"
)
func TestCi(t *testing.T) {

View File

@@ -65,7 +65,7 @@ func (h *Hooks) runCommand(command string) error {
}
cmd.Env = os.Environ()
cmd.Env = append(cmd.Env, "RELEASE_VERSION="+h.version.Next.Version.String())
cmd.Env = append(cmd.Env, "RELEASE_VERSION="+h.version.Next.Version.String())
cmdReader, err := cmd.StdoutPipe()
if err != nil {
return err
@@ -78,7 +78,6 @@ func (h *Hooks) runCommand(command string) error {
}
h.printOutput(cmdErrReader, strings.Fields(cmdReplaced)[0])
return cmd.Run()
}

View File

@@ -31,14 +31,14 @@ type testReleaseStruct struct {
}
var testNewClient = []testHelperMethodStruct{
testHelperMethodStruct{config: config.GitHubProvider{
{config: config.GitHubProvider{
Repo: "foo",
User: "bar",
},
valid: true,
},
testHelperMethodStruct{config: config.GitHubProvider{
{config: config.GitHubProvider{
Repo: "foo",
User: "bar",
CustomURL: "https://test.com",
@@ -51,7 +51,7 @@ var lastVersion, _ = semver.NewVersion("1.0.0")
var newVersion, _ = semver.NewVersion("2.0.0")
var testReleases = []testReleaseStruct{
testReleaseStruct{
{
config: config.GitHubProvider{
Repo: "foo",
User: "bar",
@@ -75,7 +75,7 @@ var testReleases = []testReleaseStruct{
requestResponseCode: 200,
valid: true,
},
testReleaseStruct{
{
config: config.GitHubProvider{
Repo: "foo",
User: "bar",

View File

@@ -148,7 +148,6 @@ func (g *Client) uploadAssets(assets *assets.Set) error {
}
defer file.Close()
result, err := g.uploadFile(asset.GetName(), file)
if err != nil {
return fmt.Errorf("could not upload asset %s: %s", file.Name(), err.Error())

View File

@@ -239,7 +239,7 @@ func TestUploadAssets(t *testing.T) {
valid: true,
testDir: os.TempDir(),
assets: []config.Asset{
config.Asset{
{
Name: filepath.Base(file.Name()),
Compress: false,
},
@@ -258,7 +258,7 @@ func TestUploadAssets(t *testing.T) {
valid: false,
testDir: os.TempDir(),
assets: []config.Asset{
config.Asset{
{
Name: filepath.Base(file.Name()),
Compress: false,
},
@@ -277,7 +277,7 @@ func TestUploadAssets(t *testing.T) {
valid: false,
testDir: os.TempDir(),
assets: []config.Asset{
config.Asset{
{
Name: filepath.Base(file.Name()),
Compress: false,
},

View File

@@ -30,8 +30,8 @@ type testDoubleToken struct {
}
var testDoubles = []testDoubleToken{
testDoubleToken{providerName: "test0", token: "foo", valid: true},
testDoubleToken{providerName: "test1", token: "", valid: false},
{providerName: "test0", token: "foo", valid: true},
{providerName: "test1", token: "", valid: false},
}
func TestGetAccessToken(t *testing.T) {