From ad13eb7bf1398afa3e1286c15909a2b6aea89afd Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Tue, 21 Jul 2020 15:33:53 +0200 Subject: [PATCH 1/7] Rename file for more clarity --- lib/github/{github.go => repositories.go} | 0 lib/github/{github_test.go => repositories_test.go} | 0 2 files changed, 0 insertions(+), 0 deletions(-) rename lib/github/{github.go => repositories.go} (100%) rename lib/github/{github_test.go => repositories_test.go} (100%) diff --git a/lib/github/github.go b/lib/github/repositories.go similarity index 100% rename from lib/github/github.go rename to lib/github/repositories.go diff --git a/lib/github/github_test.go b/lib/github/repositories_test.go similarity index 100% rename from lib/github/github_test.go rename to lib/github/repositories_test.go From 8ba3a4fe045a78d0b90368968153c910f49268ce Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Thu, 23 Jul 2020 08:32:27 +0200 Subject: [PATCH 2/7] Add content subcommand to github cli --- cmd/cmd_github.go | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/cmd/cmd_github.go b/cmd/cmd_github.go index bc78f15..41dfcd8 100644 --- a/cmd/cmd_github.go +++ b/cmd/cmd_github.go @@ -64,6 +64,26 @@ func createGithub() *cli.Command { }, }, }, + { + Name: "contents", + Usage: "Gets contents from a repository", + Action: githubContents, + ArgsUsage: " ", + Flags: []cli.Flag{ + &cli.StringFlag{ + Name: "repo", + Aliases: []string{"R"}, + Usage: "fetches content of given `REPO`", + Required: true, + }, + &cli.StringSliceFlag{ + Name: "file", + Aliases: []string{"f"}, + Usage: "fetches content of given `FILE`", + Required: true, + }, + }, + }, }, } } @@ -143,3 +163,8 @@ func githubRepositories(c *cli.Context) error { return nil } + +func githubContents(c *cli.Context) error { + fmt.Fprintln(c.App.Writer, "Not implemented.") + return nil +} From f68412a9b51b7692a51f4a19d611b9a198dbca30 Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Thu, 23 Jul 2020 13:18:23 +0200 Subject: [PATCH 3/7] Refactor fetch private repos to use github rest client --- go.mod | 1 + go.sum | 34 ++++++++------------------------- lib/github/repositories.go | 25 ++++++++++-------------- lib/github/repositories_test.go | 11 ++++++++--- 4 files changed, 27 insertions(+), 44 deletions(-) diff --git a/go.mod b/go.mod index 2c29116..27983a7 100644 --- a/go.mod +++ b/go.mod @@ -4,6 +4,7 @@ go 1.14 require ( github.com/antonmedv/expr v1.8.8 + github.com/google/go-github/v32 v32.1.0 github.com/goreleaser/goreleaser v0.140.1 github.com/shurcooL/githubv4 v0.0.0-20200414012201-bbc966b061dd github.com/shurcooL/graphql v0.0.0-20181231061246-d48a9a75455f // indirect diff --git a/go.sum b/go.sum index 054e831..d22a2ba 100644 --- a/go.sum +++ b/go.sum @@ -104,20 +104,19 @@ github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAE github.com/OpenPeeDeeP/depguard v1.0.1 h1:VlW4R6jmBIv3/u1JNlawEvJMM4J+dPORPaZasQee8Us= github.com/OpenPeeDeeP/depguard v1.0.1/go.mod h1:xsIw86fROiiwelg+jB2uM9PiKihMMmUx/1V+TNhjQvM= github.com/StackExchange/wmi v0.0.0-20180116203802-5d049714c4a6/go.mod h1:3eOhrUMpNV+6aFIbp5/iudMxNCF27Vw2OZgy4xEx0Fg= +github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7 h1:uSoVVbwJiQipAclBbw+8quDsfcvFjOpI5iCf4p/cqCs= github.com/alcortesm/tgz v0.0.0-20161220082320-9c5fe88206d7/go.mod h1:6zEj6s6u/ghQa61ZWa/C2Aw3RkjiTBOix7dkqa1VLIs= github.com/alecthomas/kingpin v2.2.6+incompatible/go.mod h1:59OFYbFVLKQKq+mqrL6Rw5bR0c3ACQaawgXx0QYndlE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= +github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239 h1:kFOfPq6dUM1hTo4JG6LR5AXSUEsOjtdm0kw0FtQtMJA= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/antonmedv/expr v1.8.8 h1:uVwIkIBNO2yn4vY2u2DQUqXTmv9jEEMCEcHa19G5weY= github.com/antonmedv/expr v1.8.8/go.mod h1:5qsM3oLGDND7sDmQGDXHkYfkjYMUX14qsgqmHhwGEk8= -github.com/apex/log v1.5.0 h1:eOSyWoylstNP8a6yEeEMAxDjZCJxIdogtL6Vi/LRwDk= -github.com/apex/log v1.5.0/go.mod h1:hmgUUnPXQH5Ktkmip4AKbmYJ07s7Gr4WTjZPzFseKdE= github.com/apex/log v1.6.0 h1:Y50wF1PBIIexIgTm0/7G6gcLitkO5jHK5Mb6wcMY0UI= github.com/apex/log v1.6.0/go.mod h1:x7s+P9VtvFBXge9Vbn+8TrqKmuzmD35TTkeBHul8UtY= -github.com/apex/logs v0.9.5/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= github.com/apex/logs v1.0.0/go.mod h1:XzxuLZ5myVHDy9SAmYpamKKRNApGj54PfYLcFrXqDwo= github.com/aphistic/golf v0.0.0-20180712155816-02c07f170c5a/go.mod h1:3NqKYiepwy8kCu4PNA+aP7WUV72eXWJeP9/r3/K9aLE= github.com/aphistic/sweet v0.2.0/go.mod h1:fWDlIh/isSE9n6EPsRmC0det+whmX6dJid3stzu0Xys= @@ -125,6 +124,7 @@ github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hC github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go v1.15.27/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= github.com/aws/aws-sdk-go v1.19.18/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= @@ -189,6 +189,7 @@ github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7 github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s= github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU= +github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568 h1:BHsljHzVlRcyQhjrss6TZTdY2VfCqZPbv5k3iBFa2ZQ= github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g= github.com/fsnotify/fsnotify v1.4.7 h1:IXs+QLmnXW2CcXuY+8Mzv/fWEsPGWxqefPtCP5CnV9I= @@ -198,6 +199,7 @@ github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4 github.com/gdamore/encoding v1.0.0/go.mod h1:alR0ol34c49FCSBLjhosxzcPHQbf2trDkoo5dl+VrEg= github.com/gdamore/tcell v1.3.0/go.mod h1:Hjvr+Ofd+gLglo7RYKxxnzCBmev3BzsS67MebKS4zMM= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= +github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/go-critic/go-critic v0.5.0 h1:Ic2p5UCl5fX/2WX2w8nroPpPhxRNsNTMlJzsu/uqwnM= github.com/go-critic/go-critic v0.5.0/go.mod h1:4jeRh3ZAVnRYhuWdOEvwzVqLUpxMSoAT0xZ74JsTPlo= @@ -205,6 +207,7 @@ github.com/go-git/gcfg v1.5.0 h1:Q5ViNfGF8zFgyJWPqYwA7qGFoMTEiBmdlkcfRmpIMa4= github.com/go-git/gcfg v1.5.0/go.mod h1:5m20vg6GwYabIxaOonVkTdrILxQMpEShl1xiMF4ua+E= github.com/go-git/go-billy/v5 v5.0.0 h1:7NQHvd9FVid8VL4qVUMm8XifBK+2xCoZ2lSk0agRrHM= github.com/go-git/go-billy/v5 v5.0.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= +github.com/go-git/go-git-fixtures/v4 v4.0.1 h1:q+IFMfLx200Q3scvt2hN79JsEzy4AmBTp/pqnefH+Bc= github.com/go-git/go-git-fixtures/v4 v4.0.1/go.mod h1:m+ICp2rF3jDhFgEZ/8yziagdT1C+ZpZcrJjappBCDSw= github.com/go-git/go-git/v5 v5.1.0 h1:HxJn9g/E7eYvKW3Fm7Jt4ee8LXfPOm/H1cdDu8vEssk= github.com/go-git/go-git/v5 v5.1.0/go.mod h1:ZKfuPUoY1ZqIG4QG9BDBh3G4gLM5zvPuSJAozQrZuyM= @@ -292,9 +295,6 @@ github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d h1:pXTK/gkVNs7Zyy github.com/golangci/gocyclo v0.0.0-20180528144436-0a533e8fa43d/go.mod h1:ozx7R9SIwqmqf5pRP90DhR2Oay2UIjGuKheCBCNwAYU= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a h1:iR3fYXUjHCR97qWS8ch1y9zPNsgXThGwjKPrYfqMPks= github.com/golangci/gofmt v0.0.0-20190930125516-244bba706f1a/go.mod h1:9qCChq59u/eW8im404Q2WWTrnBUQKjpNYKMbU4M7EFU= -github.com/golangci/golangci-lint v1.28.2/go.mod h1:JlLqleIwwgLVJtjKtrB37OKp3LGLrUhEx9tWY4VKWSY= -github.com/golangci/golangci-lint v1.28.3 h1:i6KRBN2WlbtEflyjNe6zDaUjLuPkp/j16x/IOxikVnA= -github.com/golangci/golangci-lint v1.28.3/go.mod h1:JlLqleIwwgLVJtjKtrB37OKp3LGLrUhEx9tWY4VKWSY= github.com/golangci/golangci-lint v1.29.0 h1:0ufaO3l2R1R712cFC+KT3TtwO/IOcsloKZBavRtzrBk= github.com/golangci/golangci-lint v1.29.0/go.mod h1:Iq2GFBB9OoolSDWD81m0iJ2MR4MwDVbi4eC93fO7wh0= github.com/golangci/ineffassign v0.0.0-20190609212857-42439a7714cc h1:gLLhTLMk2/SutryVJ6D4VZCU3CUqr8YloG7FPIBWFpI= @@ -323,6 +323,8 @@ github.com/google/go-cmp v0.5.0 h1:/QaMHBdZ26BB3SSst0Iwl10Epc+xhTquomWX0oZEB6w= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-github/v28 v28.1.1 h1:kORf5ekX5qwXO2mGzXXOjMe/g6ap8ahVe0sBEulhSxo= github.com/google/go-github/v28 v28.1.1/go.mod h1:bsqJWQX05omyWVmc00nEUql9mhQyv38lDZ8kPZcQVoM= +github.com/google/go-github/v32 v32.1.0 h1:GWkQOdXqviCPx7Q7Fj+KyPoGm4SwHRh8rheoPhd27II= +github.com/google/go-github/v32 v32.1.0/go.mod h1:rIEpZD9CTDQwDK9GDrtMTycQNA4JU3qBsCizh3q2WCI= github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk= github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck= github.com/google/go-replayers/grpcreplay v0.1.0 h1:eNb1y9rZFmY4ax45uEEECSa8fsxGRU+8Bil52ASAwic= @@ -340,8 +342,6 @@ github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hf github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/pprof v0.0.0-20200507031123-427632fa3b1c/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/rpmpack v0.0.0-20200711065858-671dbb9d0be5 h1:7P5uYhwxBFsVZrkPmon2EIhFICvv3ughhTg99yphzLQ= -github.com/google/rpmpack v0.0.0-20200711065858-671dbb9d0be5/go.mod h1:RaTPr0KUf2K7fnZYLNDrr8rxAamWs3iNywJLtQ2AzBg= github.com/google/rpmpack v0.0.0-20200721073823-11a45a65cb40 h1:igTDauCa3sFf6EsKD+CzLLc+y1gW3w/Ol4Ms5GdzAgk= github.com/google/rpmpack v0.0.0-20200721073823-11a45a65cb40/go.mod h1:+y9lKiqDhR4zkLl+V9h4q0rdyrYVsWWm6LLCQP33DIk= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= @@ -360,12 +360,8 @@ github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1 h1:EGx4pi6eqNxGa github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/goreleaser/chglog v0.1.1 h1:UaY3enMEVeavOaZyCraLn+2iM7/2T0yji8Mh7ZFsDp4= github.com/goreleaser/chglog v0.1.1/go.mod h1:xSDa/73C0TxBcLvoT2JHh47QyXpCx5rrNVzJKyeFGPw= -github.com/goreleaser/goreleaser v0.140.0 h1:nTYIrOXiVaJOB9XHfkEALLY084rsoulbL5J+uRDGL4E= -github.com/goreleaser/goreleaser v0.140.0/go.mod h1:iN2A4/P8t0z2wDoqVNe83aQR2N+zps7TZZUSKMZPeN4= github.com/goreleaser/goreleaser v0.140.1 h1:H8A5NauktxdkDzPtbcZ0/jVvOGrB4BJ/hXUBgO11EEk= github.com/goreleaser/goreleaser v0.140.1/go.mod h1:H0t7XjXyJUSFeRB9YogmsaAGuYsosH6q0ssRwQsJIrs= -github.com/goreleaser/nfpm v1.4.1 h1:paDjN0j6mVw7tQfoKTF2rTdo2QEtzij1AXpXHd/1JCY= -github.com/goreleaser/nfpm v1.4.1/go.mod h1:yKwwRujI2U+8sGO5+jpg/0L6AV+G4NTwu8iMe7idgZU= github.com/goreleaser/nfpm v1.5.0 h1:tJnAMaNQkqNuJ0O+6KGeDAXYdqwM7bivlwJpdBc03uA= github.com/goreleaser/nfpm v1.5.0/go.mod h1:VAxZSzY5Jf6W6jDjL5PLO8u7Nzan/jpY0YfJF9Hmno0= github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= @@ -461,8 +457,6 @@ github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/kyoh86/exportloopref v0.1.4 h1:t8QP+vBUykOFp6Bks/ZVYm3+Rp3+aj+AKWpGXgK4anA= -github.com/kyoh86/exportloopref v0.1.4/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8= github.com/kyoh86/exportloopref v0.1.7 h1:u+iHuTbkbTS2D/JP7fCuZDo/t3rBVGo3Hf58Rc+lQVY= github.com/kyoh86/exportloopref v0.1.7/go.mod h1:h1rDl2Kdj97+Kwh4gdz3ujE7XHmH51Q0lUiZ1z4NLj8= github.com/lib/pq v1.0.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= @@ -498,8 +492,6 @@ github.com/mattn/go-runewidth v0.0.8/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m github.com/mattn/go-shellwords v1.0.10 h1:Y7Xqm8piKOO3v10Thp7Z36h4FYFjt5xB//6XvOrs2Gw= github.com/mattn/go-shellwords v1.0.10/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= github.com/mattn/go-sqlite3 v1.9.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-zglob v0.0.2 h1:0qT24o2wsZ8cOXQAERwBX6s+rPMs/bJTKxLVVtgfDXc= -github.com/mattn/go-zglob v0.0.2/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/go-zglob v0.0.3 h1:6Ry4EYsScDyt5di4OI6xw1bYhOqfE5S33Z1OPy+d+To= github.com/mattn/go-zglob v0.0.3/go.mod h1:9fxibJccNxU2cnpIKLRRFA7zX7qhkJIQWBb449FYHOo= github.com/mattn/goveralls v0.0.2/go.mod h1:8d1ZMHsd7fW6IRPKQh46F2WRpyib5/X4FOpevwGNQEw= @@ -534,8 +526,6 @@ github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d h1:AREM5mwr4u1 github.com/nbutton23/zxcvbn-go v0.0.0-20180912185939-ae427f1e4c1d/go.mod h1:o96djdrsSGy3AWPyBgZMAGfxZNfgntdJG+11KU4QvbU= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/nishanths/exhaustive v0.0.0-20200525081945-8e46705b6132 h1:NjznefjSrral0MiR4KlB41io/d3OklvhcgQUdfZTqJE= -github.com/nishanths/exhaustive v0.0.0-20200525081945-8e46705b6132/go.mod h1:wBEpHwM2OdmeNpdCvRPUlkEbBuaFmcK4Wv8Q7FuGW3c= github.com/nishanths/exhaustive v0.0.0-20200708172631-8866003e3856 h1:W3KBC2LFyfgd+wNudlfgCCsTo4q97MeNWrfz8/wSdSc= github.com/nishanths/exhaustive v0.0.0-20200708172631-8866003e3856/go.mod h1:wBEpHwM2OdmeNpdCvRPUlkEbBuaFmcK4Wv8Q7FuGW3c= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= @@ -585,7 +575,6 @@ github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJ github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/fastuuid v1.1.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.5.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/rogpeppe/go-internal v1.6.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= github.com/russross/blackfriday/v2 v2.0.1 h1:lPqVAte+HuHNfhJ/0LC98ESWRz8afy9tM/0RK8m9o+Q= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= @@ -684,7 +673,6 @@ github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1 github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa h1:RC4maTWLKKwb7p1cnoygsbKIgNlJqSYBeAFON3Ar8As= github.com/tommy-muehle/go-mnd v1.3.1-0.20200224220436-e6f9a994e8fa/go.mod h1:dSUh0FtTP8VhvkL1S+gUR1OKd9ZnSaozuI6r3m6wOig= github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/ulikunitz/xz v0.5.7 h1:YvTNdFzX6+W5m9msiYg/zpkSURPPtOlzbqYjrFn7Yt4= github.com/ulikunitz/xz v0.5.7/go.mod h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14= github.com/ultraware/funlen v0.0.2 h1:Av96YVBwwNSe4MLR7iI/BIa3VyI7/djnto/pK3Uxbdo= @@ -697,7 +685,6 @@ github.com/uudashr/gocognit v1.0.1 h1:MoG2fZ0b/Eo7NXoIwCVFLG5JED3qgQz5/NEE+rOsjP github.com/uudashr/gocognit v1.0.1/go.mod h1:j44Ayx2KW4+oB6SWMv8KsmHzZrOInQav7D3cQMJ5JUM= github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= github.com/valyala/fasthttp v1.12.0/go.mod h1:229t1eWu9UXTPmoUkbpN/fctKPBY4IJoFXQnxHGXy6E= -github.com/valyala/quicktemplate v1.5.0/go.mod h1:v7yYWpBEiutDyNfVaph6oC/yKwejzVyTX/2cwwHxyok= github.com/valyala/quicktemplate v1.5.1/go.mod h1:v7yYWpBEiutDyNfVaph6oC/yKwejzVyTX/2cwwHxyok= github.com/valyala/tcplisten v0.0.0-20161114210144-ceec8f93295a/go.mod h1:v3UYOV9WzVtRmSR+PDvWpU/qWl4Wa5LApYYX4ZtKbio= github.com/xanzy/go-gitlab v0.33.0 h1:MUJZknbLhVXSFzBA5eqGGhQ2yHSu8tPbGBPeB3sN4B0= @@ -936,7 +923,6 @@ golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWc golang.org/x/tools v0.0.0-20200331202046-9d5940d49312/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200414032229-332987a829c3/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200422022333-3d57cf2e726e/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200428185508-e9a00ec82136/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= @@ -946,8 +932,6 @@ golang.org/x/tools v0.0.0-20200606014950-c42cb6316fb6/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200608174601-1b747fd94509/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200625211823-6506e20df31f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200626171337-aa94e735be7f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200702044944-0cc1aa72b347 h1:/e4fNMHdLn7SQSxTrRZTma2xjQW6ELdxcnpqMhpo9X4= -golang.org/x/tools v0.0.0-20200702044944-0cc1aa72b347/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200710042808-f1c4188a97a1 h1:rD1FcWVsRaMY+l8biE9jbWP5MS/CJJ/90a9TMkMgNrM= golang.org/x/tools v0.0.0-20200710042808-f1c4188a97a1/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1073,8 +1057,6 @@ honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.0.1-2020.1.4 h1:UoveltGrhghAA7ePc+e+QYDHXrBps2PqFZiHkGR/xK8= honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -mvdan.cc/gofumpt v0.0.0-20200513141252-abc0db2c416a h1:TTEzidAa7rn93JGy1ACigx6o9VcsRLKG7qICdErmvUs= -mvdan.cc/gofumpt v0.0.0-20200513141252-abc0db2c416a/go.mod h1:4q/PlrZKQLU5MowSvCKM3U4xJUPtJ8vKWx7vsWFJ3MI= mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f h1:gi7cb8HTDZ6q8VqsUpkdoFi3vxwHMneQ6+Q5Ap5hjPE= mvdan.cc/gofumpt v0.0.0-20200709182408-4fd085cb6d5f/go.mod h1:9VQ397fNXEnF84t90W4r4TRCQK+pg9f8ugVfyj+S26w= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= diff --git a/lib/github/repositories.go b/lib/github/repositories.go index 22d2457..0ff940b 100644 --- a/lib/github/repositories.go +++ b/lib/github/repositories.go @@ -2,7 +2,6 @@ package github import ( "context" - "encoding/json" "fmt" "net/http" "strings" @@ -10,6 +9,7 @@ import ( "golang.org/x/oauth2" + "github.com/google/go-github/v32/github" "github.com/shurcooL/githubv4" "github.com/philips-labs/tabia/lib/github/graphql" @@ -17,6 +17,7 @@ import ( type Client struct { httpClient *http.Client + restClient *github.Client *githubv4.Client } @@ -25,8 +26,9 @@ func NewClientWithTokenAuth(token string) *Client { httpClient := oauth2.NewClient(context.Background(), src) client := githubv4.NewClient(httpClient) + restClient := github.NewClient(httpClient) - return &Client{httpClient, client} + return &Client{httpClient, restClient, client} } //go:generate stringer -type=Visibility @@ -109,30 +111,23 @@ func (c *Client) FetchOrganziationRepositories(ctx context.Context, owner string // currently the graphql api does not seem to support private vs internal. // therefore we use the rest api to fetch the private repos so we can determine private vs internal in the Map function. - privateRepos, err := c.FetchRestRepositories(owner, "private") + privateRepos, err := c.FetchRestRepositories(ctx, owner, "private") if err != nil { return nil, err } return Map(repositories, privateRepos) } -func (c *Client) FetchRestRepositories(owner, repoType string) ([]RestRepo, error) { - resp, err := c.httpClient.Get(fmt.Sprintf("https://api.github.com/orgs/%s/repos?type=%s", owner, repoType)) +func (c *Client) FetchRestRepositories(ctx context.Context, owner, repoType string) ([]*github.Repository, error) { + repos, resp, err := c.restClient.Repositories.ListByOrg(ctx, owner, &github.RepositoryListByOrgOptions{Type: repoType}) if err != nil { return nil, err } defer resp.Body.Close() - - var privateRepos []RestRepo - err = json.NewDecoder(resp.Body).Decode(&privateRepos) - if err != nil { - return nil, err - } - - return privateRepos, nil + return repos, nil } -func Map(repositories []graphql.Repository, privateRepositories []RestRepo) ([]Repository, error) { +func Map(repositories []graphql.Repository, privateRepositories []*github.Repository) ([]Repository, error) { repos := make([]Repository, len(repositories)) for i, repo := range repositories { repos[i] = Repository{ @@ -151,7 +146,7 @@ func Map(repositories []graphql.Repository, privateRepositories []RestRepo) ([]R if repo.IsPrivate { isPrivate := false for _, privRepo := range privateRepositories { - if privRepo.Name == repo.Name { + if *privRepo.Name == repo.Name { isPrivate = true break } diff --git a/lib/github/repositories_test.go b/lib/github/repositories_test.go index 7a810fd..aee032e 100644 --- a/lib/github/repositories_test.go +++ b/lib/github/repositories_test.go @@ -6,6 +6,7 @@ import ( "strings" "testing" + gh "github.com/google/go-github/v32/github" "github.com/stretchr/testify/assert" "github.com/philips-labs/tabia/lib/github" @@ -71,9 +72,9 @@ func TestMap(t *testing.T) { graphql.Repository{Owner: owner, Name: "secret-repo", Description: " ** secrets ** ", IsPrivate: true}, } - privateRepos := []github.RestRepo{ - github.RestRepo{Name: "private-repo"}, - github.RestRepo{Name: "secret-repo"}, + privateRepos := []*gh.Repository{ + &gh.Repository{Name: stringPointer("private-repo")}, + &gh.Repository{Name: stringPointer("secret-repo")}, } ghRepos, err := github.Map(graphqlRepositories, privateRepos) if !assert.NoError(err) { @@ -103,3 +104,7 @@ func TestMap(t *testing.T) { assert.Equal("graphql", ghRepos[2].Topics[2].Name) assert.Equal("https://github.com/topics/graphql", ghRepos[2].Topics[2].URL) } + +func stringPointer(s string) *string { + return &s +} From bd90f9be2b9126a1d2186d44bd1ffb46a9ffd86a Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Thu, 23 Jul 2020 13:19:51 +0200 Subject: [PATCH 4/7] Implement logic to Download a file from a github repository --- lib/github/contents.go | 17 +++++++++++++++++ lib/github/contents_test.go | 23 +++++++++++++++++++++++ 2 files changed, 40 insertions(+) create mode 100644 lib/github/contents.go create mode 100644 lib/github/contents_test.go diff --git a/lib/github/contents.go b/lib/github/contents.go new file mode 100644 index 0000000..767ad77 --- /dev/null +++ b/lib/github/contents.go @@ -0,0 +1,17 @@ +package github + +import ( + "context" + "io/ioutil" +) + +// DownloadContents downloads file contents from the given filepath +func (c *Client) DownloadContents(ctx context.Context, owner, repo, filepath string) ([]byte, error) { + contents, err := c.restClient.Repositories.DownloadContents(ctx, owner, repo, filepath, nil) + if err != nil { + return nil, err + } + + defer contents.Close() + return ioutil.ReadAll(contents) +} diff --git a/lib/github/contents_test.go b/lib/github/contents_test.go new file mode 100644 index 0000000..1a8a3ce --- /dev/null +++ b/lib/github/contents_test.go @@ -0,0 +1,23 @@ +package github_test + +import ( + "context" + "io/ioutil" + "os" + "testing" + + "github.com/stretchr/testify/assert" + + "github.com/philips-labs/tabia/lib/github" +) + +func TestDownloadContents(t *testing.T) { + assert := assert.New(t) + gh := github.NewClientWithTokenAuth(os.Getenv("TABIA_GITHUB_TOKEN")) + contents, err := gh.DownloadContents(context.Background(), "philips-labs", "tabia", "README.md") + if assert.NoError(err) { + readme, _ := ioutil.ReadFile("../../README.md") + assert.NotEmpty(contents) + assert.Equal(string(readme), string(contents)) + } +} From 061e78a4873064c87c4f6816f57cbf573db6b71b Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Thu, 23 Jul 2020 13:34:57 +0200 Subject: [PATCH 5/7] Implement cli to download a file from a git repository --- cmd/cmd_github.go | 44 ++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 42 insertions(+), 2 deletions(-) diff --git a/cmd/cmd_github.go b/cmd/cmd_github.go index 41dfcd8..c908ac8 100644 --- a/cmd/cmd_github.go +++ b/cmd/cmd_github.go @@ -5,6 +5,8 @@ import ( "fmt" "io/ioutil" "os" + "path/filepath" + "strings" "text/tabwriter" "github.com/urfave/cli/v2" @@ -76,12 +78,18 @@ func createGithub() *cli.Command { Usage: "fetches content of given `REPO`", Required: true, }, - &cli.StringSliceFlag{ + &cli.StringFlag{ Name: "file", Aliases: []string{"f"}, Usage: "fetches content of given `FILE`", Required: true, }, + &cli.StringFlag{ + Name: "output", + Aliases: []string{"o"}, + Usage: "writes contents to `FILEPATH`", + Required: false, + }, }, }, }, @@ -165,6 +173,38 @@ func githubRepositories(c *cli.Context) error { } func githubContents(c *cli.Context) error { - fmt.Fprintln(c.App.Writer, "Not implemented.") + repo := c.String("repo") + filePath := c.String("file") + output := c.Path("output") + + client := github.NewClientWithTokenAuth(os.Getenv("TABIA_GITHUB_TOKEN")) + ctx, cancel := context.WithCancel(c.Context) + defer cancel() + + repoParts := strings.Split(repo, "/") + owner := repoParts[0] + repo = repoParts[1] + + contents, err := client.DownloadContents(ctx, owner, repo, filePath) + if err != nil { + return err + } + + if output != "" { + if strings.Contains(output, "/") { + dir := filepath.Dir(output) + err := os.MkdirAll(dir, 0755) + if err != nil { + return err + } + } + err := ioutil.WriteFile(output, contents, 0644) + if err != nil { + return err + } + } else { + fmt.Fprintf(c.App.Writer, "%s", contents) + } + return nil } From 116723b2cdbba472f9be7df0195a2eb3d4d415ed Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Thu, 23 Jul 2020 14:09:33 +0200 Subject: [PATCH 6/7] Add environment variable for integration test --- .github/workflows/golang.yml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/golang.yml b/.github/workflows/golang.yml index d2a1cab..d45f314 100644 --- a/.github/workflows/golang.yml +++ b/.github/workflows/golang.yml @@ -51,6 +51,8 @@ jobs: - name: Test and Cover run: go test -v -race -count=1 -covermode=atomic -coverprofile=coverage.out ./... + env: + TABIA_GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} - name: Upload Code Coverage uses: codecov/codecov-action@v1.0.10 From fa11b24fa85c08c09376354815241452fe0a2af1 Mon Sep 17 00:00:00 2001 From: Marco Franssen Date: Thu, 23 Jul 2020 15:47:49 +0200 Subject: [PATCH 7/7] Add test for non-existing file when downloading github contents --- lib/github/contents_test.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/lib/github/contents_test.go b/lib/github/contents_test.go index 1a8a3ce..df0cdfd 100644 --- a/lib/github/contents_test.go +++ b/lib/github/contents_test.go @@ -20,4 +20,9 @@ func TestDownloadContents(t *testing.T) { assert.NotEmpty(contents) assert.Equal(string(readme), string(contents)) } + + contents, err = gh.DownloadContents(context.Background(), "philips-labs", "tabia", "IamNotThere.txt") + if assert.Error(err) { + assert.EqualError(err, "No file named IamNotThere.txt found in .") + } }