Compare commits
No commits in common. "66695a04740b792aadefb871758efd512e770849" and "6cc637519b857618aa7c94c2d23767ea59024bcd" have entirely different histories.
66695a0474
...
6cc637519b
4 changed files with 22 additions and 110 deletions
|
@ -1,2 +1,2 @@
|
||||||
VERSION_PREFIX=v
|
VERSION_PREFIX=v
|
||||||
GIT_SIGN=true
|
GIT_SIGN=false
|
||||||
|
|
|
@ -8,7 +8,7 @@ version is implemented using https://github.com/Masterminds/semver to parse and
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
go install github.com/ray1729/git-semver@v0.2.2
|
go install github.com/ray1729/git-semver
|
||||||
```
|
```
|
||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
34
main.go
34
main.go
|
@ -132,8 +132,6 @@ func nextVersion(inc string) func(*cli.Context) error {
|
||||||
newVer = v.IncMinor()
|
newVer = v.IncMinor()
|
||||||
case "major":
|
case "major":
|
||||||
newVer = v.IncMajor()
|
newVer = v.IncMajor()
|
||||||
default:
|
|
||||||
newVer = *v
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if c.IsSet("pre-release") {
|
if c.IsSet("pre-release") {
|
||||||
|
@ -235,15 +233,11 @@ func parseConfig(f io.Reader) (config, error) {
|
||||||
}
|
}
|
||||||
k, v, ok := strings.Cut(t, "=")
|
k, v, ok := strings.Cut(t, "=")
|
||||||
if !ok {
|
if !ok {
|
||||||
return conf, fmt.Errorf("error parsing %s: invalid syntax", t)
|
return conf, fmt.Errorf("invalid configuration: %s", t)
|
||||||
}
|
}
|
||||||
k, v = strings.TrimSpace(k), strings.TrimSpace(v)
|
k, v = strings.TrimSpace(k), strings.TrimSpace(v)
|
||||||
if len(v) >= 2 && strings.HasPrefix(v, "\"") && strings.HasSuffix(v, "\"") {
|
if len(v) >= 2 && strings.HasPrefix(v, "\"") && strings.HasSuffix(v, "\"") {
|
||||||
unquotedV, err := strconv.Unquote(v)
|
v = strings.Trim(v, "\"")
|
||||||
if err != nil {
|
|
||||||
return conf, fmt.Errorf("error parsing %s: invalid quoted string", t)
|
|
||||||
}
|
|
||||||
v = unquotedV
|
|
||||||
}
|
}
|
||||||
switch strings.ToUpper(k) {
|
switch strings.ToUpper(k) {
|
||||||
case "VERSION_PREFIX":
|
case "VERSION_PREFIX":
|
||||||
|
@ -251,14 +245,17 @@ func parseConfig(f io.Reader) (config, error) {
|
||||||
case "GIT_SIGN":
|
case "GIT_SIGN":
|
||||||
b, err := strconv.ParseBool(v)
|
b, err := strconv.ParseBool(v)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return conf, fmt.Errorf("error parsing %s: invalid boolean value", t)
|
return conf, fmt.Errorf("error parsing GIT_SIGN %q: %v", v, err)
|
||||||
}
|
}
|
||||||
conf.sign = b
|
conf.sign = b
|
||||||
default:
|
default:
|
||||||
return conf, fmt.Errorf("error parsing %s: unrecognized variable", t)
|
return conf, fmt.Errorf("unrecognized configuration variable: %s", k)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return conf, s.Err()
|
if err := s.Err(); err != nil {
|
||||||
|
return conf, err
|
||||||
|
}
|
||||||
|
return conf, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func createTag(tagName string, sign bool) error {
|
func createTag(tagName string, sign bool) error {
|
||||||
|
@ -266,18 +263,25 @@ func createTag(tagName string, sign bool) error {
|
||||||
if sign {
|
if sign {
|
||||||
signFlag = "-s"
|
signFlag = "-s"
|
||||||
}
|
}
|
||||||
out, err := exec.Command("git", "tag", signFlag, "-m", "Version "+tagName, tagName).CombinedOutput()
|
cmd := exec.Command("git", "tag", signFlag, "-m", "Version "+tagName, tagName)
|
||||||
|
stderr, err := cmd.StderrPipe()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, string(out))
|
return err
|
||||||
|
}
|
||||||
|
if err := cmd.Start(); err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
out, _ := io.ReadAll(stderr)
|
||||||
|
fmt.Fprintf(os.Stderr, string(out))
|
||||||
|
if err := cmd.Wait(); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getVersion(versionPrefix string) (*semver.Version, error) {
|
func getVersion(versionPrefix string) (*semver.Version, error) {
|
||||||
out, err := exec.Command("git", "tag").CombinedOutput()
|
out, err := exec.Command("git", "tag").Output()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintln(os.Stderr, string(out))
|
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
var latest *semver.Version
|
var latest *semver.Version
|
||||||
|
|
92
main_test.go
92
main_test.go
|
@ -1,92 +0,0 @@
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strconv"
|
|
||||||
"strings"
|
|
||||||
"testing"
|
|
||||||
)
|
|
||||||
|
|
||||||
func TestParseConfig(t *testing.T) {
|
|
||||||
|
|
||||||
testCases := []struct {
|
|
||||||
input string
|
|
||||||
expect config
|
|
||||||
expectErr string
|
|
||||||
}{
|
|
||||||
{
|
|
||||||
input: "VERSION_PREFIX=v\n",
|
|
||||||
expect: config{versionPrefix: "v"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "GIT_SIGN=1\n",
|
|
||||||
expect: config{sign: true},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "VERSION_PREFIX=v\nGIT_SIGN=t\n",
|
|
||||||
expect: config{versionPrefix: "v", sign: true},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "version_prefix=v\ngit_sign=t\n",
|
|
||||||
expect: config{versionPrefix: "v", sign: true},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "# My config\nversion_prefix=v\ngit_sign=t\n",
|
|
||||||
expect: config{versionPrefix: "v", sign: true},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "VERSION_PREFIX=v\nGIT_SIGN=false\n",
|
|
||||||
expect: config{versionPrefix: "v", sign: false},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "VERSION_PREFIX=\"version/\"\nGIT_SIGN=f\n",
|
|
||||||
expect: config{versionPrefix: "version/", sign: false},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "VERSION_PREFIX=\"foo\\\"bar\"\n",
|
|
||||||
expect: config{versionPrefix: "foo\"bar"},
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "foo\n",
|
|
||||||
expectErr: "error parsing foo: invalid syntax",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "bad_key=v\n",
|
|
||||||
expectErr: "error parsing bad_key=v: unrecognized variable",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "GIT_SIGN=wibble\n",
|
|
||||||
expectErr: "error parsing GIT_SIGN=wibble: invalid boolean value",
|
|
||||||
},
|
|
||||||
{
|
|
||||||
input: "VERSION_PREFIX=\"foo\\z\"\n",
|
|
||||||
expectErr: "error parsing VERSION_PREFIX=\"foo\\z\": invalid quoted string",
|
|
||||||
},
|
|
||||||
}
|
|
||||||
|
|
||||||
for i, tc := range testCases {
|
|
||||||
t.Run(strconv.Itoa(i), func(t *testing.T) {
|
|
||||||
res, err := parseConfig(strings.NewReader(tc.input))
|
|
||||||
if tc.expectErr != "" {
|
|
||||||
if err == nil {
|
|
||||||
t.Error("expected error not returned")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if err.Error() != tc.expectErr {
|
|
||||||
t.Errorf("expected error %q, got %q", tc.expectErr, err.Error())
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if err != nil {
|
|
||||||
t.Errorf("got unexpected error: %v", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if res.versionPrefix != tc.expect.versionPrefix {
|
|
||||||
t.Errorf("got versionPrefix %s, expected %s", res.versionPrefix, tc.expect.versionPrefix)
|
|
||||||
}
|
|
||||||
if res.sign != tc.expect.sign {
|
|
||||||
t.Errorf("got sign %t, expected %t", res.sign, tc.expect.sign)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
Loading…
Add table
Reference in a new issue