-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
111 lines (94 loc) · 2.16 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
package main
import (
"flag"
"fmt"
"os"
"runtime/debug"
"strings"
"github.com/chavacava/changelog-lint/config"
"github.com/chavacava/changelog-lint/linting"
"github.com/chavacava/changelog-lint/parser"
)
var (
version = "dev"
commit = "none"
date = "unknown"
builtBy = "unknown"
)
const (
codeOK = iota
codeRequestError
codeSyntaxError
codeLintError
)
func main() {
flagVersion := flag.Bool("version", false, "get changelog-lint version")
flagConfig := flag.String("config", "", "set linter configuration")
flag.Parse()
if *flagVersion {
println(versionInfo())
os.Exit(codeOK)
}
args := flag.Args()
inputFilename := "CHANGELOG.md"
if len(args) > 0 {
inputFilename = args[0]
}
input, err := os.Open(inputFilename)
if err != nil {
fmt.Println(err)
os.Exit(codeRequestError)
}
defer input.Close()
mainConfig, err := config.LoadConfig(*flagConfig)
if err != nil {
fmt.Println(err)
os.Exit(codeRequestError)
}
parserConf, err := mainConfig.ParserConfig()
if err != nil {
fmt.Println(err)
os.Exit(codeRequestError)
}
p := parser.Default{}
changes, err := p.Parse(input, parserConf)
if err != nil {
fmt.Println(err)
os.Exit(codeSyntaxError)
}
linter := linting.Linter{}
failures := make(chan linting.Failure)
go linter.Lint(*changes, mainConfig.LintingConfig(), failures)
exitCode := codeOK
for failure := range failures {
lineInfo := ""
if failure.Position > 0 {
lineInfo = fmt.Sprintf("(line %d)", failure.Position)
}
fmt.Printf("%s: %s %s\n", failure.RuleName, failure.Message, lineInfo)
exitCode = codeLintError
}
os.Exit(exitCode)
}
func versionInfo() string {
var buildInfo string
if date != "unknown" && builtBy != "unknown" {
buildInfo = fmt.Sprintf("Built\t\t%s by %s\n", date, builtBy)
}
if commit != "none" {
buildInfo = fmt.Sprintf("Commit:\t\t%s\n%s", commit, buildInfo)
}
if version == "dev" {
bi, ok := debug.ReadBuildInfo()
if ok {
version = bi.Main.Version
if strings.HasPrefix(version, "v") {
version = bi.Main.Version[1:]
}
if len(buildInfo) == 0 {
return fmt.Sprintf("version %s\n", version)
}
}
}
return fmt.Sprintf("Version:\t%s\n%s", version, buildInfo)
}