diff --git a/gitea/client.go b/gitea/client.go index b8c610b..52f86ff 100644 --- a/gitea/client.go +++ b/gitea/client.go @@ -9,6 +9,7 @@ import ( "bytes" "context" "encoding/json" + "errors" "fmt" "io" "io/ioutil" @@ -67,6 +68,9 @@ func NewClient(url string, options ...ClientOption) (*Client, error) { } } if err := client.checkServerVersionGreaterThanOrEqual(version1_11_0); err != nil { + if errors.As(err, &ErrUnknownVersion{}) { + return client, err + } return nil, err } diff --git a/gitea/version.go b/gitea/version.go index f112101..95e84bc 100644 --- a/gitea/version.go +++ b/gitea/version.go @@ -6,6 +6,7 @@ package gitea import ( "fmt" + "strings" "github.com/hashicorp/go-version" ) @@ -70,6 +71,16 @@ var ( version1_17_0 = version.Must(version.NewVersion("1.17.0")) ) +// ErrUnknownVersion is an unknown version from the API +type ErrUnknownVersion struct { + raw string +} + +// Error fulfills error +func (e ErrUnknownVersion) Error() string { + return fmt.Sprintf("unknown version: %s", e.raw) +} + // checkServerVersionGreaterThanOrEqual is the canonical way in the SDK to check for versions for API compatibility reasons func (c *Client) checkServerVersionGreaterThanOrEqual(v *version.Version) error { if c.ignoreVersion { @@ -97,6 +108,11 @@ func (c *Client) loadServerVersion() (err error) { return } if c.serverVersion, err = version.NewVersion(raw); err != nil { + if strings.TrimSpace(raw) != "" { + // Version was something, just not recognized + c.serverVersion = version1_11_0 + err = ErrUnknownVersion{raw: raw} + } return } })