diff --git a/planetscale/client.go b/planetscale/client.go index 8251785..9ad1827 100644 --- a/planetscale/client.go +++ b/planetscale/client.go @@ -8,6 +8,7 @@ import ( "io" "net/http" "net/url" + "runtime/debug" "strconv" "github.com/hashicorp/go-cleanhttp" @@ -20,11 +21,6 @@ const ( jsonMediaType = "application/json" ) -const ( - libraryVersion = "v0.67.0" - userAgent = "planetscale-go/" + libraryVersion -) - // ErrorCode defines the code of an error. type ErrorCode string @@ -133,6 +129,21 @@ func WithPerPage(perPage int) ListOption { // ClientOption provides a variadic option for configuring the client type ClientOption func(c *Client) error +func defaultUserAgent() string { + libraryVersion := "unknown" + buildInfo, ok := debug.ReadBuildInfo() + if ok { + for _, dep := range buildInfo.Deps { + if dep.Path == "github.com/planetscale/planetscale-go" { + libraryVersion = dep.Version + break + } + } + } + + return "planetscale-go/" + libraryVersion +} + // WithUserAgent overrides the User-Agent header. func WithUserAgent(userAgent string) ClientOption { return func(c *Client) error { @@ -223,7 +234,7 @@ func NewClient(opts ...ClientOption) (*Client, error) { c := &Client{ client: cleanhttp.DefaultClient(), baseURL: baseURL, - UserAgent: userAgent, + UserAgent: defaultUserAgent(), headers: make(map[string]string, 0), } diff --git a/planetscale/client_test.go b/planetscale/client_test.go index f97cb85..cb11cc5 100644 --- a/planetscale/client_test.go +++ b/planetscale/client_test.go @@ -28,7 +28,7 @@ func TestDo(t *testing.T) { response: `{}`, method: http.MethodGet, wantHeaders: map[string]string{ - "User-Agent": "planetscale-go/v0.67.0", + "User-Agent": "planetscale-go/unknown", }, }, { @@ -39,7 +39,7 @@ func TestDo(t *testing.T) { clientOptions: []ClientOption{WithUserAgent("test-user-agent"), WithRequestHeaders(map[string]string{"Test-Header": "test-value"})}, wantHeaders: map[string]string{ "Test-Header": "test-value", - "User-Agent": "test-user-agent planetscale-go/v0.67.0", + "User-Agent": "test-user-agent planetscale-go/unknown", }, }, {