mirror of
https://github.com/git-chglog/git-chglog.git
synced 2026-01-22 18:06:11 +00:00
* chore: bump golang to 1.19 Signed-off-by: Manuel Vogel <mavogel@posteo.de> * fix: [#212] Vulnerabilities. (#219) Co-authored-by: Manuel Vogel <mavogel@posteo.de> * chore: bump all dependencies Signed-off-by: Manuel Vogel <mavogel@posteo.de> * chore(deps): update actions/setup-go action to v3 (#202) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(deps): update actions/checkout action to v3 (#201) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(deps): update golangci/golangci-lint-action action to v3 (#203) Co-authored-by: Renovate Bot <bot@renovateapp.com> * chore(ci): add explicit go setup before linting Signed-off-by: Manuel Vogel <mavogel@posteo.de> * chore(ci): bump golangci to v1.50.1 Signed-off-by: Manuel Vogel <mavogel@posteo.de> * chore: go fmt Signed-off-by: Manuel Vogel <mavogel@posteo.de> * chore: ignore staticcheck for strings.Title Signed-off-by: Manuel Vogel <mavogel@posteo.de> * chore: reaplce all ioutil with os funcs Signed-off-by: Manuel Vogel <mavogel@posteo.de> * chore ignore file read sec check Signed-off-by: Manuel Vogel <mavogel@posteo.de> * fix: remove unnecessary if before trimPrefix Signed-off-by: Manuel Vogel <mavogel@posteo.de> Signed-off-by: Manuel Vogel <mavogel@posteo.de> Co-authored-by: Ben van B <030@users.noreply.github.com> Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> Co-authored-by: Renovate Bot <bot@renovateapp.com>
416 lines
9.4 KiB
Go
416 lines
9.4 KiB
Go
package chglog
|
|
|
|
import (
|
|
"errors"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
"testing"
|
|
"time"
|
|
|
|
agjira "github.com/andygrunwald/go-jira"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestCommitParserParse(t *testing.T) {
|
|
assert := assert.New(t)
|
|
assert.True(true)
|
|
|
|
mock := &mockClient{
|
|
ReturnExec: func(subcmd string, args ...string) (string, error) {
|
|
if subcmd != "log" {
|
|
return "", errors.New("")
|
|
}
|
|
|
|
bytes, _ := os.ReadFile(filepath.Join("testdata", "gitlog.txt"))
|
|
|
|
return string(bytes), nil
|
|
},
|
|
}
|
|
|
|
parser := newCommitParser(NewLogger(os.Stdout, os.Stderr, false, true),
|
|
mock, nil, &Config{
|
|
Options: &Options{
|
|
CommitFilters: map[string][]string{
|
|
"Type": {
|
|
"feat",
|
|
"fix",
|
|
"perf",
|
|
"refactor",
|
|
},
|
|
},
|
|
HeaderPattern: "^(\\w*)(?:\\(([\\w\\$\\.\\-\\*\\s]*)\\))?\\:\\s(.*)$",
|
|
HeaderPatternMaps: []string{
|
|
"Type",
|
|
"Scope",
|
|
"Subject",
|
|
},
|
|
IssuePrefix: []string{
|
|
"#",
|
|
"gh-",
|
|
},
|
|
RefActions: []string{
|
|
"close",
|
|
"closes",
|
|
"closed",
|
|
"fix",
|
|
"fixes",
|
|
"fixed",
|
|
"resolve",
|
|
"resolves",
|
|
"resolved",
|
|
},
|
|
MergePattern: "^Merge pull request #(\\d+) from (.*)$",
|
|
MergePatternMaps: []string{
|
|
"Ref",
|
|
"Source",
|
|
},
|
|
RevertPattern: "^Revert \"([\\s\\S]*)\"$",
|
|
RevertPatternMaps: []string{
|
|
"Header",
|
|
},
|
|
NoteKeywords: []string{
|
|
"BREAKING CHANGE",
|
|
},
|
|
},
|
|
})
|
|
|
|
commits, err := parser.Parse("HEAD")
|
|
assert.Nil(err)
|
|
assert.Equal([]*Commit{
|
|
{
|
|
Hash: &Hash{
|
|
Long: "65cf1add9735dcc4810dda3312b0792236c97c4e",
|
|
Short: "65cf1add",
|
|
},
|
|
Author: &Author{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1514808000), 0),
|
|
},
|
|
Committer: &Committer{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1514808000), 0),
|
|
},
|
|
Merge: nil,
|
|
Revert: nil,
|
|
Refs: []*Ref{
|
|
{
|
|
Action: "",
|
|
Ref: "123",
|
|
Source: "",
|
|
},
|
|
},
|
|
Notes: []*Note{},
|
|
Mentions: []string{},
|
|
Header: "feat(*): Add new feature #123",
|
|
Type: "feat",
|
|
Scope: "*",
|
|
Subject: "Add new feature #123",
|
|
Body: "",
|
|
TrimmedBody: "",
|
|
},
|
|
{
|
|
Hash: &Hash{
|
|
Long: "14ef0b6d386c5432af9292eab3c8314fa3001bc7",
|
|
Short: "14ef0b6d",
|
|
},
|
|
Author: &Author{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1515153600), 0),
|
|
},
|
|
Committer: &Committer{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1515153600), 0),
|
|
},
|
|
Merge: &Merge{
|
|
Ref: "3",
|
|
Source: "username/branchname",
|
|
},
|
|
Revert: nil,
|
|
Refs: []*Ref{
|
|
{
|
|
Action: "",
|
|
Ref: "3",
|
|
Source: "",
|
|
},
|
|
{
|
|
Action: "Fixes",
|
|
Ref: "3",
|
|
Source: "",
|
|
},
|
|
{
|
|
Action: "Closes",
|
|
Ref: "1",
|
|
Source: "",
|
|
},
|
|
},
|
|
Notes: []*Note{
|
|
{
|
|
Title: "BREAKING CHANGE",
|
|
Body: "This is breaking point message.",
|
|
},
|
|
},
|
|
Mentions: []string{},
|
|
Header: "Merge pull request #3 from username/branchname",
|
|
Type: "",
|
|
Scope: "",
|
|
Subject: "",
|
|
Body: `This is body message.
|
|
|
|
Fixes #3
|
|
|
|
Closes #1
|
|
|
|
BREAKING CHANGE: This is breaking point message.`,
|
|
TrimmedBody: `This is body message.`,
|
|
},
|
|
{
|
|
Hash: &Hash{
|
|
Long: "809a8280ffd0dadb0f4e7ba9fc835e63c37d6af6",
|
|
Short: "809a8280",
|
|
},
|
|
Author: &Author{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1517486400), 0),
|
|
},
|
|
Committer: &Committer{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1517486400), 0),
|
|
},
|
|
Merge: nil,
|
|
Revert: nil,
|
|
Refs: []*Ref{},
|
|
Notes: []*Note{},
|
|
Mentions: []string{
|
|
"tsuyoshiwada",
|
|
"hogefuga",
|
|
"FooBarBaz",
|
|
},
|
|
Header: "fix(controller): Fix cors configure",
|
|
Type: "fix",
|
|
Scope: "controller",
|
|
Subject: "Fix cors configure",
|
|
Body: `Has mention body
|
|
|
|
@tsuyoshiwada
|
|
@hogefuga
|
|
@FooBarBaz`,
|
|
TrimmedBody: `Has mention body`,
|
|
},
|
|
{
|
|
Hash: &Hash{
|
|
Long: "74824d6bd1470b901ec7123d13a76a1b8938d8d0",
|
|
Short: "74824d6b",
|
|
},
|
|
Author: &Author{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1517488587), 0),
|
|
},
|
|
Committer: &Committer{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1517488587), 0),
|
|
},
|
|
Merge: nil,
|
|
Revert: nil,
|
|
Refs: []*Ref{
|
|
{
|
|
Action: "Fixes",
|
|
Ref: "123",
|
|
Source: "",
|
|
},
|
|
{
|
|
Action: "Closes",
|
|
Ref: "456",
|
|
Source: "username/repository",
|
|
},
|
|
},
|
|
Notes: []*Note{
|
|
{
|
|
Title: "BREAKING CHANGE",
|
|
Body: fmt.Sprintf(`This is multiline breaking change note.
|
|
It is treated as the body of the Note until a mention or reference appears.
|
|
|
|
We also allow blank lines :)
|
|
|
|
Example:
|
|
|
|
%sjavascript
|
|
import { Controller } from 'hoge-fuga';
|
|
|
|
@autobind
|
|
class MyController extends Controller {
|
|
constructor() {
|
|
super();
|
|
}
|
|
}
|
|
%s`, "```", "```"),
|
|
},
|
|
},
|
|
Mentions: []string{},
|
|
Header: "fix(model): Remove hoge attributes",
|
|
Type: "fix",
|
|
Scope: "model",
|
|
Subject: "Remove hoge attributes",
|
|
Body: fmt.Sprintf(`This mixed body message.
|
|
|
|
BREAKING CHANGE:
|
|
This is multiline breaking change note.
|
|
It is treated as the body of the Note until a mention or reference appears.
|
|
|
|
We also allow blank lines :)
|
|
|
|
Example:
|
|
|
|
%sjavascript
|
|
import { Controller } from 'hoge-fuga';
|
|
|
|
@autobind
|
|
class MyController extends Controller {
|
|
constructor() {
|
|
super();
|
|
}
|
|
}
|
|
%s
|
|
|
|
Fixes #123
|
|
Closes username/repository#456`, "```", "```"),
|
|
TrimmedBody: `This mixed body message.`,
|
|
},
|
|
{
|
|
Hash: &Hash{
|
|
Long: "123456789735dcc4810dda3312b0792236c97c4e",
|
|
Short: "12345678",
|
|
},
|
|
Author: &Author{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1517488587), 0),
|
|
},
|
|
Committer: &Committer{
|
|
Name: "tsuyoshi wada",
|
|
Email: "mail@example.com",
|
|
Date: time.Unix(int64(1517488587), 0),
|
|
},
|
|
Merge: nil,
|
|
Revert: &Revert{
|
|
Header: "fix(core): commit message",
|
|
},
|
|
Refs: []*Ref{},
|
|
Notes: []*Note{},
|
|
Mentions: []string{},
|
|
Header: "Revert \"fix(core): commit message\"",
|
|
Type: "",
|
|
Scope: "",
|
|
Subject: "",
|
|
Body: "This reverts commit f755db78dcdf461dc42e709b3ab728ceba353d1d.",
|
|
TrimmedBody: "This reverts commit f755db78dcdf461dc42e709b3ab728ceba353d1d.",
|
|
},
|
|
}, commits)
|
|
}
|
|
|
|
type mockJiraClient struct {
|
|
}
|
|
|
|
func (jira mockJiraClient) GetJiraIssue(id string) (*agjira.Issue, error) {
|
|
return &agjira.Issue{
|
|
ID: id,
|
|
Fields: &agjira.IssueFields{
|
|
Expand: "",
|
|
Type: agjira.IssueType{Name: "Story"},
|
|
Project: agjira.Project{},
|
|
Resolution: nil,
|
|
Priority: nil,
|
|
Resolutiondate: agjira.Time{},
|
|
Created: agjira.Time{},
|
|
Duedate: agjira.Date{},
|
|
Watches: nil,
|
|
Assignee: nil,
|
|
Updated: agjira.Time{},
|
|
Description: fmt.Sprintf("description of %s", id),
|
|
Summary: fmt.Sprintf("summary of %s", id),
|
|
Creator: nil,
|
|
Reporter: nil,
|
|
Components: nil,
|
|
Status: nil,
|
|
Progress: nil,
|
|
AggregateProgress: nil,
|
|
TimeTracking: nil,
|
|
TimeSpent: 0,
|
|
TimeEstimate: 0,
|
|
TimeOriginalEstimate: 0,
|
|
Worklog: nil,
|
|
IssueLinks: nil,
|
|
Comments: nil,
|
|
FixVersions: nil,
|
|
AffectsVersions: nil,
|
|
Labels: []string{"GA"},
|
|
Subtasks: nil,
|
|
Attachments: nil,
|
|
Epic: nil,
|
|
Sprint: nil,
|
|
Parent: nil,
|
|
AggregateTimeOriginalEstimate: 0,
|
|
AggregateTimeSpent: 0,
|
|
AggregateTimeEstimate: 0,
|
|
Unknowns: nil,
|
|
},
|
|
}, nil
|
|
}
|
|
|
|
func TestCommitParserParseWithJira(t *testing.T) {
|
|
assert := assert.New(t)
|
|
assert.True(true)
|
|
|
|
mock := &mockClient{
|
|
ReturnExec: func(subcmd string, args ...string) (string, error) {
|
|
if subcmd != "log" {
|
|
return "", errors.New("")
|
|
}
|
|
|
|
bytes, _ := os.ReadFile(filepath.Join("testdata", "gitlog_jira.txt"))
|
|
|
|
return string(bytes), nil
|
|
},
|
|
}
|
|
|
|
parser := newCommitParser(NewLogger(os.Stdout, os.Stderr, false, true),
|
|
mock, mockJiraClient{}, &Config{
|
|
Options: &Options{
|
|
CommitFilters: map[string][]string{
|
|
"Type": {
|
|
"feat",
|
|
"fix",
|
|
"perf",
|
|
"refactor",
|
|
},
|
|
},
|
|
HeaderPattern: "^(?:(\\w*)|(?:\\[(.*)\\])?)\\:\\s(.*)$",
|
|
HeaderPatternMaps: []string{
|
|
"Type",
|
|
"JiraIssueID",
|
|
"Subject",
|
|
},
|
|
JiraTypeMaps: map[string]string{
|
|
"Story": "feat",
|
|
},
|
|
},
|
|
})
|
|
|
|
commits, err := parser.Parse("HEAD")
|
|
assert.Nil(err)
|
|
commit := commits[0]
|
|
assert.Equal(commit.JiraIssueID, "JIRA-1111")
|
|
assert.Equal(commit.JiraIssue.Type, "Story")
|
|
assert.Equal(commit.JiraIssue.Summary, "summary of JIRA-1111")
|
|
assert.Equal(commit.JiraIssue.Description, "description of JIRA-1111")
|
|
assert.Equal(commit.JiraIssue.Labels, []string{"GA"})
|
|
assert.Equal(commit.Type, "feat")
|
|
}
|