Skip to content

Commit 5b0f25b

Browse files
refactor: use protoc to generate structs
1 parent 5e1d168 commit 5b0f25b

File tree

11 files changed

+621
-47
lines changed

11 files changed

+621
-47
lines changed

go.mod

+3
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,14 @@ go 1.14
44

55
require (
66
github.com/Masterminds/semver v1.5.0
7+
github.com/golang/protobuf v1.4.1
78
github.com/google/go-github/v30 v30.1.0
89
github.com/shuheiktgw/go-travis v0.2.4
910
github.com/stretchr/testify v1.5.1
1011
github.com/urfave/cli/v2 v2.2.0
1112
github.com/xanzy/go-gitlab v0.31.0
1213
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d
14+
google.golang.org/grpc v1.31.0
15+
google.golang.org/protobuf v1.22.0
1316
gopkg.in/yaml.v2 v2.2.8 // indirect
1417
)

go.sum

+57
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,37 @@
1+
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
12
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
23
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
34
github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww=
45
github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y=
6+
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
7+
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
8+
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
59
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d h1:U+s90UTSYgptZMwQh2aRr3LuazLJIa+Pg3Kc1ylSYVY=
610
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
711
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
812
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
913
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
14+
github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
15+
github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98=
16+
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
17+
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
18+
github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A=
1019
github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
1120
github.com/golang/protobuf v1.3.2 h1:6nsPYzhq5kReh6QImI3k5qWzO4PEbvbIW2cwSfR/6xs=
1221
github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
22+
github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw=
23+
github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8=
24+
github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA=
25+
github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs=
26+
github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w=
27+
github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0=
28+
github.com/golang/protobuf v1.4.1 h1:ZFgWrT+bLgsYPirOnRfKLYJLvssAegOj/hgyMFdJZe0=
29+
github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8=
30+
github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M=
31+
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
32+
github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
33+
github.com/google/go-cmp v0.4.0 h1:xsAVV57WRhGj6kEIi8ReJzQlHHqcBYCElAvkovg3B/4=
34+
github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
1335
github.com/google/go-github/v30 v30.1.0 h1:VLDx+UolQICEOKu2m4uAoMti1SxuEBAl7RSEG16L+Oo=
1436
github.com/google/go-github/v30 v30.1.0/go.mod h1:n8jBpHl45a/rlBUtRJMOG4GhNADUQFEufcolZ95JfU8=
1537
github.com/google/go-querystring v0.0.0-20170111101155-53e6ce116135/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
@@ -23,6 +45,7 @@ github.com/hashicorp/go-retryablehttp v0.6.4 h1:BbgctKO892xEyOXnGiaAwIoSq1QZ/SS4
2345
github.com/hashicorp/go-retryablehttp v0.6.4/go.mod h1:vAew36LZh98gCBJNLH42IQ1ER/9wtLZZ8meHqQvEYWY=
2446
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
2547
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
48+
github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA=
2649
github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q=
2750
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
2851
github.com/shuheiktgw/go-travis v0.2.4 h1:IAnh/Dyv7ql87qtJWUcvR5MM8e5iCDGoENl9VzpxAHc=
@@ -42,28 +65,62 @@ github.com/xanzy/go-gitlab v0.31.0 h1:+nHztQuCXGSMluKe5Q9IRaPdz6tO8O0gMkQ0vqGpiB
4265
github.com/xanzy/go-gitlab v0.31.0/go.mod h1:sPLojNBn68fMUWSxIJtdVVIP8uSBYqesTfDUseX11Ug=
4366
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2 h1:VklqNMn3ovrHsnt90PveolxSbWFaJdECFbxSq0Mqo2M=
4467
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
68+
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
69+
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
70+
golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU=
71+
golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc=
4572
golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
73+
golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
4674
golang.org/x/net v0.0.0-20181108082009-03003ca0c849/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
4775
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
76+
golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
4877
golang.org/x/net v0.0.0-20190311183353-d8887717615a h1:oWX7TPOiFAMXLq8o0ikBYfCJVlRHBcsciT5bXOrH628=
4978
golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
5079
golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
5180
golang.org/x/oauth2 v0.0.0-20181106182150-f42d05182288/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
5281
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw=
5382
golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
83+
golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5484
golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
5585
golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
86+
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
87+
golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
88+
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a h1:1BGLXjeY4akVXGgbC9HugT3Jv3hCI0z56oJR5vAMgBU=
5689
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
90+
golang.org/x/text v0.3.0 h1:g61tztE5qeGQ89tm6NTjjM9VPIm088od1l6aSorWRWg=
5791
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
5892
golang.org/x/time v0.0.0-20191024005414-555d28b269f0 h1:/5xXl8Y5W96D+TtHSlonuFqGHIWVuyCkGJLwGh9JJFs=
5993
golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
94+
golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
95+
golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY=
96+
golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
97+
golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q=
98+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
99+
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
60100
google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
61101
google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
62102
google.golang.org/appengine v1.4.0 h1:/wp5JvzpHIxhs/dumFmF7BXTf3Z+dd4uXta4kVyO508=
63103
google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
104+
google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
105+
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55 h1:gSJIx1SDwno+2ElGhA4+qG2zF97qiUzTM+rQ0klBOcE=
106+
google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
107+
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
108+
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
109+
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
110+
google.golang.org/grpc v1.31.0 h1:T7P4R73V3SSDPhH7WW7ATbfViLtmamH0DKrP3f9AuDI=
111+
google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak=
112+
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
113+
google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
114+
google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
115+
google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE=
116+
google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo=
117+
google.golang.org/protobuf v1.22.0 h1:cJv5/xdbk1NnMPR1VP9+HU6gupuG9MLBoH1r6RHZ2MY=
118+
google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU=
64119
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
65120
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
66121
gopkg.in/yaml.v2 v2.2.2 h1:ZCJp+EgiOT7lHqUV2J862kp8Qj64Jo6az82+3Td9dZw=
67122
gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
68123
gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
69124
gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
125+
honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
126+
honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=

pkg/generator/changelog/changelog_test.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ func TestDefaultGenerator(t *testing.T) {
1515
{SHA: "123456789", Type: "feat", Scope: "app", Message: "commit message"},
1616
{SHA: "abcd", Type: "fix", Scope: "", Message: "commit message"},
1717
{SHA: "12345678", Type: "yolo", Scope: "swag", Message: "commit message"},
18-
{SHA: "12345678", Type: "chore", Scope: "", Message: "commit message", Raw: []string{"", "BREAKING CHANGE: test"}, Change: semrel.Change{Major: true}},
18+
{SHA: "12345678", Type: "chore", Scope: "", Message: "commit message", Raw: []string{"", "BREAKING CHANGE: test"}, Change: &semrel.Change{Major: true}},
1919
{SHA: "stop", Type: "chore", Scope: "", Message: "not included"},
2020
}
2121
changelogConfig.LatestRelease = &semrel.Release{SHA: "stop"}

pkg/semrel/commit.go

-19
This file was deleted.

pkg/semrel/release.go

+7-12
Original file line numberDiff line numberDiff line change
@@ -7,19 +7,14 @@ import (
77
"github.com/Masterminds/semver"
88
)
99

10-
type Release struct {
11-
SHA string
12-
Version *semver.Version
13-
}
14-
1510
type Releases []*Release
1611

1712
func (r Releases) Len() int {
1813
return len(r)
1914
}
2015

2116
func (r Releases) Less(i, j int) bool {
22-
return r[j].Version.LessThan(r[i].Version)
17+
return semver.MustParse(r[j].Version).LessThan(semver.MustParse(r[i].Version))
2318
}
2419

2520
func (r Releases) Swap(i, j int) {
@@ -28,14 +23,14 @@ func (r Releases) Swap(i, j int) {
2823

2924
func (releases Releases) GetLatestRelease(vrange string) (*Release, error) {
3025
if len(releases) == 0 {
31-
return &Release{"", &semver.Version{}}, nil
26+
return &Release{SHA: "", Version: "0.0.0"}, nil
3227
}
3328

3429
sort.Sort(releases)
3530

3631
var lastRelease *Release
3732
for _, r := range releases {
38-
if r.Version.Prerelease() == "" {
33+
if semver.MustParse(r.Version).Prerelease() == "" {
3934
lastRelease = r
4035
break
4136
}
@@ -45,15 +40,15 @@ func (releases Releases) GetLatestRelease(vrange string) (*Release, error) {
4540
if lastRelease != nil {
4641
return lastRelease, nil
4742
}
48-
return &Release{"", &semver.Version{}}, nil
43+
return &Release{SHA: "", Version: "0.0.0"}, nil
4944
}
5045

5146
constraint, err := semver.NewConstraint(vrange)
5247
if err != nil {
5348
return nil, err
5449
}
5550
for _, r := range releases {
56-
if constraint.Check(r.Version) {
51+
if constraint.Check(semver.MustParse(r.Version)) {
5752
return r, nil
5853
}
5954
}
@@ -65,12 +60,12 @@ func (releases Releases) GetLatestRelease(vrange string) (*Release, error) {
6560

6661
splitPre := strings.SplitN(vrange, "-", 2)
6762
if len(splitPre) == 1 {
68-
return &Release{lastRelease.SHA, nver}, nil
63+
return &Release{SHA: lastRelease.SHA, Version: nver.String()}, nil
6964
}
7065

7166
npver, err := nver.SetPrerelease(splitPre[1])
7267
if err != nil {
7368
return nil, err
7469
}
75-
return &Release{lastRelease.SHA, &npver}, nil
70+
return &Release{SHA: lastRelease.SHA, Version: npver.String()}, nil
7671
}

pkg/semrel/release_test.go

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package semrel
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/stretchr/testify/require"
8+
)
9+
10+
func TestReleases(t *testing.T) {
11+
testCases := []struct {
12+
Releases Releases
13+
VRange string
14+
LatestVersion string
15+
}{
16+
{
17+
Releases{},
18+
"",
19+
"0.0.0",
20+
},
21+
{
22+
Releases{
23+
{SHA: "a", Version: "0.1.0"},
24+
},
25+
"",
26+
"0.1.0",
27+
},
28+
{
29+
Releases{
30+
{SHA: "a", Version: "1.0.0"},
31+
{SHA: "b", Version: "1.1.0"},
32+
{SHA: "c", Version: "2.0.0-beta"},
33+
{SHA: "d", Version: "0.1.0"},
34+
},
35+
"",
36+
"1.1.0",
37+
},
38+
{
39+
Releases{
40+
{SHA: "a", Version: "1.0.0"},
41+
{SHA: "b", Version: "1.1.0"},
42+
{SHA: "c", Version: "2.0.0"},
43+
{SHA: "c", Version: "2.1.0-beta"},
44+
{SHA: "d", Version: "0.1.0"},
45+
},
46+
"2-beta",
47+
"2.1.0-beta",
48+
},
49+
{
50+
Releases{
51+
{SHA: "a", Version: "1.0.0"},
52+
{SHA: "b", Version: "1.1.0"},
53+
{SHA: "c", Version: "3.0.0-rc.1"},
54+
{SHA: "c", Version: "3.0.0-rc.2"},
55+
{SHA: "d", Version: "0.1.0"},
56+
},
57+
"3-rc",
58+
"3.0.0-rc.2",
59+
},
60+
{
61+
Releases{
62+
{SHA: "a", Version: "1.0.0"},
63+
{SHA: "b", Version: "1.1.0"},
64+
{SHA: "c", Version: "3.0.0-rc.1"},
65+
{SHA: "c", Version: "3.0.0-rc.2"},
66+
{SHA: "d", Version: "0.1.0"},
67+
},
68+
"4-alpha",
69+
"4.0.0-alpha",
70+
},
71+
}
72+
for i, tc := range testCases {
73+
t.Run(fmt.Sprintf("TestReleases: %d, LV: %s", i, tc.LatestVersion), func(t *testing.T) {
74+
lr, err := tc.Releases.GetLatestRelease(tc.VRange)
75+
require.NoError(t, err)
76+
require.Equal(t, tc.LatestVersion, lr.Version)
77+
})
78+
}
79+
}

pkg/semrel/semrel.go

+9-4
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ import (
99
"github.com/go-semantic-release/semantic-release/pkg/config"
1010
)
1111

12-
func CalculateChange(commits []*Commit, latestRelease *Release) Change {
13-
var change Change
12+
func CalculateChange(commits []*Commit, latestRelease *Release) *Change {
13+
change := &Change{}
1414
for _, commit := range commits {
1515
if latestRelease.SHA == commit.SHA {
1616
break
@@ -22,15 +22,20 @@ func CalculateChange(commits []*Commit, latestRelease *Release) Change {
2222
return change
2323
}
2424

25-
func ApplyChange(version *semver.Version, change Change, allowInitialDevelopmentVersions bool) *semver.Version {
25+
func ApplyChange(rawVersion string, rawChange *Change, allowInitialDevelopmentVersions bool) *semver.Version {
26+
version := semver.MustParse(rawVersion)
27+
change := &Change{
28+
Major: rawChange.Major,
29+
Minor: rawChange.Minor,
30+
Patch: rawChange.Patch,
31+
}
2632
if !allowInitialDevelopmentVersions && version.Major() == 0 {
2733
change.Major = true
2834
}
2935

3036
if allowInitialDevelopmentVersions && version.Major() == 0 && version.Minor() == 0 {
3137
change.Minor = true
3238
}
33-
3439
if !change.Major && !change.Minor && !change.Patch {
3540
return nil
3641
}

pkg/semrel/semrel_test.go

+10-11
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,9 @@ import (
1010

1111
func TestCalculateChange(t *testing.T) {
1212
commits := []*Commit{
13-
{SHA: "a", Change: Change{true, false, false}},
14-
{SHA: "b", Change: Change{false, true, false}},
15-
{SHA: "c", Change: Change{false, false, true}},
13+
{SHA: "a", Change: &Change{Major: true, Minor: false, Patch: false}},
14+
{SHA: "b", Change: &Change{Major: false, Minor: true, Patch: false}},
15+
{SHA: "c", Change: &Change{Major: false, Minor: false, Patch: true}},
1616
}
1717
change := CalculateChange(commits, &Release{})
1818
if !change.Major || !change.Minor || !change.Patch {
@@ -22,22 +22,21 @@ func TestCalculateChange(t *testing.T) {
2222
if change.Major || change.Minor || change.Patch {
2323
t.Fail()
2424
}
25-
version, _ := semver.NewVersion("1.0.0")
26-
newVersion := GetNewVersion(&config.Config{}, commits, &Release{SHA: "b", Version: version})
25+
newVersion := GetNewVersion(&config.Config{}, commits, &Release{SHA: "b", Version: "1.0.0"})
2726
if newVersion.String() != "2.0.0" {
2827
t.Fail()
2928
}
3029
}
3130

3231
func TestApplyChange(t *testing.T) {
33-
NoChange := Change{false, false, false}
34-
PatchChange := Change{false, false, true}
35-
MinorChange := Change{false, true, true}
36-
MajorChange := Change{true, true, true}
32+
NoChange := &Change{Major: false, Minor: false, Patch: false}
33+
PatchChange := &Change{Major: false, Minor: false, Patch: true}
34+
MinorChange := &Change{Major: false, Minor: true, Patch: true}
35+
MajorChange := &Change{Major: true, Minor: true, Patch: true}
3736

3837
testCases := []struct {
3938
currentVersion string
40-
change Change
39+
change *Change
4140
expectedVersion string
4241
allowInitialDevelopmentVersions bool
4342
}{
@@ -72,7 +71,7 @@ func TestApplyChange(t *testing.T) {
7271
t.Errorf("failed to create version: %v", err)
7372
}
7473

75-
actual := ApplyChange(current, tc.change, tc.allowInitialDevelopmentVersions)
74+
actual := ApplyChange(current.String(), tc.change, tc.allowInitialDevelopmentVersions)
7675

7776
// Handle no new version case
7877
if actual != nil && tc.expectedVersion != "" {

0 commit comments

Comments
 (0)