Skip to content

Commit 3d9faef

Browse files
authored
fix(action): allow main ref when krew release bot action is triggered (#80)
* fix(action): allow finding tag from main ref Signed-off-by: Rajat Jindal <[email protected]> * release check should be part of cicd interface Signed-off-by: Rajat Jindal <[email protected]> * update GitHub actions Signed-off-by: Rajat Jindal <[email protected]> * update go version and github sdk Signed-off-by: Rajat Jindal <[email protected]> --------- Signed-off-by: Rajat Jindal <[email protected]>
1 parent ad6e92e commit 3d9faef

File tree

2,088 files changed

+244
-665471
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

2,088 files changed

+244
-665471
lines changed

.github/workflows/pr.yaml

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -6,13 +6,13 @@ jobs:
66
steps:
77

88
- name: Checkout
9-
uses: actions/checkout@v3
9+
uses: actions/checkout@v4
1010

1111
- name: Setup Go
12-
uses: actions/setup-go@v4
12+
uses: actions/setup-go@v5
1313
with:
14-
go-version: '1.20'
14+
go-version: '1.23'
1515

1616
- name: Run unit tests
1717
run: |
18-
pwd && ls -ltr && go version && go test -mod vendor ./... -cover
18+
pwd && ls -ltr && go version && go test ./... -cover

.github/workflows/release.yml

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,23 +16,23 @@ jobs:
1616
packages: write
1717
steps:
1818
- name: Checkout repository
19-
uses: actions/checkout@v3
19+
uses: actions/checkout@v4
2020

2121
- name: Log in to the Container registry
22-
uses: docker/login-action@v2
22+
uses: docker/login-action@v3
2323
with:
2424
registry: ${{ env.REGISTRY }}
2525
username: ${{ github.actor }}
2626
password: ${{ secrets.GITHUB_TOKEN }}
2727

2828
- name: Extract metadata (tags, labels) for Docker
2929
id: meta
30-
uses: docker/metadata-action@v4
30+
uses: docker/metadata-action@v5
3131
with:
3232
images: ${{ env.REGISTRY }}/${{ env.IMAGE_NAME }}
3333

3434
- name: Build and push Docker image
35-
uses: docker/build-push-action@v4.0.0
35+
uses: docker/build-push-action@v6
3636
with:
3737
context: .
3838
push: true
@@ -43,16 +43,16 @@ jobs:
4343
runs-on: ubuntu-latest
4444
steps:
4545
- name: Checkout
46-
uses: actions/checkout@v3
46+
uses: actions/checkout@v4
4747

4848
- name: Setup Go
49-
uses: actions/setup-go@v4
49+
uses: actions/setup-go@v5
5050
with:
51-
go-version: '1.20'
51+
go-version: '1.23'
5252

5353
- name: Run unit tests
5454
run: |
55-
go test -mod vendor ./... -cover
55+
go test ./... -cover
5656
5757
- name: GoReleaser
5858
uses: goreleaser/[email protected]

go.mod

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,9 @@
11
module github.com/rajatjindal/krew-release-bot
22

3-
go 1.20
3+
go 1.23
44

55
require (
66
github.com/aws/aws-lambda-go v1.39.1
7-
github.com/google/go-github/v50 v50.2.0
87
github.com/pkg/errors v0.9.1
98
github.com/sirupsen/logrus v1.9.0
109
github.com/spf13/cobra v1.6.1
@@ -17,10 +16,10 @@ require (
1716
sigs.k8s.io/krew v0.3.3
1817
)
1918

19+
require github.com/google/go-github/v66 v66.0.0
20+
2021
require (
2122
github.com/Microsoft/go-winio v0.6.0 // indirect
22-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 // indirect
23-
github.com/cloudflare/circl v1.1.0 // indirect
2423
github.com/davecgh/go-spew v1.1.1 // indirect
2524
github.com/emirpasic/gods v1.18.1 // indirect
2625
github.com/go-logr/logr v1.2.3 // indirect

go.sum

Lines changed: 9 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,6 @@ github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v
22
github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg=
33
github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE=
44
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
5-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8 h1:wPbRQzjjwFc0ih8puEVAOFGELsn1zoIIYdxvML7mDxA=
6-
github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g=
75
github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0=
86
github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE=
97
github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs=
@@ -14,9 +12,6 @@ github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPd
1412
github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs=
1513
github.com/aws/aws-lambda-go v1.39.1 h1:UcuX9O3JqhQyP/rxPJEpTUUSehzqkNpwKKRFa9N+ozk=
1614
github.com/aws/aws-lambda-go v1.39.1/go.mod h1:jwFe2KmMsHmffA1X2R09hH6lFzJQxzI8qK17ewzbQMM=
17-
github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0=
18-
github.com/cloudflare/circl v1.1.0 h1:bZgT/A+cikZnKIwn7xL2OBj012Bmvho/o6RpRvv3GKY=
19-
github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I=
2015
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
2116
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
2217
github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
@@ -58,9 +53,10 @@ github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiu
5853
github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU=
5954
github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
6055
github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
61-
github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38=
62-
github.com/google/go-github/v50 v50.2.0 h1:j2FyongEHlO9nxXLc+LP3wuBSVU9mVxfpdYUexMpIfk=
63-
github.com/google/go-github/v50 v50.2.0/go.mod h1:VBY8FB6yPIjrtKhozXv4FQupxKLS6H4m6xFZlT43q8Q=
56+
github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI=
57+
github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
58+
github.com/google/go-github/v66 v66.0.0 h1:ADJsaXj9UotwdgK8/iFZtv7MLc8E8WBl62WLd/D/9+M=
59+
github.com/google/go-github/v66 v66.0.0/go.mod h1:+4SO9Zkuyf8ytMj0csN1NR/5OTR+MfqPp8P8dVlcvY4=
6460
github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8=
6561
github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU=
6662
github.com/google/gofuzz v0.0.0-20161122191042-44d81051d367/go.mod h1:HP5RmnzzSNb993RKQDq4+1A4ia9nllfqcQFTQJedwGI=
@@ -96,6 +92,7 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
9692
github.com/kr/pty v1.1.8/go.mod h1:O1sed60cT9XZ5uDucP5qwvh+TE3NnUj51EiZO/lmSfw=
9793
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
9894
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
95+
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
9996
github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
10097
github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc=
10198
github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
@@ -114,6 +111,7 @@ github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+
114111
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32 h1:W6apQkHrMkS0Muv8G/TipAy/FJl/rCYT0+EuS8+Z0z4=
115112
github.com/nbio/st v0.0.0-20140626010706-e9e8d9816f32/go.mod h1:9wM+0iRr9ahx58uYLpLIr5fm8diHn0JbqRycJi6w0Ms=
116113
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs=
114+
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
117115
github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
118116
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
119117
github.com/onsi/ginkgo v1.8.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
@@ -167,7 +165,6 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACk
167165
golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
168166
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
169167
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
170-
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
171168
golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
172169
golang.org/x/crypto v0.7.0 h1:AvwMYaRytfdeVt3u6mLaxYtErKYjxA2OXjJ1HHq6t3A=
173170
golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU=
@@ -185,7 +182,6 @@ golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLL
185182
golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
186183
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
187184
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
188-
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
189185
golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
190186
golang.org/x/net v0.8.0 h1:Zrh2ngAOFYneWTAIAPethzeaQLuHwhuBkuV6ZiRnUaQ=
191187
golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc=
@@ -197,6 +193,7 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ
197193
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
198194
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
199195
golang.org/x/sync v0.1.0 h1:wsuoTGHzEhffawBOhz5CYhcrV4IdKZbEyZjBMuTp12o=
196+
golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
200197
golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
201198
golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
202199
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
@@ -212,12 +209,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
212209
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
213210
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
214211
golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
215-
golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
216212
golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
217213
golang.org/x/sys v0.6.0 h1:MVltZSvRTcU2ljQOhs94SXPftV6DCNnZViHeQps87pQ=
218214
golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
219215
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
220216
golang.org/x/term v0.6.0 h1:clScbb1cHjoCkyRbWwBEUZ5H/tIFu5TAXIqaZD0Gcjw=
217+
golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U=
221218
golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
222219
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
223220
golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
@@ -248,6 +245,7 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8
248245
gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
249246
gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
250247
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU=
248+
gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
251249
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
252250
gopkg.in/h2non/gock.v1 v1.1.2 h1:jBbHXgGBK/AoPVfJh5x4r/WxIrElvbLel8TCZkkZJoY=
253251
gopkg.in/h2non/gock.v1 v1.1.2/go.mod h1:n7UGz/ckNChHiK05rDoiC4MYSunEC/lyaUm2WWaDva0=

pkg/cicd/circleci/circleci.go

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,15 @@ import (
77
"strings"
88
)
99

10-
//Provider implements provider interface
10+
// Provider implements provider interface
1111
type Provider struct{}
1212

13-
//GetTag returns tag
13+
// TODO(rajatjindal): implement for circleci
14+
func (p *Provider) IsPreRelease(owner, repo, tag string) (bool, error) {
15+
return false, nil
16+
}
17+
18+
// GetTag returns tag
1419
func (p *Provider) GetTag() (string, error) {
1520
ref := os.Getenv("CIRCLE_TAG")
1621
if ref == "" {
@@ -20,7 +25,7 @@ func (p *Provider) GetTag() (string, error) {
2025
return ref, nil
2126
}
2227

23-
//GetOwnerAndRepo gets the owner and repo from the env
28+
// GetOwnerAndRepo gets the owner and repo from the env
2429
func (p *Provider) GetOwnerAndRepo() (string, string, error) {
2530
owner := os.Getenv("CIRCLE_PROJECT_USERNAME")
2631
if owner == "" {
@@ -35,7 +40,7 @@ func (p *Provider) GetOwnerAndRepo() (string, string, error) {
3540
return owner, repo, nil
3641
}
3742

38-
//GetActor gets the owner and repo from the env
43+
// GetActor gets the owner and repo from the env
3944
func (p *Provider) GetActor() (string, error) {
4045
actor := os.Getenv("CIRCLE_USERNAME")
4146
if actor == "" {
@@ -45,12 +50,12 @@ func (p *Provider) GetActor() (string, error) {
4550
return actor, nil
4651
}
4752

48-
//getInputForAction gets input to action
53+
// getInputForAction gets input to action
4954
func getInputForAction(key string) string {
5055
return os.Getenv(fmt.Sprintf("INPUT_%s", strings.ToUpper(key)))
5156
}
5257

53-
//GetWorkDirectory gets workdir
58+
// GetWorkDirectory gets workdir
5459
func (p *Provider) GetWorkDirectory() string {
5560
workdirInput := getInputForAction("workdir")
5661
if workdirInput != "" {
@@ -67,7 +72,7 @@ func (p *Provider) GetWorkDirectory() string {
6772
return dir
6873
}
6974

70-
//GetTemplateFile returns the template file
75+
// GetTemplateFile returns the template file
7176
func (p *Provider) GetTemplateFile() string {
7277
templateFile := getInputForAction("krew_template_file")
7378
if templateFile != "" {

pkg/cicd/github/actions.go

Lines changed: 69 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,31 +1,71 @@
11
package github
22

33
import (
4+
"context"
45
"fmt"
6+
"net/http"
57
"os"
68
"path/filepath"
79
"strings"
10+
11+
"github.com/google/go-github/v66/github"
12+
"github.com/sirupsen/logrus"
13+
"golang.org/x/oauth2"
814
)
915

10-
//Actions implements provider interface
16+
// Actions implements provider interface
1117
type Actions struct{}
1218

13-
//GetTag returns tag
19+
func (p *Actions) IsPreRelease(owner, repo, tag string) (bool, error) {
20+
client := github.NewClient(getHTTPClient())
21+
releaseInfo, err := getReleaseForTag(client, owner, repo, tag)
22+
if err != nil {
23+
return false, err
24+
}
25+
26+
return releaseInfo.GetPrerelease(), nil
27+
}
28+
29+
func (p *Actions) getTagForCommitSha(commit string) (string, error) {
30+
client := github.NewClient(getHTTPClient())
31+
owner, repo, err := p.GetOwnerAndRepo()
32+
if err != nil {
33+
return "", err
34+
}
35+
36+
releases, _, err := client.Repositories.ListReleases(context.Background(), owner, repo, nil)
37+
if err != nil {
38+
return "", err
39+
}
40+
41+
for _, release := range releases {
42+
if release.GetTargetCommitish() == commit {
43+
return release.GetTagName(), nil
44+
}
45+
}
46+
return "", fmt.Errorf("failed to find a release on this specific commit %q", commit)
47+
}
48+
49+
// GetTag returns tag
1450
func (p *Actions) GetTag() (string, error) {
1551
ref := os.Getenv("GITHUB_REF")
1652
if ref == "" {
1753
return "", fmt.Errorf("GITHUB_REF env variable not found")
1854
}
1955

2056
//GITHUB_REF=refs/tags/v0.0.6
21-
if !strings.HasPrefix(ref, "refs/tags/") {
22-
return "", fmt.Errorf("GITHUB_REF expected to be of format refs/tags/<tag> but found %q", ref)
57+
if strings.HasPrefix(ref, "refs/tags/") {
58+
return strings.ReplaceAll(ref, "refs/tags/", ""), nil
59+
}
60+
61+
if strings.HasPrefix(ref, "refs/heads/") {
62+
return p.getTagForCommitSha(os.Getenv("GITHUB_SHA"))
2363
}
2464

25-
return strings.ReplaceAll(ref, "refs/tags/", ""), nil
65+
return "", fmt.Errorf("failed to find the tag for the release")
2666
}
2767

28-
//GetOwnerAndRepo gets the owner and repo from the env
68+
// GetOwnerAndRepo gets the owner and repo from the env
2969
func (p *Actions) GetOwnerAndRepo() (string, string, error) {
3070
repoFromEnv := os.Getenv("GITHUB_REPOSITORY")
3171
if repoFromEnv == "" {
@@ -40,7 +80,7 @@ func (p *Actions) GetOwnerAndRepo() (string, string, error) {
4080
return s[0], s[1], nil
4181
}
4282

43-
//GetActor gets the owner and repo from the env
83+
// GetActor gets the owner and repo from the env
4484
func (p *Actions) GetActor() (string, error) {
4585
actor := os.Getenv("GITHUB_ACTOR")
4686
if actor == "" {
@@ -50,12 +90,12 @@ func (p *Actions) GetActor() (string, error) {
5090
return actor, nil
5191
}
5292

53-
//getInputForAction gets input to action
93+
// getInputForAction gets input to action
5494
func getInputForAction(key string) string {
5595
return os.Getenv(fmt.Sprintf("INPUT_%s", strings.ToUpper(key)))
5696
}
5797

58-
//GetWorkDirectory gets workdir
98+
// GetWorkDirectory gets workdir
5999
func (p *Actions) GetWorkDirectory() string {
60100
workdirInput := getInputForAction("workdir")
61101
if workdirInput != "" {
@@ -65,7 +105,7 @@ func (p *Actions) GetWorkDirectory() string {
65105
return os.Getenv("GITHUB_WORKSPACE")
66106
}
67107

68-
//GetTemplateFile returns the template file
108+
// GetTemplateFile returns the template file
69109
func (p *Actions) GetTemplateFile() string {
70110
templateFile := getInputForAction("krew_template_file")
71111
if templateFile != "" {
@@ -74,3 +114,22 @@ func (p *Actions) GetTemplateFile() string {
74114

75115
return filepath.Join(p.GetWorkDirectory(), ".krew.yaml")
76116
}
117+
118+
func getHTTPClient() *http.Client {
119+
if os.Getenv("GITHUB_TOKEN") != "" {
120+
logrus.Info("GITHUB_TOKEN env variable found, using authenticated requests.")
121+
ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: os.Getenv("GITHUB_TOKEN")})
122+
return oauth2.NewClient(context.TODO(), ts)
123+
}
124+
125+
return nil
126+
}
127+
128+
func getReleaseForTag(client *github.Client, owner, repo, tag string) (*github.RepositoryRelease, error) {
129+
release, _, err := client.Repositories.GetReleaseByTag(context.TODO(), owner, repo, tag)
130+
if err != nil {
131+
return nil, err
132+
}
133+
134+
return release, nil
135+
}

0 commit comments

Comments
 (0)