From d0354a8ce668243be104227f794c990ef659a1a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20Lo=CC=88fstro=CC=88m?= Date: Fri, 23 Oct 2020 01:51:51 +0200 Subject: [PATCH 1/2] add-preview-support-ghe --- github.go | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/github.go b/github.go index 33372ccc..6d771d53 100644 --- a/github.go +++ b/github.go @@ -37,6 +37,33 @@ type GithubClient struct { Owner string } +type withPreviewHeader struct { + http.Header + rt http.RoundTripper + previewHeaders []string +} + +func WithPreviewHeader(rt http.RoundTripper) withPreviewHeader { + if rt == nil { + rt = http.DefaultTransport + } + + headers := make(http.Header) + previewHeaders := []string{"application/vnd.github.antiope-preview+json", "application/vnd.github.shadow-cat-preview"} + return withPreviewHeader{Header: headers, rt: rt, previewHeaders: previewHeaders} +} + +func (h withPreviewHeader) RoundTrip(req *http.Request) (*http.Response, error) { + for k, v := range h.Header { + req.Header[k] = v + } + + currentAccept := req.Header.Get("Accept") + // shadow-cat-preview: Draft pull requests + req.Header.Set("Accept", fmt.Sprintf("%s,%s", currentAccept, strings.Join(h.previewHeaders, ","))) + return h.rt.RoundTrip(req) +} + // NewGithubClient ... func NewGithubClient(s *Source) (*GithubClient, error) { owner, repository, err := parseRepository(s.Repository) @@ -47,6 +74,9 @@ func NewGithubClient(s *Source) (*GithubClient, error) { // Skip SSL verification for self-signed certificates // source: https://github.com/google/go-github/pull/598#issuecomment-333039238 var ctx context.Context + + // Support Enterprise Server + if s.SkipSSLVerification { insecureClient := &http.Client{Transport: &http.Transport{ TLSClientConfig: &tls.Config{InsecureSkipVerify: true}, @@ -67,6 +97,8 @@ func NewGithubClient(s *Source) (*GithubClient, error) { if err != nil { return nil, fmt.Errorf("failed to parse v3 endpoint: %s", err) } + rt := WithPreviewHeader(client.Transport) + client.Transport = rt v3, err = github.NewEnterpriseClient(endpoint.String(), endpoint.String(), client) if err != nil { return nil, err @@ -81,6 +113,8 @@ func NewGithubClient(s *Source) (*GithubClient, error) { if err != nil { return nil, fmt.Errorf("failed to parse v4 endpoint: %s", err) } + rt := WithPreviewHeader(client.Transport) + client.Transport = rt v4 = githubv4.NewEnterpriseClient(endpoint.String(), client) if err != nil { return nil, err From 1a695701085103a90ddf1aecfe3ceabec8a45523 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Rickard=20Lo=CC=88fstro=CC=88m?= Date: Fri, 23 Oct 2020 02:06:57 +0200 Subject: [PATCH 2/2] simplify draft example --- github.go | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/github.go b/github.go index 6d771d53..c05a1ebe 100644 --- a/github.go +++ b/github.go @@ -43,13 +43,12 @@ type withPreviewHeader struct { previewHeaders []string } -func WithPreviewHeader(rt http.RoundTripper) withPreviewHeader { +func WithPreviewHeader(rt http.RoundTripper, previewHeaders []string) withPreviewHeader { if rt == nil { rt = http.DefaultTransport } headers := make(http.Header) - previewHeaders := []string{"application/vnd.github.antiope-preview+json", "application/vnd.github.shadow-cat-preview"} return withPreviewHeader{Header: headers, rt: rt, previewHeaders: previewHeaders} } @@ -97,8 +96,6 @@ func NewGithubClient(s *Source) (*GithubClient, error) { if err != nil { return nil, fmt.Errorf("failed to parse v3 endpoint: %s", err) } - rt := WithPreviewHeader(client.Transport) - client.Transport = rt v3, err = github.NewEnterpriseClient(endpoint.String(), endpoint.String(), client) if err != nil { return nil, err @@ -113,7 +110,8 @@ func NewGithubClient(s *Source) (*GithubClient, error) { if err != nil { return nil, fmt.Errorf("failed to parse v4 endpoint: %s", err) } - rt := WithPreviewHeader(client.Transport) + previewV4Headers := []string{"application/vnd.github.antiope-preview+json", "application/vnd.github.shadow-cat-preview+json", "application/vnd.github.bane-preview+json"} + rt := WithPreviewHeader(client.Transport, previewV4Headers) client.Transport = rt v4 = githubv4.NewEnterpriseClient(endpoint.String(), client) if err != nil {