From 24374d56ba117d7027d1acebdddb5f371b6a880f Mon Sep 17 00:00:00 2001 From: Yuan <45984206+Yuan325@users.noreply.github.com> Date: Fri, 18 Oct 2024 15:10:14 -0700 Subject: [PATCH 1/4] ci: Add cloudbuild for release (#19) --- go.mod | 29 ++++--- go.sum | 63 ++++++++++------ internal/sources/alloydb_pg.go | 100 ++++++++++++++++++++++++ internal/sources/alloydb_pg_test.go | 73 ++++++++++++++++++ internal/sources/cloud_sql_pg.go | 4 +- internal/sources/cloud_sql_pg_test.go | 2 +- internal/sources/sources.go | 6 ++ internal/tools/alloydb_pg.go | 105 ++++++++++++++++++++++++++ internal/tools/alloydb_pg_test.go | 81 ++++++++++++++++++++ internal/tools/cloud_sql_pg_test.go | 2 +- internal/tools/tools.go | 6 ++ 11 files changed, 432 insertions(+), 39 deletions(-) create mode 100644 internal/sources/alloydb_pg.go create mode 100644 internal/sources/alloydb_pg_test.go create mode 100644 internal/tools/alloydb_pg.go create mode 100644 internal/tools/alloydb_pg_test.go diff --git a/go.mod b/go.mod index 1f28762a..f34bf659 100644 --- a/go.mod +++ b/go.mod @@ -3,6 +3,7 @@ module github.com/googleapis/genai-toolbox go 1.22.2 require ( + cloud.google.com/go/alloydbconn v1.13.0 cloud.google.com/go/cloudsqlconn v1.12.1 github.com/go-chi/chi/v5 v5.1.0 github.com/go-chi/render v1.0.3 @@ -13,9 +14,12 @@ require ( ) require ( - cloud.google.com/go/auth v0.9.3 // indirect + cloud.google.com/go v0.115.1 // indirect + cloud.google.com/go/alloydb v1.12.1 // indirect + cloud.google.com/go/auth v0.9.5 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect - cloud.google.com/go/compute/metadata v0.5.0 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + cloud.google.com/go/longrunning v0.6.0 // indirect github.com/ajg/form v1.5.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect @@ -33,19 +37,22 @@ require ( github.com/rogpeppe/go-internal v1.13.1 // indirect github.com/spf13/pflag v1.0.5 // indirect go.opencensus.io v0.24.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect go.opentelemetry.io/otel v1.29.0 // indirect go.opentelemetry.io/otel/metric v1.29.0 // indirect go.opentelemetry.io/otel/trace v1.29.0 // indirect - golang.org/x/crypto v0.27.0 // indirect - golang.org/x/net v0.29.0 // indirect + golang.org/x/crypto v0.28.0 // indirect + golang.org/x/net v0.30.0 // indirect golang.org/x/oauth2 v0.23.0 // indirect golang.org/x/sync v0.8.0 // indirect - golang.org/x/sys v0.25.0 // indirect - golang.org/x/text v0.18.0 // indirect - golang.org/x/time v0.6.0 // indirect - google.golang.org/api v0.197.0 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect - google.golang.org/grpc v1.66.2 // indirect - google.golang.org/protobuf v1.34.2 // indirect + golang.org/x/sys v0.26.0 // indirect + golang.org/x/text v0.19.0 // indirect + golang.org/x/time v0.7.0 // indirect + google.golang.org/api v0.199.0 // indirect + google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 // indirect + google.golang.org/grpc v1.67.1 // indirect + google.golang.org/protobuf v1.35.1 // indirect ) diff --git a/go.sum b/go.sum index 4bbc113c..e6951137 100644 --- a/go.sum +++ b/go.sum @@ -1,12 +1,20 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go/auth v0.9.3 h1:VOEUIAADkkLtyfr3BLa3R8Ed/j6w1jTBmARx+wb5w5U= -cloud.google.com/go/auth v0.9.3/go.mod h1:7z6VY+7h3KUdRov5F1i8NDP5ZzWKYmEPO842BgCsmTk= +cloud.google.com/go v0.115.1 h1:Jo0SM9cQnSkYfp44+v+NQXHpcHqlnRJk2qxh6yvxxxQ= +cloud.google.com/go v0.115.1/go.mod h1:DuujITeaufu3gL68/lOFIirVNJwQeyf5UXyi+Wbgknc= +cloud.google.com/go/alloydb v1.12.1 h1:kScYLZ6qqsK25zpDVxjCwioRBQG46TX+IaReB4wLwdA= +cloud.google.com/go/alloydb v1.12.1/go.mod h1:qTn1SeQf0NzFTE8MHsxGWn8/i7jXLT3ATdVwIfQ7Y5w= +cloud.google.com/go/alloydbconn v1.13.0 h1:AXq7cVvEz0rcK258NI2zv/n4l8vbeRs40Zz7kGiIntk= +cloud.google.com/go/alloydbconn v1.13.0/go.mod h1:RJjXhy/yQzrH0t/5ufYAsSYkl17JO5fJfjFwqTSfHV8= +cloud.google.com/go/auth v0.9.5 h1:4CTn43Eynw40aFVr3GpPqsQponx2jv0BQpjvajsbbzw= +cloud.google.com/go/auth v0.9.5/go.mod h1:Xo0n7n66eHyOWWCnitop6870Ilwo3PiZyodVkkH1xWM= cloud.google.com/go/auth/oauth2adapt v0.2.4 h1:0GWE/FUsXhf6C+jAkWgYm7X9tK8cuEIfy19DBn6B6bY= cloud.google.com/go/auth/oauth2adapt v0.2.4/go.mod h1:jC/jOpwFP6JBxhB3P5Rr0a9HLMC/Pe3eaL4NmdvqPtc= cloud.google.com/go/cloudsqlconn v1.12.1 h1:crfkYy4TsYXx+n/wELlPthDYaAmDo2olHLv9DmRuJzY= cloud.google.com/go/cloudsqlconn v1.12.1/go.mod h1:Y8x/9e+QsjJNkvOj9mdJ8/ixhE95Ab2H/vsyy0mXWNc= -cloud.google.com/go/compute/metadata v0.5.0 h1:Zr0eK8JbFv6+Wi4ilXAR8FJ3wyNdpxHKJNPos6LTZOY= -cloud.google.com/go/compute/metadata v0.5.0/go.mod h1:aHnloV2TPI38yx4s9+wAZhHykWvVCfu7hQbF+9CWoiY= +cloud.google.com/go/compute/metadata v0.5.2 h1:UxK4uu/Tn+I3p2dYWTfiX4wva7aYlKixAHn3fyqngqo= +cloud.google.com/go/compute/metadata v0.5.2/go.mod h1:C66sj2AluDcIqakBq/M8lw8/ybHgOZqin2obFxa/E5k= +cloud.google.com/go/longrunning v0.6.0 h1:mM1ZmaNsQsnb+5n1DNPeL0KwQd9jQRqSqSDEkBZr+aI= +cloud.google.com/go/longrunning v0.6.0/go.mod h1:uHzSZqW89h7/pasCWNYdUpwGz3PcVWhrWupreVPYLts= filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= @@ -55,6 +63,8 @@ github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:W github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= +github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= +github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= @@ -92,6 +102,8 @@ github.com/jackc/pgx/v4 v4.18.3 h1:dE2/TrEsGX3RBprb3qryqSV9Y60iZN1C6i8IrmW9/BA= github.com/jackc/pgx/v4 v4.18.3/go.mod h1:Ey4Oru5tH5sB6tV7hDmfWFahwF15Eb7DNXlRKx2CkVw= github.com/jackc/pgx/v5 v5.7.1 h1:x7SYsPBYDkHDksogeSmZZ5xzThcTgRz++I5E+ePFUcs= github.com/jackc/pgx/v5 v5.7.1/go.mod h1:e7O26IywZZ+naJtWWos6i6fvWK+29etgITqrqHLfoZA= +github.com/jackc/puddle v1.3.0 h1:eHK/5clGOatcjX3oWGBO/MpxpbHzSwud5EWTSCI+MX0= +github.com/jackc/puddle v1.3.0/go.mod h1:m4B5Dj62Y0fbyuIc15OsIqK0+JU8nkqQjsgx7dvjSWk= github.com/jackc/puddle/v2 v2.2.2 h1:PR8nw+E/1w0GLuRFSmiioY6UooMp6KJv0/61nB7icHo= github.com/jackc/puddle/v2 v2.2.2/go.mod h1:vriiEXHvEE654aYKXXjOvZM39qJ0q+azkZFrfEOc3H4= github.com/kr/pretty v0.3.0 h1:WgNl7dwNpEZ6jJ9k1snq4pZsg7DOEN8hP9Xw0Tsjwk0= @@ -122,6 +134,8 @@ github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsT github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 h1:r6I7RJCN86bpD/FQwedZ0vSixDpwuWREjW9oRMsmqDc= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0/go.mod h1:B9yO6b04uB80CzjedvewuqDhxJxi11s7/GtiGa8bAjI= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 h1:TT4fX+nBOA/+LUkobKGW1ydGcn+G3vRw9+g5HwCphpk= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0/go.mod h1:L7UH0GbB0p47T4Rri3uHjbpCFYrVrwc1I25QhNPiGK8= go.opentelemetry.io/otel v1.29.0 h1:PdomN/Al4q/lN6iBJEN3AwPvUiHPMlt93c8bqTG5Llw= @@ -132,8 +146,8 @@ go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt3 go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= -golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= +golang.org/x/crypto v0.28.0 h1:GBDwsMXVQi34v5CCYUm2jkJvu4cbtru2U4TN2PSyQnw= +golang.org/x/crypto v0.28.0/go.mod h1:rmgy+3RHxRZMyY0jjAJShp2zgEdOqj2AO7U0pYmeQ7U= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= @@ -144,8 +158,8 @@ golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73r golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= -golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= +golang.org/x/net v0.30.0 h1:AcW1SDZMkb8IpzCdQUaIq2sP4sZ4zw+55h6ynffypl4= +golang.org/x/net v0.30.0/go.mod h1:2wGyMJ5iFasEhkwi13ChkO/t1ECNC4X4eBKkVFyYFlU= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= @@ -158,39 +172,40 @@ golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5h golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= -golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.26.0 h1:KHjCJyddX0LoSTb3J+vWpupP9p0oznkqVk/IfjymZbo= +golang.org/x/sys v0.26.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= -golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= -golang.org/x/time v0.6.0 h1:eTDhh4ZXt5Qf0augr54TN6suAUudPcawVZeIAPU7D4U= -golang.org/x/time v0.6.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.19.0 h1:kTxAhCbGbxhK0IwgSKiMO5awPoDQ0RpfiVYBfK860YM= +golang.org/x/text v0.19.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +golang.org/x/time v0.7.0 h1:ntUhktv3OPE6TgYxXWv9vKvUSJyIFJlyohwbkEwPrKQ= +golang.org/x/time v0.7.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.197.0 h1:x6CwqQLsFiA5JKAiGyGBjc2bNtHtLddhJCE2IKuhhcQ= -google.golang.org/api v0.197.0/go.mod h1:AuOuo20GoQ331nq7DquGHlU6d+2wN2fZ8O0ta60nRNw= +google.golang.org/api v0.199.0 h1:aWUXClp+VFJmqE0JPvpZOK3LDQMyFKYIow4etYd9qxs= +google.golang.org/api v0.199.0/go.mod h1:ohG4qSztDJmZdjK/Ar6MhbAmb/Rpi4JHOqagsh90K28= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1 h1:BulPr26Jqjnd4eYDVe+YvyR7Yc2vJGkO5/0UxD0/jZU= -google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d h1:kHjw/5UfflP/L5EbledDrcG4C2597RtymmGRZvHiCuY= -google.golang.org/genproto/googleapis/api v0.0.0-20240711142825-46eb208f015d/go.mod h1:mw8MG/Qz5wfgYr6VqVCiZcHe/GJEfI+oGGDCohaVgB0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:hL97c3SYopEHblzpxRL4lSs523++l8DYxGM1FQiYmb4= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1:hjSy6tcFQZ171igDaN5QHOw2n6vx40juYbC/x67CEhc= +google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9 h1:QCqS/PdaHTSWGvupk2F/ehwHtGc0/GYkT+3GAcR1CCc= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241007155032-5fefd90f89a9/go.mod h1:GX3210XPVPUjJbTUbvwI8f2IpZDMZuPJWDzDuebbviI= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.66.2 h1:3QdXkuq3Bkh7w+ywLdLvM56cmGvQHUMZpiCzt6Rqaoo= -google.golang.org/grpc v1.66.2/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.67.1 h1:zWnc1Vrcno+lHZCOofnIMvycFcc0QRGIzm9dhnDX68E= +google.golang.org/grpc v1.67.1/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -200,8 +215,8 @@ google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2 google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= -google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= +google.golang.org/protobuf v1.35.1 h1:m3LfL6/Ca+fqnjnlqQXNpFPABW1UD7mjh8KO2mKFytA= +google.golang.org/protobuf v1.35.1/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= diff --git a/internal/sources/alloydb_pg.go b/internal/sources/alloydb_pg.go new file mode 100644 index 00000000..b2217fa8 --- /dev/null +++ b/internal/sources/alloydb_pg.go @@ -0,0 +1,100 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package sources + +import ( + "context" + "fmt" + "net" + + "cloud.google.com/go/alloydbconn" + "github.com/jackc/pgx/v5/pgxpool" +) + +const AlloyDBPgKind string = "alloydb-postgres" + +// validate interface +var _ Config = AlloyDBPgConfig{} + +type AlloyDBPgConfig struct { + Name string `yaml:"name"` + Kind string `yaml:"kind"` + Project string `yaml:"project"` + Region string `yaml:"region"` + Cluster string `yaml:"cluster"` + Instance string `yaml:"instance"` + User string `yaml:"user"` + Password string `yaml:"password"` + Database string `yaml:"database"` +} + +func (r AlloyDBPgConfig) sourceKind() string { + return AlloyDBPgKind +} + +func (r AlloyDBPgConfig) Initialize() (Source, error) { + pool, err := initAlloyDBPgConnectionPool(r.Project, r.Region, r.Cluster, r.Instance, r.User, r.Password, r.Database) + if err != nil { + return nil, fmt.Errorf("Unable to create pool: %w", err) + } + + err = pool.Ping(context.Background()) + if err != nil { + return nil, fmt.Errorf("Unable to connect successfully: %w", err) + } + + s := AlloyDBPgSource{ + Name: r.Name, + Kind: AlloyDBPgKind, + Pool: pool, + } + return s, nil +} + +var _ Source = AlloyDBPgSource{} + +type AlloyDBPgSource struct { + Name string `yaml:"name"` + Kind string `yaml:"kind"` + Pool *pgxpool.Pool +} + +func initAlloyDBPgConnectionPool(project, region, cluster, instance, user, pass, dbname string) (*pgxpool.Pool, error) { + // Configure the driver to connect to the database + dsn := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", user, pass, dbname) + config, err := pgxpool.ParseConfig(dsn) + if err != nil { + return nil, fmt.Errorf("Unable to parse connection uri: %w", err) + } + + // Create a new dialer with any options + d, err := alloydbconn.NewDialer(context.Background()) + if err != nil { + return nil, fmt.Errorf("Unable to parse connection uri: %w", err) + } + + // Tell the driver to use the AlloyDB Go Connector to create connections + i := fmt.Sprintf("projects/%s/locations/%s/clusters/%s/instances/%s", project, region, cluster, instance) + config.ConnConfig.DialFunc = func(ctx context.Context, _ string, instance string) (net.Conn, error) { + return d.Dial(ctx, i) + } + + // Interact with the driver directly as you normally would + pool, err := pgxpool.NewWithConfig(context.Background(), config) + if err != nil { + return nil, err + } + return pool, nil +} diff --git a/internal/sources/alloydb_pg_test.go b/internal/sources/alloydb_pg_test.go new file mode 100644 index 00000000..498b9713 --- /dev/null +++ b/internal/sources/alloydb_pg_test.go @@ -0,0 +1,73 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package sources_test + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/googleapis/genai-toolbox/internal/sources" + "github.com/googleapis/genai-toolbox/internal/testutils" + "gopkg.in/yaml.v3" +) + +func TestParseFromYamlAlloyDBPg(t *testing.T) { + tcs := []struct { + desc string + in string + want sources.Configs + }{ + { + desc: "basic example", + in: ` + sources: + my-pg-instance: + kind: alloydb-postgres + project: my-project + region: my-region + cluster: my-cluster + instance: my-instance + database: my_db + `, + want: sources.Configs{ + "my-pg-instance": sources.AlloyDBPgConfig{ + Name: "my-pg-instance", + Kind: sources.AlloyDBPgKind, + Project: "my-project", + Region: "my-region", + Cluster: "my-cluster", + Instance: "my-instance", + Database: "my_db", + }, + }, + }, + } + for _, tc := range tcs { + t.Run(tc.desc, func(t *testing.T) { + got := struct { + Sources sources.Configs `yaml:"sources"` + }{} + // Parse contents + err := yaml.Unmarshal(testutils.FormatYaml(tc.in), &got) + if err != nil { + t.Fatalf("unable to unmarshal: %s", err) + } + if !cmp.Equal(tc.want, got.Sources) { + t.Fatalf("incorrect parse: want %v, got %v", tc.want, got.Sources) + } + }) + } + +} diff --git a/internal/sources/cloud_sql_pg.go b/internal/sources/cloud_sql_pg.go index c127c72d..8ab34688 100644 --- a/internal/sources/cloud_sql_pg.go +++ b/internal/sources/cloud_sql_pg.go @@ -44,7 +44,7 @@ func (r CloudSQLPgConfig) sourceKind() string { } func (r CloudSQLPgConfig) Initialize() (Source, error) { - pool, err := initConnectionPool(r.Project, r.Region, r.Instance, r.User, r.Password, r.Database) + pool, err := initCloudSQLPgConnectionPool(r.Project, r.Region, r.Instance, r.User, r.Password, r.Database) if err != nil { return nil, fmt.Errorf("unable to create pool: %w", err) } @@ -70,7 +70,7 @@ type CloudSQLPgSource struct { Pool *pgxpool.Pool } -func initConnectionPool(project, region, instance, user, pass, dbname string) (*pgxpool.Pool, error) { +func initCloudSQLPgConnectionPool(project, region, instance, user, pass, dbname string) (*pgxpool.Pool, error) { // Configure the driver to connect to the database dsn := fmt.Sprintf("user=%s passwgit sord=%s dbname=%s sslmode=disable", user, pass, dbname) config, err := pgxpool.ParseConfig(dsn) diff --git a/internal/sources/cloud_sql_pg_test.go b/internal/sources/cloud_sql_pg_test.go index aa8b7a8c..697e6c98 100644 --- a/internal/sources/cloud_sql_pg_test.go +++ b/internal/sources/cloud_sql_pg_test.go @@ -23,7 +23,7 @@ import ( "gopkg.in/yaml.v3" ) -func TestParseFromYaml(t *testing.T) { +func TestParseFromYamlCloudSQLPg(t *testing.T) { tcs := []struct { desc string in string diff --git a/internal/sources/sources.go b/internal/sources/sources.go index 965427a9..e87dfb24 100644 --- a/internal/sources/sources.go +++ b/internal/sources/sources.go @@ -54,6 +54,12 @@ func (c *Configs) UnmarshalYAML(node *yaml.Node) error { return fmt.Errorf("unable to parse as %q: %w", k.Kind, err) } (*c)[name] = actual + case AlloyDBPgKind: + actual := AlloyDBPgConfig{Name: name} + if err := n.Decode(&actual); err != nil { + return fmt.Errorf("unable to parse as %q: %w", k.Kind, err) + } + (*c)[name] = actual default: return fmt.Errorf("%q is not a valid kind of data source", k.Kind) } diff --git a/internal/tools/alloydb_pg.go b/internal/tools/alloydb_pg.go new file mode 100644 index 00000000..9754cf7f --- /dev/null +++ b/internal/tools/alloydb_pg.go @@ -0,0 +1,105 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tools + +import ( + "context" + "fmt" + "strings" + + "github.com/googleapis/genai-toolbox/internal/sources" +) + +const AlloyDBPgSQLGenericKind string = "alloydb-postgres-generic" + +// validate interface +var _ Config = AlloyDBPgGenericConfig{} + +type AlloyDBPgGenericConfig struct { + Name string `yaml:"name"` + Kind string `yaml:"kind"` + Source string `yaml:"source"` + Description string `yaml:"description"` + Statement string `yaml:"statement"` + Parameters []Parameter `yaml:"parameters"` +} + +func (cfg AlloyDBPgGenericConfig) toolKind() string { + return AlloyDBPgSQLGenericKind +} + +func (cfg AlloyDBPgGenericConfig) Initialize(srcs map[string]sources.Source) (Tool, error) { + // verify source exists + rawS, ok := srcs[cfg.Source] + if !ok { + return nil, fmt.Errorf("no source named %q configured", cfg.Source) + } + + // verify the source is the right kind + s, ok := rawS.(sources.AlloyDBPgSource) + if !ok { + return nil, fmt.Errorf("sources for %q tools must be of kind %q", AlloyDBPgSQLGenericKind, sources.AlloyDBPgKind) + } + + // finish tool setup + t := AlloyDBPgGenericTool{ + Name: cfg.Name, + Kind: AlloyDBPgSQLGenericKind, + Source: s, + Statement: cfg.Statement, + Parameters: cfg.Parameters, + manifest: Manifest{cfg.Description, cfg.Parameters}, + } + return t, nil +} + +// validate interface +var _ Tool = AlloyDBPgGenericTool{} + +type AlloyDBPgGenericTool struct { + Name string `yaml:"name"` + Kind string `yaml:"kind"` + Source sources.AlloyDBPgSource + Statement string + Parameters []Parameter `yaml:"parameters"` + manifest Manifest +} + +func (t AlloyDBPgGenericTool) Invoke(params []any) (string, error) { + fmt.Printf("Invoked tool %s\n", t.Name) + results, err := t.Source.Pool.Query(context.Background(), t.Statement, params...) + if err != nil { + return "", fmt.Errorf("unable to execute query: %w", err) + } + + var out strings.Builder + for results.Next() { + v, err := results.Values() + if err != nil { + return "", fmt.Errorf("unable to parse row: %w", err) + } + out.WriteString(fmt.Sprintf("%s", v)) + } + + return fmt.Sprintf("Stub tool call for %q! Parameters parsed: %q \n Output: %s", t.Name, params, out.String()), nil +} + +func (t AlloyDBPgGenericTool) ParseParams(data map[string]any) ([]any, error) { + return ParseParams(t.Parameters, data) +} + +func (t AlloyDBPgGenericTool) Manifest() Manifest { + return t.manifest +} diff --git a/internal/tools/alloydb_pg_test.go b/internal/tools/alloydb_pg_test.go new file mode 100644 index 00000000..119e470e --- /dev/null +++ b/internal/tools/alloydb_pg_test.go @@ -0,0 +1,81 @@ +// Copyright 2024 Google LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +package tools_test + +import ( + "testing" + + "github.com/google/go-cmp/cmp" + "github.com/googleapis/genai-toolbox/internal/testutils" + "github.com/googleapis/genai-toolbox/internal/tools" + "gopkg.in/yaml.v3" +) + +func TestParseFromYamlAlloyDBPg(t *testing.T) { + tcs := []struct { + desc string + in string + want tools.Configs + }{ + { + desc: "basic example", + in: ` + tools: + example_tool: + kind: alloydb-postgres-generic + source: my-pg-instance + description: some description + statement: | + SELECT * FROM SQL_STATEMENT; + parameters: + - name: country + type: string + description: some description + `, + want: tools.Configs{ + "example_tool": tools.AlloyDBPgGenericConfig{ + Name: "example_tool", + Kind: tools.AlloyDBPgSQLGenericKind, + Source: "my-pg-instance", + Description: "some description", + Statement: "SELECT * FROM SQL_STATEMENT;\n", + Parameters: []tools.Parameter{ + { + Name: "country", + Type: "string", + Description: "some description", + }, + }, + }, + }, + }, + } + for _, tc := range tcs { + t.Run(tc.desc, func(t *testing.T) { + got := struct { + Tools tools.Configs `yaml:"tools"` + }{} + // Parse contents + err := yaml.Unmarshal(testutils.FormatYaml(tc.in), &got) + if err != nil { + t.Fatalf("unable to unmarshal: %s", err) + } + if diff := cmp.Diff(tc.want, got.Tools); diff != "" { + t.Fatalf("incorrect parse: diff %v", diff) + } + }) + } + +} diff --git a/internal/tools/cloud_sql_pg_test.go b/internal/tools/cloud_sql_pg_test.go index 7d3237b6..f289fb88 100644 --- a/internal/tools/cloud_sql_pg_test.go +++ b/internal/tools/cloud_sql_pg_test.go @@ -23,7 +23,7 @@ import ( "gopkg.in/yaml.v3" ) -func TestParseFromYaml(t *testing.T) { +func TestParseFromYamlCloudSQLPg(t *testing.T) { tcs := []struct { desc string in string diff --git a/internal/tools/tools.go b/internal/tools/tools.go index 2e14cc4f..193f7620 100644 --- a/internal/tools/tools.go +++ b/internal/tools/tools.go @@ -55,6 +55,12 @@ func (c *Configs) UnmarshalYAML(node *yaml.Node) error { return fmt.Errorf("unable to parse as %q: %w", k.Kind, err) } (*c)[name] = actual + case AlloyDBPgSQLGenericKind: + actual := AlloyDBPgGenericConfig{Name: name} + if err := n.Decode(&actual); err != nil { + return fmt.Errorf("unable to parse as %q: %w", k.Kind, err) + } + (*c)[name] = actual default: return fmt.Errorf("%q is not a valid kind of tool", k.Kind) } From 85b11e663170ecb4c91aad344c97b44682dd475d Mon Sep 17 00:00:00 2001 From: Yuan Teoh Date: Mon, 21 Oct 2024 17:46:24 -0700 Subject: [PATCH 2/4] fix test fail --- internal/sources/alloydb_pg_test.go | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/internal/sources/alloydb_pg_test.go b/internal/sources/alloydb_pg_test.go index 498b9713..6a6a477d 100644 --- a/internal/sources/alloydb_pg_test.go +++ b/internal/sources/alloydb_pg_test.go @@ -37,7 +37,7 @@ func TestParseFromYamlAlloyDBPg(t *testing.T) { kind: alloydb-postgres project: my-project region: my-region - cluster: my-cluster + cluster: my-cluster instance: my-instance database: my_db `, @@ -47,7 +47,7 @@ func TestParseFromYamlAlloyDBPg(t *testing.T) { Kind: sources.AlloyDBPgKind, Project: "my-project", Region: "my-region", - Cluster: "my-cluster", + Cluster: "my-cluster", Instance: "my-instance", Database: "my_db", }, From 12f52b7eaf7dcb2a4e791253480f3212f9312b53 Mon Sep 17 00:00:00 2001 From: Yuan Teoh Date: Wed, 23 Oct 2024 21:00:57 -0700 Subject: [PATCH 3/4] update parameter and toolmanifest --- internal/tools/alloydb_pg.go | 20 ++++++++++---------- internal/tools/alloydb_pg_test.go | 6 +----- 2 files changed, 11 insertions(+), 15 deletions(-) diff --git a/internal/tools/alloydb_pg.go b/internal/tools/alloydb_pg.go index 9754cf7f..844c615e 100644 --- a/internal/tools/alloydb_pg.go +++ b/internal/tools/alloydb_pg.go @@ -28,12 +28,12 @@ const AlloyDBPgSQLGenericKind string = "alloydb-postgres-generic" var _ Config = AlloyDBPgGenericConfig{} type AlloyDBPgGenericConfig struct { - Name string `yaml:"name"` - Kind string `yaml:"kind"` - Source string `yaml:"source"` - Description string `yaml:"description"` - Statement string `yaml:"statement"` - Parameters []Parameter `yaml:"parameters"` + Name string `yaml:"name"` + Kind string `yaml:"kind"` + Source string `yaml:"source"` + Description string `yaml:"description"` + Statement string `yaml:"statement"` + Parameters Parameters `yaml:"parameters"` } func (cfg AlloyDBPgGenericConfig) toolKind() string { @@ -60,7 +60,7 @@ func (cfg AlloyDBPgGenericConfig) Initialize(srcs map[string]sources.Source) (To Source: s, Statement: cfg.Statement, Parameters: cfg.Parameters, - manifest: Manifest{cfg.Description, cfg.Parameters}, + manifest: ToolManifest{cfg.Description, generateManifests(cfg.Parameters)}, } return t, nil } @@ -73,8 +73,8 @@ type AlloyDBPgGenericTool struct { Kind string `yaml:"kind"` Source sources.AlloyDBPgSource Statement string - Parameters []Parameter `yaml:"parameters"` - manifest Manifest + Parameters Parameters `yaml:"parameters"` + manifest ToolManifest } func (t AlloyDBPgGenericTool) Invoke(params []any) (string, error) { @@ -100,6 +100,6 @@ func (t AlloyDBPgGenericTool) ParseParams(data map[string]any) ([]any, error) { return ParseParams(t.Parameters, data) } -func (t AlloyDBPgGenericTool) Manifest() Manifest { +func (t AlloyDBPgGenericTool) Manifest() ToolManifest { return t.manifest } diff --git a/internal/tools/alloydb_pg_test.go b/internal/tools/alloydb_pg_test.go index 119e470e..6471c2d9 100644 --- a/internal/tools/alloydb_pg_test.go +++ b/internal/tools/alloydb_pg_test.go @@ -52,11 +52,7 @@ func TestParseFromYamlAlloyDBPg(t *testing.T) { Description: "some description", Statement: "SELECT * FROM SQL_STATEMENT;\n", Parameters: []tools.Parameter{ - { - Name: "country", - Type: "string", - Description: "some description", - }, + tools.NewStringParameter("country", "some description"), }, }, }, From 2cc0763d357537b85e0557578c95d9548b1b3410 Mon Sep 17 00:00:00 2001 From: Yuan Teoh Date: Fri, 25 Oct 2024 16:06:42 -0700 Subject: [PATCH 4/4] update format lint --- internal/sources/alloydb_pg.go | 14 +++++++------- internal/sources/alloydb_pg_test.go | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/internal/sources/alloydb_pg.go b/internal/sources/alloydb_pg.go index b2217fa8..7234a5b0 100644 --- a/internal/sources/alloydb_pg.go +++ b/internal/sources/alloydb_pg.go @@ -19,8 +19,8 @@ import ( "fmt" "net" - "cloud.google.com/go/alloydbconn" - "github.com/jackc/pgx/v5/pgxpool" + "cloud.google.com/go/alloydbconn" + "github.com/jackc/pgx/v5/pgxpool" ) const AlloyDBPgKind string = "alloydb-postgres" @@ -33,7 +33,7 @@ type AlloyDBPgConfig struct { Kind string `yaml:"kind"` Project string `yaml:"project"` Region string `yaml:"region"` - Cluster string `yaml:"cluster"` + Cluster string `yaml:"cluster"` Instance string `yaml:"instance"` User string `yaml:"user"` Password string `yaml:"password"` @@ -47,12 +47,12 @@ func (r AlloyDBPgConfig) sourceKind() string { func (r AlloyDBPgConfig) Initialize() (Source, error) { pool, err := initAlloyDBPgConnectionPool(r.Project, r.Region, r.Cluster, r.Instance, r.User, r.Password, r.Database) if err != nil { - return nil, fmt.Errorf("Unable to create pool: %w", err) + return nil, fmt.Errorf("unable to create pool: %w", err) } err = pool.Ping(context.Background()) if err != nil { - return nil, fmt.Errorf("Unable to connect successfully: %w", err) + return nil, fmt.Errorf("unable to connect successfully: %w", err) } s := AlloyDBPgSource{ @@ -76,13 +76,13 @@ func initAlloyDBPgConnectionPool(project, region, cluster, instance, user, pass, dsn := fmt.Sprintf("user=%s password=%s dbname=%s sslmode=disable", user, pass, dbname) config, err := pgxpool.ParseConfig(dsn) if err != nil { - return nil, fmt.Errorf("Unable to parse connection uri: %w", err) + return nil, fmt.Errorf("unable to parse connection uri: %w", err) } // Create a new dialer with any options d, err := alloydbconn.NewDialer(context.Background()) if err != nil { - return nil, fmt.Errorf("Unable to parse connection uri: %w", err) + return nil, fmt.Errorf("unable to parse connection uri: %w", err) } // Tell the driver to use the AlloyDB Go Connector to create connections diff --git a/internal/sources/alloydb_pg_test.go b/internal/sources/alloydb_pg_test.go index 6a6a477d..bde621dd 100644 --- a/internal/sources/alloydb_pg_test.go +++ b/internal/sources/alloydb_pg_test.go @@ -47,7 +47,7 @@ func TestParseFromYamlAlloyDBPg(t *testing.T) { Kind: sources.AlloyDBPgKind, Project: "my-project", Region: "my-region", - Cluster: "my-cluster", + Cluster: "my-cluster", Instance: "my-instance", Database: "my_db", },