feat: improve URL validation and error handling in client initialization

Description

Closes #2126 (closed)

This MR implements URL validation for the GitLab Go client to catch configuration errors early with clear, actionable error messages.

Problem

Previously, invalid URLs would pass client initialization but fail later during API calls with confusing messages.

Before:

git, _ := gitlab.NewClient("token", gitlab.WithBaseURL("git.mydomain.com/api/v4"))
// Error later: "dial tcp: lookup git.mydomain.com: no such host"

After:

git, err := gitlab.NewClient("token", gitlab.WithBaseURL("git.mydomain.com/api/v4"))
// Error immediately: invalid base URL "git.mydomain.com/api/v4": base URL must include a scheme (http:// or https://)


//                  (hint: try "https://git.mydomain.com/api/v4" instead)

Changes

  • Add 8 sentinel error types for common validation failures
  • Implement URLValidationError with helpful hints
  • Add validateBaseURL() function with comprehensive checks
  • Update setBaseURL() to validate before parsing
  • Add 17 test cases covering all validation scenarios

Testing

  • All existing tests pass
  • 17 new test cases added
  • No breaking changes

Merge request reports

Loading