From deb8faf1e34765bb0112c848d39028012fb9c9c0 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Wed, 6 Dec 2023 14:04:13 -0800 Subject: [PATCH] Storage: remove git backing for storage (#79181) --- go.mod | 16 +- go.sum | 35 --- pkg/services/store/config.go | 2 - pkg/services/store/github_helper.go | 182 ------------- pkg/services/store/service.go | 16 +- pkg/services/store/storage_git.go | 387 ---------------------------- 6 files changed, 4 insertions(+), 634 deletions(-) delete mode 100644 pkg/services/store/github_helper.go delete mode 100644 pkg/services/store/storage_git.go diff --git a/go.mod b/go.mod index cbe751d45af..7d5640e611a 100644 --- a/go.mod +++ b/go.mod @@ -45,7 +45,6 @@ require ( github.com/crewjam/saml v0.4.13 // @grafana/grafana-authnz-team github.com/fatih/color v1.15.0 // @grafana/backend-platform github.com/gchaincl/sqlhooks v1.3.0 // @grafana/backend-platform - github.com/go-git/go-git/v5 v5.4.2 // @grafana/grafana-app-platform-squad github.com/go-ldap/ldap/v3 v3.4.4 // @grafana/grafana-authnz-team github.com/go-openapi/strfmt v0.21.7 // @grafana/alerting-squad-backend github.com/go-redis/redis/v8 v8.11.5 // @grafana/backend-platform @@ -123,7 +122,7 @@ require ( gopkg.in/mail.v2 v2.3.1 // @grafana/backend-platform gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // @grafana/alerting-squad-backend - xorm.io/builder v0.3.6 // @grafana/backend-platform + xorm.io/builder v0.3.6 // indirect; @grafana/backend-platform xorm.io/core v0.7.3 // @grafana/backend-platform xorm.io/xorm v0.8.2 // @grafana/alerting-squad-backend ) @@ -175,7 +174,7 @@ require ( github.com/grpc-ecosystem/go-grpc-prometheus v1.2.1-0.20191002090509-6af20e3a5340 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-msgpack v0.5.5 // indirect - github.com/hashicorp/go-multierror v1.1.1 // @grafana/alerting-squad + github.com/hashicorp/go-multierror v1.1.1 // indirect; @grafana/alerting-squad github.com/hashicorp/go-sockaddr v1.0.2 // indirect github.com/hashicorp/golang-lru v0.6.0 // indirect github.com/hashicorp/yamux v0.1.1 // indirect @@ -237,6 +236,7 @@ require ( github.com/drone/drone-cli v1.6.1 // @grafana/grafana-delivery github.com/getkin/kin-openapi v0.120.0 // @grafana/grafana-operator-experience-squad github.com/golang-migrate/migrate/v4 v4.7.0 // @grafana/backend-platform + github.com/google/go-github v17.0.0+incompatible // @grafana/grafana-delivery github.com/google/go-github/v45 v45.2.0 // @grafana/grafana-delivery github.com/grafana/codejen v0.0.3 // @grafana/dataviz-squad github.com/grafana/dskit v0.0.0-20230706162620-5081d8ed53e6 // @grafana/backend-platform @@ -439,7 +439,6 @@ require ( github.com/Microsoft/go-winio v0.6.0 // indirect github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 // @grafana/plugins-platform-backend github.com/RoaringBitmap/roaring v0.9.4 // indirect - github.com/acomagu/bufpipe v1.0.3 // indirect github.com/axiomhq/hyperloglog v0.0.0-20191112132149-a4c4c47bc57f // indirect github.com/bits-and-blooms/bitset v1.2.0 // indirect github.com/blevesearch/go-porterstemmer v1.0.3 // indirect @@ -454,32 +453,23 @@ require ( github.com/dgryski/go-metro v0.0.0-20211217172704-adc40b04c140 // indirect github.com/docker/docker v23.0.4+incompatible // @grafana/grafana-delivery github.com/elazarl/goproxy v0.0.0-20230731152917-f99041a5c027 // indirect - github.com/emirpasic/gods v1.12.0 // indirect github.com/ghodss/yaml v1.0.1-0.20190212211648-25d852aebe32 // indirect - github.com/go-git/gcfg v1.5.0 // indirect - github.com/go-git/go-billy/v5 v5.3.1 // indirect github.com/go-logr/logr v1.3.0 // @grafana/grafana-app-platform-squad github.com/go-logr/stdr v1.2.2 // indirect - github.com/google/go-github v17.0.0+incompatible // @grafana/grafana-app-platform-squad github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.2 // indirect github.com/hmarr/codeowners v1.1.2 // @grafana/grafana-as-code github.com/imdario/mergo v0.3.13 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect - github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 // indirect github.com/klauspost/compress v1.16.5 // indirect github.com/kylelemons/godebug v1.1.0 // indirect github.com/labstack/echo/v4 v4.10.2 // indirect github.com/labstack/gommon v0.4.0 // indirect - github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/go-wordwrap v1.0.1 // indirect github.com/mschoch/smat v0.2.0 // indirect github.com/pierrec/lz4/v4 v4.1.17 // indirect github.com/valyala/fasttemplate v1.2.2 // indirect github.com/wk8/go-ordered-map v1.0.0 // @grafana/backend-platform - github.com/xanzy/ssh-agent v0.3.0 // indirect github.com/xlab/treeprint v1.2.0 // @grafana/observability-traces-and-profiling go.opentelemetry.io/proto/otlp v1.0.0 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect ) require ( diff --git a/go.sum b/go.sum index aa1f87c7a0e..e171c84a49b 100644 --- a/go.sum +++ b/go.sum @@ -644,7 +644,6 @@ github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmy github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Microsoft/go-winio v0.4.11/go.mod h1:VhR8bwka0BXejwEJY73c50VrPtXAaKcyvVC4A4RozmA= github.com/Microsoft/go-winio v0.4.14/go.mod h1:qXqCSQ3Xa7+6tgxaGTIe4Kpcdsi+P8jBhyzoq1bpyYA= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= github.com/Microsoft/go-winio v0.6.0 h1:slsWYD/zyx7lCXoZVlvQrj0hPTM1HI4+v1sIda2yDvg= github.com/Microsoft/go-winio v0.6.0/go.mod h1:cTAf44im0RAYeL23bpB+fzCyDH2MJiz2BO69KH/soAE= github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= @@ -652,7 +651,6 @@ github.com/NYTimes/gziphandler v1.1.1 h1:ZUDjpQae29j0ryrS0u/B8HZfJBtBQHjqw2rQ2cq github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Nvveen/Gotty v0.0.0-20120604004816-cd527374f1e5/go.mod h1:lmUJ/7eu/Q8D7ML55dXQrVaamCz2vxCfdQBasLZfHKk= github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= @@ -670,8 +668,6 @@ github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMx github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f h1:HR5nRmUQgXrwqZOwZ2DAc/aCi3Bu3xENpspW935vxu0= github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f/go.mod h1:f3HiCrHjHBdcm6E83vGaXh1KomZMA2P6aeo3hKx/wg0= -github.com/acomagu/bufpipe v1.0.3 h1:fxAGrHZTgQ9w5QqVItgzwj235/uYZYgbXitB+dLupOk= -github.com/acomagu/bufpipe v1.0.3/go.mod h1:mxdxdup/WdsKVreO5GpW4+M/1CE2sMG4jeGJ2sYmHc4= github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= github.com/agext/levenshtein v1.2.1 h1:QmvMAjj2aEICytGiWzmxoE0x2KZvE0fvmqMOfy2tjT8= github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= @@ -696,8 +692,6 @@ github.com/alicebob/miniredis/v2 v2.30.1 h1:HM1rlQjq1bm9yQcsawJqSZBJ9AYgxvjkMsNt github.com/alicebob/miniredis/v2 v2.30.1/go.mod h1:b25qWj4fCEsBeAAR2mlb0ufImGC6uH3VlUfb/HS5zKg= github.com/andybalholm/brotli v1.0.4 h1:V7DdXeJtZscaqfNuAdSRuRFzuiKlHSC/Zh3zl9qY3JY= github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= -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/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= @@ -722,7 +716,6 @@ github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+ github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-radix v1.0.0 h1:F4z6KzEeeQIMeLFa97iZU6vupzoecKdU5TX24SNppXI= github.com/armon/go-radix v1.0.0/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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= @@ -1069,8 +1062,6 @@ github.com/emicklei/go-restful/v3 v3.10.1 h1:rc42Y5YTp7Am7CS630D7JmhRjq4UlEUuEKf github.com/emicklei/go-restful/v3 v3.10.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/proto v1.10.0 h1:pDGyFRVV5RvV+nkBK9iy3q67FBy9Xa7vwrOTE+g5aGw= github.com/emicklei/proto v1.10.0/go.mod h1:rn1FgRS/FANiZdD2djyH7TMA9jdRDcYQ9IEN9yvjX0A= -github.com/emirpasic/gods v1.12.0 h1:QAUIPSaCu4G+POclxeqb3F+WPpdKqFGlw36+yOzGlrg= -github.com/emirpasic/gods v1.12.0/go.mod h1:YfzfFFoVP/catgzJb4IKIqXjX78Ha8FMSDh3ymbK86o= github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= @@ -1108,7 +1099,6 @@ github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSw github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/flowstack/go-jsonschema v0.1.1/go.mod h1:yL7fNggx1o8rm9RlgXv7hTBWxdBM0rVwpMwimd3F3N0= -github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc= github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= @@ -1140,8 +1130,6 @@ github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm github.com/gin-gonic/gin v1.4.0/go.mod h1:OW2EZn3DO8Ln9oIKOvM++LBO+5UPHJJDH72/q/3rZdM= github.com/gin-gonic/gin v1.6.3/go.mod h1:75u5sXoLsGZoRN5Sgbi1eraJ4GU3++wFwWzhwvtwp4M= github.com/gin-gonic/gin v1.7.3/go.mod h1:jD2toBW3GZUr5UMcdrwQA10I7RuaFOl/SGeDjXkfUtY= -github.com/gliderlabs/ssh v0.2.2 h1:6zsha5zo/TWhRhwqCD3+EarCAgZ2yN28ipRnGPnwkI0= -github.com/gliderlabs/ssh v0.2.2/go.mod h1:U7qILu1NlMHj9FlMhZLlkCdDnU1DBEAqr0aevW3Awn0= github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-asn1-ber/asn1-ber v1.5.4 h1:vXT6d/FNDiELJnLb6hGNa309LMsrCoYFvpwHDF0+Y1A= @@ -1155,15 +1143,6 @@ github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3 github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= -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.2.0/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-billy/v5 v5.3.1 h1:CPiOUAzKtMRvolEKw+bG1PLRpT7D3LIs3/3ey4Aiu34= -github.com/go-git/go-billy/v5 v5.3.1/go.mod h1:pmpqyWchKfYfrkb/UVH4otLvyi/5gJlGI4Hb3ZqZ3W0= -github.com/go-git/go-git-fixtures/v4 v4.2.1 h1:n9gGL1Ct/yIw+nfsfr8s4+sbhT+Ncu2SubfXjIWgci8= -github.com/go-git/go-git-fixtures/v4 v4.2.1/go.mod h1:K8zd3kDUAykwTdDCr+I0per6Y6vMiRR/nnVTBtavnB0= -github.com/go-git/go-git/v5 v5.4.2 h1:BXyZu9t0VkbiHtqrsvdq39UDhGJTl1h55VW6CSC4aY4= -github.com/go-git/go-git/v5 v5.4.2/go.mod h1:gQ1kArt6d+n+BGd+/B/I74HwRTLhth2+zti4ihgckDc= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -1979,7 +1958,6 @@ github.com/igm/sockjs-go/v3 v3.0.2 h1:2m0k53w0DBiGozeQUIEPR6snZFmpFpYvVsGnfLPNXb github.com/igm/sockjs-go/v3 v3.0.2/go.mod h1:UqchsOjeagIBFHvd+RZpLaVRbCwGilEC08EDHsD1jYE= github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= -github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.13 h1:lFzP57bqS/wsqKssCGmtLAb8A0wKjLGrve2q3PPVcBk= github.com/imdario/mergo v0.3.13/go.mod h1:4lJ1jqUDcsbIECGy0RUJAXNIhg+6ocWgb1ALK2O4oXg= github.com/imkira/go-interpol v1.1.0/go.mod h1:z0h2/2T3XF8kyEPpRgJ3kmNv+C43p+I/CoI+jC3w2iA= @@ -2056,8 +2034,6 @@ github.com/jackc/puddle v1.1.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dv github.com/jackc/puddle v1.1.3/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle v1.2.1/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jandelgado/gcov2lcov v1.0.4-0.20210120124023-b83752c6dc08/go.mod h1:NnSxK6TMlg1oGDBfGelGbjgorT5/L3cchlbtgFYZSss= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jcmturner/aescts/v2 v2.0.0/go.mod h1:AiaICIRyfYg35RUkr8yESTqvSy7csK90qZ5xfvvsoNs= github.com/jcmturner/dnsutils/v2 v2.0.0/go.mod h1:b0TnjGOvI/n42bZa+hmXL+kFJZsFT7G4t3HTlQ184QM= github.com/jcmturner/gofork v1.7.6/go.mod h1:1622LH6i/EZqLloHfE7IeZ0uEJwMSUyQ/nDd82IeqRo= @@ -2129,8 +2105,6 @@ github.com/kataras/sitemap v0.0.5/go.mod h1:KY2eugMKiPwsJgx7+U103YZehfvNGOXURubc github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kelseyhightower/envconfig v1.4.0/go.mod h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351 h1:DowS9hvgyYSX4TO5NpyC606/Z4SxnNYbT+WX27or6Ck= -github.com/kevinburke/ssh_config v0.0.0-20201106050909-4977a11b4351/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= @@ -2245,7 +2219,6 @@ github.com/markbates/safe v1.0.0/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kN github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= github.com/markbates/sigtx v1.0.0/go.mod h1:QF1Hv6Ic6Ca6W+T+DL0Y/ypborFKyvUY9HmuCD4VeTc= github.com/markbates/willie v1.0.9/go.mod h1:fsrFVWl91+gXpx/6dv715j7i11fYPfZ9ZGfH0DQzY7w= -github.com/matryer/is v1.2.0/go.mod h1:2fLPjFQM9rhQ15aVEtbuwhJinnOqrmgXPNdZsdwlWXA= github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattermost/xml-roundtrip-validator v0.1.0 h1:RXbVD2UAl7A7nOTR4u7E3ILa4IbtvKBHw64LDsmu9hU= @@ -2903,8 +2876,6 @@ github.com/weaveworks/promrus v1.2.0/go.mod h1:SaE82+OJ91yqjrE1rsvBWVzNZKcHYFtMU github.com/wk8/go-ordered-map v1.0.0 h1:BV7z+2PaK8LTSd/mWgY12HyMAo5CEgkHqbkVq2thqr8= github.com/wk8/go-ordered-map v1.0.0/go.mod h1:9ZIbRunKbuvfPKyBP1SIKLcXNlv74YCOZ3t3VTS6gRk= github.com/xanzy/go-gitlab v0.15.0/go.mod h1:8zdQa/ri1dfn8eS3Ir1SyfvOKlw7WBJ8DVThkpGiXrs= -github.com/xanzy/ssh-agent v0.3.0 h1:wUMzuKtKilRgBAD1sUb8gOwwRr2FGoBVumcjoOACClI= -github.com/xanzy/ssh-agent v0.3.0/go.mod h1:3s9xbODqPuuhK9JV1R321M/FlMZSBvE5aY6eAcqrDh0= github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= github.com/xdg-go/scram v1.0.2/go.mod h1:1WAq6h33pAW+iRreB34OORO2Nf7qel3VV3fjBj+hCSs= github.com/xdg-go/scram v1.1.1/go.mod h1:RaEWvsqvNKKvBPvcKeFjrG2cJqOkHTiyTpzz23ni57g= @@ -3108,7 +3079,6 @@ golang.org/x/crypto v0.0.0-20181127143415-eb0de9b17e85/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190102171810-8d7daa0c54b3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190103213133-ff983b9c42bc/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20190219172222-a4c6cb3142f2/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= @@ -3295,7 +3265,6 @@ golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= -golang.org/x/net v0.0.0-20210326060303-6b1517762897/go.mod h1:uSPa2vr4CLtc/ILN5odXGNXS6mhrKVzTaCXzk9m6W3k= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= golang.org/x/net v0.0.0-20210410081132-afb366fc7cd1/go.mod h1:9tjilg8BloeKEkVJvy7fQ90B1CfIiPueXVOjqfkSzI8= golang.org/x/net v0.0.0-20210421230115-4e50805a0758/go.mod h1:72T/g9IO56b78aLF+1Kcs5dz7/ng1VjMUvfKvpfy+jM= @@ -3448,7 +3417,6 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -3502,13 +3470,11 @@ golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210309074719-68d13333faf2/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210420072515-93ed5bcd2bfe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210502180810-71e4cd670f79/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -4131,7 +4097,6 @@ gopkg.in/telebot.v3 v3.1.3/go.mod h1:GJKwwWqp9nSkIVN51eRKU78aB5f5OnQuWdwiIZfPbko gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ= gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/validator.v2 v2.0.0-20180514200540-135c24b11c19/go.mod h1:o4V0GXN9/CAmCsvJ0oXYZvrZOe7syiDZSN1GWGZTGzc= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/pkg/services/store/config.go b/pkg/services/store/config.go index 7fc6737f0c9..68ff6a632fc 100644 --- a/pkg/services/store/config.go +++ b/pkg/services/store/config.go @@ -130,8 +130,6 @@ func newStorage(cfg RootStorageConfig, localWorkCache string) (storageRuntime, e switch cfg.Type { case rootStorageTypeDisk: return newDiskStorage(RootStorageMeta{}, cfg), nil - case rootStorageTypeGit: - return newGitStorage(RootStorageMeta{}, cfg, localWorkCache), nil } return nil, fmt.Errorf("unsupported store: " + cfg.Type) diff --git a/pkg/services/store/github_helper.go b/pkg/services/store/github_helper.go deleted file mode 100644 index 12b8e0ba9cb..00000000000 --- a/pkg/services/store/github_helper.go +++ /dev/null @@ -1,182 +0,0 @@ -package store - -import ( - "context" - "fmt" - "net/url" - "strings" - "time" - - "github.com/google/go-github/v45/github" - "golang.org/x/oauth2" -) - -type githubHelper struct { - repoOwner string - repoName string - client *github.Client -} - -func newGithubHelper(ctx context.Context, uri string, token string) (*githubHelper, error) { - v, err := url.Parse(uri) - if err != nil { - return nil, err - } - - path := strings.TrimPrefix(v.Path, "/") - path = strings.TrimSuffix(path, ".git") - idx := strings.Index(path, "/") - if idx < 1 { - return nil, fmt.Errorf("invalid url") - } - - if token == "" { - return nil, fmt.Errorf("unauthorized: No token present") - } - ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: token}) - tc := oauth2.NewClient(ctx, ts) - return &githubHelper{ - client: github.NewClient(tc), - repoOwner: path[:idx], - repoName: path[idx+1:], - }, nil -} - -func (g *githubHelper) getRef(ctx context.Context, branch string) (*github.Reference, *github.Response, error) { - return g.client.Git.GetRef(ctx, g.repoOwner, g.repoName, "refs/heads/"+branch) -} - -func (g *githubHelper) createRef(ctx context.Context, base string, branch string) (ref *github.Reference, rsp *github.Response, err error) { - var baseRef *github.Reference - if baseRef, rsp, err = g.client.Git.GetRef(ctx, g.repoOwner, g.repoName, "refs/heads/"+base); err != nil { - return nil, rsp, err - } - newRef := &github.Reference{ - Ref: github.String("refs/heads/" + branch), - Object: &github.GitObject{SHA: baseRef.Object.SHA}, - } - return g.client.Git.CreateRef(ctx, g.repoOwner, g.repoName, newRef) -} - -func (g *githubHelper) getRepo(ctx context.Context) (*github.Repository, *github.Response, error) { - return g.client.Repositories.Get(ctx, g.repoOwner, g.repoName) -} - -// pushCommit creates the commit in the given reference using the given tree. -func (g *githubHelper) pushCommit(ctx context.Context, ref *github.Reference, cmd *WriteValueRequest) (err error) { - // Create a tree with what to commit. - entries := []*github.TreeEntry{ - { - Path: github.String(cmd.Path), - Type: github.String("blob"), - Content: github.String(string(cmd.Body)), - Mode: github.String("100644"), - }, - } - - tree, _, err := g.client.Git.CreateTree(ctx, g.repoOwner, g.repoName, *ref.Object.SHA, entries) - if err != nil { - return err - } - - // Get the parent commit to attach the commit to. - parent, _, err := g.client.Repositories.GetCommit(ctx, g.repoOwner, g.repoName, *ref.Object.SHA, nil) - if err != nil { - return err - } - - // This is not always populated, but is needed. - parent.Commit.SHA = parent.SHA - - user := cmd.User - name := firstRealString(user.Name, user.Login, user.Email, "?") - email := firstRealString(user.Email, user.Login, user.Name, "?") - - // Create the commit using the tree. - date := time.Now() - author := &github.CommitAuthor{ - Date: &date, - Name: &name, - Email: &email, - } - commit := &github.Commit{Author: author, Message: &cmd.Message, Tree: tree, Parents: []*github.Commit{parent.Commit}} - newCommit, _, err := g.client.Git.CreateCommit(ctx, g.repoOwner, g.repoName, commit) - if err != nil { - return err - } - - // Attach the commit to the main branch. - ref.Object.SHA = newCommit.SHA - _, _, err = g.client.Git.UpdateRef(ctx, g.repoOwner, g.repoName, ref, false) - return err -} - -type makePRCommand struct { - title string - body string - headBranch string - baseBranch string -} - -func (g *githubHelper) createPR(ctx context.Context, cmd makePRCommand) (*github.PullRequest, *github.Response, error) { - newPR := &github.NewPullRequest{ - Title: &cmd.title, - Head: &cmd.headBranch, - Base: &cmd.baseBranch, - Body: &cmd.body, - MaintainerCanModify: github.Bool(true), - } - - return g.client.PullRequests.Create(ctx, g.repoOwner, g.repoName, newPR) -} - -// func (g *githubHelper) getPR(config *Config, prSubject string) (*github.PullRequest, error) { - -// opts := github.PullRequestListOptions{} - -// prs, _, err := githubClient.PullRequests.List(ctx, config.RepoOwner, config.RepoName, &opts) -// if err != nil { -// return nil, err -// } -// for _, pr := range prs { -// log.Printf("PR: %s %s", *pr.Title, prSubject) -// if *pr.Title == prSubject { -// return pr, nil -// } -// } -// return nil, nil -// } - -// func (g *githubHelper) pushPR(config *Config, prSubject, prBranch, prFilename, prContent, commitMessage string) error { -// pr, err := getPR(config, prSubject) -// if err != nil { -// return err -// } -// if pr != nil { -// log.Println("Extending Existing PR", *pr.Title) -// ref, err := getRef(config, pr.GetHead().GetRef()) -// if err != nil { -// return err -// } -// err = pushCommit(config, ref, prFilename, prContent, commitMessage) -// if err != nil { -// return err -// } - -// } else { -// log.Println("Creating PR") -// ref, err := createRef(config, prBranch) -// if err != nil { -// return err -// } -// err = pushCommit(config, ref, prFilename, prContent, commitMessage) -// if err != nil { -// return err -// } -// pr, err = createPR(config, prSubject, prBranch) -// if err != nil { -// return err -// } -// } -// return nil -// } diff --git a/pkg/services/store/service.go b/pkg/services/store/service.go index 94f59fdafd8..8136b2e0a9a 100644 --- a/pkg/services/store/service.go +++ b/pkg/services/store/service.go @@ -598,21 +598,7 @@ func (s *standardStorageService) getWorkflowOptions(ctx context.Context, user *u } meta := root.Meta() - if meta.Config.Type == rootStorageTypeGit && meta.Config.Git != nil { - cfg := meta.Config.Git - options.Workflows = append(options.Workflows, workflowInfo{ - Type: WriteValueWorkflow_PR, - Label: "Create pull request", - Description: "Create a new upstream pull request", - }) - if !cfg.RequirePullRequest { - options.Workflows = append(options.Workflows, workflowInfo{ - Type: WriteValueWorkflow_Push, - Label: "Push to " + cfg.Branch, - Description: "Push commit to upstrem repository", - }) - } - } else if meta.ReadOnly { + if meta.ReadOnly { // nothing? } else { options.Workflows = append(options.Workflows, workflowInfo{ diff --git a/pkg/services/store/storage_git.go b/pkg/services/store/storage_git.go deleted file mode 100644 index 803a94649f7..00000000000 --- a/pkg/services/store/storage_git.go +++ /dev/null @@ -1,387 +0,0 @@ -package store - -import ( - "context" - "errors" - "fmt" - "os" - "path/filepath" - "strings" - "time" - - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing/object" - "github.com/grafana/grafana-plugin-sdk-go/data" - "gocloud.dev/blob" - - "github.com/grafana/grafana/pkg/infra/filestorage" - "github.com/grafana/grafana/pkg/services/user" - "github.com/grafana/grafana/pkg/setting" -) - -const rootStorageTypeGit = "git" - -var _ storageRuntime = &rootStorageGit{} - -type rootStorageGit struct { - settings *StorageGitConfig - repo *git.Repository - root string // repostitory root - - github *githubHelper - meta RootStorageMeta - store filestorage.FileStorage -} - -func newGitStorage(meta RootStorageMeta, scfg RootStorageConfig, localWorkCache string) *rootStorageGit { - cfg := scfg.Git - if cfg == nil { - cfg = &StorageGitConfig{} - } - scfg.Type = rootStorageTypeGit - scfg.GCS = nil - scfg.SQL = nil - scfg.S3 = nil - scfg.Git = cfg - - meta.Config = scfg - if scfg.Prefix == "" { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "Missing prefix", - }) - } - if cfg.Remote == "" { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "Missing remote path configuration", - }) - } - - if len(localWorkCache) < 2 { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "Invalid local root folder", - }) - } - - s := &rootStorageGit{ - settings: cfg, - } - if meta.Notice == nil { - err := os.MkdirAll(localWorkCache, 0750) - if err != nil { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: err.Error(), - }) - } - } - - if scfg.Disabled { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityWarning, - Text: "folder is disabled (in configuration)", - }) - } else if setting.Env == setting.Prod { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "git is only supported in dev mode (for now)", - }) - } - - if meta.Notice == nil { - repo, err := git.PlainOpen(localWorkCache) - if errors.Is(err, git.ErrRepositoryNotExists) { - repo, err = git.PlainClone(localWorkCache, false, &git.CloneOptions{ - URL: cfg.Remote, - Progress: os.Stdout, - //Depth: 1, - //SingleBranch: true, - }) - } - - if err != nil { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: err.Error(), - }) - } - - if err == nil { - p := localWorkCache - if cfg.Root != "" { - p = filepath.Join(p, cfg.Root) - } - - path := fmt.Sprintf("file://%s", p) - bucket, err := blob.OpenBucket(context.Background(), path) - if err != nil { - grafanaStorageLogger.Warn("Error loading storage", "prefix", scfg.Prefix, "err", err) - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "Failed to initialize storage", - }) - } else { - s.store = filestorage.NewCdkBlobStorage( - grafanaStorageLogger, - bucket, "", nil) - - meta.Ready = true // exists! - s.root = p - - token := cfg.AccessToken - if strings.HasPrefix(token, "$") { - token = os.Getenv(token[1:]) - if token == "" { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "Unable to find token environment variable: " + cfg.AccessToken, - }) - } - } - - if token != "" { - s.github, err = newGithubHelper(context.Background(), cfg.Remote, token) - if err != nil { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "error creating github client: " + err.Error(), - }) - s.github = nil - } else { - ghrepo, _, err := s.github.getRepo(context.Background()) - if err != nil { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: err.Error(), - }) - s.github = nil - } else { - grafanaStorageLogger.Info("Default branch", "branch", *ghrepo.DefaultBranch) - } - } - } - } - } - s.repo = repo - - // Try pulling after init - if s.repo != nil && !scfg.Disabled { - err = s.Sync() - if err != nil { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "unable to pull: " + err.Error(), - }) - } else if cfg.PullInterval != "" { - t, err := time.ParseDuration(cfg.PullInterval) - if err != nil { - meta.Notice = append(meta.Notice, data.Notice{ - Severity: data.NoticeSeverityError, - Text: "Invalid pull interval " + cfg.PullInterval, - }) - } else { - ticker := time.NewTicker(t) - go func() { - for range ticker.C { - grafanaStorageLogger.Info("Try git pull", "branch", s.settings.Remote) - err = s.Sync() - if err != nil { - grafanaStorageLogger.Info("Error pulling", "error", err) - } - } - }() - } - } - } - } - - s.meta = meta - return s -} - -func (s *rootStorageGit) Meta() RootStorageMeta { - return s.meta -} - -func (s *rootStorageGit) Store() filestorage.FileStorage { - return s.store -} - -func (s *rootStorageGit) Pull() error { - w, err := s.repo.Worktree() - if err != nil { - return err - } - - err = w.Pull(&git.PullOptions{ - // Depth: 1, - //SingleBranch: true, - }) - if err != nil { - return err - } - return nil -} - -func (s *rootStorageGit) Write(ctx context.Context, cmd *WriteValueRequest) (*WriteValueResponse, error) { - if s.github == nil { - return nil, fmt.Errorf("github client not initialized") - } - // Write to the correct subfolder - if s.settings.Root != "" { - cmd.Path = s.settings.Root + cmd.Path - } - - if cmd.Workflow == WriteValueWorkflow_PR { - prcmd := makePRCommand{ - baseBranch: s.settings.Branch, - headBranch: fmt.Sprintf("grafana_ui_%d", time.Now().UnixMilli()), - title: cmd.Title, - body: cmd.Message, - } - res := &WriteValueResponse{ - Branch: prcmd.headBranch, - } - - ref, _, err := s.github.createRef(ctx, prcmd.baseBranch, prcmd.headBranch) - if err != nil { - res.Code = 500 - res.Message = "unable to create branch" - return res, nil - } - - err = s.github.pushCommit(ctx, ref, cmd) - if err != nil { - res.Code = 500 - res.Message = fmt.Sprintf("error creating commit: %s", err.Error()) - return res, nil - } - - if prcmd.title == "" { - prcmd.title = "Dashboard save: " + time.Now().String() - } - if prcmd.body == "" { - prcmd.body = "Dashboard save: " + time.Now().String() - } - - pr, _, err := s.github.createPR(ctx, prcmd) - if err != nil { - res.Code = 500 - res.Message = "error creating PR: " + err.Error() - return res, nil - } - - res.Code = 200 - res.URL = pr.GetHTMLURL() - res.Pending = true - res.Hash = *ref.Object.SHA - res.Branch = prcmd.headBranch - return res, nil - } - - // Push to remote branch (save) - if cmd.Workflow == WriteValueWorkflow_Push || true { - res := &WriteValueResponse{ - Branch: s.settings.Branch, - } - ref, _, err := s.github.getRef(ctx, s.settings.Branch) - if err != nil { - res.Code = 500 - res.Message = "unable to create branch" - return res, nil - } - err = s.github.pushCommit(ctx, ref, cmd) - if err != nil { - res.Code = 500 - res.Message = "error creating commit" - return res, nil - } - ref, _, _ = s.github.getRef(ctx, s.settings.Branch) - if ref != nil { - res.Hash = *ref.Object.SHA - res.URL = ref.GetURL() - } - - err = s.Pull() - if err != nil { - res.Message = "error pulling: " + err.Error() - } - - res.Code = 200 - return res, nil - } - - rel := cmd.Path - if s.meta.Config.Git.Root != "" { - rel = filepath.Join(s.meta.Config.Git.Root, cmd.Path) - } - - fpath := filepath.Join(s.root, rel) - err := os.WriteFile(fpath, cmd.Body, 0644) - if err != nil { - return nil, err - } - - w, err := s.repo.Worktree() - if err != nil { - return nil, err - } - - // The file we just wrote - _, err = w.Add(rel) - if err != nil { - return nil, err - } - - msg := cmd.Message - if msg == "" { - msg = "changes from grafana ui" - } - usr := cmd.User - if usr == nil { - usr = &user.SignedInUser{} - } - - hash, err := w.Commit(msg, &git.CommitOptions{ - Author: &object.Signature{ - Name: firstRealString(usr.Name, usr.Login, usr.Email, "?"), - Email: firstRealString(usr.Email, usr.Login, usr.Name, "?"), - When: time.Now(), - }, - }) - if err != nil { - return nil, err - } - - grafanaStorageLogger.Info("Made commit", "hash", hash) - // err = s.repo.Push(&git.PushOptions{ - // InsecureSkipTLS: true, - // }) - - return &WriteValueResponse{ - Hash: hash.String(), - Message: "made commit", - }, nil -} - -func (s *rootStorageGit) Sync() error { - grafanaStorageLogger.Info("GIT PULL", "remote", s.settings.Remote) - err := s.Pull() - if err != nil { - if err.Error() == "already up-to-date" { - return nil - } - } - return err -} - -func firstRealString(vals ...string) string { - for _, v := range vals { - if v != "" { - return v - } - } - return "?" -}