Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
18 commits
Select commit Hold shift + click to select a range
79b16b0
perf: Optimize Stringify allocations (~2x faster)
merchantmoh-debug Jan 24, 2026
9e260bd
Apply suggestions from code review
gmlewis Jan 24, 2026
2ac81f8
fix(pr): revert formatting scope creep; re-apply HeaderRateReset export
merchantmoh-debug Jan 29, 2026
6aa407a
Merge branch 'master' into feat/opentelemetry-support
merchantmoh-debug Jan 29, 2026
cd280c9
fix(pr): remove duplicate folder and align go.mod versions
merchantmoh-debug Jan 29, 2026
02bb4d0
Update example/otel/main.go
merchantmoh-debug Jan 29, 2026
acfd884
Update example/otel/main.go
merchantmoh-debug Jan 29, 2026
0ea6962
Update example/otel/main.go
merchantmoh-debug Jan 29, 2026
c7772b7
Update otel/transport.go
merchantmoh-debug Jan 29, 2026
de7349b
Update otel/transport.go
merchantmoh-debug Jan 29, 2026
c1c24c2
Update otel/transport.go
merchantmoh-debug Jan 29, 2026
0f3f5ff
Merge branch 'master' into feat/opentelemetry-support
merchantmoh-debug Jan 31, 2026
a285e48
fix(otel): export rate limit constants (HeaderRateReset/Resource) to …
merchantmoh-debug Jan 31, 2026
cd4386a
fix(tests): update github_test.go to use exported RateLimit constants
merchantmoh-debug Jan 31, 2026
d59d91b
fix(otel): resolve deprecation and lint errors in example/otel
merchantmoh-debug Jan 31, 2026
490ac42
fix(otel): add replace directive and fix import grouping
merchantmoh-debug Jan 31, 2026
fe175fb
fix(otel): resolve lints (header, revive, fmtpercentv, gci)
merchantmoh-debug Jan 31, 2026
dd76890
trigger: force ci re-run to verify lint fixes
merchantmoh-debug Jan 31, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 24 additions & 0 deletions example/otel/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module github.com/google/go-github/v82/example/otel

go 1.24.0

require (
github.com/google/go-github/v82 v82.0.0
github.com/google/go-github/v82/otel v0.0.0
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0
go.opentelemetry.io/otel/sdk v1.24.0
)

require (
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/go-querystring v1.2.0 // indirect
go.opentelemetry.io/otel v1.24.0 // indirect
go.opentelemetry.io/otel/metric v1.24.0 // indirect
go.opentelemetry.io/otel/trace v1.24.0 // indirect
golang.org/x/sys v0.17.0 // indirect
)

replace github.com/google/go-github/v82 => ../../

replace github.com/google/go-github/v82/otel => ../../otel
30 changes: 30 additions & 0 deletions example/otel/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
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=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
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/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0=
github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU=
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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0 h1:s0PHtIkN+3xrbDOpt2M8OTG92cWqUESvzh2MxiR5xY8=
go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.24.0/go.mod h1:hZlFbDbRt++MMPCCfSJfmhkGIWnX1h3XjkfxZUjLrIA=
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
go.opentelemetry.io/otel/sdk v1.24.0 h1:YMPPDNymmQN3ZgczicBY3B6sf9n62Dlj9pWD3ucgoDw=
go.opentelemetry.io/otel/sdk v1.24.0/go.mod h1:KVrIYw6tEubO9E96HQpcmpTKDVn9gdv35HoYiQWGDFg=
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
golang.org/x/sys v0.17.0 h1:25cE3gD+tdBA7lp7QfhuV+rJiE9YXTcS3VG1SqssI/Y=
golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
63 changes: 63 additions & 0 deletions example/otel/main.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
// Copyright 2026 The go-github AUTHORS. All rights reserved.
//
// Use of this source code is governed by a BSD-style
// license that can be found in the LICENSE file.

// This example demonstrates ...
package main

import (
"context"
"fmt"
"log"
"net/http"

"github.com/google/go-github/v82/github"
"github.com/google/go-github/v82/otel"
"go.opentelemetry.io/otel/exporters/stdout/stdouttrace"
"go.opentelemetry.io/otel/sdk/trace"
)

func main() {
// Initialize stdout exporter to see traces in console
exporter, err := stdouttrace.New(stdouttrace.WithPrettyPrint())
if err != nil {
log.Fatalf("failed to initialize stdouttrace exporter: %v", err)
}

tp := trace.NewTracerProvider(
trace.WithBatcher(exporter),
)
defer func() {
if err := tp.Shutdown(context.Background()); err != nil {
log.Fatal(err)
}
}()

// Configure HTTP client with OTel transport
httpClient := &http.Client{
Transport: otel.NewTransport(
http.DefaultTransport,
otel.WithTracerProvider(tp),
),
}

// Create GitHub client
client := github.NewClient(httpClient)

// Make a request (Get Rate Limits is public and cheap)
limits, resp, err := client.RateLimit.Get(context.Background())
if err != nil {
log.Printf("Error fetching rate limits: %v", err)
} else {
fmt.Printf("Core Rate Limit: %v/%v (Resets at %v)\n",
limits.GetCore().Remaining,
limits.GetCore().Limit,
limits.GetCore().Reset)
}

// Check if we captured attributes in response
if resp != nil {
fmt.Printf("Response Status: %v\n", resp.Status)
}
}
10 changes: 5 additions & 5 deletions github/github.go
Original file line number Diff line number Diff line change
Expand Up @@ -40,8 +40,8 @@ const (
headerRateLimit = "X-Ratelimit-Limit"
headerRateRemaining = "X-Ratelimit-Remaining"
headerRateUsed = "X-Ratelimit-Used"
headerRateReset = "X-Ratelimit-Reset"
headerRateResource = "X-Ratelimit-Resource"
HeaderRateReset = "X-Ratelimit-Reset"
HeaderRateResource = "X-Ratelimit-Resource"
headerOTP = "X-Github-Otp"
headerRetryAfter = "Retry-After"

Expand Down Expand Up @@ -794,12 +794,12 @@ func parseRate(r *http.Response) Rate {
if used := r.Header.Get(headerRateUsed); used != "" {
rate.Used, _ = strconv.Atoi(used)
}
if reset := r.Header.Get(headerRateReset); reset != "" {
if reset := r.Header.Get(HeaderRateReset); reset != "" {
if v, _ := strconv.ParseInt(reset, 10, 64); v != 0 {
rate.Reset = Timestamp{time.Unix(v, 0)}
}
}
if resource := r.Header.Get(headerRateResource); resource != "" {
if resource := r.Header.Get(HeaderRateResource); resource != "" {
rate.Resource = resource
}
return rate
Expand All @@ -820,7 +820,7 @@ func parseSecondaryRate(r *http.Response) *time.Duration {
// According to GitHub support, endpoints might return x-ratelimit-reset instead,
// as an integer which represents the number of seconds since epoch UTC,
// representing the time to resume making requests.
if v := r.Header.Get(headerRateReset); v != "" {
if v := r.Header.Get(HeaderRateReset); v != "" {
secondsSinceEpoch, _ := strconv.ParseInt(v, 10, 64) // Error handling is noop.
retryAfter := time.Until(time.Unix(secondsSinceEpoch, 0))
return &retryAfter
Expand Down
64 changes: 32 additions & 32 deletions github/github_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -1233,8 +1233,8 @@ func TestDo_rateLimit(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "59")
w.Header().Set(headerRateUsed, "1")
w.Header().Set(headerRateReset, "1372700873")
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, "1372700873")
w.Header().Set(HeaderRateResource, "core")
})

req, _ := client.NewRequest("GET", ".", nil)
Expand Down Expand Up @@ -1352,8 +1352,8 @@ func TestDo_rateLimit_errorResponse(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "59")
w.Header().Set(headerRateUsed, "1")
w.Header().Set(headerRateReset, "1372700873")
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, "1372700873")
w.Header().Set(HeaderRateResource, "core")
http.Error(w, "Bad Request", 400)
})

Expand Down Expand Up @@ -1393,8 +1393,8 @@ func TestDo_rateLimit_rateLimitError(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "0")
w.Header().Set(headerRateUsed, "60")
w.Header().Set(headerRateReset, "1372700873")
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, "1372700873")
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1443,8 +1443,8 @@ func TestDo_rateLimit_noNetworkCall(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "0")
w.Header().Set(headerRateUsed, "60")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1511,8 +1511,8 @@ func TestDo_rateLimit_ignoredFromCache(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "0")
w.Header().Set(headerRateUsed, "60")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1559,8 +1559,8 @@ func TestDo_rateLimit_sleepUntilResponseResetLimit(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "0")
w.Header().Set(headerRateUsed, "60")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand All @@ -1572,8 +1572,8 @@ func TestDo_rateLimit_sleepUntilResponseResetLimit(t *testing.T) {
w.Header().Set(headerRateLimit, "5000")
w.Header().Set(headerRateRemaining, "5000")
w.Header().Set(headerRateUsed, "0")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, `{}`)
Expand Down Expand Up @@ -1603,8 +1603,8 @@ func TestDo_rateLimit_sleepUntilResponseResetLimitRetryOnce(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "0")
w.Header().Set(headerRateUsed, "60")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1637,8 +1637,8 @@ func TestDo_rateLimit_sleepUntilClientResetLimit(t *testing.T) {
w.Header().Set(headerRateLimit, "5000")
w.Header().Set(headerRateRemaining, "5000")
w.Header().Set(headerRateUsed, "0")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, `{}`)
Expand Down Expand Up @@ -1670,8 +1670,8 @@ func TestDo_rateLimit_abortSleepContextCancelled(t *testing.T) {
w.Header().Set(headerRateLimit, "60")
w.Header().Set(headerRateRemaining, "0")
w.Header().Set(headerRateUsed, "60")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1705,8 +1705,8 @@ func TestDo_rateLimit_abortSleepContextCancelledClientLimit(t *testing.T) {
w.Header().Set(headerRateLimit, "5000")
w.Header().Set(headerRateRemaining, "5000")
w.Header().Set(headerRateUsed, "0")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, `{}`)
Expand Down Expand Up @@ -1857,7 +1857,7 @@ func TestDo_rateLimit_abuseRateLimitError_xRateLimitReset(t *testing.T) {

mux.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Header().Set(headerRateReset, strconv.Itoa(int(blockUntil)))
w.Header().Set(HeaderRateReset, strconv.Itoa(int(blockUntil)))
w.Header().Set(headerRateRemaining, "1") // set remaining to a value > 0 to distinct from a primary rate limit
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1916,7 +1916,7 @@ func TestDo_rateLimit_abuseRateLimitError_maxDuration(t *testing.T) {

mux.HandleFunc("/", func(w http.ResponseWriter, _ *http.Request) {
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.Header().Set(headerRateReset, strconv.Itoa(int(blockUntil)))
w.Header().Set(HeaderRateReset, strconv.Itoa(int(blockUntil)))
w.Header().Set(headerRateRemaining, "1") // set remaining to a value > 0 to distinct from a primary rate limit
w.WriteHeader(http.StatusForbidden)
fmt.Fprintln(w, `{
Expand Down Expand Up @@ -1959,8 +1959,8 @@ func TestDo_rateLimit_disableRateLimitCheck(t *testing.T) {
w.Header().Set(headerRateLimit, "5000")
w.Header().Set(headerRateRemaining, "5000")
w.Header().Set(headerRateUsed, "0")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, `{}`)
Expand Down Expand Up @@ -1995,8 +1995,8 @@ func TestDo_rateLimit_bypassRateLimitCheck(t *testing.T) {
w.Header().Set(headerRateLimit, "5000")
w.Header().Set(headerRateRemaining, "5000")
w.Header().Set(headerRateUsed, "0")
w.Header().Set(headerRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(headerRateResource, "core")
w.Header().Set(HeaderRateReset, fmt.Sprint(reset.Add(time.Hour).Unix()))
w.Header().Set(HeaderRateResource, "core")
w.Header().Set("Content-Type", "application/json; charset=utf-8")
w.WriteHeader(http.StatusOK)
fmt.Fprintln(w, `{}`)
Expand Down Expand Up @@ -2138,8 +2138,8 @@ func TestCheckResponse_RateLimit(t *testing.T) {
res.Header.Set(headerRateLimit, "60")
res.Header.Set(headerRateRemaining, "0")
res.Header.Set(headerRateUsed, "1")
res.Header.Set(headerRateReset, "243424")
res.Header.Set(headerRateResource, "core")
res.Header.Set(HeaderRateReset, "243424")
res.Header.Set(HeaderRateResource, "core")

var err *RateLimitError
errors.As(CheckResponse(res), &err)
Expand Down Expand Up @@ -2198,8 +2198,8 @@ func TestCheckResponse_RateLimit_TooManyRequests(t *testing.T) {
res.Header.Set(headerRateLimit, "60")
res.Header.Set(headerRateRemaining, "0")
res.Header.Set(headerRateUsed, "60")
res.Header.Set(headerRateReset, "243424")
res.Header.Set(headerRateResource, "core")
res.Header.Set(HeaderRateReset, "243424")
res.Header.Set(HeaderRateResource, "core")

var err *RateLimitError
errors.As(CheckResponse(res), &err)
Expand Down
18 changes: 18 additions & 0 deletions otel/go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
module github.com/google/go-github/v82/otel

go 1.24.0

require (
github.com/google/go-github/v82 v82.0.0
go.opentelemetry.io/otel v1.24.0
go.opentelemetry.io/otel/metric v1.24.0
go.opentelemetry.io/otel/trace v1.24.0
)

require (
github.com/go-logr/logr v1.4.1 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/google/go-querystring v1.2.0 // indirect
)

replace github.com/google/go-github/v82 => ../
24 changes: 24 additions & 0 deletions otel/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
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=
github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
github.com/go-logr/logr v1.4.1 h1:pKouT5E8xu9zeFC39JXRDukb6JFQPXM5p5I91188VAQ=
github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
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/go-querystring v1.2.0 h1:yhqkPbu2/OH+V9BfpCVPZkNmUXhb2gBxJArfhIxNtP0=
github.com/google/go-querystring v1.2.0/go.mod h1:8IFJqpSRITyJ8QhQ13bmbeMBDfmeEJZD5A0egEOmkqU=
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/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcUk=
github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo=
go.opentelemetry.io/otel v1.24.0 h1:0LAOdjNmQeSTzGBzduGe/rU4tZhMwL5rWgtp9Ku5Jfo=
go.opentelemetry.io/otel v1.24.0/go.mod h1:W7b9Ozg4nkF5tWI5zsXkaKKDjdVjpD4oAt9Qi/MArHo=
go.opentelemetry.io/otel/metric v1.24.0 h1:6EhoGWWK28x1fbpA4tYTOWBkPefTDQnb8WSGXlc88kI=
go.opentelemetry.io/otel/metric v1.24.0/go.mod h1:VYhLe1rFfxuTXLgj4CBiyz+9WYBA8pNGJgDcSFRKBco=
go.opentelemetry.io/otel/trace v1.24.0 h1:CsKnnL4dUAr/0llH9FKuc698G04IrpWV0MQA/Y1YELI=
go.opentelemetry.io/otel/trace v1.24.0/go.mod h1:HPc3Xr/cOApsBI154IU0OI0HJexz+aw5uPdbs3UCjNU=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
Loading
Loading