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
URLValidationErrorwith 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