From 199e857e9db3ec73d4289a39227fc9bfdd40e030 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Mon, 2 Dec 2024 21:26:33 +0800 Subject: [PATCH 01/14] docs: fix ghcr badge --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index eba3f4104..13ace6ed9 100644 --- a/README.md +++ b/README.md @@ -3,7 +3,7 @@ [![Test Status](https://github.com/cshum/imagor/workflows/test/badge.svg)](https://github.com/cshum/imagor/actions/workflows/test.yml) [![Coverage Status](https://coveralls.io/repos/github/cshum/imagor/badge.svg?branch=master)](https://coveralls.io/github/cshum/imagor?branch=master) [![Docker Hub](https://img.shields.io/badge/docker-shumc/imagor-blue.svg)](https://hub.docker.com/r/shumc/imagor/) -[![GitHub Container Registry](https://ghcr-badge.deta.dev/cshum/imagor/latest_tag?trim=major&label=ghcr.io&ignore=master,develop&color=%23007ec6)](https://github.com/cshum/imagor/pkgs/container/imagor) +[![GitHub Container Registry](https://ghcr-badge.egpl.dev/cshum/imagor/latest_tag?trim=major&label=ghcr.io&ignore=master,develop&color=%23007ec6)](https://github.com/cshum/imagor/pkgs/container/imagor) [![Go Reference](https://pkg.go.dev/badge/github.com/cshum/imagor.svg)](https://pkg.go.dev/github.com/cshum/imagor) imagor is a fast, secure image processing server and Go library. From 04d7f37058b2614d98a1c56565f8cc22d034e672 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Mon, 2 Dec 2024 22:56:30 +0800 Subject: [PATCH 02/14] fix gcloud nil pointer dereference panic (#503) * attempt fix GCloud nil pointer dereference * attempt fix gcloud * add test case --- go.mod | 74 +++++---- go.sum | 162 ++++++++++++-------- storage/gcloudstorage/gcloudstorage.go | 5 +- storage/gcloudstorage/gcloudstorage_test.go | 27 ++++ 4 files changed, 173 insertions(+), 95 deletions(-) diff --git a/go.mod b/go.mod index 30546ba16..1c1fd42db 100644 --- a/go.mod +++ b/go.mod @@ -1,11 +1,11 @@ module github.com/kumparan/imagor -go 1.22 +go 1.22.7 -toolchain go1.22.1 +toolchain go1.23.1 require ( - cloud.google.com/go/storage v1.43.0 + cloud.google.com/go/storage v1.47.0 github.com/aws/aws-sdk-go v1.55.5 github.com/fsouza/fake-gcs-server v1.49.3 github.com/johannesboyne/gofakes3 v0.0.0-20240701191259-edd0227ffc37 @@ -15,34 +15,44 @@ require ( github.com/stretchr/testify v1.9.0 go.uber.org/zap v1.27.0 golang.org/x/image v0.19.0 - golang.org/x/sync v0.8.0 + golang.org/x/sync v0.9.0 ) require ( - cloud.google.com/go v0.115.1 // indirect - cloud.google.com/go/auth v0.9.1 // 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/iam v1.2.0 // indirect - cloud.google.com/go/pubsub v1.42.0 // indirect + cel.dev/expr v0.18.0 // indirect + cloud.google.com/go v0.116.0 // indirect + cloud.google.com/go/auth v0.11.0 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.6 // indirect + cloud.google.com/go/compute/metadata v0.5.2 // indirect + cloud.google.com/go/iam v1.2.2 // indirect + cloud.google.com/go/monitoring v1.21.2 // indirect + cloud.google.com/go/pubsub v1.45.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 // indirect github.com/beorn7/perks v1.0.1 // indirect + github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect + github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/envoyproxy/go-control-plane v0.13.1 // indirect + github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect + github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect github.com/google/renameio/v2 v2.0.0 // indirect github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.3 // indirect - github.com/googleapis/gax-go/v2 v2.13.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect + github.com/googleapis/gax-go/v2 v2.14.0 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/klauspost/compress v1.17.9 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/xattr v0.4.10 // indirect + github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common v0.56.0 // indirect @@ -50,24 +60,28 @@ require ( github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect github.com/shabbyrobe/gocovmerge v0.0.0-20230507112040-c3350d9342df // 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 + go.opentelemetry.io/contrib/detectors/gcp v1.32.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect + go.opentelemetry.io/otel v1.32.0 // indirect + go.opentelemetry.io/otel/metric v1.32.0 // indirect + go.opentelemetry.io/otel/sdk v1.32.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect + go.opentelemetry.io/otel/trace v1.32.0 // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.26.0 // indirect - golang.org/x/net v0.28.0 // indirect - golang.org/x/oauth2 v0.22.0 // indirect - golang.org/x/sys v0.24.0 // indirect - golang.org/x/text v0.17.0 // indirect - golang.org/x/time v0.6.0 // indirect + golang.org/x/crypto v0.29.0 // indirect + golang.org/x/net v0.31.0 // indirect + golang.org/x/oauth2 v0.24.0 // indirect + golang.org/x/sys v0.27.0 // indirect + golang.org/x/text v0.20.0 // indirect + golang.org/x/time v0.8.0 // indirect golang.org/x/tools v0.24.0 // indirect - google.golang.org/api v0.194.0 // indirect - google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed // indirect - google.golang.org/grpc v1.66.0 // indirect - google.golang.org/protobuf v1.34.2 // indirect + google.golang.org/api v0.209.0 // indirect + google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/grpc v1.68.0 // indirect + google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3 // indirect + google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 38a4523f5..3ed08c7be 100644 --- a/go.sum +++ b/go.sum @@ -1,33 +1,53 @@ +cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo= +cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -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/auth v0.9.1 h1:+pMtLEV2k0AXKvs/tGZojuj6QaioxfUjOpMsG5Gtx+w= -cloud.google.com/go/auth v0.9.1/go.mod h1:Sw8ocT5mhhXxFklyhT12Eiy0ed6tTrPMCJjSI8KhYLk= -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/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/iam v1.2.0 h1:kZKMKVNk/IsSSc/udOb83K0hL/Yh/Gcqpz+oAkoIFN8= -cloud.google.com/go/iam v1.2.0/go.mod h1:zITGuWgsLZxd8OwAlX+eMFgZDXzBm7icj1PVTYG766Q= -cloud.google.com/go/kms v1.19.0 h1:x0OVJDl6UH1BSX4THKlMfdcFWoE4ruh90ZHuilZekrU= -cloud.google.com/go/kms v1.19.0/go.mod h1:e4imokuPJUc17Trz2s6lEXFDt8bgDmvpVynH39bdrHM= -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= -cloud.google.com/go/pubsub v1.42.0 h1:PVTbzorLryFL5ue8esTS2BfehUs0ahyNOY9qcd+HMOs= -cloud.google.com/go/pubsub v1.42.0/go.mod h1:KADJ6s4MbTwhXmse/50SebEhE4SmUwHi48z3/dHar1Y= -cloud.google.com/go/storage v1.43.0 h1:CcxnSohZwizt4LCzQHWvBf1/kvtHUn7gk9QERXPyXFs= -cloud.google.com/go/storage v1.43.0/go.mod h1:ajvxEa7WmZS1PxvKRq4bq0tFT3vMd502JwstCcYv0Q0= +cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= +cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= +cloud.google.com/go/auth v0.11.0 h1:Ic5SZz2lsvbYcWT5dfjNWgw6tTlGi2Wc8hyQSC9BstA= +cloud.google.com/go/auth v0.11.0/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= +cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU= +cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= +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/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA= +cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY= +cloud.google.com/go/kms v1.20.1 h1:og29Wv59uf2FVaZlesaiDAqHFzHaoUyHI3HYp9VUHVg= +cloud.google.com/go/kms v1.20.1/go.mod h1:LywpNiVCvzYNJWS9JUcGJSVTNSwPwi0vBAotzDqn2nc= +cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk= +cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM= +cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc= +cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI= +cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU= +cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= +cloud.google.com/go/pubsub v1.45.1 h1:ZC/UzYcrmK12THWn1P72z+Pnp2vu/zCZRXyhAfP1hJY= +cloud.google.com/go/pubsub v1.45.1/go.mod h1:3bn7fTmzZFwaUjllitv1WlsNMkqBgGUb3UdMhI54eCc= +cloud.google.com/go/storage v1.47.0 h1:ajqgt30fnOMmLfWfu1PWcb+V9Dxz6n+9WKjdNg5R4HM= +cloud.google.com/go/storage v1.47.0/go.mod h1:Ks0vP374w0PW6jOUameJbapbQKXqkjGd/OJRp2fb9IQ= +cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI= +cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0 h1:jJKWl98inONJAr/IZrdFQUWcwUO95DLY1XMD1ZIut+g= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI= github.com/aws/aws-sdk-go v1.44.256/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= +github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= +github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -36,7 +56,11 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m 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= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= +github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE= +github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= +github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= +github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsouza/fake-gcs-server v1.49.3 h1:RPt94uYjWb+t19dlZg4PVRJFCvqf7px0YZDvIiUfjcU= @@ -52,8 +76,8 @@ github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= -github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= +github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -83,10 +107,10 @@ github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.3 h1:QRje2j5GZimBzlbhGA2V2QlGNgL8G6e+wGo/+/2bWI0= -github.com/googleapis/enterprise-certificate-proxy v0.3.3/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= -github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= -github.com/googleapis/gax-go/v2 v2.13.0/go.mod h1:Z/fvTZXF8/uw7Xu5GuslPw+bplx6SS338j1Is2S+B7A= +github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= +github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= +github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o= +github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -118,6 +142,8 @@ github.com/peterbourgon/ff/v3 v3.4.0/go.mod h1:zjJVUhx+twciwfDl0zBcFzl4dW8axCRyX github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/xattr v0.4.10 h1:Qe0mtiNFHQZ296vRgUjRCoPHPqH7VdTOrZx3g0T+pGA= github.com/pkg/xattr v0.4.10/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgmp0tecUJ0sJuv4pzYCqS9+RGSn52M3FUwPs+uo= +github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/prometheus/client_golang v1.20.2 h1:5ctymQzZlyOON1666svgwn3s6IKWgfbjsejTMiXIyjg= @@ -151,23 +177,29 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.einride.tech/aip v0.67.1 h1:d/4TW92OxXBngkSOwWS2CH5rez869KpKMaN44mdxkFI= -go.einride.tech/aip v0.67.1/go.mod h1:ZGX4/zKw8dcgzdLsrvpOOGxfxI2QSk12SlP7d6c0/XI= +go.einride.tech/aip v0.68.0 h1:4seM66oLzTpz50u4K1zlJyOXQ3tCzcJN7I22tKkjipw= +go.einride.tech/aip v0.68.0/go.mod h1:7y9FF8VtPWqpxuAxl0KQWqaULxW4zFIesD6zF5RIHHg= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= 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= -go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= -go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= -go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/sdk v1.28.0 h1:b9d7hIry8yZsgtbmM0DKyPWMMUMlK9NEKuIG4aBqWyE= -go.opentelemetry.io/otel/sdk v1.28.0/go.mod h1:oYj7ClPUA7Iw3m+r7GeEjz0qckQRJK2B8zjcZEfu7Pg= -go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= -go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.opentelemetry.io/contrib/detectors/gcp v1.32.0 h1:P78qWqkLSShicHmAzfECaTgvslqHxblNE9j62Ws1NK8= +go.opentelemetry.io/contrib/detectors/gcp v1.32.0/go.mod h1:TVqo0Sda4Cv8gCIixd7LuLwW4EylumVWfhjZJjDD4DU= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 h1:qtFISDHKolvIxzSs0gIaiPUPR0Cucb0F2coHC7ZLdps= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0/go.mod h1:Y+Pop1Q6hCOnETWTW4NROK/q1hv50hM7yDaUTjG8lp8= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94= +go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= +go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= +go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= +go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= +go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= +go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= +go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= +go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= +go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= +go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -177,8 +209,8 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= -golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= +golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= @@ -200,18 +232,18 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.28.0 h1:a9JDOJc5GMUJ0+UDqmLT86WiEy7iWyIhz8gz8E4e5hE= -golang.org/x/net v0.28.0/go.mod h1:yqtgsTWOOnlGLG9GFRrK3++bGOUEkNBoHZc8MEDWPNg= +golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= +golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.22.0 h1:BzDx2FehcG7jJwgWLELCdmLuxk2i+x9UDpSiss2u0ZA= -golang.org/x/oauth2 v0.22.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= +golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= -golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= +golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -225,8 +257,8 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg= -golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= +golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -238,10 +270,10 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= -golang.org/x/text v0.17.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.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= +golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= +golang.org/x/time v0.8.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= @@ -256,26 +288,28 @@ golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.194.0 h1:dztZKG9HgtIpbI35FhfuSNR/zmaMVdxNlntHj1sIS4s= -google.golang.org/api v0.194.0/go.mod h1:AgvUFdojGANh3vI+P7EVnxj3AISHllxGCJSFmggmnd0= +google.golang.org/api v0.209.0 h1:Ja2OXNlyRlWCWu8o+GgI4yUn/wz9h/5ZfFbKz+dQX+w= +google.golang.org/api v0.209.0/go.mod h1:I53S168Yr/PNDNMi5yPnDc0/LGRZO6o7PoEbl/HY3CM= 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-20240827150818-7e3bb234dfed h1:4C4dbrVFtfIp3GXJdMX1Sj25mahfn5DywOo65/2ISQ8= -google.golang.org/genproto v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:ICjniACoWvcDz8c8bOsHVKuuSGDJy1z5M4G0DM3HzTc= -google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed h1:3RgNmBoI9MZhsj3QxC+AP/qQhNwpCLOvYDYYsFrhFt0= -google.golang.org/genproto/googleapis/api v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:OCdP9MfskevB/rbYvHTsXTtKC+3bHWajPdoKgjcYkfo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed h1:J6izYgfBXAI3xTKLgxzTmUltdYaLsuBxFCgDHWJ/eXg= -google.golang.org/genproto/googleapis/rpc v0.0.0-20240827150818-7e3bb234dfed/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= +google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk= +google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= +google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 h1:pgr/4QbFyktUv9CtQ/Fq4gzEE6/Xs7iCXbktaGzLHbQ= +google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697/go.mod h1:+D9ySVjN8nY8YCVjc5O7PZDIdZporIDY3KaGfJunh88= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 h1:LWZqQOEjDyONlF1H6afSWpAL/znlREo2tHfLoe+8LMA= +google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= 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.0 h1:DibZuoBznOxbDQxRINckZcUvnCEvrW9pcWIE2yF9r1c= -google.golang.org/grpc v1.66.0/go.mod h1:s3/l6xSSCURdVfAnL+TqCNMyTDAGN6+lZeVxnZR128Y= +google.golang.org/grpc v1.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= +google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3 h1:hUfOButuEtpc0UvYiaYRbNwxVYr0mQQOWq6X8beJ9Gc= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3/go.mod h1:jzYlkSMbKypzuu6xoAEijsNVo9ZeDF1u/zCfFgsx7jg= 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= @@ -285,8 +319,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.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= +google.golang.org/protobuf v1.35.2/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/storage/gcloudstorage/gcloudstorage.go b/storage/gcloudstorage/gcloudstorage.go index af6d458b9..ad453d3d6 100644 --- a/storage/gcloudstorage/gcloudstorage.go +++ b/storage/gcloudstorage/gcloudstorage.go @@ -57,10 +57,13 @@ func (s *GCloudStorage) Get(r *http.Request, image string) (imageData *imagor.Bl } } blob := imagor.NewBlob(func() (reader io.ReadCloser, size int64, err error) { + if err = ctx.Err(); err != nil { + return + } if attrs != nil { size = attrs.Size } - reader, err = object.NewReader(ctx) + reader, err = object.NewReader(context.Background()) return }) if attrs != nil { diff --git a/storage/gcloudstorage/gcloudstorage_test.go b/storage/gcloudstorage/gcloudstorage_test.go index fa3352ffb..b16280512 100644 --- a/storage/gcloudstorage/gcloudstorage_test.go +++ b/storage/gcloudstorage/gcloudstorage_test.go @@ -178,3 +178,30 @@ func TestExpiration(t *testing.T) { _, err = s.Get(&http.Request{}, "/foo/bar/asdf") require.ErrorIs(t, err, imagor.ErrExpired) } + +func TestContextCancel(t *testing.T) { + srv := fakestorage.NewServer([]fakestorage.Object{{ + ObjectAttrs: fakestorage.ObjectAttrs{ + BucketName: "test", + Name: "placeholder", + }, + Content: []byte(""), + }}) + s := New(srv.Client(), "test") + ctx, cancel := context.WithCancel(context.Background()) + r, err := http.NewRequestWithContext(ctx, http.MethodGet, "", nil) + require.NoError(t, err) + blob := imagor.NewBlobFromBytes([]byte("bar")) + require.NoError(t, s.Put(ctx, "/foo/bar/asdf", blob)) + b, err := s.Get(r, "/foo/bar/asdf") + require.NoError(t, err) + buf, err := b.ReadAll() + require.NoError(t, err) + assert.Equal(t, "bar", string(buf)) + cancel() + b, err = s.Get(r, "/foo/bar/asdf") + require.NoError(t, err) + buf, err = b.ReadAll() + assert.Empty(t, buf) + require.ErrorIs(t, err, context.Canceled) +} From 6ca2ac48ebf63bcedd26b4cb98e98a77f44e3631 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Mon, 2 Dec 2024 23:08:23 +0800 Subject: [PATCH 03/14] build: go 1.23.3, update go deps (#504) * build: go 1.23.3, update go deps * build: go 1.23.3, update go deps --- .github/workflows/test.yml | 2 +- Dockerfile | 2 +- go.mod | 20 +++++++-------- go.sum | 51 +++++++++++++++++++------------------- 4 files changed, 38 insertions(+), 37 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 2244a9f46..7ea6b6a8d 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v2 with: - go-version: ^1.22 + go-version: ^1.23 - name: Check out code uses: actions/checkout@v2 diff --git a/Dockerfile b/Dockerfile index 8760c913b..bee20812d 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG GOLANG_VERSION=1.22.6 +ARG GOLANG_VERSION=1.23.3 FROM golang:${GOLANG_VERSION}-bookworm as builder ARG VIPS_VERSION=8.15.3 diff --git a/go.mod b/go.mod index 1c1fd42db..2dd3eaf4a 100644 --- a/go.mod +++ b/go.mod @@ -7,14 +7,14 @@ toolchain go1.23.1 require ( cloud.google.com/go/storage v1.47.0 github.com/aws/aws-sdk-go v1.55.5 - github.com/fsouza/fake-gcs-server v1.49.3 - github.com/johannesboyne/gofakes3 v0.0.0-20240701191259-edd0227ffc37 + github.com/fsouza/fake-gcs-server v1.50.2 + github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca github.com/peterbourgon/ff/v3 v3.4.0 - github.com/prometheus/client_golang v1.20.2 - github.com/rs/cors v1.11.0 - github.com/stretchr/testify v1.9.0 + github.com/prometheus/client_golang v1.20.5 + github.com/rs/cors v1.11.1 + github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 - golang.org/x/image v0.19.0 + golang.org/x/image v0.22.0 golang.org/x/sync v0.9.0 ) @@ -49,16 +49,15 @@ require ( github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.17.9 // indirect + github.com/klauspost/compress v1.17.11 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/xattr v0.4.10 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.56.0 // indirect + github.com/prometheus/common v0.60.1 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect - github.com/shabbyrobe/gocovmerge v0.0.0-20230507112040-c3350d9342df // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/detectors/gcp v1.32.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 // indirect @@ -68,6 +67,7 @@ require ( go.opentelemetry.io/otel/sdk v1.32.0 // indirect go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect go.opentelemetry.io/otel/trace v1.32.0 // indirect + go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/crypto v0.29.0 // indirect golang.org/x/net v0.31.0 // indirect @@ -75,7 +75,7 @@ require ( golang.org/x/sys v0.27.0 // indirect golang.org/x/text v0.20.0 // indirect golang.org/x/time v0.8.0 // indirect - golang.org/x/tools v0.24.0 // indirect + golang.org/x/tools v0.27.0 // indirect google.golang.org/api v0.209.0 // indirect google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect diff --git a/go.sum b/go.sum index 3ed08c7be..f97a65b68 100644 --- a/go.sum +++ b/go.sum @@ -44,6 +44,8 @@ github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMr github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= +github.com/cevatbarisyilmaz/ara v0.0.4 h1:SGH10hXpBJhhTlObuZzTuFn1rrdmjQImITXnZVPSodc= +github.com/cevatbarisyilmaz/ara v0.0.4/go.mod h1:BfFOxnUd6Mj6xmcvRxHN3Sr21Z1T3U2MYkYOmoQe4Ts= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= @@ -63,8 +65,8 @@ github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6 github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fsouza/fake-gcs-server v1.49.3 h1:RPt94uYjWb+t19dlZg4PVRJFCvqf7px0YZDvIiUfjcU= -github.com/fsouza/fake-gcs-server v1.49.3/go.mod h1:WsE7OZKNd5WXgiry01oJO6mDvljOr+YLPR3VQtM2sDY= +github.com/fsouza/fake-gcs-server v1.50.2 h1:ulrS1pavCOCbMZfN5ZPgBRMFWclON9xDsuLBniXtQoE= +github.com/fsouza/fake-gcs-server v1.50.2/go.mod h1:VU6Zgei4647KuT4XER8WHv5Hcj2NIySndyG8gfvwckA= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -119,10 +121,10 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/johannesboyne/gofakes3 v0.0.0-20240701191259-edd0227ffc37 h1:w/TiKkLc+oLH7mUCpP5DUn8+a0CjhK9yWQLKBA0Iv1w= -github.com/johannesboyne/gofakes3 v0.0.0-20240701191259-edd0227ffc37/go.mod h1:AxgWC4DDX54O2WDoQO1Ceabtn6IbktjU/7bigor+66g= -github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= -github.com/klauspost/compress v1.17.9/go.mod h1:Di0epgTjJY877eYKx5yC51cX2A2Vl2ibi7bDH9ttBbw= +github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca h1:aLV7i5W7KKNHUwcmPZKDKXut6ZnJ8sdQWYDTKwhIzBU= +github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca/go.mod h1:t6osVdP++3g4v2awHz4+HFccij23BbdT1rX3W7IijqQ= +github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= +github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -133,8 +135,8 @@ github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0 github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= github.com/minio/md5-simd v1.1.2 h1:Gdi1DZK69+ZVMoNHRXJyNcxrMA4dSxoYHZSQbirFg34= github.com/minio/md5-simd v1.1.2/go.mod h1:MzdKDxYpY2BT9XQFocsiZf/NKVtR7nkE4RoEpN+20RM= -github.com/minio/minio-go/v7 v7.0.75 h1:0uLrB6u6teY2Jt+cJUVi9cTvDRuBKWSRzSAcznRkwlE= -github.com/minio/minio-go/v7 v7.0.75/go.mod h1:qydcVzV8Hqtj1VtEocfxbmVFa2siu6HGa+LDEPogjD8= +github.com/minio/minio-go/v7 v7.0.78 h1:LqW2zy52fxnI4gg8C2oZviTaKHcBV36scS+RzJnxUFs= +github.com/minio/minio-go/v7 v7.0.78/go.mod h1:84gmIilaX4zcvAWWzJ5Z1WI5axN+hAbM5w25xf8xvC0= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/peterbourgon/ff/v3 v3.4.0 h1:QBvM/rizZM1cB0p0lGMdmR7HxZeI/ZrBWB4DqLkMUBc= @@ -146,26 +148,23 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgm github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.20.2 h1:5ctymQzZlyOON1666svgwn3s6IKWgfbjsejTMiXIyjg= -github.com/prometheus/client_golang v1.20.2/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= +github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.56.0 h1:UffReloqkBtvtQEYDg2s+uDPGRrJyC6vZWPGXf6OhPY= -github.com/prometheus/common v0.56.0/go.mod h1:7uRPFSUTbfZWsJ7MHY56sqt7hLQu3bxXHDnNhl8E9qI= +github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= +github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= -github.com/rs/cors v1.11.0 h1:0B9GE/r9Bc2UxRMMtymBkHTenPkHDv0CW4Y98GBY+po= -github.com/rs/cors v1.11.0/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= -github.com/rs/xid v1.5.0 h1:mKX4bl4iPYJtEIxp6CYiUuLQ/8DYMoz0PUdtGgMFRVc= -github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= +github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= +github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= +github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= +github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= -github.com/shabbyrobe/gocovmerge v0.0.0-20190829150210-3e036491d500/go.mod h1:+njLrG5wSeoG4Ds61rFgEzKvenR2UHbjMoDHsczxly0= -github.com/shabbyrobe/gocovmerge v0.0.0-20230507112040-c3350d9342df h1:S77Pf5fIGMa7oSwp8SQPp7Hb4ZiI38K3RNBKD2LLeEM= -github.com/shabbyrobe/gocovmerge v0.0.0-20230507112040-c3350d9342df/go.mod h1:dcuzJZ83w/SqN9k4eQqwKYMgmKWzg/KzJAURBhRL1tc= github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= @@ -174,8 +173,8 @@ github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5 github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= +github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.einride.tech/aip v0.68.0 h1:4seM66oLzTpz50u4K1zlJyOXQ3tCzcJN7I22tKkjipw= go.einride.tech/aip v0.68.0/go.mod h1:7y9FF8VtPWqpxuAxl0KQWqaULxW4zFIesD6zF5RIHHg= @@ -200,6 +199,8 @@ go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiy go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= +go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d h1:Ns9kd1Rwzw7t0BR8XMphenji4SmIoNZPn8zhYmaVKP8= +go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d/go.mod h1:92Uoe3l++MlthCm+koNi0tcUCX3anayogF0Pa/sp24k= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= @@ -212,8 +213,8 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/image v0.19.0 h1:D9FX4QWkLfkeqaC62SonffIIuYdOk/UE2XKUBgRIBIQ= -golang.org/x/image v0.19.0/go.mod h1:y0zrRqlQRWQ5PXaYCOMLTW2fpsxZ8Qh9I/ohnInJEys= +golang.org/x/image v0.22.0 h1:UtK5yLUzilVrkjMAZAZ34DXGpASN8i8pj8g+O+yd10g= +golang.org/x/image v0.22.0/go.mod h1:9hPFhljd4zZ1GNSIZJ49sqbp45GKK9t6w+iXvGqZUz4= 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= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -284,8 +285,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= -golang.org/x/tools v0.24.0 h1:J1shsA93PJUEVaUSaay7UXAyE8aimq3GW0pjlolpa24= -golang.org/x/tools v0.24.0/go.mod h1:YhNqVBIfWHdzvTLs0d8LCuMhkKUgSUKldakyV7W/WDQ= +golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= +golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= google.golang.org/api v0.209.0 h1:Ja2OXNlyRlWCWu8o+GgI4yUn/wz9h/5ZfFbKz+dQX+w= From 5732b89f86ad8c3268359793fc25bead407aa7df Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Mon, 2 Dec 2024 23:13:12 +0800 Subject: [PATCH 04/14] build: libvips 8.16.0 (#505) * build: libvips 8.16.0 * test: reset golden * test: update golden files --- .github/workflows/test.yml | 2 +- Dockerfile | 2 +- .../gopher.png | Bin 33826 -> 33484 bytes testdata/golden/fit-in/67x67/gopher-front.png | Bin 4283 -> 4237 bytes 4 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 7ea6b6a8d..48c4f9816 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-22.04 env: CGO_CFLAGS_ALLOW: -Xpreprocessor - VIPS_VERSION: 8.15.3 + VIPS_VERSION: 8.16.0 V: 6 steps: diff --git a/Dockerfile b/Dockerfile index bee20812d..96ab5706b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG GOLANG_VERSION=1.23.3 FROM golang:${GOLANG_VERSION}-bookworm as builder -ARG VIPS_VERSION=8.15.3 +ARG VIPS_VERSION=8.16.0 ARG TARGETARCH ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig diff --git a/testdata/golden/fit-in/200x210/20x20/filters%3Arotate%2890%29%3Arotate%28270%29%3Arotate%28180%29%3Afill%28blur%29%3Agrayscale%28%29/gopher.png b/testdata/golden/fit-in/200x210/20x20/filters%3Arotate%2890%29%3Arotate%28270%29%3Arotate%28180%29%3Afill%28blur%29%3Agrayscale%28%29/gopher.png index 91356ebf1c7bfb13c0cd6ed2204923f491092ae8..5652201fbf6f6db61abb797fffaa424df08bd0c2 100644 GIT binary patch delta 33254 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

hO23P+=l_ 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 delta 33599 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%0DeiB2GY_2<(sDObM;1C|aE%@g8 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 B Date: Mon, 2 Dec 2024 23:17:01 +0800 Subject: [PATCH 05/14] v1.4.16 --- imagor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imagor.go b/imagor.go index 50f161e1f..46a12de5a 100644 --- a/imagor.go +++ b/imagor.go @@ -23,7 +23,7 @@ import ( ) // Version imagor version -const Version = "1.4.15" +const Version = "1.4.16" // Loader image loader interface type Loader interface { From 13c42b0caf3509053ea77481c70cc77f3191d3e8 Mon Sep 17 00:00:00 2001 From: Aslam Hadi H Date: Wed, 18 Dec 2024 19:29:14 +0700 Subject: [PATCH 06/14] feature: add sentry integration and update go version in go.mod (#510) * feature: add sentry integration and update go version in go.mod * change configuration for sentry * add test case for sentry-dsn configuration * change error message --- Dockerfile | 2 +- README.md | 3 +++ config/config.go | 30 +++++++++++++++++++++++++++++- config/config_test.go | 7 +++++++ go.mod | 6 +++--- go.sum | 9 +++++++++ server/option.go | 7 +++++++ server/server.go | 1 + 8 files changed, 60 insertions(+), 5 deletions(-) diff --git a/Dockerfile b/Dockerfile index 96ab5706b..991525bf8 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG GOLANG_VERSION=1.23.3 +ARG GOLANG_VERSION=1.23.4 FROM golang:${GOLANG_VERSION}-bookworm as builder ARG VIPS_VERSION=8.16.0 diff --git a/README.md b/README.md index 13ace6ed9..97954c107 100644 --- a/README.md +++ b/README.md @@ -816,4 +816,7 @@ Usage of imagor: VIPS avif speed, the lowest is at 0 and the fastest is at 9 (Default 5). -vips-strip-metadata VIPS strips all metadata from the resulting image + + -sentry-dsn + include sentry dsn to integrate imagor with sentry ``` diff --git a/config/config.go b/config/config.go index d149f74ad..d9b872c37 100644 --- a/config/config.go +++ b/config/config.go @@ -6,11 +6,14 @@ import ( "crypto/sha512" "flag" "fmt" - "go.uber.org/zap/zapcore" "runtime" "strings" "time" + "github.com/TheZeroSlave/zapsentry" + "github.com/getsentry/sentry-go" + "go.uber.org/zap/zapcore" + "github.com/kumparan/imagor/metrics/prometheusmetrics" "github.com/kumparan/imagor" @@ -153,6 +156,8 @@ func CreateServer(args []string, funcs ...Option) (srv *server.Server) { "Enable strip query string redirection") serverAccessLog = fs.Bool("server-access-log", false, "Enable server access log") + sentryDsn = fs.String("sentry-dsn", "", + "Sentry DSN config") prometheusBind = fs.String("prometheus-bind", "", "Specify address and port to enable Prometheus metrics, e.g. :5000, prom:7000") prometheusPath = fs.String("prometheus-path", "/", "Prometheus metrics path") @@ -192,6 +197,28 @@ func CreateServer(args []string, funcs ...Option) (srv *server.Server) { } logger = zap.Must(config.Build()) } + + if len(*sentryDsn) > 0 { + err = sentry.Init(sentry.ClientOptions{ + Dsn: *sentryDsn, + }) + if err != nil { + fmt.Printf("sentry.Init: %s", err) + } + defer sentry.Flush(2 * time.Second) + + // Add Sentry integration to zap logger + core, err := zapsentry.NewCore(zapsentry.Configuration{ + Level: zapcore.ErrorLevel, // only log errors or higher levels to Sentry + EnableBreadcrumbs: true, // enable sending breadcrumbs to Sentry + BreadcrumbLevel: zapcore.InfoLevel, // at what level should we sent breadcrumbs to sentry, this level can't be higher than `Level` + }, zapsentry.NewSentryClientFromClient(sentry.CurrentHub().Client())) + if err != nil { + fmt.Printf("zapsentry integration error: %s", err) + } + logger = zapsentry.AttachCoreToLogger(core, logger) + } + return logger, *debug }, funcs...) @@ -225,5 +252,6 @@ func CreateServer(args []string, funcs ...Option) (srv *server.Server) { server.WithLogger(logger), server.WithDebug(*debug), server.WithMetrics(pm), + server.WithSentry(*sentryDsn), ) } diff --git a/config/config_test.go b/config/config_test.go index 35c1dde9e..2c1bc0dec 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -106,6 +106,13 @@ func TestBind(t *testing.T) { assert.Equal(t, ":4567", srv.Addr) } +func TestSentry(t *testing.T) { + srv := CreateServer([]string{ + "-sentry-dsn", "https://12345@sentry.com/123", + }) + assert.Equal(t, "https://12345@sentry.com/123", srv.SentryDsn) +} + func TestSignerAlgorithm(t *testing.T) { srv := CreateServer([]string{ "-imagor-signer-type", "sha256", diff --git a/go.mod b/go.mod index 2dd3eaf4a..2770eaafa 100644 --- a/go.mod +++ b/go.mod @@ -1,13 +1,13 @@ module github.com/kumparan/imagor -go 1.22.7 - -toolchain go1.23.1 +go 1.23.4 require ( cloud.google.com/go/storage v1.47.0 + github.com/TheZeroSlave/zapsentry v1.23.0 github.com/aws/aws-sdk-go v1.55.5 github.com/fsouza/fake-gcs-server v1.50.2 + github.com/getsentry/sentry-go v0.30.0 github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca github.com/peterbourgon/ff/v3 v3.4.0 github.com/prometheus/client_golang v1.20.5 diff --git a/go.sum b/go.sum index f97a65b68..4324e93cf 100644 --- a/go.sum +++ b/go.sum @@ -34,6 +34,8 @@ github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0 github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew= github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI= +github.com/TheZeroSlave/zapsentry v1.23.0 h1:TKyzfEL7LRlRr+7AvkukVLZ+jZPC++ebCUv7ZJHl1AU= +github.com/TheZeroSlave/zapsentry v1.23.0/go.mod h1:3DRFLu4gIpnCTD4V9HMCBSaqYP8gYU7mZickrs2/rIY= github.com/aws/aws-sdk-go v1.44.256/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= @@ -67,6 +69,10 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsouza/fake-gcs-server v1.50.2 h1:ulrS1pavCOCbMZfN5ZPgBRMFWclON9xDsuLBniXtQoE= github.com/fsouza/fake-gcs-server v1.50.2/go.mod h1:VU6Zgei4647KuT4XER8WHv5Hcj2NIySndyG8gfvwckA= +github.com/getsentry/sentry-go v0.30.0 h1:lWUwDnY7sKHaVIoZ9wYqRHJ5iEmoc0pqcRqFkosKzBo= +github.com/getsentry/sentry-go v0.30.0/go.mod h1:WU9B9/1/sHDqeV8T+3VwwbjeR5MSXs/6aqG3mqZrezA= +github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= +github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= @@ -141,6 +147,9 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/peterbourgon/ff/v3 v3.4.0 h1:QBvM/rizZM1cB0p0lGMdmR7HxZeI/ZrBWB4DqLkMUBc= github.com/peterbourgon/ff/v3 v3.4.0/go.mod h1:zjJVUhx+twciwfDl0zBcFzl4dW8axCRyXE/eKY9RztQ= +github.com/pingcap/errors v0.11.4 h1:lFuQV/oaUMGcD2tqt+01ROSmJs75VG1ToEOkZIZ4nE4= +github.com/pingcap/errors v0.11.4/go.mod h1:Oi8TUi2kEtXXLMJk9l1cGmz20kV3TaQ0usTwv5KuLY8= +github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/xattr v0.4.10 h1:Qe0mtiNFHQZ296vRgUjRCoPHPqH7VdTOrZx3g0T+pGA= github.com/pkg/xattr v0.4.10/go.mod h1:di8WF84zAKk8jzR1UBTEWh9AUlIZZ7M/JNt8e9B6ktU= diff --git a/server/option.go b/server/option.go index 1d01b6028..fa93c9073 100644 --- a/server/option.go +++ b/server/option.go @@ -73,6 +73,13 @@ func WithDebug(debug bool) Option { } } +// WithSentry with sentry option +func WithSentry(dsn string) Option { + return func(s *Server) { + s.SentryDsn = dsn + } +} + // WithStartupTimeout with server startup timeout option func WithStartupTimeout(timeout time.Duration) Option { return func(s *Server) { diff --git a/server/server.go b/server/server.go index 3b4842503..cc7f0a729 100644 --- a/server/server.go +++ b/server/server.go @@ -45,6 +45,7 @@ type Server struct { CertFile string KeyFile string PathPrefix string + SentryDsn string StartupTimeout time.Duration ShutdownTimeout time.Duration Logger *zap.Logger From 5e13d88bd52aea1d31f2f348afc2c11192d64193 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Wed, 18 Dec 2024 20:54:42 +0800 Subject: [PATCH 07/14] build: update go deps --- go.mod | 54 ++++++++++----------- go.sum | 108 +++++++++++++++++++++--------------------- server/server_test.go | 5 ++ 3 files changed, 86 insertions(+), 81 deletions(-) diff --git a/go.mod b/go.mod index 2770eaafa..580a7936d 100644 --- a/go.mod +++ b/go.mod @@ -1,9 +1,9 @@ module github.com/kumparan/imagor -go 1.23.4 +go 1.22 require ( - cloud.google.com/go/storage v1.47.0 + cloud.google.com/go/storage v1.48.0 github.com/TheZeroSlave/zapsentry v1.23.0 github.com/aws/aws-sdk-go v1.55.5 github.com/fsouza/fake-gcs-server v1.50.2 @@ -14,12 +14,12 @@ require ( github.com/rs/cors v1.11.1 github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 - golang.org/x/image v0.22.0 - golang.org/x/sync v0.9.0 + golang.org/x/image v0.23.0 + golang.org/x/sync v0.10.0 ) require ( - cel.dev/expr v0.18.0 // indirect + cel.dev/expr v0.16.1 // indirect cloud.google.com/go v0.116.0 // indirect cloud.google.com/go/auth v0.11.0 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.6 // indirect @@ -27,20 +27,20 @@ require ( cloud.google.com/go/iam v1.2.2 // indirect cloud.google.com/go/monitoring v1.21.2 // indirect cloud.google.com/go/pubsub v1.45.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect github.com/beorn7/perks v1.0.1 // indirect github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/envoyproxy/go-control-plane v0.13.1 // indirect + github.com/envoyproxy/go-control-plane v0.13.0 // indirect github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // indirect + github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/renameio/v2 v2.0.0 // indirect github.com/google/s2a-go v0.1.8 // indirect github.com/google/uuid v1.6.0 // indirect @@ -55,33 +55,33 @@ require ( github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.60.1 // indirect + github.com/prometheus/common v0.55.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.32.0 // indirect - go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 // indirect - go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 // indirect - go.opentelemetry.io/otel v1.32.0 // indirect - go.opentelemetry.io/otel/metric v1.32.0 // indirect - go.opentelemetry.io/otel/sdk v1.32.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.32.0 // indirect - go.opentelemetry.io/otel/trace v1.32.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.29.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/sdk v1.29.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect + go.opentelemetry.io/otel/trace v1.29.0 // indirect go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.29.0 // indirect + golang.org/x/crypto v0.31.0 // indirect golang.org/x/net v0.31.0 // indirect golang.org/x/oauth2 v0.24.0 // indirect - golang.org/x/sys v0.27.0 // indirect - golang.org/x/text v0.20.0 // indirect + golang.org/x/sys v0.28.0 // indirect + golang.org/x/text v0.21.0 // indirect golang.org/x/time v0.8.0 // indirect - golang.org/x/tools v0.27.0 // indirect - google.golang.org/api v0.209.0 // indirect + golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect + google.golang.org/api v0.210.0 // indirect google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect - google.golang.org/grpc v1.68.0 // indirect - google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3 // indirect + google.golang.org/grpc v1.67.2 // indirect + google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect google.golang.org/protobuf v1.35.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 4324e93cf..77b26b9b2 100644 --- a/go.sum +++ b/go.sum @@ -1,5 +1,5 @@ -cel.dev/expr v0.18.0 h1:CJ6drgk+Hf96lkLikr4rFf19WrU0BOWEihyZnI2TAzo= -cel.dev/expr v0.18.0/go.mod h1:MrpN08Q+lEBs+bGYdLxxHkZoUSsCp0nSKTs0nTymJgw= +cel.dev/expr v0.16.1 h1:NR0+oFYzR1CqLFhTAqg3ql59G9VfN8fKq1TCHJ6gq1g= +cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= @@ -21,19 +21,19 @@ cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMm cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= cloud.google.com/go/pubsub v1.45.1 h1:ZC/UzYcrmK12THWn1P72z+Pnp2vu/zCZRXyhAfP1hJY= cloud.google.com/go/pubsub v1.45.1/go.mod h1:3bn7fTmzZFwaUjllitv1WlsNMkqBgGUb3UdMhI54eCc= -cloud.google.com/go/storage v1.47.0 h1:ajqgt30fnOMmLfWfu1PWcb+V9Dxz6n+9WKjdNg5R4HM= -cloud.google.com/go/storage v1.47.0/go.mod h1:Ks0vP374w0PW6jOUameJbapbQKXqkjGd/OJRp2fb9IQ= +cloud.google.com/go/storage v1.48.0 h1:FhBDHACbVtdPx7S/AbcKujPWiHvfO6F8OXGgCEbB2+o= +cloud.google.com/go/storage v1.48.0/go.mod h1:aFoDYNMAjv67lp+xcuZqjUKv/ctmplzQ3wJgodA7b+M= cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI= cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0 h1:3c8yed4lgqTt+oTQ+JNMDo+F4xprBf+O/il4ZC0nRLw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.25.0/go.mod h1:obipzmGjfSjam60XLwGfqUkJsfiheAl+TUjG+4yzyPM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0 h1:o90wcURuxekmXrtxmYWTyNla0+ZEHhud6DI1ZTxd1vI= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.49.0/go.mod h1:6fTWu4m3jocfUZLYF5KsZC1TUfRvEjs7lM4crme/irw= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0 h1:jJKWl98inONJAr/IZrdFQUWcwUO95DLY1XMD1ZIut+g= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.49.0/go.mod h1:l2fIqmwB+FKSfvn3bAD/0i+AXAxhIZjTK2svT/mgUXs= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0 h1:GYUJLfvd++4DMuMhCFLgLXvFwofIxh/qOwoGuS/LTew= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.49.0/go.mod h1:wRbFgBQUVm1YXrvWKofAEmq9HNJTDphbAaJSSX01KUI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= github.com/TheZeroSlave/zapsentry v1.23.0 h1:TKyzfEL7LRlRr+7AvkukVLZ+jZPC++ebCUv7ZJHl1AU= github.com/TheZeroSlave/zapsentry v1.23.0/go.mod h1:3DRFLu4gIpnCTD4V9HMCBSaqYP8gYU7mZickrs2/rIY= github.com/aws/aws-sdk-go v1.44.256/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= @@ -60,8 +60,8 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m 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= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.13.1 h1:vPfJZCkob6yTMEgS+0TwfTUfbHjfy/6vOJ8hUWX/uXE= -github.com/envoyproxy/go-control-plane v0.13.1/go.mod h1:X45hY0mufo6Fd0KW3rqsGvQMw58jvjymeCzBU3mWyHw= +github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= +github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= @@ -84,8 +84,8 @@ github.com/goccy/go-json v0.10.3 h1:KZ5WoDbxAIgm2HNbYckL0se1fHD6rz5j4ywS6ebzDqA= github.com/goccy/go-json v0.10.3/go.mod h1:oq7eo15ShAhp70Anwd5lgX2pLfOS3QCiwU/PULtXL6M= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ= -github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= +github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= @@ -162,8 +162,8 @@ github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/j github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.60.1 h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc= -github.com/prometheus/common v0.60.1/go.mod h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw= +github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= +github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= @@ -190,24 +190,24 @@ go.einride.tech/aip v0.68.0/go.mod h1:7y9FF8VtPWqpxuAxl0KQWqaULxW4zFIesD6zF5RIHH go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= 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/detectors/gcp v1.32.0 h1:P78qWqkLSShicHmAzfECaTgvslqHxblNE9j62Ws1NK8= -go.opentelemetry.io/contrib/detectors/gcp v1.32.0/go.mod h1:TVqo0Sda4Cv8gCIixd7LuLwW4EylumVWfhjZJjDD4DU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0 h1:qtFISDHKolvIxzSs0gIaiPUPR0Cucb0F2coHC7ZLdps= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.57.0/go.mod h1:Y+Pop1Q6hCOnETWTW4NROK/q1hv50hM7yDaUTjG8lp8= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0 h1:DheMAlT6POBP+gh8RUH19EOTnQIor5QE0uSRPtzCpSw= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.57.0/go.mod h1:wZcGmeVO9nzP67aYSLDqXNWK87EZWhi7JWj1v7ZXf94= -go.opentelemetry.io/otel v1.32.0 h1:WnBN+Xjcteh0zdk01SVqV55d/m62NJLJdIyb4y/WO5U= -go.opentelemetry.io/otel v1.32.0/go.mod h1:00DCVSB0RQcnzlwyTfqtxSm+DRr9hpYrHjNGiBHVQIg= +go.opentelemetry.io/contrib/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ= +go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU= +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= +go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= -go.opentelemetry.io/otel/metric v1.32.0 h1:xV2umtmNcThh2/a/aCP+h64Xx5wsj8qqnkYZktzNa0M= -go.opentelemetry.io/otel/metric v1.32.0/go.mod h1:jH7CIbbK6SH2V2wE16W05BHCtIDzauciCRLoc/SyMv8= -go.opentelemetry.io/otel/sdk v1.32.0 h1:RNxepc9vK59A8XsgZQouW8ue8Gkb4jpWtJm9ge5lEG4= -go.opentelemetry.io/otel/sdk v1.32.0/go.mod h1:LqgegDBjKMmb2GC6/PrTnteJG39I8/vJCAP9LlJXEjU= -go.opentelemetry.io/otel/sdk/metric v1.32.0 h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU= -go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ= -go.opentelemetry.io/otel/trace v1.32.0 h1:WIC9mYrXf8TmY/EXuULKc8hR17vE+Hjv2cssQDe03fM= -go.opentelemetry.io/otel/trace v1.32.0/go.mod h1:+i4rkvCraA+tG6AzwloGaCtkx53Fa+L+V8e9a7YvhT8= +go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= +go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= +go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= +go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= +go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= +go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= +go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= +go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d h1:Ns9kd1Rwzw7t0BR8XMphenji4SmIoNZPn8zhYmaVKP8= go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d/go.mod h1:92Uoe3l++MlthCm+koNi0tcUCX3anayogF0Pa/sp24k= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -219,11 +219,11 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.29.0 h1:L5SG1JTTXupVV3n6sUqMTeWbjAyfPwoda2DLX8J8FrQ= -golang.org/x/crypto v0.29.0/go.mod h1:+F4F4N5hv6v38hfeYwTdx20oUvLLc+QfrE9Ax9HtgRg= +golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= +golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/image v0.22.0 h1:UtK5yLUzilVrkjMAZAZ34DXGpASN8i8pj8g+O+yd10g= -golang.org/x/image v0.22.0/go.mod h1:9hPFhljd4zZ1GNSIZJ49sqbp45GKK9t6w+iXvGqZUz4= +golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= +golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= 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= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -252,8 +252,8 @@ golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.9.0 h1:fEo0HyrW1GIgZdpbhCRO0PkJajUS5H9IFUztCgEo2jQ= -golang.org/x/sync v0.9.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= +golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -267,8 +267,8 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.27.0 h1:wBqf8DvsY9Y/2P8gAfPDEYNuS30J4lPHJxXSb/nJZ+s= -golang.org/x/sys v0.27.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= +golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -280,8 +280,8 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.20.0 h1:gK/Kv2otX8gz+wn7Rmb3vT96ZwuoxnQlY+HlJVj7Qug= -golang.org/x/text v0.20.0/go.mod h1:D4IsuqiFMhST5bX19pQ9ikHC2GsaKyk/oF+pn3ducp4= +golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= +golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -294,12 +294,12 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= -golang.org/x/tools v0.27.0 h1:qEKojBykQkQ4EynWy4S8Weg69NumxKdn40Fce3uc/8o= -golang.org/x/tools v0.27.0/go.mod h1:sUi0ZgbwW9ZPAq26Ekut+weQPR5eIM6GQLQ1Yjm1H0Q= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= +golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.209.0 h1:Ja2OXNlyRlWCWu8o+GgI4yUn/wz9h/5ZfFbKz+dQX+w= -google.golang.org/api v0.209.0/go.mod h1:I53S168Yr/PNDNMi5yPnDc0/LGRZO6o7PoEbl/HY3CM= +google.golang.org/api v0.210.0 h1:HMNffZ57OoZCRYSbdWVRoqOa8V8NIHLL0CzdBPLztWk= +google.golang.org/api v0.210.0/go.mod h1:B9XDZGnx2NtyjzVkOVTGrFSAVZgPcbedzKg/gTLwqBs= 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= @@ -307,8 +307,8 @@ google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98 google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk= google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= -google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697 h1:pgr/4QbFyktUv9CtQ/Fq4gzEE6/Xs7iCXbktaGzLHbQ= -google.golang.org/genproto/googleapis/api v0.0.0-20241118233622-e639e219e697/go.mod h1:+D9ySVjN8nY8YCVjc5O7PZDIdZporIDY3KaGfJunh88= +google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f h1:M65LEviCfuZTfrfzwwEoxVtgvfkFkBUbFnRbxCXuXhU= +google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f/go.mod h1:Yo94eF2nj7igQt+TiJ49KxjIH8ndLYPZMIRSiRcEbg0= google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 h1:LWZqQOEjDyONlF1H6afSWpAL/znlREo2tHfLoe+8LMA= google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= @@ -316,10 +316,10 @@ google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyac 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.68.0 h1:aHQeeJbo8zAkAa3pRzrVjZlbz6uSfeOXlJNQM0RAbz0= -google.golang.org/grpc v1.68.0/go.mod h1:fmSPC5AsjSBCK54MyHRx48kpOti1/jRfOlwEWywNjWA= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3 h1:hUfOButuEtpc0UvYiaYRbNwxVYr0mQQOWq6X8beJ9Gc= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20241028142157-ada6787961b3/go.mod h1:jzYlkSMbKypzuu6xoAEijsNVo9ZeDF1u/zCfFgsx7jg= +google.golang.org/grpc v1.67.2 h1:Lq11HW1nr5m4OYV+ZVy2BjOK78/zqnTx24vyDBP1JcQ= +google.golang.org/grpc v1.67.2/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw= +google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A= 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= diff --git a/server/server_test.go b/server/server_test.go index fc48cec0d..15a8c8fc0 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -204,3 +204,8 @@ func TestWithPathPrefix(t *testing.T) { assert.Equal(t, http.StatusOK, w.Code) fmt.Println(w.Body.String()) } + +func TestWithSentry(t *testing.T) { + s := New(imagor.New(), WithSentry("https://12345@sentry.com/123")) + assert.Equal(t, "https://12345@sentry.com/123", s.SentryDsn) +} From 9f44ff307c9abb78c6bf928e51957f128289e662 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Wed, 18 Dec 2024 22:17:54 +0800 Subject: [PATCH 08/14] build: cleanup --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 34e02a375..675ca8106 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ build: CGO_CFLAGS_ALLOW=-Xpreprocessor go build -o bin/imagor ./cmd/imagor/main.go test: - go clean -testcache && CGO_CFLAGS_ALLOW=-Xpreprocessor go test -coverprofile=profile.cov $(shell go list ./... | grep -v /examples/) + go clean -testcache && CGO_CFLAGS_ALLOW=-Xpreprocessor go test -coverprofile=profile.cov $(shell go list ./... | grep -v /examples/ | grep -v /cmd/) dev: build ./bin/imagor -debug -imagor-unsafe From ca90758649cc041ae10357748a1f737030a0a78e Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Fri, 2 May 2025 19:50:34 +0800 Subject: [PATCH 09/14] build: go 1.24.2, update go deps (#536) * build: go 1.24.2, update go deps * build: go 1.24.2, update go deps --- .github/workflows/test.yml | 2 +- Dockerfile | 2 +- go.mod | 106 ++++++++-------- go.sum | 244 +++++++++++++++++++------------------ 4 files changed, 182 insertions(+), 172 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 48c4f9816..ede66a765 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -15,7 +15,7 @@ jobs: - name: Set up Go 1.x uses: actions/setup-go@v2 with: - go-version: ^1.23 + go-version: ^1.24 - name: Check out code uses: actions/checkout@v2 diff --git a/Dockerfile b/Dockerfile index 991525bf8..ad5f775b9 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -ARG GOLANG_VERSION=1.23.4 +ARG GOLANG_VERSION=1.24.2 FROM golang:${GOLANG_VERSION}-bookworm as builder ARG VIPS_VERSION=8.16.0 diff --git a/go.mod b/go.mod index 580a7936d..db63b57a6 100644 --- a/go.mod +++ b/go.mod @@ -1,87 +1,89 @@ module github.com/kumparan/imagor -go 1.22 +go 1.24 + +toolchain go1.24.2 require ( - cloud.google.com/go/storage v1.48.0 + cloud.google.com/go/storage v1.52.0 github.com/TheZeroSlave/zapsentry v1.23.0 - github.com/aws/aws-sdk-go v1.55.5 + github.com/aws/aws-sdk-go v1.55.7 github.com/fsouza/fake-gcs-server v1.50.2 - github.com/getsentry/sentry-go v0.30.0 - github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca + github.com/getsentry/sentry-go v0.32.0 + github.com/johannesboyne/gofakes3 v0.0.0-20250402064820-d479899d8cbe github.com/peterbourgon/ff/v3 v3.4.0 - github.com/prometheus/client_golang v1.20.5 + github.com/prometheus/client_golang v1.22.0 github.com/rs/cors v1.11.1 github.com/stretchr/testify v1.10.0 go.uber.org/zap v1.27.0 - golang.org/x/image v0.23.0 - golang.org/x/sync v0.10.0 + golang.org/x/image v0.26.0 + golang.org/x/sync v0.13.0 ) require ( - cel.dev/expr v0.16.1 // indirect - cloud.google.com/go v0.116.0 // indirect - cloud.google.com/go/auth v0.11.0 // indirect - cloud.google.com/go/auth/oauth2adapt v0.2.6 // indirect - cloud.google.com/go/compute/metadata v0.5.2 // indirect - cloud.google.com/go/iam v1.2.2 // indirect - cloud.google.com/go/monitoring v1.21.2 // indirect - cloud.google.com/go/pubsub v1.45.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 // indirect - github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 // indirect + cel.dev/expr v0.23.1 // indirect + cloud.google.com/go v0.121.0 // indirect + cloud.google.com/go/auth v0.16.1 // indirect + cloud.google.com/go/auth/oauth2adapt v0.2.8 // indirect + cloud.google.com/go/compute/metadata v0.6.0 // indirect + cloud.google.com/go/iam v1.5.2 // indirect + cloud.google.com/go/monitoring v1.24.2 // indirect + cloud.google.com/go/pubsub v1.49.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 // indirect + github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 // indirect github.com/beorn7/perks v1.0.1 // indirect - github.com/census-instrumentation/opencensus-proto v0.4.1 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 // indirect + github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/envoyproxy/go-control-plane v0.13.0 // indirect - github.com/envoyproxy/protoc-gen-validate v1.1.0 // indirect + github.com/envoyproxy/go-control-plane/envoy v1.32.4 // indirect + github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect + github.com/go-jose/go-jose/v4 v4.1.0 // indirect github.com/go-logr/logr v1.4.2 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/google/renameio/v2 v2.0.0 // indirect - github.com/google/s2a-go v0.1.8 // indirect + github.com/google/s2a-go v0.1.9 // indirect github.com/google/uuid v1.6.0 // indirect - github.com/googleapis/enterprise-certificate-proxy v0.3.4 // indirect - github.com/googleapis/gax-go/v2 v2.14.0 // indirect + github.com/googleapis/enterprise-certificate-proxy v0.3.6 // indirect + github.com/googleapis/gax-go/v2 v2.14.1 // indirect github.com/gorilla/handlers v1.5.2 // indirect github.com/gorilla/mux v1.8.1 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect - github.com/klauspost/compress v1.17.11 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/xattr v0.4.10 // indirect github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.55.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.63.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 // indirect + github.com/spiffe/go-spiffe/v2 v2.5.0 // indirect + github.com/zeebo/errs v1.4.0 // indirect go.opencensus.io v0.24.0 // indirect - go.opentelemetry.io/contrib/detectors/gcp v1.29.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/sdk v1.29.0 // indirect - go.opentelemetry.io/otel/sdk/metric v1.29.0 // indirect - go.opentelemetry.io/otel/trace v1.29.0 // indirect + go.opentelemetry.io/auto/sdk v1.1.0 // indirect + go.opentelemetry.io/contrib/detectors/gcp v1.35.0 // indirect + go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 // indirect + go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 // indirect + go.opentelemetry.io/otel v1.35.0 // indirect + go.opentelemetry.io/otel/metric v1.35.0 // indirect + go.opentelemetry.io/otel/sdk v1.35.0 // indirect + go.opentelemetry.io/otel/sdk/metric v1.35.0 // indirect + go.opentelemetry.io/otel/trace v1.35.0 // indirect go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d // indirect go.uber.org/multierr v1.11.0 // indirect - golang.org/x/crypto v0.31.0 // indirect - golang.org/x/net v0.31.0 // indirect - golang.org/x/oauth2 v0.24.0 // indirect - golang.org/x/sys v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect - golang.org/x/time v0.8.0 // indirect + golang.org/x/crypto v0.37.0 // indirect + golang.org/x/net v0.39.0 // indirect + golang.org/x/oauth2 v0.29.0 // indirect + golang.org/x/sys v0.32.0 // indirect + golang.org/x/text v0.24.0 // indirect + golang.org/x/time v0.11.0 // indirect golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d // indirect - google.golang.org/api v0.210.0 // indirect - google.golang.org/genproto v0.0.0-20241118233622-e639e219e697 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 // indirect - google.golang.org/grpc v1.67.2 // indirect - google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a // indirect - google.golang.org/protobuf v1.35.2 // indirect + google.golang.org/api v0.231.0 // indirect + google.golang.org/genproto v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 // indirect + google.golang.org/grpc v1.72.0 // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 77b26b9b2..0fbd1acb3 100644 --- a/go.sum +++ b/go.sum @@ -1,57 +1,55 @@ -cel.dev/expr v0.16.1 h1:NR0+oFYzR1CqLFhTAqg3ql59G9VfN8fKq1TCHJ6gq1g= -cel.dev/expr v0.16.1/go.mod h1:AsGA5zb3WruAEQeQng1RZdGEXmBj0jvMWh6l5SnNuC8= +cel.dev/expr v0.23.1 h1:K4KOtPCJQjVggkARsjG9RWXP6O4R73aHeJMa/dmCQQg= +cel.dev/expr v0.23.1/go.mod h1:hLPLo1W4QUmuYdA72RBX06QTs6MXw941piREPl3Yfiw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.116.0 h1:B3fRrSDkLRt5qSHWe40ERJvhvnQwdZiHu0bJOpldweE= -cloud.google.com/go v0.116.0/go.mod h1:cEPSRWPzZEswwdr9BxE6ChEn01dWlTaF05LiC2Xs70U= -cloud.google.com/go/auth v0.11.0 h1:Ic5SZz2lsvbYcWT5dfjNWgw6tTlGi2Wc8hyQSC9BstA= -cloud.google.com/go/auth v0.11.0/go.mod h1:xxA5AqpDrvS+Gkmo9RqrGGRh6WSNKKOXhY3zNOr38tI= -cloud.google.com/go/auth/oauth2adapt v0.2.6 h1:V6a6XDu2lTwPZWOawrAa9HUK+DB2zfJyTuciBG5hFkU= -cloud.google.com/go/auth/oauth2adapt v0.2.6/go.mod h1:AlmsELtlEBnaNTL7jCj8VQFLy6mbZv0s4Q7NGBeQ5E8= -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/iam v1.2.2 h1:ozUSofHUGf/F4tCNy/mu9tHLTaxZFLOUiKzjcgWHGIA= -cloud.google.com/go/iam v1.2.2/go.mod h1:0Ys8ccaZHdI1dEUilwzqng/6ps2YB6vRsjIe00/+6JY= -cloud.google.com/go/kms v1.20.1 h1:og29Wv59uf2FVaZlesaiDAqHFzHaoUyHI3HYp9VUHVg= -cloud.google.com/go/kms v1.20.1/go.mod h1:LywpNiVCvzYNJWS9JUcGJSVTNSwPwi0vBAotzDqn2nc= -cloud.google.com/go/logging v1.12.0 h1:ex1igYcGFd4S/RZWOCU51StlIEuey5bjqwH9ZYjHibk= -cloud.google.com/go/logging v1.12.0/go.mod h1:wwYBt5HlYP1InnrtYI0wtwttpVU1rifnMT7RejksUAM= -cloud.google.com/go/longrunning v0.6.2 h1:xjDfh1pQcWPEvnfjZmwjKQEcHnpz6lHjfy7Fo0MK+hc= -cloud.google.com/go/longrunning v0.6.2/go.mod h1:k/vIs83RN4bE3YCswdXC5PFfWVILjm3hpEUlSko4PiI= -cloud.google.com/go/monitoring v1.21.2 h1:FChwVtClH19E7pJ+e0xUhJPGksctZNVOk2UhMmblmdU= -cloud.google.com/go/monitoring v1.21.2/go.mod h1:hS3pXvaG8KgWTSz+dAdyzPrGUYmi2Q+WFX8g2hqVEZU= -cloud.google.com/go/pubsub v1.45.1 h1:ZC/UzYcrmK12THWn1P72z+Pnp2vu/zCZRXyhAfP1hJY= -cloud.google.com/go/pubsub v1.45.1/go.mod h1:3bn7fTmzZFwaUjllitv1WlsNMkqBgGUb3UdMhI54eCc= -cloud.google.com/go/storage v1.48.0 h1:FhBDHACbVtdPx7S/AbcKujPWiHvfO6F8OXGgCEbB2+o= -cloud.google.com/go/storage v1.48.0/go.mod h1:aFoDYNMAjv67lp+xcuZqjUKv/ctmplzQ3wJgodA7b+M= -cloud.google.com/go/trace v1.11.2 h1:4ZmaBdL8Ng/ajrgKqY5jfvzqMXbrDcBsUGXOT9aqTtI= -cloud.google.com/go/trace v1.11.2/go.mod h1:bn7OwXd4pd5rFuAnTrzBuoZ4ax2XQeG3qNgYmfCy0Io= +cloud.google.com/go v0.121.0 h1:pgfwva8nGw7vivjZiRfrmglGWiCJBP+0OmDpenG/Fwg= +cloud.google.com/go v0.121.0/go.mod h1:rS7Kytwheu/y9buoDmu5EIpMMCI4Mb8ND4aeN4Vwj7Q= +cloud.google.com/go/auth v0.16.1 h1:XrXauHMd30LhQYVRHLGvJiYeczweKQXZxsTbV9TiguU= +cloud.google.com/go/auth v0.16.1/go.mod h1:1howDHJ5IETh/LwYs3ZxvlkXF48aSqqJUM+5o02dNOI= +cloud.google.com/go/auth/oauth2adapt v0.2.8 h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc= +cloud.google.com/go/auth/oauth2adapt v0.2.8/go.mod h1:XQ9y31RkqZCcwJWNSx2Xvric3RrU88hAYYbjDWYDL+c= +cloud.google.com/go/compute/metadata v0.6.0 h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I= +cloud.google.com/go/compute/metadata v0.6.0/go.mod h1:FjyFAW1MW0C203CEOMDTu3Dk1FlqW3Rga40jzHL4hfg= +cloud.google.com/go/iam v1.5.2 h1:qgFRAGEmd8z6dJ/qyEchAuL9jpswyODjA2lS+w234g8= +cloud.google.com/go/iam v1.5.2/go.mod h1:SE1vg0N81zQqLzQEwxL2WI6yhetBdbNQuTvIKCSkUHE= +cloud.google.com/go/kms v1.21.2 h1:c/PRUSMNQ8zXrc1sdAUnsenWWaNXN+PzTXfXOcSFdoE= +cloud.google.com/go/kms v1.21.2/go.mod h1:8wkMtHV/9Z8mLXEXr1GK7xPSBdi6knuLXIhqjuWcI6w= +cloud.google.com/go/logging v1.13.0 h1:7j0HgAp0B94o1YRDqiqm26w4q1rDMH7XNRU34lJXHYc= +cloud.google.com/go/logging v1.13.0/go.mod h1:36CoKh6KA/M0PbhPKMq6/qety2DCAErbhXT62TuXALA= +cloud.google.com/go/longrunning v0.6.7 h1:IGtfDWHhQCgCjwQjV9iiLnUta9LBCo8R9QmAFsS/PrE= +cloud.google.com/go/longrunning v0.6.7/go.mod h1:EAFV3IZAKmM56TyiE6VAP3VoTzhZzySwI/YI1s/nRsY= +cloud.google.com/go/monitoring v1.24.2 h1:5OTsoJ1dXYIiMiuL+sYscLc9BumrL3CarVLL7dd7lHM= +cloud.google.com/go/monitoring v1.24.2/go.mod h1:x7yzPWcgDRnPEv3sI+jJGBkwl5qINf+6qY4eq0I9B4U= +cloud.google.com/go/pubsub v1.49.0 h1:5054IkbslnrMCgA2MAEPcsN3Ky+AyMpEZcii/DoySPo= +cloud.google.com/go/pubsub v1.49.0/go.mod h1:K1FswTWP+C1tI/nfi3HQecoVeFvL4HUOB1tdaNXKhUY= +cloud.google.com/go/storage v1.52.0 h1:ROpzMW/IwipKtatA69ikxibdzQSiXJrY9f6IgBa9AlA= +cloud.google.com/go/storage v1.52.0/go.mod h1:4wrBAbAYUvYkbrf19ahGm4I5kDQhESSqN3CGEkMGvOY= +cloud.google.com/go/trace v1.11.6 h1:2O2zjPzqPYAHrn3OKl029qlqG6W8ZdYaOWRyr8NgMT4= +cloud.google.com/go/trace v1.11.6/go.mod h1:GA855OeDEBiBMzcckLPE2kDunIpC72N+Pq8WFieFjnI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1 h1:pB2F2JKCj1Znmp2rwxxt1J0Fg0wezTMgWYk5Mpbi1kg= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.24.1/go.mod h1:itPGVDKf9cC/ov4MdvJ2QZ0khw4bfoo9jzwTJlaxy2k= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1 h1:UQ0AhxogsIRZDkElkblfnwjc3IaltCm2HUMvezQaL7s= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.48.1/go.mod h1:jyqM3eLpJ3IbIFDTKVz2rF9T/xWGW0rIriGwnz8l9Tk= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1 h1:oTX4vsorBZo/Zdum6OKPA4o7544hm6smoRv1QjpTwGo= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.48.1/go.mod h1:0wEl7vrAD8mehJyohS9HZy+WyEOaQO2mJx86Cvh93kM= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1 h1:8nn+rsCvTq9axyEh382S0PFLBeaFwNsT43IrPWzctRU= -github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.48.1/go.mod h1:viRWSEhtMZqz1rhwmOVKkWl6SwmVowfL9O2YR5gI2PE= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0 h1:ErKg/3iS1AKcTkf3yixlZ54f9U1rljCkQyEXWUnIUxc= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp v1.27.0/go.mod h1:yAZHSGnqScoU556rBOVkwLze6WP5N+U11RHuWaGVxwY= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0 h1:fYE9p3esPxA/C0rQ0AHhP0drtPXDRhaWiwg1DPqO7IU= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric v0.51.0/go.mod h1:BnBReJLvVYx2CS/UHOgVz2BXKXD9wsQPxZug20nZhd0= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0 h1:OqVGm6Ei3x5+yZmSJG1Mh2NwHvpVmZ08CB5qJhT9Nuk= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock v0.51.0/go.mod h1:SZiPHWGOOk3bl8tkevxkoiwPgsIl6CwrWcbwjfHZpdM= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0 h1:6/0iUd0xrnX7qt+mLNRwg5c0PGv8wpE8K90ryANQwMI= +github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping v0.51.0/go.mod h1:otE2jQekW/PqXk1Awf5lmfokJx4uwuqcj1ab5SpGeW0= github.com/TheZeroSlave/zapsentry v1.23.0 h1:TKyzfEL7LRlRr+7AvkukVLZ+jZPC++ebCUv7ZJHl1AU= github.com/TheZeroSlave/zapsentry v1.23.0/go.mod h1:3DRFLu4gIpnCTD4V9HMCBSaqYP8gYU7mZickrs2/rIY= github.com/aws/aws-sdk-go v1.44.256/go.mod h1:aVsgQcEevwlmQ7qHE9I3h+dtQgpqhFB+i8Phjh7fkwI= -github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= -github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= +github.com/aws/aws-sdk-go v1.55.7 h1:UJrkFq7es5CShfBwlWAC8DA077vp8PyVbQd3lqLiztE= +github.com/aws/aws-sdk-go v1.55.7/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1 h1:iKLQ0xPNFxR/2hzXZMrBo8f1j86j5WHzznCCQxV/b8g= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cevatbarisyilmaz/ara v0.0.4 h1:SGH10hXpBJhhTlObuZzTuFn1rrdmjQImITXnZVPSodc= github.com/cevatbarisyilmaz/ara v0.0.4/go.mod h1:BfFOxnUd6Mj6xmcvRxHN3Sr21Z1T3U2MYkYOmoQe4Ts= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78 h1:QVw89YDxXxEe+l8gU8ETbOasdwEV+avkR75ZzsVV9WI= -github.com/cncf/xds/go v0.0.0-20240905190251-b4127c9b8d78/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443 h1:aQ3y1lwWyqYPiWZThqv1aFbZMiM9vblcSArJRf2Irls= +github.com/cncf/xds/go v0.0.0-20250501225837-2ac532fd4443/go.mod h1:W+zGtBO5Y1IgJhy4+A9GOqVhqLpfZi+vwmdNXUehLA8= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= @@ -60,21 +58,27 @@ github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+m 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= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.13.0 h1:HzkeUz1Knt+3bK+8LG1bxOO/jzWZmdxpwC51i202les= -github.com/envoyproxy/go-control-plane v0.13.0/go.mod h1:GRaKG3dwvFoTg4nj7aXdZnvMg4d7nvT/wl9WgVXn3Q8= +github.com/envoyproxy/go-control-plane v0.13.4 h1:zEqyPVyku6IvWCFwux4x9RxkLOMUL+1vC9xUFv5l2/M= +github.com/envoyproxy/go-control-plane v0.13.4/go.mod h1:kDfuBlDVsSj2MjrLEtRWtHlsWIFcGyB2RMO44Dc5GZA= +github.com/envoyproxy/go-control-plane/envoy v1.32.4 h1:jb83lalDRZSpPWW2Z7Mck/8kXZ5CQAFYVjQcdVIr83A= +github.com/envoyproxy/go-control-plane/envoy v1.32.4/go.mod h1:Gzjc5k8JcJswLjAx1Zm+wSYE20UrLtt7JZMWiWQXQEw= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0 h1:/G9QYbddjL25KvtKTv3an9lx6VBE2cnb8wp1vEGNYGI= +github.com/envoyproxy/go-control-plane/ratelimit v0.1.0/go.mod h1:Wk+tMFAFbCXaJPzVVHnPgRKdUdwW/KdbRt94AzgRee4= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v1.1.0 h1:tntQDh69XqOCOZsDz0lVJQez/2L6Uu2PdjCQwWCJ3bM= -github.com/envoyproxy/protoc-gen-validate v1.1.0/go.mod h1:sXRDRVmzEbkM7CVcM06s9shE/m23dg3wzjl0UWqJ2q4= +github.com/envoyproxy/protoc-gen-validate v1.2.1 h1:DEo3O99U8j4hBFwbJfrz9VtgcDfUKS7KJ7spH3d86P8= +github.com/envoyproxy/protoc-gen-validate v1.2.1/go.mod h1:d/C80l/jxXLdfEIhX1W2TmLfsJ31lvEjwamM4DxlWXU= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fsouza/fake-gcs-server v1.50.2 h1:ulrS1pavCOCbMZfN5ZPgBRMFWclON9xDsuLBniXtQoE= github.com/fsouza/fake-gcs-server v1.50.2/go.mod h1:VU6Zgei4647KuT4XER8WHv5Hcj2NIySndyG8gfvwckA= -github.com/getsentry/sentry-go v0.30.0 h1:lWUwDnY7sKHaVIoZ9wYqRHJ5iEmoc0pqcRqFkosKzBo= -github.com/getsentry/sentry-go v0.30.0/go.mod h1:WU9B9/1/sHDqeV8T+3VwwbjeR5MSXs/6aqG3mqZrezA= +github.com/getsentry/sentry-go v0.32.0 h1:YKs+//QmwE3DcYtfKRH8/KyOOF/I6Qnx7qYGNHCGmCY= +github.com/getsentry/sentry-go v0.32.0/go.mod h1:CYNcMMz73YigoHljQRG+qPF+eMq8gG72XcGN/p71BAY= github.com/go-errors/errors v1.4.2 h1:J6MZopCL4uSllY1OfXM374weqZFFItUbrImctkmUxIA= github.com/go-errors/errors v1.4.2/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-jose/go-jose/v4 v4.1.0 h1:cYSYxd3pw5zd2FSXk2vGdn9igQU2PS8MuxrCOCl0FdY= +github.com/go-jose/go-jose/v4 v4.1.0/go.mod h1:GG/vqmYm3Von2nYiB2vGTXzdoNKE5tix5tuc6iAd+sw= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -104,21 +108,21 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/martian/v3 v3.3.3 h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc= github.com/google/martian/v3 v3.3.3/go.mod h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0= github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg= github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4= -github.com/google/s2a-go v0.1.8 h1:zZDs9gcbt9ZPLV0ndSyQk6Kacx2g/X+SKYovpnz3SMM= -github.com/google/s2a-go v0.1.8/go.mod h1:6iNWHTpQ+nfNRN5E00MSdfDwVesa8hhS32PhPO8deJA= +github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0= +github.com/google/s2a-go v0.1.9/go.mod h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= -github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= -github.com/googleapis/gax-go/v2 v2.14.0 h1:f+jMrjBPl+DL9nI4IQzLUxMq7XrAqFYB7hBPqMNIe8o= -github.com/googleapis/gax-go/v2 v2.14.0/go.mod h1:lhBCnjdLrWRaPvLWhmc8IS24m9mr07qSYnHncrgo+zk= +github.com/googleapis/enterprise-certificate-proxy v0.3.6 h1:GW/XbdyBFQ8Qe+YAmFU9uHLo7OnF5tL52HFAgMmyrf4= +github.com/googleapis/enterprise-certificate-proxy v0.3.6/go.mod h1:MkHOF77EYAE7qfSuSS9PU6g4Nt4e11cnsDUowfwewLA= +github.com/googleapis/gax-go/v2 v2.14.1 h1:hb0FFeiPaQskmvakKu5EbCbpntQn48jyHuvrkurSS/Q= +github.com/googleapis/gax-go/v2 v2.14.1/go.mod h1:Hb/NubMaVM88SrNkvl8X/o8XWwDJEPqouaLeN2IUxoA= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= @@ -127,10 +131,10 @@ github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9Y github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= -github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca h1:aLV7i5W7KKNHUwcmPZKDKXut6ZnJ8sdQWYDTKwhIzBU= -github.com/johannesboyne/gofakes3 v0.0.0-20241026070602-0da3aa9c32ca/go.mod h1:t6osVdP++3g4v2awHz4+HFccij23BbdT1rX3W7IijqQ= -github.com/klauspost/compress v1.17.11 h1:In6xLpyWOi1+C7tXUUWv2ot1QvBjxevKAaI6IXrJmUc= -github.com/klauspost/compress v1.17.11/go.mod h1:pMDklpSncoRMuLFrf1W9Ss9KT+0rH90U12bZKk7uwG0= +github.com/johannesboyne/gofakes3 v0.0.0-20250402064820-d479899d8cbe h1:oc+3AXUeNlN53brf1JS91kMicMkLHPLHu7K9jSKlewU= +github.com/johannesboyne/gofakes3 v0.0.0-20250402064820-d479899d8cbe/go.mod h1:t6osVdP++3g4v2awHz4+HFccij23BbdT1rX3W7IijqQ= +github.com/klauspost/compress v1.18.0 h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo= +github.com/klauspost/compress v1.18.0/go.mod h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ= github.com/klauspost/cpuid/v2 v2.2.8 h1:+StwCXwm9PdpiEkPyzBXIy+M9KUb4ODm0Zarf1kS5BM= github.com/klauspost/cpuid/v2 v2.2.8/go.mod h1:Lcz8mBdAVJIBVzewtcLocK12l3Y+JytZYpaMropDUws= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= @@ -157,17 +161,17 @@ github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10 h1:GFCKgm github.com/planetscale/vtprotobuf v0.6.1-0.20240319094008-0393e58bdf10/go.mod h1:t/avpk3KcrXxUnYOhZhMXJlSEyie6gQbtLq5NM3loB8= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/prometheus/client_golang v1.20.5 h1:cxppBPuYhUnsO6yo/aoRol4L7q7UFfdm+bR9r+8l63Y= -github.com/prometheus/client_golang v1.20.5/go.mod h1:PIEt8X02hGcP8JWbeHyeZ53Y/jReSnHgO035n//V5WE= +github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= +github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.55.0 h1:KEi6DK7lXW/m7Ig5i47x0vRzuBsHuvJdi5ee6Y3G1dc= -github.com/prometheus/common v0.55.0/go.mod h1:2SECS4xJG1kd8XF9IcM1gMX6510RAEL65zxzNImwdc8= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/prometheus/client_model v0.6.2 h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk= +github.com/prometheus/client_model v0.6.2/go.mod h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE= +github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k= +github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= +github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= +github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/rs/cors v1.11.1 h1:eU3gRzXLRK57F5rKMGMZURNdIG4EoAmX8k94r9wXWHA= github.com/rs/cors v1.11.1/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= github.com/rs/xid v1.6.0 h1:fV591PaemRlL6JfRxGDEPl69wICngIQ3shQtzfy2gxU= @@ -175,6 +179,8 @@ github.com/rs/xid v1.6.0/go.mod h1:7XoLgs4eV+QndskICGsho+ADou8ySMSjJKDIan90Nz0= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46 h1:GHRpF1pTW19a8tTFrMLUcfWwyC0pnifVo2ClaLq+hP8= github.com/ryszard/goskiplist v0.0.0-20150312221310-2dfbae5fcf46/go.mod h1:uAQ5PCi+MFsC7HjREoAz1BU+Mq60+05gifQSsHSDG/8= github.com/spf13/afero v1.2.1/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= +github.com/spiffe/go-spiffe/v2 v2.5.0 h1:N2I01KCUkv1FAjZXJMwh95KK1ZIQLYbPfhaxw8WS0hE= +github.com/spiffe/go-spiffe/v2 v2.5.0/go.mod h1:P+NxobPc6wXhVtINNtFjNWGBTreew1GBUCwT2wPmb7g= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= @@ -185,29 +191,33 @@ github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -go.einride.tech/aip v0.68.0 h1:4seM66oLzTpz50u4K1zlJyOXQ3tCzcJN7I22tKkjipw= -go.einride.tech/aip v0.68.0/go.mod h1:7y9FF8VtPWqpxuAxl0KQWqaULxW4zFIesD6zF5RIHHg= +github.com/zeebo/errs v1.4.0 h1:XNdoD/RRMKP7HD0UhJnIzUy74ISdGGxURlYG8HSWSfM= +github.com/zeebo/errs v1.4.0/go.mod h1:sgbWHsvVuTPHcqJJGQ1WhI5KbWlHYz+2+2C/LSEtCw4= +go.einride.tech/aip v0.68.1 h1:16/AfSxcQISGN5z9C5lM+0mLYXihrHbQ1onvYTr93aQ= +go.einride.tech/aip v0.68.1/go.mod h1:XaFtaj4HuA3Zwk9xoBtTWgNubZ0ZZXv9BZJCkuKuWbg= go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= 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/detectors/gcp v1.29.0 h1:TiaiXB4DpGD3sdzNlYQxruQngn5Apwzi1X0DRhuGvDQ= -go.opentelemetry.io/contrib/detectors/gcp v1.29.0/go.mod h1:GW2aWZNwR2ZxDLdv8OyC2G8zkRoQBuURgV7RPQgcPoU= -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= -go.opentelemetry.io/otel v1.29.0/go.mod h1:N/WtXPs1CNCUEx+Agz5uouwCba+i+bJGFicT8SR4NP8= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0 h1:WDdP9acbMYjbKIyJUhTvtzj601sVJOqgWdUxSdR/Ysc= -go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.29.0/go.mod h1:BLbf7zbNIONBLPwvFnwNHGj4zge8uTCM/UPIVW1Mq2I= -go.opentelemetry.io/otel/metric v1.29.0 h1:vPf/HFWTNkPu1aYeIsc98l4ktOQaL6LeSoeV2g+8YLc= -go.opentelemetry.io/otel/metric v1.29.0/go.mod h1:auu/QWieFVWx+DmQOUMgj0F8LHWdgalxXqvp7BII/W8= -go.opentelemetry.io/otel/sdk v1.29.0 h1:vkqKjk7gwhS8VaWb0POZKmIEDimRCMsopNYnriHyryo= -go.opentelemetry.io/otel/sdk v1.29.0/go.mod h1:pM8Dx5WKnvxLCb+8lG1PRNIDxu9g9b9g59Qr7hfAAok= -go.opentelemetry.io/otel/sdk/metric v1.29.0 h1:K2CfmJohnRgvZ9UAj2/FhIf/okdWcNdBwe1m8xFXiSY= -go.opentelemetry.io/otel/sdk/metric v1.29.0/go.mod h1:6zZLdCl2fkauYoZIOn/soQIDSWFmNSRcICarHfuhNJQ= -go.opentelemetry.io/otel/trace v1.29.0 h1:J/8ZNK4XgR7a21DZUAsbF8pZ5Jcw1VhACmnYt39JTi4= -go.opentelemetry.io/otel/trace v1.29.0/go.mod h1:eHl3w0sp3paPkYstJOmAimxhiFXPg+MMTlEh3nsQgWQ= +go.opentelemetry.io/auto/sdk v1.1.0 h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA= +go.opentelemetry.io/auto/sdk v1.1.0/go.mod h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0 h1:bGvFt68+KTiAKFlacHW6AhA56GF2rS0bdD3aJYEnmzA= +go.opentelemetry.io/contrib/detectors/gcp v1.35.0/go.mod h1:qGWP8/+ILwMRIUf9uIVLloR1uo5ZYAslM4O6OqUi1DA= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0 h1:x7wzEgXfnzJcHDwStJT+mxOz4etr2EcexjqhBvmoakw= +go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.60.0/go.mod h1:rg+RlpR5dKwaS95IyyZqj5Wd4E13lk/msnTS0Xl9lJM= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0 h1:sbiXRNDSWJOTobXh5HyQKjq6wUC5tNybqjIqDpAY4CU= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.60.0/go.mod h1:69uWxva0WgAA/4bu2Yy70SLDBwZXuQ6PbBpbsa5iZrQ= +go.opentelemetry.io/otel v1.35.0 h1:xKWKPxrxB6OtMCbmMY021CqC45J+3Onta9MqjhnusiQ= +go.opentelemetry.io/otel v1.35.0/go.mod h1:UEqy8Zp11hpkUrL73gSlELM0DupHoiq72dR+Zqel/+Y= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0 h1:PB3Zrjs1sG1GBX51SXyTSoOTqcDglmsk7nT6tkKPb/k= +go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.35.0/go.mod h1:U2R3XyVPzn0WX7wOIypPuptulsMcPDPs/oiSVOMVnHY= +go.opentelemetry.io/otel/metric v1.35.0 h1:0znxYu2SNyuMSQT4Y9WDWej0VpcsxkuklLa4/siN90M= +go.opentelemetry.io/otel/metric v1.35.0/go.mod h1:nKVFgxBZ2fReX6IlyW28MgZojkoAkJGaE8CpgeAU3oE= +go.opentelemetry.io/otel/sdk v1.35.0 h1:iPctf8iprVySXSKJffSS79eOjl9pvxV9ZqOWT0QejKY= +go.opentelemetry.io/otel/sdk v1.35.0/go.mod h1:+ga1bZliga3DxJ3CQGg3updiaAJoNECOgJREo9KHGQg= +go.opentelemetry.io/otel/sdk/metric v1.35.0 h1:1RriWBmCKgkeHEhM7a2uMjMUfP7MsOF5JpUCaEqEI9o= +go.opentelemetry.io/otel/sdk/metric v1.35.0/go.mod h1:is6XYCUMpcKi+ZsOvfluY5YstFnhW0BidkR+gL+qN+w= +go.opentelemetry.io/otel/trace v1.35.0 h1:dPpEfJu1sDIqruz7BHFG3c7528f6ddfSWfFDVt/xgMs= +go.opentelemetry.io/otel/trace v1.35.0/go.mod h1:WUk7DtFp1Aw2MkvqGdwiXYDZZNvA/1J8o6xRXLrIkyc= go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d h1:Ns9kd1Rwzw7t0BR8XMphenji4SmIoNZPn8zhYmaVKP8= go.shabbyrobe.org/gocovmerge v0.0.0-20230507111327-fa4f82cfbf4d/go.mod h1:92Uoe3l++MlthCm+koNi0tcUCX3anayogF0Pa/sp24k= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= @@ -219,11 +229,11 @@ go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= 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.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.31.0 h1:ihbySMvVjLAeSH1IbfcRTkD/iNscyz8rGzjF/E5hV6U= -golang.org/x/crypto v0.31.0/go.mod h1:kDsLvtWBEx7MV9tJOj9bnXsPbxwJQ6csT/x4KIN4Ssk= +golang.org/x/crypto v0.37.0 h1:kJNSjF/Xp7kU0iB2Z+9viTPMW4EqqsrywMXLJOOsXSE= +golang.org/x/crypto v0.37.0/go.mod h1:vg+k43peMZ0pUMhYmVAWysMK35e6ioLh3wB8ZCAfbVc= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/image v0.23.0 h1:HseQ7c2OpPKTPVzNjG5fwJsOTCiiwS4QdsYi5XU6H68= -golang.org/x/image v0.23.0/go.mod h1:wJJBTdLfCCf3tiHa1fNxpZmUI4mmoZvwMCPP0ddoNKY= +golang.org/x/image v0.26.0 h1:4XjIFEZWQmCZi6Wv8BoxsDhRU3RVnLX04dToTDAEPlY= +golang.org/x/image v0.26.0/go.mod h1:lcxbMFAovzpnJxzXS3nyL83K27tmqtKzIJpctK8YO5c= 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= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= @@ -242,18 +252,18 @@ golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= -golang.org/x/net v0.31.0 h1:68CPQngjLL0r2AlUKiSxtQFKvzRVbnzLwMUn5SzcLHo= -golang.org/x/net v0.31.0/go.mod h1:P4fl1q7dY2hnZFxEk4pPSkDHF+QqjitcnDjUQyMM+pM= +golang.org/x/net v0.39.0 h1:ZCu7HMWDxpXpaiKdhzIfaltL9Lp31x/3fCP11bc6/fY= +golang.org/x/net v0.39.0/go.mod h1:X7NRbYVEA+ewNkCNyJ513WmMdQ3BineSwVtN2zD/d+E= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.24.0 h1:KTBBxWqUa0ykRPLtV69rRto9TLXcqYkeswu48x/gvNE= -golang.org/x/oauth2 v0.24.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/oauth2 v0.29.0 h1:WdYw2tdTK1S8olAzWHdgeqfy+Mtm9XNhv/xJsY65d98= +golang.org/x/oauth2 v0.29.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.13.0 h1:AauUjRAJ9OSnvULf/ARrrVywoJDy0YS2AwQ98I37610= +golang.org/x/sync v0.13.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= 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= @@ -267,8 +277,8 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.28.0 h1:Fksou7UEQUWlKvIdsqzJmUmCX3cZuD2+P3XyyzwMhlA= -golang.org/x/sys v0.28.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.32.0 h1:s77OFDvIQeibCmezSnk/q6iAfkdiQaJi4VzroCFrN20= +golang.org/x/sys v0.32.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -280,10 +290,10 @@ golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -golang.org/x/time v0.8.0 h1:9i3RxcPv3PZnitoVGMPDKZSq1xW1gK1Xy3ArNOGZfEg= -golang.org/x/time v0.8.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/text v0.24.0 h1:dd5Bzh4yt5KYA8f9CJHCP4FB4D51c2c6JvN37xJJkJ0= +golang.org/x/text v0.24.0/go.mod h1:L8rBsPeo2pSS+xqN0d5u2ikmjtmoJbDBT1b7nHvFCdU= +golang.org/x/time v0.11.0 h1:/bpjEDfN9tkoN/ryeYHnv5hcMlc8ncjMcM4XBk5NWV0= +golang.org/x/time v0.11.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= 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= @@ -298,28 +308,26 @@ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJ golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.210.0 h1:HMNffZ57OoZCRYSbdWVRoqOa8V8NIHLL0CzdBPLztWk= -google.golang.org/api v0.210.0/go.mod h1:B9XDZGnx2NtyjzVkOVTGrFSAVZgPcbedzKg/gTLwqBs= +google.golang.org/api v0.231.0 h1:LbUD5FUl0C4qwia2bjXhCMH65yz1MLPzA/0OYEsYY7Q= +google.golang.org/api v0.231.0/go.mod h1:H52180fPI/QQlUc0F4xWfGZILdv09GCWKt2bcsn164A= 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-20241118233622-e639e219e697 h1:ToEetK57OidYuqD4Q5w+vfEnPvPpuTwedCNVohYJfNk= -google.golang.org/genproto v0.0.0-20241118233622-e639e219e697/go.mod h1:JJrvXBWRZaFMxBufik1a4RpFw4HhgVtBBWQeQgUj2cc= -google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f h1:M65LEviCfuZTfrfzwwEoxVtgvfkFkBUbFnRbxCXuXhU= -google.golang.org/genproto/googleapis/api v0.0.0-20241113202542-65e8d215514f/go.mod h1:Yo94eF2nj7igQt+TiJ49KxjIH8ndLYPZMIRSiRcEbg0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697 h1:LWZqQOEjDyONlF1H6afSWpAL/znlREo2tHfLoe+8LMA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20241118233622-e639e219e697/go.mod h1:5uTbfoYQed2U9p3KIj2/Zzm02PYhndfdmML0qC3q3FU= +google.golang.org/genproto v0.0.0-20250428153025-10db94c68c34 h1:oklGWmm0ZiCw4efmdYZo5MF9t6nRvGzM5+0klSjOmGM= +google.golang.org/genproto v0.0.0-20250428153025-10db94c68c34/go.mod h1:hiH/EqX5GBdTyIpkqMqDGUHDiBniln8b4FCw+NzPxQY= +google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34 h1:0PeQib/pH3nB/5pEmFeVQJotzGohV0dq4Vcp09H5yhE= +google.golang.org/genproto/googleapis/api v0.0.0-20250428153025-10db94c68c34/go.mod h1:0awUlEkap+Pb1UMeJwJQQAdJQrt3moU7J2moTy69irI= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34 h1:h6p3mQqrmT1XkHVTfzLdNz1u7IhINeZkz67/xTbOuWs= +google.golang.org/genproto/googleapis/rpc v0.0.0-20250428153025-10db94c68c34/go.mod h1:qQ0YXyHHx3XkvlzUtpXDkS29lDSafHMZBAZDc03LQ3A= 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.67.2 h1:Lq11HW1nr5m4OYV+ZVy2BjOK78/zqnTx24vyDBP1JcQ= -google.golang.org/grpc v1.67.2/go.mod h1:1gLDyUQU7CTLJI90u3nXZ9ekeghjeM7pTDZlqFNg2AA= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a h1:UIpYSuWdWHSzjwcAFRLjKcPXFZVVLXGEM23W+NWqipw= -google.golang.org/grpc/stats/opentelemetry v0.0.0-20240907200651-3ffb98b2c93a/go.mod h1:9i1T9n4ZinTUZGgzENMi8MDDgbGC5mqTS75JAv6xN3A= +google.golang.org/grpc v1.72.0 h1:S7UkcVa60b5AAQTaO6ZKamFp1zMZSU0fGDK2WZLbBnM= +google.golang.org/grpc v1.72.0/go.mod h1:wH5Aktxcg25y1I3w7H69nHfXdOG3UiadoBtjh3izSDM= 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= @@ -329,8 +337,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.35.2 h1:8Ar7bF+apOIoThw1EdZl0p1oWvMqTHmpA2fRTyZO8io= -google.golang.org/protobuf v1.35.2/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= 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= From 4702be4605bc46b5b85529118d7c226b0ac4d12c Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Fri, 2 May 2025 20:01:52 +0800 Subject: [PATCH 10/14] build: libvips 8.16.1 (#537) --- .github/workflows/test.yml | 2 +- Dockerfile | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index ede66a765..bb44cb6f3 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,7 +8,7 @@ jobs: runs-on: ubuntu-22.04 env: CGO_CFLAGS_ALLOW: -Xpreprocessor - VIPS_VERSION: 8.16.0 + VIPS_VERSION: 8.16.1 V: 6 steps: diff --git a/Dockerfile b/Dockerfile index ad5f775b9..5e16b3ac2 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ ARG GOLANG_VERSION=1.24.2 FROM golang:${GOLANG_VERSION}-bookworm as builder -ARG VIPS_VERSION=8.16.0 +ARG VIPS_VERSION=8.16.1 ARG TARGETARCH ENV PKG_CONFIG_PATH=/usr/local/lib/pkgconfig From c9481f7518edff586f78822fcb5ba128957e8f1d Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Fri, 2 May 2025 20:16:38 +0800 Subject: [PATCH 11/14] fix: memory leak fix when using multi pages (#538) * fix embed_multi_page_image_background * fix embed_multi_page_image --- vips/vips.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/vips/vips.c b/vips/vips.c index 2a923ace1..fcdde34b5 100644 --- a/vips/vips.c +++ b/vips/vips.c @@ -126,13 +126,14 @@ int embed_multi_page_image(VipsImage *in, VipsImage **out, int left, int top, in int n_pages = in->Ysize / page_height; VipsImage **page = (VipsImage **) vips_object_local_array(base, n_pages); + VipsImage **embedded_page = (VipsImage **) vips_object_local_array(base, n_pages); VipsImage **copy = (VipsImage **) vips_object_local_array(base, 1); // split image into cropped frames for (int i = 0; i < n_pages; i++) { if ( vips_extract_area(in, &page[i], 0, page_height * i, in_width, page_height, NULL) || - vips_embed(page[i], &page[i], left, top, width, height, "extend", extend, NULL) + vips_embed(page[i], &embedded_page[i], left, top, width, height, "extend", extend, NULL) ) { g_object_unref(base); return -1; @@ -141,7 +142,7 @@ int embed_multi_page_image(VipsImage *in, VipsImage **out, int left, int top, in // reassemble frames and set page height // copy before modifying metadata if( - vips_arrayjoin(page, ©[0], n_pages, "across", 1, NULL) || + vips_arrayjoin(embedded_page, ©[0], n_pages, "across", 1, NULL) || vips_copy(copy[0], out, NULL) ) { g_object_unref(base); @@ -170,13 +171,14 @@ int embed_multi_page_image_background(VipsImage *in, VipsImage **out, int left, int n_pages = in->Ysize / page_height; VipsImage **page = (VipsImage **) vips_object_local_array(base, n_pages); + VipsImage **embedded_page = (VipsImage **) vips_object_local_array(base, n_pages); VipsImage **copy = (VipsImage **) vips_object_local_array(base, 1); // split image into cropped frames for (int i = 0; i < n_pages; i++) { if ( vips_extract_area(in, &page[i], 0, page_height * i, in_width, page_height, NULL) || - vips_embed(page[i], &page[i], left, top, width, height, + vips_embed(page[i], &embedded_page[i], left, top, width, height, "extend", VIPS_EXTEND_BACKGROUND, "background", vipsBackground, NULL) ) { vips_area_unref(VIPS_AREA(vipsBackground)); @@ -187,7 +189,7 @@ int embed_multi_page_image_background(VipsImage *in, VipsImage **out, int left, // reassemble frames and set page height // copy before modifying metadata if( - vips_arrayjoin(page, ©[0], n_pages, "across", 1, NULL) || + vips_arrayjoin(embedded_page, ©[0], n_pages, "across", 1, NULL) || vips_copy(copy[0], out, NULL) ) { vips_area_unref(VIPS_AREA(vipsBackground)); From 2bf05c578f98aa10703b078339d2d252463388c1 Mon Sep 17 00:00:00 2001 From: Adrian Shum Date: Fri, 2 May 2025 20:22:20 +0800 Subject: [PATCH 12/14] v1.4.17 --- imagor.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/imagor.go b/imagor.go index 46a12de5a..a9b735916 100644 --- a/imagor.go +++ b/imagor.go @@ -23,7 +23,7 @@ import ( ) // Version imagor version -const Version = "1.4.16" +const Version = "1.4.17" // Loader image loader interface type Loader interface { From c7f0821df9c40cdbe4a31abefbfa07cf3e6573d3 Mon Sep 17 00:00:00 2001 From: Aslam Hadi H Date: Mon, 23 Dec 2024 10:10:19 +0700 Subject: [PATCH 13/14] release: v1.0.0 (#3) * feature: add heebo font in dockerfile * feature: enable base64 processing (#2) * rename github.com/cshum/imagor to github.com/kumparan/imagor Co-authored-by: Aslam Hadi Harsono --- blob.go | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) diff --git a/blob.go b/blob.go index b97afa9d6..7f6f0ab39 100644 --- a/blob.go +++ b/blob.go @@ -4,8 +4,6 @@ import ( "bytes" "encoding/json" "errors" - "github.com/kumparan/imagor/fanoutreader" - "github.com/kumparan/imagor/seekstream" "io" "net/http" "os" @@ -13,6 +11,9 @@ import ( "strings" "sync" "time" + + "github.com/kumparan/imagor/fanoutreader" + "github.com/kumparan/imagor/seekstream" ) // BlobType blob content type @@ -150,19 +151,23 @@ func NewEmptyBlob() *Blob { return &Blob{} } -var jpegHeader = []byte("\xFF\xD8\xFF") -var gifHeader = []byte("\x47\x49\x46") -var webpHeader = []byte("\x57\x45\x42\x50") -var pngHeader = []byte("\x89\x50\x4E\x47") -var bmpHeader = []byte("BM") -var pdfHeader = []byte("\x25\x50\x44\x46") +var ( + jpegHeader = []byte("\xFF\xD8\xFF") + gifHeader = []byte("\x47\x49\x46") + webpHeader = []byte("\x57\x45\x42\x50") + pngHeader = []byte("\x89\x50\x4E\x47") + bmpHeader = []byte("BM") + pdfHeader = []byte("\x25\x50\x44\x46") +) // https://github.com/strukturag/libheif/blob/master/libheif/heif.cc -var ftyp = []byte("ftyp") -var heic = []byte("heic") -var mif1 = []byte("mif1") -var msf1 = []byte("msf1") -var avif = []byte("avif") +var ( + ftyp = []byte("ftyp") + heic = []byte("heic") + mif1 = []byte("mif1") + msf1 = []byte("msf1") + avif = []byte("avif") +) // Jp2 matches a JPEG 2000 Image file (ISO 15444-1). var jp2 = []byte{0x6a, 0x70, 0x32, 0x20} @@ -173,8 +178,10 @@ var jpx = []byte{0x6a, 0x70, 0x78, 0x20} // Jpm matches a JPEG 2000 Image file (ISO 15444-6). var jpm = []byte{0x6a, 0x70, 0x6D, 0x20} -var tifII = []byte("\x49\x49\x2A\x00") -var tifMM = []byte("\x4D\x4D\x00\x2A") +var ( + tifII = []byte("\x49\x49\x2A\x00") + tifMM = []byte("\x4D\x4D\x00\x2A") +) var jsonPrefix = []byte(`{"`) var ( From 570c306c393cf0dbd2efb331b08e71767e3080d4 Mon Sep 17 00:00:00 2001 From: Aslam Hadi Harsono Date: Mon, 5 May 2025 14:31:09 +0700 Subject: [PATCH 14/14] feature-fix: revert code format --- blob.go | 35 ++++++++++++++--------------------- 1 file changed, 14 insertions(+), 21 deletions(-) diff --git a/blob.go b/blob.go index 7f6f0ab39..be519e080 100644 --- a/blob.go +++ b/blob.go @@ -3,7 +3,6 @@ package imagor import ( "bytes" "encoding/json" - "errors" "io" "net/http" "os" @@ -151,23 +150,19 @@ func NewEmptyBlob() *Blob { return &Blob{} } -var ( - jpegHeader = []byte("\xFF\xD8\xFF") - gifHeader = []byte("\x47\x49\x46") - webpHeader = []byte("\x57\x45\x42\x50") - pngHeader = []byte("\x89\x50\x4E\x47") - bmpHeader = []byte("BM") - pdfHeader = []byte("\x25\x50\x44\x46") -) +var jpegHeader = []byte("\xFF\xD8\xFF") +var gifHeader = []byte("\x47\x49\x46") +var webpHeader = []byte("\x57\x45\x42\x50") +var pngHeader = []byte("\x89\x50\x4E\x47") +var bmpHeader = []byte("BM") +var pdfHeader = []byte("\x25\x50\x44\x46") // https://github.com/strukturag/libheif/blob/master/libheif/heif.cc -var ( - ftyp = []byte("ftyp") - heic = []byte("heic") - mif1 = []byte("mif1") - msf1 = []byte("msf1") - avif = []byte("avif") -) +var ftyp = []byte("ftyp") +var heic = []byte("heic") +var mif1 = []byte("mif1") +var msf1 = []byte("msf1") +var avif = []byte("avif") // Jp2 matches a JPEG 2000 Image file (ISO 15444-1). var jp2 = []byte{0x6a, 0x70, 0x32, 0x20} @@ -178,10 +173,8 @@ var jpx = []byte{0x6a, 0x70, 0x78, 0x20} // Jpm matches a JPEG 2000 Image file (ISO 15444-6). var jpm = []byte{0x6a, 0x70, 0x6D, 0x20} -var ( - tifII = []byte("\x49\x49\x2A\x00") - tifMM = []byte("\x4D\x4D\x00\x2A") -) +var tifII = []byte("\x49\x49\x2A\x00") +var tifMM = []byte("\x4D\x4D\x00\x2A") var jsonPrefix = []byte(`{"`) var ( @@ -301,7 +294,7 @@ func (b *Blob) doInit() { b.blobType = BlobTypeEmpty } if err != nil && - !errors.Is(err, io.ErrUnexpectedEOF) && + err != io.ErrUnexpectedEOF && err != io.EOF { if b.err == nil { b.err = err