gitprovider

package
v0.4.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Oct 15, 2026 License: Apache-2.0 Imports: 8 Imported by: 0

Documentation

Overview

Package gitprovider holds the small slice of REST-client plumbing that is genuinely identical across internal/githubapp, internal/gitlabapp, and internal/bitbucketapp: sending a built request and turning its response into either a decoded value or a uniform API error. Request construction (auth scheme, headers, pagination shape) stays in each provider's own package, since that is exactly where the three providers' real, non-coincidental differences live.

Index

Constants

View Source
const AllowPrivateEnv = "APP_GIT_ALLOW_PRIVATE_NETWORKS"

AllowPrivateEnv lets git provider clients reach internal addresses, for example GitHub Enterprise or Bitbucket Server on a private network.

View Source
const CommentPageSize = 100

CommentPageSize is the page size every provider's comment listing asks for.

View Source
const MaxCommentPages = 10

MaxCommentPages bounds how many pages a comment lookup walks, so a PR with a huge thread cannot turn one status update into unbounded requests.

View Source
const MaxErrorBodySnippet = 512

MaxErrorBodySnippet caps how much of a non-2xx response body an APIError retains, so a misbehaving upstream can't inflate a log line unboundedly.

Variables

This section is empty.

Functions

func Execute

func Execute(client *http.Client, req *http.Request, prefix, api, label string, out any) error

Execute sends req and, on a 2xx response, decodes its body into out (skipped when out is nil). prefix and api identify the caller for both wrapped errors and a returned *APIError's own message; label is the method/URL text those wrapped errors describe, since GitHub's own caller wraps a relative path while GitLab's and Bitbucket's wrap a full URL.

func IsNotFound

func IsNotFound(err error) bool

IsNotFound reports whether err is a provider 404, meaning the resource (typically a comment an operator deleted) no longer exists.

func IsRateLimited

func IsRateLimited(err error) (retryAfter string, ok bool)

IsRateLimited reports whether err is a provider API error caused by rate limiting, and the Retry-After value it carried, if any.

func NewGuardedClient

func NewGuardedClient() *http.Client

NewGuardedClient returns an SSRF-guarded HTTP client with the shared git provider timeout.

Types

type APIError

type APIError struct {
	Prefix     string
	API        string
	StatusCode int
	Body       string
	// RetryAfter is the response's Retry-After header, empty when absent.
	RetryAfter string
	// RateLimited is true for a 429, or a 403 the provider marks as rate
	// limited (an exhausted X-RateLimit-Remaining or a "rate limit" body).
	RateLimited bool
}

APIError is returned for any non-2xx response from a git provider's REST API. Prefix and API identify the caller (e.g. "gitlabapp", "gitlab") so Error() reproduces that client's own message shape.

func (*APIError) Error

func (e *APIError) Error() string

type Comment

type Comment struct {
	ID   int64
	Body string
}

Comment is one pull request comment as the preview upsert sees it.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL