Repository: openshift-pipelines/pipelines-as-code
Pull request #140 (2021-06-17 16:16:35)

Add E2E Tests
Add E2E Tests

The tests assume there is a cluster with pipeline as code setup. There
is a test repo available with a URL and TOKEN set.

It will be flexible enough to test multiple scenarios and finally have
e2e tests here.

codecov-commenter: # [Codecov](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140?src=pr&el=h1&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) Report
> Merging [#140](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140?src=pr&el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) (a0716ab) into [main](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/commit/4baba57ee497879835abeb5c623c271f1ca91b80?el=desc&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None) (4baba57) will **not change** coverage.
> The diff coverage is `n/a`.

[![Impacted file tree graph](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140/graphs/tree.svg?width=650&height=150&src=pr&token=XOBPWX11IU&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None)](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140?src=pr&el=tree&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None)

```diff
@@           Coverage Diff           @@
##             main     #140   +/-   ##
=======================================
  Coverage   74.94%   74.94%           
=======================================
  Files          13       13           
  Lines         834      834           
=======================================
  Hits          625      625           
  Misses        141      141           
  Partials       68       68           
```



------

[Continue to review full report at Codecov](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140?src=pr&el=continue&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).
> **Legend** - [Click here to learn more](https://docs.codecov.io/docs/codecov-delta?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None)
> `Δ = absolute <relative> (impact)`, `ø = not affected`, `? = missing data`
> Powered by [Codecov](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140?src=pr&el=footer&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None). Last update [4baba57...a0716ab](https://codecov.io/gh/openshift-pipelines/pipelines-as-code/pull/140?src=pr&el=lastupdated&utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None). Read the [comment docs](https://docs.codecov.io/docs/pull-request-comments?utm_medium=referral&utm_source=github&utm_content=comment&utm_campaign=pr+comments&utm_term=None).


Patch:
diff --git a/.ko.yaml b/.ko.yaml
index 83ce65c7..7c813c60 100644
--- a/.ko.yaml
+++ b/.ko.yaml
@@ -1,1 +1,1 @@
-defaultBaseImage: registry.access.redhat.com/ubi8/ubi-minimal:8.4
+defaultBaseImage: registry.access.redhat.com/ubi8/ubi-minimal:8.3
diff --git a/.tekton/pull-request.yaml b/.tekton/pull-request.yaml
index ac20953d..160cfb8a 100644
--- a/.tekton/pull-request.yaml
+++ b/.tekton/pull-request.yaml
@@ -30,6 +30,32 @@ spec:
           - name: output
             workspace: source
 
+      - name: getcache
+        runAfter:
+          - fetchit
+        taskSpec:
+          steps:
+            - image: public.ecr.aws/bitnami/golang:latest
+              name: get-cache
+              script: |
+                #!/usr/bin/env bash
+                set -ex
+                mkdir -p go-build-cache;cd go-build-cache
+
+                curl -fsI http://uploader:8080/golang-cache.tar || {
+                    echo "no cache found"
+                    exit 0
+                }
+
+                echo "Getting cache"
+                curl http://uploader:8080/golang-cache.tar|tar -x -f-
+              workingDir: $(workspaces.source.path)
+          workspaces:
+            - name: source
+        workspaces:
+          - name: source
+            workspace: source
+
       - name: yamllint
         runAfter:
           - fetchit
@@ -48,7 +74,7 @@ spec:
 
       - name: unitlint
         runAfter:
-          - fetchit
+          - getcache
         taskSpec:
           workspaces:
             - name: source
@@ -159,4 +185,4 @@ spec:
             - ReadWriteOnce
           resources:
             requests:
-              storage: 2Gi
+              storage: 1Gi
diff --git a/Dockerfile b/Dockerfile
index 4788e996..68879daf 100644
--- a/Dockerfile
+++ b/Dockerfile
@@ -4,7 +4,7 @@ COPY . /src
 WORKDIR /src
 RUN go build -mod=vendor -v -o /tmp/pipelines-as-code ./cmd/pipelines-as-code
 
-FROM registry.access.redhat.com/ubi8/ubi-minimal:8.4
+FROM registry.access.redhat.com/ubi8/ubi-minimal:8.3
 
 LABEL com.redhat.component=pipelines-as-code \ 
     name=openshift-pipelines/pipelines-as-code \ 
diff --git a/Makefile b/Makefile
index 76d1f2b1..7a78d50b 100644
--- a/Makefile
+++ b/Makefile
@@ -35,6 +35,10 @@ check: lint test
 .PHONY: test
 test: test-unit ## run all tests
 
+.PHONY: test-e2e
+test-e2e:  ## run e2e tests
+	@go test -failfast -count=1 -tags=e2e $(GO_TEST_FLAGS) ./test
+
 .PHONY: lint
 lint: lint-go lint-yaml ## run all linters
 
diff --git a/go.mod b/go.mod
index 2f254dcb..f8a1749d 100644
--- a/go.mod
+++ b/go.mod
@@ -4,8 +4,8 @@ go 1.15
 
 require (
 	github.com/gobwas/glob v0.2.3
-	github.com/google/go-cmp v0.5.6
-	github.com/google/go-github/v35 v35.3.0
+	github.com/google/go-cmp v0.5.5
+	github.com/google/go-github/v34 v34.0.0
 	github.com/hako/durafmt v0.0.0-20210601083242-f49dacec7612
 	github.com/jonboulle/clockwork v0.1.1-0.20190114141812-62fb9bc030d1
 	github.com/pkg/errors v0.9.1
diff --git a/go.sum b/go.sum
index 05a0c799..496cd9c3 100644
--- a/go.sum
+++ b/go.sum
@@ -352,15 +352,14 @@ github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/
 github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
+github.com/google/go-cmp v0.5.5 h1:Khx7svrCpmxxtHBq5j2mp/xVjsi8hQMfNLvJFAlrGgU=
 github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
-github.com/google/go-cmp v0.5.6 h1:BKbKCqvP6I+rmFHt06ZmyQtvB8xAkWdhFyr0ZUNZcxQ=
-github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE=
 github.com/google/go-containerregistry v0.4.1-0.20210128200529-19c2b639fab1 h1:o2ykCuuhHeUwtzNg89pH2hi+821aqjLWkaREVR3ziTQ=
 github.com/google/go-containerregistry v0.4.1-0.20210128200529-19c2b639fab1/go.mod h1:GU9FUA/X9rd2cV3ZoUNaWihp27tki6/38EsVzL2Dyzc=
 github.com/google/go-containerregistry/pkg/authn/k8schain v0.0.0-20210129212729-5c4818de4025/go.mod h1:n9wRxRfKkHy6ZFyj0jJQHw11P+mGLnED4sqegwrXxDk=
 github.com/google/go-github/v27 v27.0.6/go.mod h1:/0Gr8pJ55COkmv+S/yPKCczSkUPIM/LnFyubufRNIS0=
-github.com/google/go-github/v35 v35.3.0 h1:fU+WBzuukn0VssbayTT+Zo3/ESKX9JYWjbZTLOTEyho=
-github.com/google/go-github/v35 v35.3.0/go.mod h1:yWB7uCcVWaUbUP74Aq3whuMySRMatyRmq5U9FTNlbio=
+github.com/google/go-github/v34 v34.0.0 h1:/siYFImY8KwGc5QD1gaPf+f8QX6tLwxNIco2RkYxoFA=
+github.com/google/go-github/v34 v34.0.0/go.mod h1:w/2qlrXUfty+lbyO6tatnzIw97v1CM+/jZcwXMDiPQQ=
 github.com/google/go-licenses v0.0.0-20200602185517-f29a4c695c3d/go.mod h1:g1VOUGKZYIqe8lDq2mL7plhAWXqrEaGUs7eIjthN1sk=
 github.com/google/go-querystring v1.0.0 h1:Xkwi/a1rcvNg1PPYe5vI8GbeBY/jrVuDX5ASuANWTrk=
 github.com/google/go-querystring v1.0.0/go.mod h1:odCYkC5MyYFN7vkCjXpyrEuKhc/BUO6wN/zVPAxq5ck=
diff --git a/pkg/kubeinteraction/wait.go b/pkg/kubeinteraction/wait.go
index 8b95d167..5bec3449 100644
--- a/pkg/kubeinteraction/wait.go
+++ b/pkg/kubeinteraction/wait.go
@@ -83,7 +83,7 @@ func PipelineRunSucceed(name string) ConditionAccessorFn {
 	return Succeed(name)
 }
 
-func pollImmediateWithContext(ctx context.Context, fn func() (bool, error)) error {
+func PollImmediateWithContext(ctx context.Context, fn func() (bool, error)) error {
 	return wait.PollImmediate(interval, timeout, func() (bool, error) {
 		select {
 		case <-ctx.Done():
@@ -101,7 +101,7 @@ func pollImmediateWithContext(ctx context.Context, fn func() (bool, error)) erro
 func waitForPipelineRunState(ctx context.Context, tektonbeta1 tektonv1beta1client.TektonV1beta1Interface, pr *v1beta1.PipelineRun, polltimeout time.Duration, inState ConditionAccessorFn) error {
 	ctx, cancel := context.WithTimeout(ctx, polltimeout)
 	defer cancel()
-	return pollImmediateWithContext(ctx, func() (bool, error) {
+	return PollImmediateWithContext(ctx, func() (bool, error) {
 		r, err := tektonbeta1.PipelineRuns(pr.Namespace).Get(ctx, pr.Name, metav1.GetOptions{})
 		if err != nil {
 			return true, err
diff --git a/pkg/pipelineascode/acl.go b/pkg/pipelineascode/acl.go
index 2dcfce81..a328b6d3 100644
--- a/pkg/pipelineascode/acl.go
+++ b/pkg/pipelineascode/acl.go
@@ -4,7 +4,7 @@ import (
 	"context"
 	"strings"
 
-	"github.com/google/go-github/v35/github"
+	"github.com/google/go-github/v34/github"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/webvcs"
 	"sigs.k8s.io/yaml"
diff --git a/pkg/webvcs/github.go b/pkg/webvcs/github.go
index bb50b3b9..fbd331bc 100644
--- a/pkg/webvcs/github.go
+++ b/pkg/webvcs/github.go
@@ -13,7 +13,7 @@ import (
 	"strings"
 	"time"
 
-	"github.com/google/go-github/v35/github"
+	"github.com/google/go-github/v34/github"
 	"go.uber.org/zap"
 	"golang.org/x/oauth2"
 )
diff --git a/vendor/github.com/google/go-cmp/cmp/path.go b/vendor/github.com/google/go-cmp/cmp/path.go
index f01eff31..3d45c1a4 100644
--- a/vendor/github.com/google/go-cmp/cmp/path.go
+++ b/vendor/github.com/google/go-cmp/cmp/path.go
@@ -315,7 +315,7 @@ func (tf Transform) Option() Option { return tf.trans }
 // pops the address from the stack. Thus, when traversing into a pointer from
 // reflect.Ptr, reflect.Slice element, or reflect.Map, we can detect cycles
 // by checking whether the pointer has already been visited. The cycle detection
-// uses a separate stack for the x and y values.
+// uses a seperate stack for the x and y values.
 //
 // If a cycle is detected we need to determine whether the two pointers
 // should be considered equal. The definition of equality chosen by Equal
diff --git a/vendor/github.com/google/go-cmp/cmp/report_slices.go b/vendor/github.com/google/go-cmp/cmp/report_slices.go
index 2ad3bc85..168f92f3 100644
--- a/vendor/github.com/google/go-cmp/cmp/report_slices.go
+++ b/vendor/github.com/google/go-cmp/cmp/report_slices.go
@@ -7,7 +7,6 @@ package cmp
 import (
 	"bytes"
 	"fmt"
-	"math"
 	"reflect"
 	"strconv"
 	"strings"
@@ -97,16 +96,15 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 	}
 
 	// Auto-detect the type of the data.
+	var isLinedText, isText, isBinary bool
 	var sx, sy string
-	var ssx, ssy []string
-	var isString, isMostlyText, isPureLinedText, isBinary bool
 	switch {
 	case t.Kind() == reflect.String:
 		sx, sy = vx.String(), vy.String()
-		isString = true
+		isText = true // Initial estimate, verify later
 	case t.Kind() == reflect.Slice && t.Elem() == reflect.TypeOf(byte(0)):
 		sx, sy = string(vx.Bytes()), string(vy.Bytes())
-		isString = true
+		isBinary = true // Initial estimate, verify later
 	case t.Kind() == reflect.Array:
 		// Arrays need to be addressable for slice operations to work.
 		vx2, vy2 := reflect.New(t).Elem(), reflect.New(t).Elem()
@@ -114,12 +112,13 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 		vy2.Set(vy)
 		vx, vy = vx2, vy2
 	}
-	if isString {
-		var numTotalRunes, numValidRunes, numLines, lastLineIdx, maxLineLen int
+	if isText || isBinary {
+		var numLines, lastLineIdx, maxLineLen int
+		isBinary = !utf8.ValidString(sx) || !utf8.ValidString(sy)
 		for i, r := range sx + sy {
-			numTotalRunes++
-			if (unicode.IsPrint(r) || unicode.IsSpace(r)) && r != utf8.RuneError {
-				numValidRunes++
+			if !(unicode.IsPrint(r) || unicode.IsSpace(r)) || r == utf8.RuneError {
+				isBinary = true
+				break
 			}
 			if r == '\n' {
 				if maxLineLen < i-lastLineIdx {
@@ -129,26 +128,8 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 				numLines++
 			}
 		}
-		isPureText := numValidRunes == numTotalRunes
-		isMostlyText = float64(numValidRunes) > math.Floor(0.90*float64(numTotalRunes))
-		isPureLinedText = isPureText && numLines >= 4 && maxLineLen <= 1024
-		isBinary = !isMostlyText
-
-		// Avoid diffing by lines if it produces a significantly more complex
-		// edit script than diffing by bytes.
-		if isPureLinedText {
-			ssx = strings.Split(sx, "\n")
-			ssy = strings.Split(sy, "\n")
-			esLines := diff.Difference(len(ssx), len(ssy), func(ix, iy int) diff.Result {
-				return diff.BoolResult(ssx[ix] == ssy[iy])
-			})
-			esBytes := diff.Difference(len(sx), len(sy), func(ix, iy int) diff.Result {
-				return diff.BoolResult(sx[ix] == sy[iy])
-			})
-			efficiencyLines := float64(esLines.Dist()) / float64(len(esLines))
-			efficiencyBytes := float64(esBytes.Dist()) / float64(len(esBytes))
-			isPureLinedText = efficiencyLines < 4*efficiencyBytes
-		}
+		isText = !isBinary
+		isLinedText = isText && numLines >= 4 && maxLineLen <= 1024
 	}
 
 	// Format the string into printable records.
@@ -157,7 +138,9 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 	switch {
 	// If the text appears to be multi-lined text,
 	// then perform differencing across individual lines.
-	case isPureLinedText:
+	case isLinedText:
+		ssx := strings.Split(sx, "\n")
+		ssy := strings.Split(sy, "\n")
 		list = opts.formatDiffSlice(
 			reflect.ValueOf(ssx), reflect.ValueOf(ssy), 1, "line",
 			func(v reflect.Value, d diffMode) textRecord {
@@ -246,7 +229,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 	// If the text appears to be single-lined text,
 	// then perform differencing in approximately fixed-sized chunks.
 	// The output is printed as quoted strings.
-	case isMostlyText:
+	case isText:
 		list = opts.formatDiffSlice(
 			reflect.ValueOf(sx), reflect.ValueOf(sy), 64, "byte",
 			func(v reflect.Value, d diffMode) textRecord {
@@ -254,6 +237,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 				return textRecord{Diff: d, Value: textLine(s)}
 			},
 		)
+		delim = ""
 
 	// If the text appears to be binary data,
 	// then perform differencing in approximately fixed-sized chunks.
@@ -315,7 +299,7 @@ func (opts formatOptions) FormatDiffSlice(v *valueNode) textNode {
 
 	// Wrap the output with appropriate type information.
 	var out textNode = &textWrap{Prefix: "{", Value: list, Suffix: "}"}
-	if !isMostlyText {
+	if !isText {
 		// The "{...}" byte-sequence literal is not valid Go syntax for strings.
 		// Emit the type for extra clarity (e.g. "string{...}").
 		if t.Kind() == reflect.String {
@@ -354,11 +338,8 @@ func (opts formatOptions) formatDiffSlice(
 	vx, vy reflect.Value, chunkSize int, name string,
 	makeRec func(reflect.Value, diffMode) textRecord,
 ) (list textList) {
-	eq := func(ix, iy int) bool {
-		return vx.Index(ix).Interface() == vy.Index(iy).Interface()
-	}
-	es := diff.Difference(vx.Len(), vy.Len(), func(ix, iy int) diff.Result {
-		return diff.BoolResult(eq(ix, iy))
+	es := diff.Difference(vx.Len(), vy.Len(), func(ix int, iy int) diff.Result {
+		return diff.BoolResult(vx.Index(ix).Interface() == vy.Index(iy).Interface())
 	})
 
 	appendChunks := func(v reflect.Value, d diffMode) int {
@@ -383,7 +364,6 @@ func (opts formatOptions) formatDiffSlice(
 
 	groups := coalesceAdjacentEdits(name, es)
 	groups = coalesceInterveningIdentical(groups, chunkSize/4)
-	groups = cleanupSurroundingIdentical(groups, eq)
 	maxGroup := diffStats{Name: name}
 	for i, ds := range groups {
 		if maxLen >= 0 && numDiffs >= maxLen {
@@ -436,36 +416,25 @@ func (opts formatOptions) formatDiffSlice(
 
 // coalesceAdjacentEdits coalesces the list of edits into groups of adjacent
 // equal or unequal counts.
-//
-// Example:
-//
-//	Input:  "..XXY...Y"
-//	Output: [
-//		{NumIdentical: 2},
-//		{NumRemoved: 2, NumInserted 1},
-//		{NumIdentical: 3},
-//		{NumInserted: 1},
-//	]
-//
 func coalesceAdjacentEdits(name string, es diff.EditScript) (groups []diffStats) {
-	var prevMode byte
-	lastStats := func(mode byte) *diffStats {
-		if prevMode != mode {
+	var prevCase int // Arbitrary index into which case last occurred
+	lastStats := func(i int) *diffStats {
+		if prevCase != i {
 			groups = append(groups, diffStats{Name: name})
-			prevMode = mode
+			prevCase = i
 		}
 		return &groups[len(groups)-1]
 	}
 	for _, e := range es {
 		switch e {
 		case diff.Identity:
-			lastStats('=').NumIdentical++
+			lastStats(1).NumIdentical++
 		case diff.UniqueX:
-			lastStats('!').NumRemoved++
+			lastStats(2).NumRemoved++
 		case diff.UniqueY:
-			lastStats('!').NumInserted++
+			lastStats(2).NumInserted++
 		case diff.Modified:
-			lastStats('!').NumModified++
+			lastStats(2).NumModified++
 		}
 	}
 	return groups
@@ -475,35 +444,6 @@ func coalesceAdjacentEdits(name string, es diff.EditScript) (groups []diffStats)
 // equal groups into adjacent unequal groups that currently result in a
 // dual inserted/removed printout. This acts as a high-pass filter to smooth
 // out high-frequency changes within the windowSize.
-//
-// Example:
-//
-//	WindowSize: 16,
-//	Input: [
-//		{NumIdentical: 61},              // group 0
-//		{NumRemoved: 3, NumInserted: 1}, // group 1
-//		{NumIdentical: 6},               // ├── coalesce
-//		{NumInserted: 2},                // ├── coalesce
-//		{NumIdentical: 1},               // ├── coalesce
-//		{NumRemoved: 9},                 // └── coalesce
-//		{NumIdentical: 64},              // group 2
-//		{NumRemoved: 3, NumInserted: 1}, // group 3
-//		{NumIdentical: 6},               // ├── coalesce
-//		{NumInserted: 2},                // ├── coalesce
-//		{NumIdentical: 1},               // ├── coalesce
-//		{NumRemoved: 7},                 // ├── coalesce
-//		{NumIdentical: 1},               // ├── coalesce
-//		{NumRemoved: 2},                 // └── coalesce
-//		{NumIdentical: 63},              // group 4
-//	]
-//	Output: [
-//		{NumIdentical: 61},
-//		{NumIdentical: 7, NumRemoved: 12, NumInserted: 3},
-//		{NumIdentical: 64},
-//		{NumIdentical: 8, NumRemoved: 12, NumInserted: 3},
-//		{NumIdentical: 63},
-//	]
-//
 func coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStats {
 	groups, groupsOrig := groups[:0], groups
 	for i, ds := range groupsOrig {
@@ -523,91 +463,3 @@ func coalesceInterveningIdentical(groups []diffStats, windowSize int) []diffStat
 	}
 	return groups
 }
-
-// cleanupSurroundingIdentical scans through all unequal groups, and
-// moves any leading sequence of equal elements to the preceding equal group and
-// moves and trailing sequence of equal elements to the succeeding equal group.
-//
-// This is necessary since coalesceInterveningIdentical may coalesce edit groups
-// together such that leading/trailing spans of equal elements becomes possible.
-// Note that this can occur even with an optimal diffing algorithm.
-//
-// Example:
-//
-//	Input: [
-//		{NumIdentical: 61},
-//		{NumIdentical: 1 , NumRemoved: 11, NumInserted: 2}, // assume 3 leading identical elements
-//		{NumIdentical: 67},
-//		{NumIdentical: 7, NumRemoved: 12, NumInserted: 3},  // assume 10 trailing identical elements
-//		{NumIdentical: 54},
-//	]
-//	Output: [
-//		{NumIdentical: 64}, // incremented by 3
-//		{NumRemoved: 9},
-//		{NumIdentical: 67},
-//		{NumRemoved: 9},
-//		{NumIdentical: 64}, // incremented by 10
-//	]
-//
-func cleanupSurroundingIdentical(groups []diffStats, eq func(i, j int) bool) []diffStats {
-	var ix, iy int // indexes into sequence x and y
-	for i, ds := range groups {
-		// Handle equal group.
-		if ds.NumDiff() == 0 {
-			ix += ds.NumIdentical
-			iy += ds.NumIdentical
-			continue
-		}
-
-		// Handle unequal group.
-		nx := ds.NumIdentical + ds.NumRemoved + ds.NumModified
-		ny := ds.NumIdentical + ds.NumInserted + ds.NumModified
-		var numLeadingIdentical, numTrailingIdentical int
-		for i := 0; i < nx && i < ny && eq(ix+i, iy+i); i++ {
-			numLeadingIdentical++
-		}
-		for i := 0; i < nx && i < ny && eq(ix+nx-1-i, iy+ny-1-i); i++ {
-			numTrailingIdentical++
-		}
-		if numIdentical := numLeadingIdentical + numTrailingIdentical; numIdentical > 0 {
-			if numLeadingIdentical > 0 {
-				// Remove leading identical span from this group and
-				// insert it into the preceding group.
-				if i-1 >= 0 {
-					groups[i-1].NumIdentical += numLeadingIdentical
-				} else {
-					// No preceding group exists, so prepend a new group,
-					// but do so after we finish iterating over all groups.
-					defer func() {
-						groups = append([]diffStats{{Name: groups[0].Name, NumIdentical: numLeadingIdentical}}, groups...)
-					}()
-				}
-				// Increment indexes since the preceding group would have handled this.
-				ix += numLeadingIdentical
-				iy += numLeadingIdentical
-			}
-			if numTrailingIdentical > 0 {
-				// Remove trailing identical span from this group and
-				// insert it into the succeeding group.
-				if i+1 < len(groups) {
-					groups[i+1].NumIdentical += numTrailingIdentical
-				} else {
-					// No succeeding group exists, so append a new group,
-					// but do so after we finish iterating over all groups.
-					defer func() {
-						groups = append(groups, diffStats{Name: groups[len(groups)-1].Name, NumIdentical: numTrailingIdentical})
-					}()
-				}
-				// Do not increment indexes since the succeeding group will handle this.
-			}
-
-			// Update this group since some identical elements were removed.
-			nx -= numIdentical
-			ny -= numIdentical
-			groups[i] = diffStats{Name: ds.Name, NumRemoved: nx, NumInserted: ny}
-		}
-		ix += nx
-		iy += ny
-	}
-	return groups
-}
diff --git a/vendor/github.com/google/go-github/v35/AUTHORS b/vendor/github.com/google/go-github/v34/AUTHORS
similarity index 100%
rename from vendor/github.com/google/go-github/v35/AUTHORS
rename to vendor/github.com/google/go-github/v34/AUTHORS
diff --git a/vendor/github.com/google/go-github/v35/LICENSE b/vendor/github.com/google/go-github/v34/LICENSE
similarity index 100%
rename from vendor/github.com/google/go-github/v35/LICENSE
rename to vendor/github.com/google/go-github/v34/LICENSE
diff --git a/vendor/github.com/google/go-github/v35/github/actions.go b/vendor/github.com/google/go-github/v34/github/actions.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/actions.go
rename to vendor/github.com/google/go-github/v34/github/actions.go
diff --git a/vendor/github.com/google/go-github/v35/github/actions_artifacts.go b/vendor/github.com/google/go-github/v34/github/actions_artifacts.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/actions_artifacts.go
rename to vendor/github.com/google/go-github/v34/github/actions_artifacts.go
diff --git a/vendor/github.com/google/go-github/v35/github/actions_runner_groups.go b/vendor/github.com/google/go-github/v34/github/actions_runner_groups.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/actions_runner_groups.go
rename to vendor/github.com/google/go-github/v34/github/actions_runner_groups.go
diff --git a/vendor/github.com/google/go-github/v35/github/actions_runners.go b/vendor/github.com/google/go-github/v34/github/actions_runners.go
similarity index 96%
rename from vendor/github.com/google/go-github/v35/github/actions_runners.go
rename to vendor/github.com/google/go-github/v34/github/actions_runners.go
index 5bdebb31..66d9c309 100644
--- a/vendor/github.com/google/go-github/v35/github/actions_runners.go
+++ b/vendor/github.com/google/go-github/v34/github/actions_runners.go
@@ -12,12 +12,10 @@ import (
 
 // RunnerApplicationDownload represents a binary for the self-hosted runner application that can be downloaded.
 type RunnerApplicationDownload struct {
-	OS                *string `json:"os,omitempty"`
-	Architecture      *string `json:"architecture,omitempty"`
-	DownloadURL       *string `json:"download_url,omitempty"`
-	Filename          *string `json:"filename,omitempty"`
-	TempDownloadToken *string `json:"temp_download_token,omitempty"`
-	SHA256Checksum    *string `json:"sha256_checksum,omitempty"`
+	OS           *string `json:"os,omitempty"`
+	Architecture *string `json:"architecture,omitempty"`
+	DownloadURL  *string `json:"download_url,omitempty"`
+	Filename     *string `json:"filename,omitempty"`
 }
 
 // ActionsEnabledOnOrgRepos represents all the repositories in an organization for which Actions is enabled.
diff --git a/vendor/github.com/google/go-github/v35/github/actions_secrets.go b/vendor/github.com/google/go-github/v34/github/actions_secrets.go
similarity index 73%
rename from vendor/github.com/google/go-github/v35/github/actions_secrets.go
rename to vendor/github.com/google/go-github/v34/github/actions_secrets.go
index 4763d3a1..1dc16e94 100644
--- a/vendor/github.com/google/go-github/v35/github/actions_secrets.go
+++ b/vendor/github.com/google/go-github/v34/github/actions_secrets.go
@@ -7,9 +7,7 @@ package github
 
 import (
 	"context"
-	"encoding/json"
 	"fmt"
-	"strconv"
 )
 
 // PublicKey represents the public key that should be used to encrypt secrets.
@@ -18,35 +16,6 @@ type PublicKey struct {
 	Key   *string `json:"key"`
 }
 
-// UnmarshalJSON implements the json.Unmarshaler interface.
-// This ensures GitHub Enterprise versions which return a numeric key id
-// do not error out when unmarshaling.
-func (p *PublicKey) UnmarshalJSON(data []byte) error {
-	var pk struct {
-		KeyID interface{} `json:"key_id,string"`
-		Key   *string     `json:"key"`
-	}
-
-	if err := json.Unmarshal(data, &pk); err != nil {
-		return err
-	}
-
-	p.Key = pk.Key
-
-	switch v := pk.KeyID.(type) {
-	case nil:
-		return nil
-	case string:
-		p.KeyID = &v
-	case float64:
-		p.KeyID = String(strconv.FormatFloat(v, 'f', -1, 64))
-	default:
-		return fmt.Errorf("unable to unmarshal %T as a string", v)
-	}
-
-	return nil
-}
-
 // GetRepoPublicKey gets a public key that should be used for secret encryption.
 //
 // GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/actions/#get-a-repository-public-key
@@ -85,25 +54,6 @@ func (s *ActionsService) GetOrgPublicKey(ctx context.Context, org string) (*Publ
 	return pubKey, resp, nil
 }
 
-// GetEnvPublicKey gets a public key that should be used for secret encryption.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/actions#get-an-environment-public-key
-func (s *ActionsService) GetEnvPublicKey(ctx context.Context, repoID int, env string) (*PublicKey, *Response, error) {
-	u := fmt.Sprintf("repositories/%v/environments/%v/secrets/public-key", repoID, env)
-	req, err := s.client.NewRequest("GET", u, nil)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	pubKey := new(PublicKey)
-	resp, err := s.client.Do(ctx, req, pubKey)
-	if err != nil {
-		return nil, resp, err
-	}
-
-	return pubKey, resp, nil
-}
-
 // Secret represents a repository action secret.
 type Secret struct {
 	Name                    string    `json:"name"`
@@ -347,74 +297,3 @@ func (s *ActionsService) DeleteOrgSecret(ctx context.Context, org, name string)
 
 	return s.client.Do(ctx, req, nil)
 }
-
-// ListEnvSecrets lists all secrets available in an environment.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-environment-secrets
-func (s *ActionsService) ListEnvSecrets(ctx context.Context, repoID int, env string, opts *ListOptions) (*Secrets, *Response, error) {
-	u := fmt.Sprintf("repositories/%v/environments/%v/secrets", repoID, env)
-	u, err := addOptions(u, opts)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	req, err := s.client.NewRequest("GET", u, nil)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	secrets := new(Secrets)
-	resp, err := s.client.Do(ctx, req, &secrets)
-	if err != nil {
-		return nil, resp, err
-	}
-
-	return secrets, resp, nil
-}
-
-// GetEnvSecret gets a single environment secret without revealing its encrypted value.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/actions#list-environment-secrets
-func (s *ActionsService) GetEnvSecret(ctx context.Context, repoID int, env, secretName string) (*Secret, *Response, error) {
-	u := fmt.Sprintf("repositories/%v/environments/%v/secrets/%v", repoID, env, secretName)
-	req, err := s.client.NewRequest("GET", u, nil)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	secret := new(Secret)
-	resp, err := s.client.Do(ctx, req, secret)
-	if err != nil {
-		return nil, resp, err
-	}
-
-	return secret, resp, nil
-}
-
-// CreateOrUpdateEnvSecret creates or updates a repository secret with an encrypted value.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/actions#create-or-update-an-environment-secret
-func (s *ActionsService) CreateOrUpdateEnvSecret(ctx context.Context, repoID int, env string, eSecret *EncryptedSecret) (*Response, error) {
-	u := fmt.Sprintf("repositories/%v/environments/%v/secrets/%v", repoID, env, eSecret.Name)
-
-	req, err := s.client.NewRequest("PUT", u, eSecret)
-	if err != nil {
-		return nil, err
-	}
-
-	return s.client.Do(ctx, req, nil)
-}
-
-// DeleteEnvSecret deletes a secret in an environment using the secret name.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/actions#delete-an-environment-secret
-func (s *ActionsService) DeleteEnvSecret(ctx context.Context, repoID int, env, secretName string) (*Response, error) {
-	u := fmt.Sprintf("repositories/%v/environments/%v/secrets/%v", repoID, env, secretName)
-
-	req, err := s.client.NewRequest("DELETE", u, nil)
-	if err != nil {
-		return nil, err
-	}
-
-	return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/google/go-github/v35/github/actions_workflow_jobs.go b/vendor/github.com/google/go-github/v34/github/actions_workflow_jobs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/actions_workflow_jobs.go
rename to vendor/github.com/google/go-github/v34/github/actions_workflow_jobs.go
diff --git a/vendor/github.com/google/go-github/v35/github/actions_workflow_runs.go b/vendor/github.com/google/go-github/v34/github/actions_workflow_runs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/actions_workflow_runs.go
rename to vendor/github.com/google/go-github/v34/github/actions_workflow_runs.go
diff --git a/vendor/github.com/google/go-github/v35/github/actions_workflows.go b/vendor/github.com/google/go-github/v34/github/actions_workflows.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/actions_workflows.go
rename to vendor/github.com/google/go-github/v34/github/actions_workflows.go
diff --git a/vendor/github.com/google/go-github/v35/github/activity.go b/vendor/github.com/google/go-github/v34/github/activity.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/activity.go
rename to vendor/github.com/google/go-github/v34/github/activity.go
diff --git a/vendor/github.com/google/go-github/v35/github/activity_events.go b/vendor/github.com/google/go-github/v34/github/activity_events.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/activity_events.go
rename to vendor/github.com/google/go-github/v34/github/activity_events.go
diff --git a/vendor/github.com/google/go-github/v35/github/activity_notifications.go b/vendor/github.com/google/go-github/v34/github/activity_notifications.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/activity_notifications.go
rename to vendor/github.com/google/go-github/v34/github/activity_notifications.go
diff --git a/vendor/github.com/google/go-github/v35/github/activity_star.go b/vendor/github.com/google/go-github/v34/github/activity_star.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/activity_star.go
rename to vendor/github.com/google/go-github/v34/github/activity_star.go
diff --git a/vendor/github.com/google/go-github/v35/github/activity_watching.go b/vendor/github.com/google/go-github/v34/github/activity_watching.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/activity_watching.go
rename to vendor/github.com/google/go-github/v34/github/activity_watching.go
diff --git a/vendor/github.com/google/go-github/v35/github/admin.go b/vendor/github.com/google/go-github/v34/github/admin.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/admin.go
rename to vendor/github.com/google/go-github/v34/github/admin.go
diff --git a/vendor/github.com/google/go-github/v35/github/admin_orgs.go b/vendor/github.com/google/go-github/v34/github/admin_orgs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/admin_orgs.go
rename to vendor/github.com/google/go-github/v34/github/admin_orgs.go
diff --git a/vendor/github.com/google/go-github/v35/github/admin_stats.go b/vendor/github.com/google/go-github/v34/github/admin_stats.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/admin_stats.go
rename to vendor/github.com/google/go-github/v34/github/admin_stats.go
diff --git a/vendor/github.com/google/go-github/v35/github/admin_users.go b/vendor/github.com/google/go-github/v34/github/admin_users.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/admin_users.go
rename to vendor/github.com/google/go-github/v34/github/admin_users.go
diff --git a/vendor/github.com/google/go-github/v35/github/apps.go b/vendor/github.com/google/go-github/v34/github/apps.go
similarity index 82%
rename from vendor/github.com/google/go-github/v35/github/apps.go
rename to vendor/github.com/google/go-github/v34/github/apps.go
index 8b850d9e..cb0069de 100644
--- a/vendor/github.com/google/go-github/v35/github/apps.go
+++ b/vendor/github.com/google/go-github/v34/github/apps.go
@@ -55,44 +55,37 @@ type InstallationTokenOptions struct {
 // InstallationPermissions lists the repository and organization permissions for an installation.
 //
 // Permission names taken from:
-//   https://docs.github.com/en/enterprise-server@3.0/rest/reference/apps#create-an-installation-access-token-for-an-app
-//   https://docs.github.com/en/rest/reference/apps#create-an-installation-access-token-for-an-app
+//   https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/permissions/
+//   https://developer.github.com/enterprise/v3/apps/permissions/
 type InstallationPermissions struct {
-	Actions                       *string `json:"actions,omitempty"`
-	Administration                *string `json:"administration,omitempty"`
-	Blocking                      *string `json:"blocking,omitempty"`
-	Checks                        *string `json:"checks,omitempty"`
-	Contents                      *string `json:"contents,omitempty"`
-	ContentReferences             *string `json:"content_references,omitempty"`
-	Deployments                   *string `json:"deployments,omitempty"`
-	Emails                        *string `json:"emails,omitempty"`
-	Environments                  *string `json:"environments,omitempty"`
-	Followers                     *string `json:"followers,omitempty"`
-	Issues                        *string `json:"issues,omitempty"`
-	Metadata                      *string `json:"metadata,omitempty"`
-	Members                       *string `json:"members,omitempty"`
-	OrganizationAdministration    *string `json:"organization_administration,omitempty"`
-	OrganizationHooks             *string `json:"organization_hooks,omitempty"`
-	OrganizationPlan              *string `json:"organization_plan,omitempty"`
-	OrganizationPreReceiveHooks   *string `json:"organization_pre_receive_hooks,omitempty"`
-	OrganizationProjects          *string `json:"organization_projects,omitempty"`
-	OrganizationSecrets           *string `json:"organization_secrets,omitempty"`
-	OrganizationSelfHostedRunners *string `json:"organization_self_hosted_runners,omitempty"`
-	OrganizationUserBlocking      *string `json:"organization_user_blocking,omitempty"`
-	Packages                      *string `json:"packages,omitempty"`
-	Pages                         *string `json:"pages,omitempty"`
-	PullRequests                  *string `json:"pull_requests,omitempty"`
-	RepositoryHooks               *string `json:"repository_hooks,omitempty"`
-	RepositoryProjects            *string `json:"repository_projects,omitempty"`
-	RepositoryPreReceiveHooks     *string `json:"repository_pre_receive_hooks,omitempty"`
-	Secrets                       *string `json:"secrets,omitempty"`
-	SecretScanningAlerts          *string `json:"secret_scanning_alerts,omitempty"`
-	SecurityEvents                *string `json:"security_events,omitempty"`
-	SingleFile                    *string `json:"single_file,omitempty"`
-	Statuses                      *string `json:"statuses,omitempty"`
-	TeamDiscussions               *string `json:"team_discussions,omitempty"`
-	VulnerabilityAlerts           *string `json:"vulnerability_alerts,omitempty"`
-	Workflows                     *string `json:"workflows,omitempty"`
+	Actions                     *string `json:"actions,omitempty"`
+	Administration              *string `json:"administration,omitempty"`
+	Blocking                    *string `json:"blocking,omitempty"`
+	Checks                      *string `json:"checks,omitempty"`
+	Contents                    *string `json:"contents,omitempty"`
+	ContentReferences           *string `json:"content_references,omitempty"`
+	Deployments                 *string `json:"deployments,omitempty"`
+	Emails                      *string `json:"emails,omitempty"`
+	Followers                   *string `json:"followers,omitempty"`
+	Issues                      *string `json:"issues,omitempty"`
+	Metadata                    *string `json:"metadata,omitempty"`
+	Members                     *string `json:"members,omitempty"`
+	OrganizationAdministration  *string `json:"organization_administration,omitempty"`
+	OrganizationHooks           *string `json:"organization_hooks,omitempty"`
+	OrganizationPlan            *string `json:"organization_plan,omitempty"`
+	OrganizationPreReceiveHooks *string `json:"organization_pre_receive_hooks,omitempty"`
+	OrganizationProjects        *string `json:"organization_projects,omitempty"`
+	OrganizationUserBlocking    *string `json:"organization_user_blocking,omitempty"`
+	Packages                    *string `json:"packages,omitempty"`
+	Pages                       *string `json:"pages,omitempty"`
+	PullRequests                *string `json:"pull_requests,omitempty"`
+	RepositoryHooks             *string `json:"repository_hooks,omitempty"`
+	RepositoryProjects          *string `json:"repository_projects,omitempty"`
+	RepositoryPreReceiveHooks   *string `json:"repository_pre_receive_hooks,omitempty"`
+	SingleFile                  *string `json:"single_file,omitempty"`
+	Statuses                    *string `json:"statuses,omitempty"`
+	TeamDiscussions             *string `json:"team_discussions,omitempty"`
+	VulnerabilityAlerts         *string `json:"vulnerability_alerts,omitempty"`
 }
 
 // Installation represents a GitHub Apps installation.
diff --git a/vendor/github.com/google/go-github/v35/github/apps_installation.go b/vendor/github.com/google/go-github/v34/github/apps_installation.go
similarity index 93%
rename from vendor/github.com/google/go-github/v35/github/apps_installation.go
rename to vendor/github.com/google/go-github/v34/github/apps_installation.go
index 521860d6..501d8006 100644
--- a/vendor/github.com/google/go-github/v35/github/apps_installation.go
+++ b/vendor/github.com/google/go-github/v34/github/apps_installation.go
@@ -32,11 +32,7 @@ func (s *AppsService) ListRepos(ctx context.Context, opts *ListOptions) (*ListRe
 	}
 
 	// TODO: remove custom Accept headers when APIs fully launch.
-	acceptHeaders := []string{
-		mediaTypeTopicsPreview,
-		mediaTypeRepositoryVisibilityPreview,
-		mediaTypeRepositoryTemplatePreview,
-	}
+	acceptHeaders := []string{mediaTypeTopicsPreview, mediaTypeRepositoryVisibilityPreview}
 	req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
 
 	var r *ListRepositories
@@ -66,11 +62,7 @@ func (s *AppsService) ListUserRepos(ctx context.Context, id int64, opts *ListOpt
 	}
 
 	// TODO: remove custom Accept headers when APIs fully launch.
-	acceptHeaders := []string{
-		mediaTypeTopicsPreview,
-		mediaTypeRepositoryVisibilityPreview,
-		mediaTypeRepositoryTemplatePreview,
-	}
+	acceptHeaders := []string{mediaTypeTopicsPreview, mediaTypeRepositoryVisibilityPreview}
 	req.Header.Set("Accept", strings.Join(acceptHeaders, ", "))
 
 	var r *ListRepositories
diff --git a/vendor/github.com/google/go-github/v35/github/apps_manifest.go b/vendor/github.com/google/go-github/v34/github/apps_manifest.go
similarity index 92%
rename from vendor/github.com/google/go-github/v35/github/apps_manifest.go
rename to vendor/github.com/google/go-github/v34/github/apps_manifest.go
index defd6c0a..007decf3 100644
--- a/vendor/github.com/google/go-github/v35/github/apps_manifest.go
+++ b/vendor/github.com/google/go-github/v34/github/apps_manifest.go
@@ -10,6 +10,10 @@ import (
 	"fmt"
 )
 
+const (
+	mediaTypeAppManifestPreview = "application/vnd.github.fury-preview+json"
+)
+
 // AppConfig describes the configuration of a GitHub App.
 type AppConfig struct {
 	ID            *int64     `json:"id,omitempty"`
@@ -37,6 +41,7 @@ func (s *AppsService) CompleteAppManifest(ctx context.Context, code string) (*Ap
 	if err != nil {
 		return nil, nil, err
 	}
+	req.Header.Set("Accept", mediaTypeAppManifestPreview)
 
 	cfg := new(AppConfig)
 	resp, err := s.client.Do(ctx, req, cfg)
diff --git a/vendor/github.com/google/go-github/v35/github/apps_marketplace.go b/vendor/github.com/google/go-github/v34/github/apps_marketplace.go
similarity index 78%
rename from vendor/github.com/google/go-github/v35/github/apps_marketplace.go
rename to vendor/github.com/google/go-github/v34/github/apps_marketplace.go
index 13d09f2e..3107bc8d 100644
--- a/vendor/github.com/google/go-github/v35/github/apps_marketplace.go
+++ b/vendor/github.com/google/go-github/v34/github/apps_marketplace.go
@@ -47,13 +47,14 @@ type MarketplacePlan struct {
 // MarketplacePurchase represents a GitHub Apps Marketplace Purchase.
 type MarketplacePurchase struct {
 	// BillingCycle can be one of the values "yearly", "monthly" or nil.
-	BillingCycle    *string          `json:"billing_cycle,omitempty"`
-	NextBillingDate *Timestamp       `json:"next_billing_date,omitempty"`
-	UnitCount       *int             `json:"unit_count,omitempty"`
-	Plan            *MarketplacePlan `json:"plan,omitempty"`
-	OnFreeTrial     *bool            `json:"on_free_trial,omitempty"`
-	FreeTrialEndsOn *Timestamp       `json:"free_trial_ends_on,omitempty"`
-	UpdatedAt       *Timestamp       `json:"updated_at,omitempty"`
+	BillingCycle    *string                 `json:"billing_cycle,omitempty"`
+	NextBillingDate *Timestamp              `json:"next_billing_date,omitempty"`
+	UnitCount       *int                    `json:"unit_count,omitempty"`
+	Plan            *MarketplacePlan        `json:"plan,omitempty"`
+	Account         *MarketplacePlanAccount `json:"account,omitempty"`
+	OnFreeTrial     *bool                   `json:"on_free_trial,omitempty"`
+	FreeTrialEndsOn *Timestamp              `json:"free_trial_ends_on,omitempty"`
+	UpdatedAt       *Timestamp              `json:"updated_at,omitempty"`
 }
 
 // MarketplacePendingChange represents a pending change to a GitHub Apps Marketplace Plan.
@@ -69,7 +70,9 @@ type MarketplacePlanAccount struct {
 	URL                      *string                   `json:"url,omitempty"`
 	Type                     *string                   `json:"type,omitempty"`
 	ID                       *int64                    `json:"id,omitempty"`
+	NodeID                   *string                   `json:"node_id,omitempty"`
 	Login                    *string                   `json:"login,omitempty"`
+	Email                    *string                   `json:"email,omitempty"`
 	OrganizationBillingEmail *string                   `json:"organization_billing_email,omitempty"`
 	MarketplacePurchase      *MarketplacePurchase      `json:"marketplace_purchase,omitempty"`
 	MarketplacePendingChange *MarketplacePendingChange `json:"marketplace_pending_change,omitempty"`
@@ -101,7 +104,7 @@ func (s *MarketplaceService) ListPlans(ctx context.Context, opts *ListOptions) (
 
 // ListPlanAccountsForPlan lists all GitHub accounts (user or organization) on a specific plan.
 //
-// GitHub API docs: https://docs.github.com/en/rest/reference/apps#list-accounts-for-a-plan
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#list-all-github-accounts-user-or-organization-on-a-specific-plan
 func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID int64, opts *ListOptions) ([]*MarketplacePlanAccount, *Response, error) {
 	uri := s.marketplaceURI(fmt.Sprintf("plans/%v/accounts", planID))
 	u, err := addOptions(uri, opts)
@@ -123,24 +126,28 @@ func (s *MarketplaceService) ListPlanAccountsForPlan(ctx context.Context, planID
 	return accounts, resp, nil
 }
 
-// GetPlanAccountForAccount get GitHub account (user or organization) associated with an account.
+// ListPlanAccountsForAccount lists all GitHub accounts (user or organization) associated with an account.
 //
-// GitHub API docs: https://docs.github.com/en/rest/reference/apps#get-a-subscription-plan-for-an-account
-func (s *MarketplaceService) GetPlanAccountForAccount(ctx context.Context, accountID int64) (*MarketplacePlanAccount, *Response, error) {
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/apps/#check-if-a-github-account-is-associated-with-any-marketplace-listing
+func (s *MarketplaceService) ListPlanAccountsForAccount(ctx context.Context, accountID int64, opts *ListOptions) ([]*MarketplacePlanAccount, *Response, error) {
 	uri := s.marketplaceURI(fmt.Sprintf("accounts/%v", accountID))
+	u, err := addOptions(uri, opts)
+	if err != nil {
+		return nil, nil, err
+	}
 
-	req, err := s.client.NewRequest("GET", uri, nil)
+	req, err := s.client.NewRequest("GET", u, nil)
 	if err != nil {
 		return nil, nil, err
 	}
 
-	var account *MarketplacePlanAccount
-	resp, err := s.client.Do(ctx, req, &account)
+	var accounts []*MarketplacePlanAccount
+	resp, err := s.client.Do(ctx, req, &accounts)
 	if err != nil {
 		return nil, resp, err
 	}
 
-	return account, resp, nil
+	return accounts, resp, nil
 }
 
 // ListMarketplacePurchasesForUser lists all GitHub marketplace purchases made by a user.
diff --git a/vendor/github.com/google/go-github/v35/github/authorizations.go b/vendor/github.com/google/go-github/v34/github/authorizations.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/authorizations.go
rename to vendor/github.com/google/go-github/v34/github/authorizations.go
diff --git a/vendor/github.com/google/go-github/v35/github/billing.go b/vendor/github.com/google/go-github/v34/github/billing.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/billing.go
rename to vendor/github.com/google/go-github/v34/github/billing.go
diff --git a/vendor/github.com/google/go-github/v35/github/checks.go b/vendor/github.com/google/go-github/v34/github/checks.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/checks.go
rename to vendor/github.com/google/go-github/v34/github/checks.go
diff --git a/vendor/github.com/google/go-github/v35/github/code-scanning.go b/vendor/github.com/google/go-github/v34/github/code-scanning.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/code-scanning.go
rename to vendor/github.com/google/go-github/v34/github/code-scanning.go
diff --git a/vendor/github.com/google/go-github/v35/github/doc.go b/vendor/github.com/google/go-github/v34/github/doc.go
similarity index 99%
rename from vendor/github.com/google/go-github/v35/github/doc.go
rename to vendor/github.com/google/go-github/v34/github/doc.go
index def690b8..e7d0c424 100644
--- a/vendor/github.com/google/go-github/v35/github/doc.go
+++ b/vendor/github.com/google/go-github/v34/github/doc.go
@@ -8,7 +8,7 @@ Package github provides a client for using the GitHub API.
 
 Usage:
 
-	import "github.com/google/go-github/v35/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
+	import "github.com/google/go-github/v34/github"	// with go modules enabled (GO111MODULE=on or outside GOPATH)
 	import "github.com/google/go-github/github"     // with go modules disabled
 
 Construct a new GitHub client, then use the various services on the client to
diff --git a/vendor/github.com/google/go-github/v35/github/enterprise.go b/vendor/github.com/google/go-github/v34/github/enterprise.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/enterprise.go
rename to vendor/github.com/google/go-github/v34/github/enterprise.go
diff --git a/vendor/github.com/google/go-github/v35/github/enterprise_actions_runners.go b/vendor/github.com/google/go-github/v34/github/enterprise_actions_runners.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/enterprise_actions_runners.go
rename to vendor/github.com/google/go-github/v34/github/enterprise_actions_runners.go
diff --git a/vendor/github.com/google/go-github/v35/github/enterprise_audit_log.go b/vendor/github.com/google/go-github/v34/github/enterprise_audit_log.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/enterprise_audit_log.go
rename to vendor/github.com/google/go-github/v34/github/enterprise_audit_log.go
diff --git a/vendor/github.com/google/go-github/v35/github/event.go b/vendor/github.com/google/go-github/v34/github/event.go
similarity index 98%
rename from vendor/github.com/google/go-github/v35/github/event.go
rename to vendor/github.com/google/go-github/v34/github/event.go
index 4b87142a..eec90515 100644
--- a/vendor/github.com/google/go-github/v35/github/event.go
+++ b/vendor/github.com/google/go-github/v34/github/event.go
@@ -98,8 +98,6 @@ func (e *Event) ParsePayload() (payload interface{}, err error) {
 		payload = &PullRequestReviewEvent{}
 	case "PullRequestReviewCommentEvent":
 		payload = &PullRequestReviewCommentEvent{}
-	case "PullRequestTargetEvent":
-		payload = &PullRequestTargetEvent{}
 	case "PushEvent":
 		payload = &PushEvent{}
 	case "ReleaseEvent":
diff --git a/vendor/github.com/google/go-github/v35/github/event_types.go b/vendor/github.com/google/go-github/v34/github/event_types.go
similarity index 83%
rename from vendor/github.com/google/go-github/v35/github/event_types.go
rename to vendor/github.com/google/go-github/v34/github/event_types.go
index 48347f37..72ac53de 100644
--- a/vendor/github.com/google/go-github/v35/github/event_types.go
+++ b/vendor/github.com/google/go-github/v34/github/event_types.go
@@ -15,13 +15,13 @@ type RequestedAction struct {
 	Identifier string `json:"identifier"` // The integrator reference of the action requested by the user.
 }
 
-// CheckRunEvent is triggered when a check run is "created", "completed", or "rerequested".
+// CheckRunEvent is triggered when a check run is "created", "updated", or "rerequested".
 // The Webhook event name is "check_run".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#check_run
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#checkrunevent
 type CheckRunEvent struct {
 	CheckRun *CheckRun `json:"check_run,omitempty"`
-	// The action performed. Possible values are: "created", "completed", "rerequested" or "requested_action".
+	// The action performed. Possible values are: "created", "updated", "rerequested" or "requested_action".
 	Action *string `json:"action,omitempty"`
 
 	// The following fields are only populated by Webhook events.
@@ -37,7 +37,7 @@ type CheckRunEvent struct {
 // CheckSuiteEvent is triggered when a check suite is "completed", "requested", or "rerequested".
 // The Webhook event name is "check_suite".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#check_suite
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#checksuiteevent
 type CheckSuiteEvent struct {
 	CheckSuite *CheckSuite `json:"check_suite,omitempty"`
 	// The action performed. Possible values are: "completed", "requested" or "rerequested".
@@ -53,7 +53,7 @@ type CheckSuiteEvent struct {
 // CommitCommentEvent is triggered when a commit comment is created.
 // The Webhook event name is "commit_comment".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#commit_comment
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#commitcommentevent
 type CommitCommentEvent struct {
 	Comment *RepositoryComment `json:"comment,omitempty"`
 
@@ -85,7 +85,7 @@ type ContentReferenceEvent struct {
 // Additionally, webhooks will not receive this event for tags if more
 // than three tags are pushed at once.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/github-event-types#createevent
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#createevent
 type CreateEvent struct {
 	Ref *string `json:"ref,omitempty"`
 	// RefType is the object that was created. Possible values are: "repository", "branch", "tag".
@@ -106,7 +106,7 @@ type CreateEvent struct {
 // Note: webhooks will not receive this event for tags if more than three tags
 // are deleted at once.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/github-event-types#deleteevent
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#deleteevent
 type DeleteEvent struct {
 	Ref *string `json:"ref,omitempty"`
 	// RefType is the object that was deleted. Possible values are: "branch", "tag".
@@ -122,7 +122,7 @@ type DeleteEvent struct {
 // DeployKeyEvent is triggered when a deploy key is added or removed from a repository.
 // The Webhook event name is "deploy_key".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#deploy_key
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#deploykeyevent
 type DeployKeyEvent struct {
 	// Action is the action that was performed. Possible values are:
 	// "created" or "deleted".
@@ -137,7 +137,7 @@ type DeployKeyEvent struct {
 //
 // Events of this type are not visible in timelines, they are only used to trigger hooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#deployment
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#deploymentevent
 type DeploymentEvent struct {
 	Deployment *Deployment `json:"deployment,omitempty"`
 	Repo       *Repository `json:"repository,omitempty"`
@@ -152,7 +152,7 @@ type DeploymentEvent struct {
 //
 // Events of this type are not visible in timelines, they are only used to trigger hooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#deployment_status
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#deploymentstatusevent
 type DeploymentStatusEvent struct {
 	Deployment       *Deployment       `json:"deployment,omitempty"`
 	DeploymentStatus *DeploymentStatus `json:"deployment_status,omitempty"`
@@ -166,7 +166,7 @@ type DeploymentStatusEvent struct {
 // ForkEvent is triggered when a user forks a repository.
 // The Webhook event name is "fork".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#fork
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#forkevent
 type ForkEvent struct {
 	// Forkee is the created repository.
 	Forkee *Repository `json:"forkee,omitempty"`
@@ -180,7 +180,7 @@ type ForkEvent struct {
 // GitHubAppAuthorizationEvent is triggered when a user's authorization for a
 // GitHub Application is revoked.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#github_app_authorization
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#githubappauthorizationevent
 type GitHubAppAuthorizationEvent struct {
 	// The action performed. Possible value is: "revoked".
 	Action *string `json:"action,omitempty"`
@@ -202,7 +202,7 @@ type Page struct {
 // GollumEvent is triggered when a Wiki page is created or updated.
 // The Webhook event name is "gollum".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#gollum
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#gollumevent
 type GollumEvent struct {
 	Pages []*Page `json:"pages,omitempty"`
 
@@ -294,7 +294,7 @@ type InstallationEvent struct {
 // InstallationRepositoriesEvent is triggered when a repository is added or
 // removed from an installation. The Webhook event name is "installation_repositories".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#installation_repositories
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#installationrepositoriesevent
 type InstallationRepositoriesEvent struct {
 	// The action that was performed. Can be either "added" or "removed".
 	Action              *string       `json:"action,omitempty"`
@@ -309,7 +309,7 @@ type InstallationRepositoriesEvent struct {
 // or pull request.
 // The Webhook event name is "issue_comment".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#issue_comment
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#issuecommentevent
 type IssueCommentEvent struct {
 	// Action is the action that was performed on the comment.
 	// Possible values are: "created", "edited", "deleted".
@@ -329,7 +329,7 @@ type IssueCommentEvent struct {
 // locked, unlocked, milestoned, or demilestoned.
 // The Webhook event name is "issues".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#issues
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#issuesevent
 type IssuesEvent struct {
 	// Action is the action that was performed. Possible values are: "opened",
 	// "edited", "deleted", "transferred", "pinned", "unpinned", "closed", "reopened",
@@ -350,7 +350,7 @@ type IssuesEvent struct {
 // LabelEvent is triggered when a repository's label is created, edited, or deleted.
 // The Webhook event name is "label"
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#label
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#labelevent
 type LabelEvent struct {
 	// Action is the action that was performed. Possible values are:
 	// "created", "edited", "deleted"
@@ -368,7 +368,7 @@ type LabelEvent struct {
 // their GitHub Marketplace plan.
 // Webhook event name "marketplace_purchase".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#marketplace_purchase
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#marketplacepurchaseevent
 type MarketplacePurchaseEvent struct {
 	// Action is the action that was performed. Possible values are:
 	// "purchased", "cancelled", "pending_change", "pending_change_cancelled", "changed".
@@ -385,7 +385,7 @@ type MarketplacePurchaseEvent struct {
 // MemberEvent is triggered when a user is added as a collaborator to a repository.
 // The Webhook event name is "member".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#member
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#memberevent
 type MemberEvent struct {
 	// Action is the action that was performed. Possible value is: "added".
 	Action *string `json:"action,omitempty"`
@@ -403,7 +403,7 @@ type MemberEvent struct {
 // Events of this type are not visible in timelines, they are only used to
 // trigger organization webhooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#membership
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#membershipevent
 type MembershipEvent struct {
 	// Action is the action that was performed. Possible values are: "added", "removed".
 	Action *string `json:"action,omitempty"`
@@ -423,7 +423,7 @@ type MembershipEvent struct {
 // Therefore, it must be selected for each hook that you'd like to receive meta events for.
 // The Webhook event name is "meta".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#meta
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#metaevent
 type MetaEvent struct {
 	// Action is the action that was performed. Possible value is: "deleted".
 	Action *string `json:"action,omitempty"`
@@ -438,7 +438,7 @@ type MetaEvent struct {
 // MilestoneEvent is triggered when a milestone is created, closed, opened, edited, or deleted.
 // The Webhook event name is "milestone".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#milestone
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#milestoneevent
 type MilestoneEvent struct {
 	// Action is the action that was performed. Possible values are:
 	// "created", "closed", "opened", "edited", "deleted"
@@ -458,7 +458,7 @@ type MilestoneEvent struct {
 // Events of this type are not visible in timelines. These events are only used to trigger organization hooks.
 // Webhook event name is "organization".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#organization
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#organizationevent
 type OrganizationEvent struct {
 	// Action is the action that was performed.
 	// Possible values are: "deleted", "renamed", "member_added", "member_removed", or "member_invited".
@@ -479,7 +479,7 @@ type OrganizationEvent struct {
 // OrgBlockEvent is triggered when an organization blocks or unblocks a user.
 // The Webhook event name is "org_block".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#org_block
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#orgblockevent
 type OrgBlockEvent struct {
 	// Action is the action that was performed.
 	// Can be "blocked" or "unblocked".
@@ -517,7 +517,7 @@ type PackageEvent struct {
 //
 // Events of this type are not visible in timelines, they are only used to trigger hooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#page_build
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#pagebuildevent
 type PageBuildEvent struct {
 	Build *PagesBuild `json:"build,omitempty"`
 
@@ -544,7 +544,7 @@ type PingEvent struct {
 // ProjectEvent is triggered when project is created, modified or deleted.
 // The webhook event name is "project".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#project
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#projectevent
 type ProjectEvent struct {
 	Action  *string        `json:"action,omitempty"`
 	Changes *ProjectChange `json:"changes,omitempty"`
@@ -560,7 +560,7 @@ type ProjectEvent struct {
 // ProjectCardEvent is triggered when a project card is created, updated, moved, converted to an issue, or deleted.
 // The webhook event name is "project_card".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#project_card
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#projectcardevent
 type ProjectCardEvent struct {
 	Action      *string            `json:"action,omitempty"`
 	Changes     *ProjectCardChange `json:"changes,omitempty"`
@@ -577,7 +577,7 @@ type ProjectCardEvent struct {
 // ProjectColumnEvent is triggered when a project column is created, updated, moved, or deleted.
 // The webhook event name is "project_column".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#project_column
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#projectcolumnevent
 type ProjectColumnEvent struct {
 	Action        *string              `json:"action,omitempty"`
 	Changes       *ProjectColumnChange `json:"changes,omitempty"`
@@ -595,7 +595,7 @@ type ProjectColumnEvent struct {
 // According to GitHub: "Without a doubt: the best GitHub event."
 // The Webhook event name is "public".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#public
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#publicevent
 type PublicEvent struct {
 	// The following fields are only populated by Webhook events.
 	Repo         *Repository   `json:"repository,omitempty"`
@@ -608,7 +608,7 @@ type PublicEvent struct {
 // locked, unlocked, a pull request review is requested, or a review request is removed.
 // The Webhook event name is "pull_request".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/github-event-types#pullrequestevent
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#pullrequestevent
 type PullRequestEvent struct {
 	// Action is the action that was performed. Possible values are:
 	// "assigned", "unassigned", "review_requested", "review_request_removed", "labeled", "unlabeled",
@@ -649,7 +649,7 @@ type PullRequestEvent struct {
 // request.
 // The Webhook event name is "pull_request_review".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#pull_request_review
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#pullrequestreviewevent
 type PullRequestReviewEvent struct {
 	// Action is always "submitted".
 	Action      *string            `json:"action,omitempty"`
@@ -670,7 +670,7 @@ type PullRequestReviewEvent struct {
 // portion of the unified diff of a pull request.
 // The Webhook event name is "pull_request_review_comment".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#pull_request_review_comment
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#pullrequestreviewcommentevent
 type PullRequestReviewCommentEvent struct {
 	// Action is the action that was performed on the comment.
 	// Possible values are: "created", "edited", "deleted".
@@ -685,51 +685,9 @@ type PullRequestReviewCommentEvent struct {
 	Installation *Installation `json:"installation,omitempty"`
 }
 
-// PullRequestTargetEvent is triggered when a pull request is assigned, unassigned, labeled,
-// unlabeled, opened, edited, closed, reopened, synchronize, ready_for_review,
-// locked, unlocked, a pull request review is requested, or a review request is removed.
-// The Webhook event name is "pull_request_target".
-//
-// GitHub API docs: https://docs.github.com/en/actions/reference/events-that-trigger-workflows#pull_request_target
-type PullRequestTargetEvent struct {
-	// Action is the action that was performed. Possible values are:
-	// "assigned", "unassigned", "labeled", "unlabeled", "opened", "edited", "closed", "reopened",
-	// "ready_for_review", "locked", "unlocked", "review_requested" or "review_request_removed".
-	// If the action is "closed" and the "merged" key is "false", the pull request was closed with unmerged commits.
-	// If the action is "closed" and the "merged" key is "true", the pull request was merged.
-	// While webhooks are also triggered when a pull request is synchronized, Events API timelines
-	// don't include pull request events with the "synchronize" action.
-	Action      *string      `json:"action,omitempty"`
-	Assignee    *User        `json:"assignee,omitempty"`
-	Number      *int         `json:"number,omitempty"`
-	PullRequest *PullRequest `json:"pull_request,omitempty"`
-
-	// The following fields are only populated by Webhook events.
-	Changes *EditChange `json:"changes,omitempty"`
-	// RequestedReviewer is populated in "review_requested", "review_request_removed" event deliveries.
-	// A request affecting multiple reviewers at once is split into multiple
-	// such event deliveries, each with a single, different RequestedReviewer.
-	RequestedReviewer *User `json:"requested_reviewer,omitempty"`
-	// In the event that a team is requested instead of a user, "requested_team" gets sent in place of
-	// "requested_user" with the same delivery behavior.
-	RequestedTeam *Team         `json:"requested_team,omitempty"`
-	Repo          *Repository   `json:"repository,omitempty"`
-	Sender        *User         `json:"sender,omitempty"`
-	Installation  *Installation `json:"installation,omitempty"`
-	Label         *Label        `json:"label,omitempty"` // Populated in "labeled" event deliveries.
-
-	// The following field is only present when the webhook is triggered on
-	// a repository belonging to an organization.
-	Organization *Organization `json:"organization,omitempty"`
-
-	// The following fields are only populated when the Action is "synchronize".
-	Before *string `json:"before,omitempty"`
-	After  *string `json:"after,omitempty"`
-}
-
 // PushEvent represents a git push to a GitHub repository.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#push
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#pushevent
 type PushEvent struct {
 	PushID       *int64        `json:"push_id,omitempty"`
 	Head         *string       `json:"head,omitempty"`
@@ -831,7 +789,7 @@ type PushEventRepoOwner struct {
 // edited, deleted, or prereleased.
 // The Webhook event name is "release".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#release
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#releaseevent
 type ReleaseEvent struct {
 	// Action is the action that was performed. Possible values are: "published", "unpublished",
 	// "created", "edited", "deleted", or "prereleased".
@@ -852,7 +810,7 @@ type ReleaseEvent struct {
 // Events of this type are not visible in timelines, they are only used to
 // trigger organization webhooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#repository
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#repositoryevent
 type RepositoryEvent struct {
 	// Action is the action that was performed. Possible values are: "created",
 	// "deleted" (organization hooks only), "archived", "unarchived", "edited", "renamed",
@@ -868,7 +826,7 @@ type RepositoryEvent struct {
 
 // RepositoryDispatchEvent is triggered when a client sends a POST request to the repository dispatch event endpoint.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#repository_dispatch
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#repositorydispatchevent
 type RepositoryDispatchEvent struct {
 	// Action is the event_type that submitted with the repository dispatch payload. Value can be any string.
 	Action        *string         `json:"action,omitempty"`
@@ -884,7 +842,7 @@ type RepositoryDispatchEvent struct {
 
 // RepositoryVulnerabilityAlertEvent is triggered when a security alert is created, dismissed, or resolved.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#repository_vulnerability_alert
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#repositoryvulnerabilityalertevent
 type RepositoryVulnerabilityAlertEvent struct {
 	// Action is the action that was performed. Possible values are: "create", "dismiss", "resolve".
 	Action *string `json:"action,omitempty"`
@@ -909,18 +867,13 @@ type RepositoryVulnerabilityAlertEvent struct {
 // StarEvent is triggered when a star is added or removed from a repository.
 // The Webhook event name is "star".
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#star
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#starevent
 type StarEvent struct {
 	// Action is the action that was performed. Possible values are: "created" or "deleted".
 	Action *string `json:"action,omitempty"`
 
 	// StarredAt is the time the star was created. It will be null for the "deleted" action.
 	StarredAt *Timestamp `json:"starred_at,omitempty"`
-
-	// The following fields are only populated by Webhook events.
-	Org    *Organization `json:"organization,omitempty"`
-	Repo   *Repository   `json:"repository,omitempty"`
-	Sender *User         `json:"sender,omitempty"`
 }
 
 // StatusEvent is triggered when the status of a Git commit changes.
@@ -929,7 +882,7 @@ type StarEvent struct {
 // Events of this type are not visible in timelines, they are only used to
 // trigger hooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#status
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#statusevent
 type StatusEvent struct {
 	SHA *string `json:"sha,omitempty"`
 	// State is the new state. Possible values are: "pending", "success", "failure", "error".
@@ -956,7 +909,7 @@ type StatusEvent struct {
 // Events of this type are not visible in timelines. These events are only used
 // to trigger hooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#team
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#teamevent
 type TeamEvent struct {
 	Action  *string     `json:"action,omitempty"`
 	Team    *Team       `json:"team,omitempty"`
@@ -975,7 +928,7 @@ type TeamEvent struct {
 // Events of this type are not visible in timelines. These events are only used
 // to trigger hooks.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#team_add
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#teamaddevent
 type TeamAddEvent struct {
 	Team *Team       `json:"team,omitempty"`
 	Repo *Repository `json:"repository,omitempty"`
@@ -1006,7 +959,7 @@ type UserEvent struct {
 // The event’s actor is the user who starred a repository, and the event’s
 // repository is the repository that was starred.
 //
-// GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#watch
+// GitHub API docs: https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#watchevent
 type WatchEvent struct {
 	// Action is the action that was performed. Possible value is: "started".
 	Action *string `json:"action,omitempty"`
@@ -1036,9 +989,7 @@ type WorkflowDispatchEvent struct {
 //
 // GitHub API docs: https://docs.github.com/en/developers/webhooks-and-events/webhook-events-and-payloads#workflow_run
 type WorkflowRunEvent struct {
-	Action      *string      `json:"action,omitempty"`
-	Workflow    *Workflow    `json:"workflow,omitempty"`
-	WorkflowRun *WorkflowRun `json:"workflow_run,omitempty"`
+	Action *string `json:"action,omitempty"`
 
 	// The following fields are only populated by Webhook events.
 	Org    *Organization `json:"organization,omitempty"`
diff --git a/vendor/github.com/google/go-github/v35/github/gists.go b/vendor/github.com/google/go-github/v34/github/gists.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/gists.go
rename to vendor/github.com/google/go-github/v34/github/gists.go
diff --git a/vendor/github.com/google/go-github/v35/github/gists_comments.go b/vendor/github.com/google/go-github/v34/github/gists_comments.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/gists_comments.go
rename to vendor/github.com/google/go-github/v34/github/gists_comments.go
diff --git a/vendor/github.com/google/go-github/v35/github/git.go b/vendor/github.com/google/go-github/v34/github/git.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/git.go
rename to vendor/github.com/google/go-github/v34/github/git.go
diff --git a/vendor/github.com/google/go-github/v35/github/git_blobs.go b/vendor/github.com/google/go-github/v34/github/git_blobs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/git_blobs.go
rename to vendor/github.com/google/go-github/v34/github/git_blobs.go
diff --git a/vendor/github.com/google/go-github/v35/github/git_commits.go b/vendor/github.com/google/go-github/v34/github/git_commits.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/git_commits.go
rename to vendor/github.com/google/go-github/v34/github/git_commits.go
diff --git a/vendor/github.com/google/go-github/v35/github/git_refs.go b/vendor/github.com/google/go-github/v34/github/git_refs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/git_refs.go
rename to vendor/github.com/google/go-github/v34/github/git_refs.go
diff --git a/vendor/github.com/google/go-github/v35/github/git_tags.go b/vendor/github.com/google/go-github/v34/github/git_tags.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/git_tags.go
rename to vendor/github.com/google/go-github/v34/github/git_tags.go
diff --git a/vendor/github.com/google/go-github/v35/github/git_trees.go b/vendor/github.com/google/go-github/v34/github/git_trees.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/git_trees.go
rename to vendor/github.com/google/go-github/v34/github/git_trees.go
diff --git a/vendor/github.com/google/go-github/v35/github/github-accessors.go b/vendor/github.com/google/go-github/v34/github/github-accessors.go
similarity index 97%
rename from vendor/github.com/google/go-github/v35/github/github-accessors.go
rename to vendor/github.com/google/go-github/v34/github/github-accessors.go
index cb068a69..d6e13c1b 100644
--- a/vendor/github.com/google/go-github/v35/github/github-accessors.go
+++ b/vendor/github.com/google/go-github/v34/github/github-accessors.go
@@ -701,9 +701,9 @@ func (a *AuditEntry) GetHeadSHA() string {
 }
 
 // GetHookID returns the HookID field if it's non-nil, zero value otherwise.
-func (a *AuditEntry) GetHookID() int64 {
+func (a *AuditEntry) GetHookID() string {
 	if a == nil || a.HookID == nil {
-		return 0
+		return ""
 	}
 	return *a.HookID
 }
@@ -1252,22 +1252,6 @@ func (b *BranchListOptions) GetProtected() bool {
 	return *b.Protected
 }
 
-// GetCustomBranchPolicies returns the CustomBranchPolicies field if it's non-nil, zero value otherwise.
-func (b *BranchPolicy) GetCustomBranchPolicies() bool {
-	if b == nil || b.CustomBranchPolicies == nil {
-		return false
-	}
-	return *b.CustomBranchPolicies
-}
-
-// GetProtectedBranches returns the ProtectedBranches field if it's non-nil, zero value otherwise.
-func (b *BranchPolicy) GetProtectedBranches() bool {
-	if b == nil || b.ProtectedBranches == nil {
-		return false
-	}
-	return *b.ProtectedBranches
-}
-
 // GetApp returns the App field.
 func (c *CheckRun) GetApp() *App {
 	if c == nil {
@@ -2916,22 +2900,6 @@ func (c *CreateRunnerGroupRequest) GetVisibility() string {
 	return *c.Visibility
 }
 
-// GetDeploymentBranchPolicy returns the DeploymentBranchPolicy field.
-func (c *CreateUpdateEnvironment) GetDeploymentBranchPolicy() *BranchPolicy {
-	if c == nil {
-		return nil
-	}
-	return c.DeploymentBranchPolicy
-}
-
-// GetWaitTimer returns the WaitTimer field if it's non-nil, zero value otherwise.
-func (c *CreateUpdateEnvironment) GetWaitTimer() int {
-	if c == nil || c.WaitTimer == nil {
-		return 0
-	}
-	return *c.WaitTimer
-}
-
 // GetBody returns the Body field if it's non-nil, zero value otherwise.
 func (c *CreateUserProjectOptions) GetBody() string {
 	if c == nil || c.Body == nil {
@@ -3700,126 +3668,6 @@ func (e *Enterprise) GetWebsiteURL() string {
 	return *e.WebsiteURL
 }
 
-// GetCreatedAt returns the CreatedAt field if it's non-nil, zero value otherwise.
-func (e *Environment) GetCreatedAt() Timestamp {
-	if e == nil || e.CreatedAt == nil {
-		return Timestamp{}
-	}
-	return *e.CreatedAt
-}
-
-// GetDeploymentBranchPolicy returns the DeploymentBranchPolicy field.
-func (e *Environment) GetDeploymentBranchPolicy() *BranchPolicy {
-	if e == nil {
-		return nil
-	}
-	return e.DeploymentBranchPolicy
-}
-
-// GetEnvironmentName returns the EnvironmentName field if it's non-nil, zero value otherwise.
-func (e *Environment) GetEnvironmentName() string {
-	if e == nil || e.EnvironmentName == nil {
-		return ""
-	}
-	return *e.EnvironmentName
-}
-
-// GetHTMLURL returns the HTMLURL field if it's non-nil, zero value otherwise.
-func (e *Environment) GetHTMLURL() string {
-	if e == nil || e.HTMLURL == nil {
-		return ""
-	}
-	return *e.HTMLURL
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (e *Environment) GetID() int64 {
-	if e == nil || e.ID == nil {
-		return 0
-	}
-	return *e.ID
-}
-
-// GetName returns the Name field if it's non-nil, zero value otherwise.
-func (e *Environment) GetName() string {
-	if e == nil || e.Name == nil {
-		return ""
-	}
-	return *e.Name
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (e *Environment) GetNodeID() string {
-	if e == nil || e.NodeID == nil {
-		return ""
-	}
-	return *e.NodeID
-}
-
-// GetOwner returns the Owner field if it's non-nil, zero value otherwise.
-func (e *Environment) GetOwner() string {
-	if e == nil || e.Owner == nil {
-		return ""
-	}
-	return *e.Owner
-}
-
-// GetRepo returns the Repo field if it's non-nil, zero value otherwise.
-func (e *Environment) GetRepo() string {
-	if e == nil || e.Repo == nil {
-		return ""
-	}
-	return *e.Repo
-}
-
-// GetUpdatedAt returns the UpdatedAt field if it's non-nil, zero value otherwise.
-func (e *Environment) GetUpdatedAt() Timestamp {
-	if e == nil || e.UpdatedAt == nil {
-		return Timestamp{}
-	}
-	return *e.UpdatedAt
-}
-
-// GetURL returns the URL field if it's non-nil, zero value otherwise.
-func (e *Environment) GetURL() string {
-	if e == nil || e.URL == nil {
-		return ""
-	}
-	return *e.URL
-}
-
-// GetWaitTimer returns the WaitTimer field if it's non-nil, zero value otherwise.
-func (e *Environment) GetWaitTimer() int {
-	if e == nil || e.WaitTimer == nil {
-		return 0
-	}
-	return *e.WaitTimer
-}
-
-// GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
-func (e *EnvResponse) GetTotalCount() int {
-	if e == nil || e.TotalCount == nil {
-		return 0
-	}
-	return *e.TotalCount
-}
-
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (e *EnvReviewers) GetID() int64 {
-	if e == nil || e.ID == nil {
-		return 0
-	}
-	return *e.ID
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (e *EnvReviewers) GetType() string {
-	if e == nil || e.Type == nil {
-		return ""
-	}
-	return *e.Type
-}
-
 // GetActor returns the Actor field.
 func (e *Event) GetActor() *User {
 	if e == nil {
@@ -4028,14 +3876,6 @@ func (g *Gist) GetDescription() string {
 	return *g.Description
 }
 
-// GetFiles returns the Files map if it's non-nil, an empty map otherwise.
-func (g *Gist) GetFiles() map[GistFilename]GistFile {
-	if g == nil || g.Files == nil {
-		return map[GistFilename]GistFile{}
-	}
-	return g.Files
-}
-
 // GetGitPullURL returns the GitPullURL field if it's non-nil, zero value otherwise.
 func (g *Gist) GetGitPullURL() string {
 	if g == nil || g.GitPullURL == nil {
@@ -5148,14 +4988,6 @@ func (i *InstallationPermissions) GetEmails() string {
 	return *i.Emails
 }
 
-// GetEnvironments returns the Environments field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetEnvironments() string {
-	if i == nil || i.Environments == nil {
-		return ""
-	}
-	return *i.Environments
-}
-
 // GetFollowers returns the Followers field if it's non-nil, zero value otherwise.
 func (i *InstallationPermissions) GetFollowers() string {
 	if i == nil || i.Followers == nil {
@@ -5228,22 +5060,6 @@ func (i *InstallationPermissions) GetOrganizationProjects() string {
 	return *i.OrganizationProjects
 }
 
-// GetOrganizationSecrets returns the OrganizationSecrets field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationSecrets() string {
-	if i == nil || i.OrganizationSecrets == nil {
-		return ""
-	}
-	return *i.OrganizationSecrets
-}
-
-// GetOrganizationSelfHostedRunners returns the OrganizationSelfHostedRunners field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetOrganizationSelfHostedRunners() string {
-	if i == nil || i.OrganizationSelfHostedRunners == nil {
-		return ""
-	}
-	return *i.OrganizationSelfHostedRunners
-}
-
 // GetOrganizationUserBlocking returns the OrganizationUserBlocking field if it's non-nil, zero value otherwise.
 func (i *InstallationPermissions) GetOrganizationUserBlocking() string {
 	if i == nil || i.OrganizationUserBlocking == nil {
@@ -5300,30 +5116,6 @@ func (i *InstallationPermissions) GetRepositoryProjects() string {
 	return *i.RepositoryProjects
 }
 
-// GetSecrets returns the Secrets field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetSecrets() string {
-	if i == nil || i.Secrets == nil {
-		return ""
-	}
-	return *i.Secrets
-}
-
-// GetSecretScanningAlerts returns the SecretScanningAlerts field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetSecretScanningAlerts() string {
-	if i == nil || i.SecretScanningAlerts == nil {
-		return ""
-	}
-	return *i.SecretScanningAlerts
-}
-
-// GetSecurityEvents returns the SecurityEvents field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetSecurityEvents() string {
-	if i == nil || i.SecurityEvents == nil {
-		return ""
-	}
-	return *i.SecurityEvents
-}
-
 // GetSingleFile returns the SingleFile field if it's non-nil, zero value otherwise.
 func (i *InstallationPermissions) GetSingleFile() string {
 	if i == nil || i.SingleFile == nil {
@@ -5356,14 +5148,6 @@ func (i *InstallationPermissions) GetVulnerabilityAlerts() string {
 	return *i.VulnerabilityAlerts
 }
 
-// GetWorkflows returns the Workflows field if it's non-nil, zero value otherwise.
-func (i *InstallationPermissions) GetWorkflows() string {
-	if i == nil || i.Workflows == nil {
-		return ""
-	}
-	return *i.Workflows
-}
-
 // GetAction returns the Action field if it's non-nil, zero value otherwise.
 func (i *InstallationRepositoriesEvent) GetAction() string {
 	if i == nil || i.Action == nil {
@@ -5468,22 +5252,6 @@ func (i *Invitation) GetEmail() string {
 	return *i.Email
 }
 
-// GetFailedAt returns the FailedAt field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetFailedAt() Timestamp {
-	if i == nil || i.FailedAt == nil {
-		return Timestamp{}
-	}
-	return *i.FailedAt
-}
-
-// GetFailedReason returns the FailedReason field if it's non-nil, zero value otherwise.
-func (i *Invitation) GetFailedReason() string {
-	if i == nil || i.FailedReason == nil {
-		return ""
-	}
-	return *i.FailedReason
-}
-
 // GetID returns the ID field if it's non-nil, zero value otherwise.
 func (i *Invitation) GetID() int64 {
 	if i == nil || i.ID == nil {
@@ -6188,14 +5956,6 @@ func (i *IssueImportResponse) GetURL() string {
 	return *i.URL
 }
 
-// GetDirection returns the Direction field if it's non-nil, zero value otherwise.
-func (i *IssueListCommentsOptions) GetDirection() string {
-	if i == nil || i.Direction == nil {
-		return ""
-	}
-	return *i.Direction
-}
-
 // GetSince returns the Since field if it's non-nil, zero value otherwise.
 func (i *IssueListCommentsOptions) GetSince() time.Time {
 	if i == nil || i.Since == nil {
@@ -6204,14 +5964,6 @@ func (i *IssueListCommentsOptions) GetSince() time.Time {
 	return *i.Since
 }
 
-// GetSort returns the Sort field if it's non-nil, zero value otherwise.
-func (i *IssueListCommentsOptions) GetSort() string {
-	if i == nil || i.Sort == nil {
-		return ""
-	}
-	return *i.Sort
-}
-
 // GetAssignee returns the Assignee field if it's non-nil, zero value otherwise.
 func (i *IssueRequest) GetAssignee() string {
 	if i == nil || i.Assignee == nil {
@@ -6948,6 +6700,14 @@ func (m *MarketplacePlan) GetYearlyPriceInCents() int {
 	return *m.YearlyPriceInCents
 }
 
+// GetEmail returns the Email field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetEmail() string {
+	if m == nil || m.Email == nil {
+		return ""
+	}
+	return *m.Email
+}
+
 // GetID returns the ID field if it's non-nil, zero value otherwise.
 func (m *MarketplacePlanAccount) GetID() int64 {
 	if m == nil || m.ID == nil {
@@ -6980,6 +6740,14 @@ func (m *MarketplacePlanAccount) GetMarketplacePurchase() *MarketplacePurchase {
 	return m.MarketplacePurchase
 }
 
+// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
+func (m *MarketplacePlanAccount) GetNodeID() string {
+	if m == nil || m.NodeID == nil {
+		return ""
+	}
+	return *m.NodeID
+}
+
 // GetOrganizationBillingEmail returns the OrganizationBillingEmail field if it's non-nil, zero value otherwise.
 func (m *MarketplacePlanAccount) GetOrganizationBillingEmail() string {
 	if m == nil || m.OrganizationBillingEmail == nil {
@@ -7004,6 +6772,14 @@ func (m *MarketplacePlanAccount) GetURL() string {
 	return *m.URL
 }
 
+// GetAccount returns the Account field.
+func (m *MarketplacePurchase) GetAccount() *MarketplacePlanAccount {
+	if m == nil {
+		return nil
+	}
+	return m.Account
+}
+
 // GetBillingCycle returns the BillingCycle field if it's non-nil, zero value otherwise.
 func (m *MarketplacePurchase) GetBillingCycle() string {
 	if m == nil || m.BillingCycle == nil {
@@ -9868,38 +9644,6 @@ func (p *ProtectionRequest) GetRestrictions() *BranchRestrictionsRequest {
 	return p.Restrictions
 }
 
-// GetID returns the ID field if it's non-nil, zero value otherwise.
-func (p *ProtectionRule) GetID() int64 {
-	if p == nil || p.ID == nil {
-		return 0
-	}
-	return *p.ID
-}
-
-// GetNodeID returns the NodeID field if it's non-nil, zero value otherwise.
-func (p *ProtectionRule) GetNodeID() string {
-	if p == nil || p.NodeID == nil {
-		return ""
-	}
-	return *p.NodeID
-}
-
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (p *ProtectionRule) GetType() string {
-	if p == nil || p.Type == nil {
-		return ""
-	}
-	return *p.Type
-}
-
-// GetWaitTimer returns the WaitTimer field if it's non-nil, zero value otherwise.
-func (p *ProtectionRule) GetWaitTimer() int {
-	if p == nil || p.WaitTimer == nil {
-		return 0
-	}
-	return *p.WaitTimer
-}
-
 // GetInstallation returns the Installation field.
 func (p *PublicEvent) GetInstallation() *Installation {
 	if p == nil {
@@ -10980,118 +10724,6 @@ func (p *PullRequestReviewsEnforcementUpdate) GetDismissStaleReviews() bool {
 	return *p.DismissStaleReviews
 }
 
-// GetAction returns the Action field if it's non-nil, zero value otherwise.
-func (p *PullRequestTargetEvent) GetAction() string {
-	if p == nil || p.Action == nil {
-		return ""
-	}
-	return *p.Action
-}
-
-// GetAfter returns the After field if it's non-nil, zero value otherwise.
-func (p *PullRequestTargetEvent) GetAfter() string {
-	if p == nil || p.After == nil {
-		return ""
-	}
-	return *p.After
-}
-
-// GetAssignee returns the Assignee field.
-func (p *PullRequestTargetEvent) GetAssignee() *User {
-	if p == nil {
-		return nil
-	}
-	return p.Assignee
-}
-
-// GetBefore returns the Before field if it's non-nil, zero value otherwise.
-func (p *PullRequestTargetEvent) GetBefore() string {
-	if p == nil || p.Before == nil {
-		return ""
-	}
-	return *p.Before
-}
-
-// GetChanges returns the Changes field.
-func (p *PullRequestTargetEvent) GetChanges() *EditChange {
-	if p == nil {
-		return nil
-	}
-	return p.Changes
-}
-
-// GetInstallation returns the Installation field.
-func (p *PullRequestTargetEvent) GetInstallation() *Installation {
-	if p == nil {
-		return nil
-	}
-	return p.Installation
-}
-
-// GetLabel returns the Label field.
-func (p *PullRequestTargetEvent) GetLabel() *Label {
-	if p == nil {
-		return nil
-	}
-	return p.Label
-}
-
-// GetNumber returns the Number field if it's non-nil, zero value otherwise.
-func (p *PullRequestTargetEvent) GetNumber() int {
-	if p == nil || p.Number == nil {
-		return 0
-	}
-	return *p.Number
-}
-
-// GetOrganization returns the Organization field.
-func (p *PullRequestTargetEvent) GetOrganization() *Organization {
-	if p == nil {
-		return nil
-	}
-	return p.Organization
-}
-
-// GetPullRequest returns the PullRequest field.
-func (p *PullRequestTargetEvent) GetPullRequest() *PullRequest {
-	if p == nil {
-		return nil
-	}
-	return p.PullRequest
-}
-
-// GetRepo returns the Repo field.
-func (p *PullRequestTargetEvent) GetRepo() *Repository {
-	if p == nil {
-		return nil
-	}
-	return p.Repo
-}
-
-// GetRequestedReviewer returns the RequestedReviewer field.
-func (p *PullRequestTargetEvent) GetRequestedReviewer() *User {
-	if p == nil {
-		return nil
-	}
-	return p.RequestedReviewer
-}
-
-// GetRequestedTeam returns the RequestedTeam field.
-func (p *PullRequestTargetEvent) GetRequestedTeam() *Team {
-	if p == nil {
-		return nil
-	}
-	return p.RequestedTeam
-}
-
-// GetSender returns the Sender field.
-func (p *PullRequestTargetEvent) GetSender() *User {
-	if p == nil {
-		return nil
-	}
-	return p.Sender
-}
-
 // GetMergablePulls returns the MergablePulls field if it's non-nil, zero value otherwise.
 func (p *PullStats) GetMergablePulls() int {
 	if p == nil || p.MergablePulls == nil {
@@ -12492,12 +12124,12 @@ func (r *Repository) GetParent() *Repository {
 	return r.Parent
 }
 
-// GetPermissions returns the Permissions map if it's non-nil, an empty map otherwise.
+// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
 func (r *Repository) GetPermissions() map[string]bool {
 	if r == nil || r.Permissions == nil {
 		return map[string]bool{}
 	}
-	return r.Permissions
+	return *r.Permissions
 }
 
 // GetPrivate returns the Private field if it's non-nil, zero value otherwise.
@@ -13308,14 +12940,6 @@ func (r *RepositoryRelease) GetCreatedAt() Timestamp {
 	return *r.CreatedAt
 }
 
-// GetDiscussionCategoryName returns the DiscussionCategoryName field if it's non-nil, zero value otherwise.
-func (r *RepositoryRelease) GetDiscussionCategoryName() string {
-	if r == nil || r.DiscussionCategoryName == nil {
-		return ""
-	}
-	return *r.DiscussionCategoryName
-}
-
 // GetDraft returns the Draft field if it's non-nil, zero value otherwise.
 func (r *RepositoryRelease) GetDraft() bool {
 	if r == nil || r.Draft == nil {
@@ -13596,14 +13220,6 @@ func (r *RepoStatus) GetURL() string {
 	return *r.URL
 }
 
-// GetType returns the Type field if it's non-nil, zero value otherwise.
-func (r *RequiredReviewer) GetType() string {
-	if r == nil || r.Type == nil {
-		return ""
-	}
-	return *r.Type
-}
-
 // GetStrict returns the Strict field if it's non-nil, zero value otherwise.
 func (r *RequiredStatusChecksRequest) GetStrict() bool {
 	if r == nil || r.Strict == nil {
@@ -13692,22 +13308,6 @@ func (r *RunnerApplicationDownload) GetOS() string {
 	return *r.OS
 }
 
-// GetSHA256Checksum returns the SHA256Checksum field if it's non-nil, zero value otherwise.
-func (r *RunnerApplicationDownload) GetSHA256Checksum() string {
-	if r == nil || r.SHA256Checksum == nil {
-		return ""
-	}
-	return *r.SHA256Checksum
-}
-
-// GetTempDownloadToken returns the TempDownloadToken field if it's non-nil, zero value otherwise.
-func (r *RunnerApplicationDownload) GetTempDownloadToken() string {
-	if r == nil || r.TempDownloadToken == nil {
-		return ""
-	}
-	return *r.TempDownloadToken
-}
-
 // GetAllowsPublicRepositories returns the AllowsPublicRepositories field if it's non-nil, zero value otherwise.
 func (r *RunnerGroup) GetAllowsPublicRepositories() bool {
 	if r == nil || r.AllowsPublicRepositories == nil {
@@ -13964,30 +13564,6 @@ func (s *StarEvent) GetAction() string {
 	return *s.Action
 }
 
-// GetOrg returns the Org field.
-func (s *StarEvent) GetOrg() *Organization {
-	if s == nil {
-		return nil
-	}
-	return s.Org
-}
-
-// GetRepo returns the Repo field.
-func (s *StarEvent) GetRepo() *Repository {
-	if s == nil {
-		return nil
-	}
-	return s.Repo
-}
-
-// GetSender returns the Sender field.
-func (s *StarEvent) GetSender() *User {
-	if s == nil {
-		return nil
-	}
-	return s.Sender
-}
-
 // GetStarredAt returns the StarredAt field if it's non-nil, zero value otherwise.
 func (s *StarEvent) GetStarredAt() Timestamp {
 	if s == nil || s.StarredAt == nil {
@@ -14380,14 +13956,6 @@ func (t *Team) GetPermission() string {
 	return *t.Permission
 }
 
-// GetPermissions returns the Permissions map if it's non-nil, an empty map otherwise.
-func (t *Team) GetPermissions() map[string]bool {
-	if t == nil || t.Permissions == nil {
-		return map[string]bool{}
-	}
-	return t.Permissions
-}
-
 // GetPrivacy returns the Privacy field if it's non-nil, zero value otherwise.
 func (t *Team) GetPrivacy() string {
 	if t == nil || t.Privacy == nil {
@@ -15468,12 +15036,12 @@ func (u *User) GetOwnedPrivateRepos() int {
 	return *u.OwnedPrivateRepos
 }
 
-// GetPermissions returns the Permissions map if it's non-nil, an empty map otherwise.
+// GetPermissions returns the Permissions field if it's non-nil, zero value otherwise.
 func (u *User) GetPermissions() map[string]bool {
 	if u == nil || u.Permissions == nil {
 		return map[string]bool{}
 	}
-	return u.Permissions
+	return *u.Permissions
 }
 
 // GetPlan returns the Plan field.
@@ -16804,22 +16372,6 @@ func (w *WorkflowRunEvent) GetSender() *User {
 	return w.Sender
 }
 
-// GetWorkflow returns the Workflow field.
-func (w *WorkflowRunEvent) GetWorkflow() *Workflow {
-	if w == nil {
-		return nil
-	}
-	return w.Workflow
-}
-
-// GetWorkflowRun returns the WorkflowRun field.
-func (w *WorkflowRunEvent) GetWorkflowRun() *WorkflowRun {
-	if w == nil {
-		return nil
-	}
-	return w.WorkflowRun
-}
-
 // GetTotalCount returns the TotalCount field if it's non-nil, zero value otherwise.
 func (w *WorkflowRuns) GetTotalCount() int {
 	if w == nil || w.TotalCount == nil {
diff --git a/vendor/github.com/google/go-github/v35/github/github.go b/vendor/github.com/google/go-github/v34/github/github.go
similarity index 94%
rename from vendor/github.com/google/go-github/v35/github/github.go
rename to vendor/github.com/google/go-github/v34/github/github.go
index efde8f8d..4489dab2 100644
--- a/vendor/github.com/google/go-github/v35/github/github.go
+++ b/vendor/github.com/google/go-github/v34/github/github.go
@@ -132,8 +132,6 @@ const (
 	mediaTypeContentAttachmentsPreview = "application/vnd.github.corsair-preview+json"
 )
 
-var errNonNilContext = errors.New("context must be non-nil")
-
 // A Client manages communication with the GitHub API.
 type Client struct {
 	clientMu sync.Mutex   // clientMu protects the client during calls that modify the CheckRedirect func.
@@ -532,7 +530,7 @@ func parseRate(r *http.Response) Rate {
 // canceled or times out, ctx.Err() will be returned.
 func (c *Client) BareDo(ctx context.Context, req *http.Request) (*Response, error) {
 	if ctx == nil {
-		return nil, errNonNilContext
+		return nil, errors.New("context must be non-nil")
 	}
 	req = withContext(ctx, req)
 
@@ -655,20 +653,6 @@ func (c *Client) checkRateLimitBeforeDo(req *http.Request, rateLimitCategory rat
 	return nil
 }
 
-// compareHttpResponse returns whether two http.Response objects are equal or not.
-// Currently, only StatusCode is checked. This function is used when implementing the
-// Is(error) bool interface for the custom error types in this package.
-func compareHttpResponse(r1, r2 *http.Response) bool {
-	if r1 == nil && r2 == nil {
-		return true
-	}
-
-	if r1 != nil && r2 != nil {
-		return r1.StatusCode == r2.StatusCode
-	}
-	return false
-}
-
 /*
 An ErrorResponse reports one or more errors caused by an API request.
 
@@ -697,50 +681,6 @@ func (r *ErrorResponse) Error() string {
 		r.Response.StatusCode, r.Message, r.Errors)
 }
 
-// Is returns whether the provided error equals this error.
-func (r *ErrorResponse) Is(target error) bool {
-	v, ok := target.(*ErrorResponse)
-	if !ok {
-		return false
-	}
-
-	if r.Message != v.Message || (r.DocumentationURL != v.DocumentationURL) ||
-		!compareHttpResponse(r.Response, v.Response) {
-		return false
-	}
-
-	// Compare Errors.
-	if len(r.Errors) != len(v.Errors) {
-		return false
-	}
-	for idx := range r.Errors {
-		if r.Errors[idx] != v.Errors[idx] {
-			return false
-		}
-	}
-
-	// Compare Block.
-	if (r.Block != nil && v.Block == nil) || (r.Block == nil && v.Block != nil) {
-		return false
-	}
-	if r.Block != nil && v.Block != nil {
-		if r.Block.Reason != v.Block.Reason {
-			return false
-		}
-		if (r.Block.CreatedAt != nil && v.Block.CreatedAt == nil) || (r.Block.CreatedAt ==
-			nil && v.Block.CreatedAt != nil) {
-			return false
-		}
-		if r.Block.CreatedAt != nil && v.Block.CreatedAt != nil {
-			if *(r.Block.CreatedAt) != *(v.Block.CreatedAt) {
-				return false
-			}
-		}
-	}
-
-	return true
-}
-
 // TwoFactorAuthError occurs when using HTTP Basic Authentication for a user
 // that has two-factor authentication enabled. The request can be reattempted
 // by providing a one-time password in the request.
@@ -762,18 +702,6 @@ func (r *RateLimitError) Error() string {
 		r.Response.StatusCode, r.Message, formatRateReset(time.Until(r.Rate.Reset.Time)))
 }
 
-// Is returns whether the provided error equals this error.
-func (r *RateLimitError) Is(target error) bool {
-	v, ok := target.(*RateLimitError)
-	if !ok {
-		return false
-	}
-
-	return r.Rate == v.Rate &&
-		r.Message == v.Message &&
-		compareHttpResponse(r.Response, v.Response)
-}
-
 // AcceptedError occurs when GitHub returns 202 Accepted response with an
 // empty body, which means a job was scheduled on the GitHub side to process
 // the information needed and cache it.
@@ -789,15 +717,6 @@ func (*AcceptedError) Error() string {
 	return "job scheduled on GitHub side; try again later"
 }
 
-// Is returns whether the provided error equals this error.
-func (ae *AcceptedError) Is(target error) bool {
-	v, ok := target.(*AcceptedError)
-	if !ok {
-		return false
-	}
-	return bytes.Compare(ae.Raw, v.Raw) == 0
-}
-
 // AbuseRateLimitError occurs when GitHub returns 403 Forbidden response with the
 // "documentation_url" field value equal to "https://docs.github.com/en/free-pro-team@latest/rest/reference/#abuse-rate-limits".
 type AbuseRateLimitError struct {
@@ -816,18 +735,6 @@ func (r *AbuseRateLimitError) Error() string {
 		r.Response.StatusCode, r.Message)
 }
 
-// Is returns whether the provided error equals this error.
-func (r *AbuseRateLimitError) Is(target error) bool {
-	v, ok := target.(*AbuseRateLimitError)
-	if !ok {
-		return false
-	}
-
-	return r.Message == v.Message &&
-		r.RetryAfter == v.RetryAfter &&
-		compareHttpResponse(r.Response, v.Response)
-}
-
 // sanitizeURL redacts the client_secret parameter from the URL which may be
 // exposed to the user.
 func sanitizeURL(uri *url.URL) *url.URL {
diff --git a/vendor/github.com/google/go-github/v35/github/gitignore.go b/vendor/github.com/google/go-github/v34/github/gitignore.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/gitignore.go
rename to vendor/github.com/google/go-github/v34/github/gitignore.go
diff --git a/vendor/github.com/google/go-github/v35/github/interactions.go b/vendor/github.com/google/go-github/v34/github/interactions.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/interactions.go
rename to vendor/github.com/google/go-github/v34/github/interactions.go
diff --git a/vendor/github.com/google/go-github/v35/github/interactions_orgs.go b/vendor/github.com/google/go-github/v34/github/interactions_orgs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/interactions_orgs.go
rename to vendor/github.com/google/go-github/v34/github/interactions_orgs.go
diff --git a/vendor/github.com/google/go-github/v35/github/interactions_repos.go b/vendor/github.com/google/go-github/v34/github/interactions_repos.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/interactions_repos.go
rename to vendor/github.com/google/go-github/v34/github/interactions_repos.go
diff --git a/vendor/github.com/google/go-github/v35/github/issue_import.go b/vendor/github.com/google/go-github/v34/github/issue_import.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issue_import.go
rename to vendor/github.com/google/go-github/v34/github/issue_import.go
diff --git a/vendor/github.com/google/go-github/v35/github/issues.go b/vendor/github.com/google/go-github/v34/github/issues.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issues.go
rename to vendor/github.com/google/go-github/v34/github/issues.go
diff --git a/vendor/github.com/google/go-github/v35/github/issues_assignees.go b/vendor/github.com/google/go-github/v34/github/issues_assignees.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issues_assignees.go
rename to vendor/github.com/google/go-github/v34/github/issues_assignees.go
diff --git a/vendor/github.com/google/go-github/v35/github/issues_comments.go b/vendor/github.com/google/go-github/v34/github/issues_comments.go
similarity index 95%
rename from vendor/github.com/google/go-github/v35/github/issues_comments.go
rename to vendor/github.com/google/go-github/v34/github/issues_comments.go
index 6dd6d132..18371639 100644
--- a/vendor/github.com/google/go-github/v35/github/issues_comments.go
+++ b/vendor/github.com/google/go-github/v34/github/issues_comments.go
@@ -35,12 +35,6 @@ func (i IssueComment) String() string {
 // IssueListCommentsOptions specifies the optional parameters to the
 // IssuesService.ListComments method.
 type IssueListCommentsOptions struct {
-	// Sort specifies how to sort comments. Possible values are: created, updated.
-	Sort *string `url:"sort,omitempty"`
-
-	// Direction in which to sort comments. Possible values are: asc, desc.
-	Direction *string `url:"direction,omitempty"`
-
 	// Since filters comments by time.
 	Since *time.Time `url:"since,omitempty"`
 
diff --git a/vendor/github.com/google/go-github/v35/github/issues_events.go b/vendor/github.com/google/go-github/v34/github/issues_events.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issues_events.go
rename to vendor/github.com/google/go-github/v34/github/issues_events.go
diff --git a/vendor/github.com/google/go-github/v35/github/issues_labels.go b/vendor/github.com/google/go-github/v34/github/issues_labels.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issues_labels.go
rename to vendor/github.com/google/go-github/v34/github/issues_labels.go
diff --git a/vendor/github.com/google/go-github/v35/github/issues_milestones.go b/vendor/github.com/google/go-github/v34/github/issues_milestones.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issues_milestones.go
rename to vendor/github.com/google/go-github/v34/github/issues_milestones.go
diff --git a/vendor/github.com/google/go-github/v35/github/issues_timeline.go b/vendor/github.com/google/go-github/v34/github/issues_timeline.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/issues_timeline.go
rename to vendor/github.com/google/go-github/v34/github/issues_timeline.go
diff --git a/vendor/github.com/google/go-github/v35/github/licenses.go b/vendor/github.com/google/go-github/v34/github/licenses.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/licenses.go
rename to vendor/github.com/google/go-github/v34/github/licenses.go
diff --git a/vendor/github.com/google/go-github/v35/github/messages.go b/vendor/github.com/google/go-github/v34/github/messages.go
similarity index 99%
rename from vendor/github.com/google/go-github/v35/github/messages.go
rename to vendor/github.com/google/go-github/v34/github/messages.go
index 98a76da6..428684d6 100644
--- a/vendor/github.com/google/go-github/v35/github/messages.go
+++ b/vendor/github.com/google/go-github/v34/github/messages.go
@@ -74,10 +74,9 @@ var (
 		"project_card":                   "ProjectCardEvent",
 		"project_column":                 "ProjectColumnEvent",
 		"public":                         "PublicEvent",
-		"pull_request":                   "PullRequestEvent",
 		"pull_request_review":            "PullRequestReviewEvent",
 		"pull_request_review_comment":    "PullRequestReviewCommentEvent",
-		"pull_request_target":            "PullRequestTargetEvent",
+		"pull_request":                   "PullRequestEvent",
 		"push":                           "PushEvent",
 		"repository":                     "RepositoryEvent",
 		"repository_dispatch":            "RepositoryDispatchEvent",
diff --git a/vendor/github.com/google/go-github/v35/github/migrations.go b/vendor/github.com/google/go-github/v34/github/migrations.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/migrations.go
rename to vendor/github.com/google/go-github/v34/github/migrations.go
diff --git a/vendor/github.com/google/go-github/v35/github/migrations_source_import.go b/vendor/github.com/google/go-github/v34/github/migrations_source_import.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/migrations_source_import.go
rename to vendor/github.com/google/go-github/v34/github/migrations_source_import.go
diff --git a/vendor/github.com/google/go-github/v35/github/migrations_user.go b/vendor/github.com/google/go-github/v34/github/migrations_user.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/migrations_user.go
rename to vendor/github.com/google/go-github/v34/github/migrations_user.go
diff --git a/vendor/github.com/google/go-github/v35/github/misc.go b/vendor/github.com/google/go-github/v34/github/misc.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/misc.go
rename to vendor/github.com/google/go-github/v34/github/misc.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs.go b/vendor/github.com/google/go-github/v34/github/orgs.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs.go
rename to vendor/github.com/google/go-github/v34/github/orgs.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_actions_allowed.go b/vendor/github.com/google/go-github/v34/github/orgs_actions_allowed.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs_actions_allowed.go
rename to vendor/github.com/google/go-github/v34/github/orgs_actions_allowed.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_actions_permissions.go b/vendor/github.com/google/go-github/v34/github/orgs_actions_permissions.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs_actions_permissions.go
rename to vendor/github.com/google/go-github/v34/github/orgs_actions_permissions.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_audit_log.go b/vendor/github.com/google/go-github/v34/github/orgs_audit_log.go
similarity index 99%
rename from vendor/github.com/google/go-github/v35/github/orgs_audit_log.go
rename to vendor/github.com/google/go-github/v34/github/orgs_audit_log.go
index 81f0edac..e91f0009 100644
--- a/vendor/github.com/google/go-github/v35/github/orgs_audit_log.go
+++ b/vendor/github.com/google/go-github/v34/github/orgs_audit_log.go
@@ -53,7 +53,7 @@ type AuditEntry struct {
 	Fingerprint           *string     `json:"fingerprint,omitempty"`
 	HeadBranch            *string     `json:"head_branch,omitempty"`
 	HeadSHA               *string     `json:"head_sha,omitempty"`
-	HookID                *int64      `json:"hook_id,omitempty"`
+	HookID                *string     `json:"hook_id,omitempty"`
 	IsHostedRunner        *bool       `json:"is_hosted_runner,omitempty"`
 	JobName               *string     `json:"job_name,omitempty"`
 	LimitedAvailability   *bool       `json:"limited_availability,omitempty"`
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_hooks.go b/vendor/github.com/google/go-github/v34/github/orgs_hooks.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs_hooks.go
rename to vendor/github.com/google/go-github/v34/github/orgs_hooks.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_members.go b/vendor/github.com/google/go-github/v34/github/orgs_members.go
similarity index 94%
rename from vendor/github.com/google/go-github/v35/github/orgs_members.go
rename to vendor/github.com/google/go-github/v34/github/orgs_members.go
index f3a2f17c..311ebc68 100644
--- a/vendor/github.com/google/go-github/v35/github/orgs_members.go
+++ b/vendor/github.com/google/go-github/v34/github/orgs_members.go
@@ -362,27 +362,3 @@ func (s *OrganizationsService) ListOrgInvitationTeams(ctx context.Context, org,
 	}
 	return orgInvitationTeams, resp, nil
 }
-
-// ListFailedOrgInvitations returns a list of failed inviatations.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/orgs#list-failed-organization-invitations
-func (s *OrganizationsService) ListFailedOrgInvitations(ctx context.Context, org string, opts *ListOptions) ([]*Invitation, *Response, error) {
-	u := fmt.Sprintf("orgs/%v/failed_invitations", org)
-	u, err := addOptions(u, opts)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	req, err := s.client.NewRequest("GET", u, nil)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	var failedInvitations []*Invitation
-	resp, err := s.client.Do(ctx, req, &failedInvitations)
-	if err != nil {
-		return nil, resp, err
-	}
-
-	return failedInvitations, resp, nil
-}
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_outside_collaborators.go b/vendor/github.com/google/go-github/v34/github/orgs_outside_collaborators.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs_outside_collaborators.go
rename to vendor/github.com/google/go-github/v34/github/orgs_outside_collaborators.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_projects.go b/vendor/github.com/google/go-github/v34/github/orgs_projects.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs_projects.go
rename to vendor/github.com/google/go-github/v34/github/orgs_projects.go
diff --git a/vendor/github.com/google/go-github/v35/github/orgs_users_blocking.go b/vendor/github.com/google/go-github/v34/github/orgs_users_blocking.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/orgs_users_blocking.go
rename to vendor/github.com/google/go-github/v34/github/orgs_users_blocking.go
diff --git a/vendor/github.com/google/go-github/v35/github/packages.go b/vendor/github.com/google/go-github/v34/github/packages.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/packages.go
rename to vendor/github.com/google/go-github/v34/github/packages.go
diff --git a/vendor/github.com/google/go-github/v35/github/projects.go b/vendor/github.com/google/go-github/v34/github/projects.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/projects.go
rename to vendor/github.com/google/go-github/v34/github/projects.go
diff --git a/vendor/github.com/google/go-github/v35/github/pulls.go b/vendor/github.com/google/go-github/v34/github/pulls.go
similarity index 99%
rename from vendor/github.com/google/go-github/v35/github/pulls.go
rename to vendor/github.com/google/go-github/v34/github/pulls.go
index 0b48c232..071eb121 100644
--- a/vendor/github.com/google/go-github/v35/github/pulls.go
+++ b/vendor/github.com/google/go-github/v34/github/pulls.go
@@ -64,7 +64,7 @@ type PullRequest struct {
 	RequestedReviewers  []*User    `json:"requested_reviewers,omitempty"`
 
 	// RequestedTeams is populated as part of the PullRequestEvent.
-	// See, https://docs.github.com/en/developers/webhooks-and-events/github-event-types#pullrequestevent for an example.
+	// See, https://docs.github.com/en/free-pro-team@latest/rest/reference/activity/events/types/#pullrequestevent for an example.
 	RequestedTeams []*Team `json:"requested_teams,omitempty"`
 
 	Links *PRLinks           `json:"_links,omitempty"`
diff --git a/vendor/github.com/google/go-github/v35/github/pulls_comments.go b/vendor/github.com/google/go-github/v34/github/pulls_comments.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/pulls_comments.go
rename to vendor/github.com/google/go-github/v34/github/pulls_comments.go
diff --git a/vendor/github.com/google/go-github/v35/github/pulls_reviewers.go b/vendor/github.com/google/go-github/v34/github/pulls_reviewers.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/pulls_reviewers.go
rename to vendor/github.com/google/go-github/v34/github/pulls_reviewers.go
diff --git a/vendor/github.com/google/go-github/v35/github/pulls_reviews.go b/vendor/github.com/google/go-github/v34/github/pulls_reviews.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/pulls_reviews.go
rename to vendor/github.com/google/go-github/v34/github/pulls_reviews.go
diff --git a/vendor/github.com/google/go-github/v35/github/reactions.go b/vendor/github.com/google/go-github/v34/github/reactions.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/reactions.go
rename to vendor/github.com/google/go-github/v34/github/reactions.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos.go b/vendor/github.com/google/go-github/v34/github/repos.go
similarity index 95%
rename from vendor/github.com/google/go-github/v35/github/repos.go
rename to vendor/github.com/google/go-github/v34/github/repos.go
index 73e05f23..989f2756 100644
--- a/vendor/github.com/google/go-github/v35/github/repos.go
+++ b/vendor/github.com/google/go-github/v34/github/repos.go
@@ -20,47 +20,47 @@ type RepositoriesService service
 
 // Repository represents a GitHub repository.
 type Repository struct {
-	ID                  *int64          `json:"id,omitempty"`
-	NodeID              *string         `json:"node_id,omitempty"`
-	Owner               *User           `json:"owner,omitempty"`
-	Name                *string         `json:"name,omitempty"`
-	FullName            *string         `json:"full_name,omitempty"`
-	Description         *string         `json:"description,omitempty"`
-	Homepage            *string         `json:"homepage,omitempty"`
-	CodeOfConduct       *CodeOfConduct  `json:"code_of_conduct,omitempty"`
-	DefaultBranch       *string         `json:"default_branch,omitempty"`
-	MasterBranch        *string         `json:"master_branch,omitempty"`
-	CreatedAt           *Timestamp      `json:"created_at,omitempty"`
-	PushedAt            *Timestamp      `json:"pushed_at,omitempty"`
-	UpdatedAt           *Timestamp      `json:"updated_at,omitempty"`
-	HTMLURL             *string         `json:"html_url,omitempty"`
-	CloneURL            *string         `json:"clone_url,omitempty"`
-	GitURL              *string         `json:"git_url,omitempty"`
-	MirrorURL           *string         `json:"mirror_url,omitempty"`
-	SSHURL              *string         `json:"ssh_url,omitempty"`
-	SVNURL              *string         `json:"svn_url,omitempty"`
-	Language            *string         `json:"language,omitempty"`
-	Fork                *bool           `json:"fork,omitempty"`
-	ForksCount          *int            `json:"forks_count,omitempty"`
-	NetworkCount        *int            `json:"network_count,omitempty"`
-	OpenIssuesCount     *int            `json:"open_issues_count,omitempty"`
-	StargazersCount     *int            `json:"stargazers_count,omitempty"`
-	SubscribersCount    *int            `json:"subscribers_count,omitempty"`
-	WatchersCount       *int            `json:"watchers_count,omitempty"`
-	Size                *int            `json:"size,omitempty"`
-	AutoInit            *bool           `json:"auto_init,omitempty"`
-	Parent              *Repository     `json:"parent,omitempty"`
-	Source              *Repository     `json:"source,omitempty"`
-	TemplateRepository  *Repository     `json:"template_repository,omitempty"`
-	Organization        *Organization   `json:"organization,omitempty"`
-	Permissions         map[string]bool `json:"permissions,omitempty"`
-	AllowRebaseMerge    *bool           `json:"allow_rebase_merge,omitempty"`
-	AllowSquashMerge    *bool           `json:"allow_squash_merge,omitempty"`
-	AllowMergeCommit    *bool           `json:"allow_merge_commit,omitempty"`
-	DeleteBranchOnMerge *bool           `json:"delete_branch_on_merge,omitempty"`
-	Topics              []string        `json:"topics,omitempty"`
-	Archived            *bool           `json:"archived,omitempty"`
-	Disabled            *bool           `json:"disabled,omitempty"`
+	ID                  *int64           `json:"id,omitempty"`
+	NodeID              *string          `json:"node_id,omitempty"`
+	Owner               *User            `json:"owner,omitempty"`
+	Name                *string          `json:"name,omitempty"`
+	FullName            *string          `json:"full_name,omitempty"`
+	Description         *string          `json:"description,omitempty"`
+	Homepage            *string          `json:"homepage,omitempty"`
+	CodeOfConduct       *CodeOfConduct   `json:"code_of_conduct,omitempty"`
+	DefaultBranch       *string          `json:"default_branch,omitempty"`
+	MasterBranch        *string          `json:"master_branch,omitempty"`
+	CreatedAt           *Timestamp       `json:"created_at,omitempty"`
+	PushedAt            *Timestamp       `json:"pushed_at,omitempty"`
+	UpdatedAt           *Timestamp       `json:"updated_at,omitempty"`
+	HTMLURL             *string          `json:"html_url,omitempty"`
+	CloneURL            *string          `json:"clone_url,omitempty"`
+	GitURL              *string          `json:"git_url,omitempty"`
+	MirrorURL           *string          `json:"mirror_url,omitempty"`
+	SSHURL              *string          `json:"ssh_url,omitempty"`
+	SVNURL              *string          `json:"svn_url,omitempty"`
+	Language            *string          `json:"language,omitempty"`
+	Fork                *bool            `json:"fork,omitempty"`
+	ForksCount          *int             `json:"forks_count,omitempty"`
+	NetworkCount        *int             `json:"network_count,omitempty"`
+	OpenIssuesCount     *int             `json:"open_issues_count,omitempty"`
+	StargazersCount     *int             `json:"stargazers_count,omitempty"`
+	SubscribersCount    *int             `json:"subscribers_count,omitempty"`
+	WatchersCount       *int             `json:"watchers_count,omitempty"`
+	Size                *int             `json:"size,omitempty"`
+	AutoInit            *bool            `json:"auto_init,omitempty"`
+	Parent              *Repository      `json:"parent,omitempty"`
+	Source              *Repository      `json:"source,omitempty"`
+	TemplateRepository  *Repository      `json:"template_repository,omitempty"`
+	Organization        *Organization    `json:"organization,omitempty"`
+	Permissions         *map[string]bool `json:"permissions,omitempty"`
+	AllowRebaseMerge    *bool            `json:"allow_rebase_merge,omitempty"`
+	AllowSquashMerge    *bool            `json:"allow_squash_merge,omitempty"`
+	AllowMergeCommit    *bool            `json:"allow_merge_commit,omitempty"`
+	DeleteBranchOnMerge *bool            `json:"delete_branch_on_merge,omitempty"`
+	Topics              []string         `json:"topics,omitempty"`
+	Archived            *bool            `json:"archived,omitempty"`
+	Disabled            *bool            `json:"disabled,omitempty"`
 
 	// Only provided when using RepositoriesService.Get while in preview
 	License *License `json:"license,omitempty"`
@@ -833,7 +833,7 @@ type PullRequestReviewsEnforcementUpdate struct {
 	RequiredApprovingReviewCount int `json:"required_approving_review_count"`
 }
 
-// RequireLinearHistory represents the configuration to enforce branches with no merge commit.
+// RequireLinearHistory represents the configuration to enfore branches with no merge commit.
 type RequireLinearHistory struct {
 	Enabled bool `json:"enabled"`
 }
diff --git a/vendor/github.com/google/go-github/v35/github/repos_collaborators.go b/vendor/github.com/google/go-github/v34/github/repos_collaborators.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_collaborators.go
rename to vendor/github.com/google/go-github/v34/github/repos_collaborators.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_comments.go b/vendor/github.com/google/go-github/v34/github/repos_comments.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_comments.go
rename to vendor/github.com/google/go-github/v34/github/repos_comments.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_commits.go b/vendor/github.com/google/go-github/v34/github/repos_commits.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_commits.go
rename to vendor/github.com/google/go-github/v34/github/repos_commits.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_community_health.go b/vendor/github.com/google/go-github/v34/github/repos_community_health.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_community_health.go
rename to vendor/github.com/google/go-github/v34/github/repos_community_health.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_contents.go b/vendor/github.com/google/go-github/v34/github/repos_contents.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_contents.go
rename to vendor/github.com/google/go-github/v34/github/repos_contents.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_deployments.go b/vendor/github.com/google/go-github/v34/github/repos_deployments.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_deployments.go
rename to vendor/github.com/google/go-github/v34/github/repos_deployments.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_forks.go b/vendor/github.com/google/go-github/v34/github/repos_forks.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_forks.go
rename to vendor/github.com/google/go-github/v34/github/repos_forks.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_hooks.go b/vendor/github.com/google/go-github/v34/github/repos_hooks.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_hooks.go
rename to vendor/github.com/google/go-github/v34/github/repos_hooks.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_invitations.go b/vendor/github.com/google/go-github/v34/github/repos_invitations.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_invitations.go
rename to vendor/github.com/google/go-github/v34/github/repos_invitations.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_keys.go b/vendor/github.com/google/go-github/v34/github/repos_keys.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_keys.go
rename to vendor/github.com/google/go-github/v34/github/repos_keys.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_merging.go b/vendor/github.com/google/go-github/v34/github/repos_merging.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_merging.go
rename to vendor/github.com/google/go-github/v34/github/repos_merging.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_pages.go b/vendor/github.com/google/go-github/v34/github/repos_pages.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_pages.go
rename to vendor/github.com/google/go-github/v34/github/repos_pages.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_prereceive_hooks.go b/vendor/github.com/google/go-github/v34/github/repos_prereceive_hooks.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_prereceive_hooks.go
rename to vendor/github.com/google/go-github/v34/github/repos_prereceive_hooks.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_projects.go b/vendor/github.com/google/go-github/v34/github/repos_projects.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_projects.go
rename to vendor/github.com/google/go-github/v34/github/repos_projects.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_releases.go b/vendor/github.com/google/go-github/v34/github/repos_releases.go
similarity index 89%
rename from vendor/github.com/google/go-github/v35/github/repos_releases.go
rename to vendor/github.com/google/go-github/v34/github/repos_releases.go
index f7b03f2e..f25300d6 100644
--- a/vendor/github.com/google/go-github/v35/github/repos_releases.go
+++ b/vendor/github.com/google/go-github/v34/github/repos_releases.go
@@ -19,13 +19,12 @@ import (
 
 // RepositoryRelease represents a GitHub release in a repository.
 type RepositoryRelease struct {
-	TagName                *string `json:"tag_name,omitempty"`
-	TargetCommitish        *string `json:"target_commitish,omitempty"`
-	Name                   *string `json:"name,omitempty"`
-	Body                   *string `json:"body,omitempty"`
-	Draft                  *bool   `json:"draft,omitempty"`
-	Prerelease             *bool   `json:"prerelease,omitempty"`
-	DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
+	TagName         *string `json:"tag_name,omitempty"`
+	TargetCommitish *string `json:"target_commitish,omitempty"`
+	Name            *string `json:"name,omitempty"`
+	Body            *string `json:"body,omitempty"`
+	Draft           *bool   `json:"draft,omitempty"`
+	Prerelease      *bool   `json:"prerelease,omitempty"`
 
 	// The following fields are not used in CreateRelease or EditRelease:
 	ID          *int64          `json:"id,omitempty"`
@@ -135,13 +134,12 @@ func (s *RepositoriesService) getSingleRelease(ctx context.Context, url string)
 // See https://github.com/google/go-github/issues/992 for more
 // information.
 type repositoryReleaseRequest struct {
-	TagName                *string `json:"tag_name,omitempty"`
-	TargetCommitish        *string `json:"target_commitish,omitempty"`
-	Name                   *string `json:"name,omitempty"`
-	Body                   *string `json:"body,omitempty"`
-	Draft                  *bool   `json:"draft,omitempty"`
-	Prerelease             *bool   `json:"prerelease,omitempty"`
-	DiscussionCategoryName *string `json:"discussion_category_name,omitempty"`
+	TagName         *string `json:"tag_name,omitempty"`
+	TargetCommitish *string `json:"target_commitish,omitempty"`
+	Name            *string `json:"name,omitempty"`
+	Body            *string `json:"body,omitempty"`
+	Draft           *bool   `json:"draft,omitempty"`
+	Prerelease      *bool   `json:"prerelease,omitempty"`
 }
 
 // CreateRelease adds a new release for a repository.
@@ -154,13 +152,12 @@ func (s *RepositoriesService) CreateRelease(ctx context.Context, owner, repo str
 	u := fmt.Sprintf("repos/%s/%s/releases", owner, repo)
 
 	releaseReq := &repositoryReleaseRequest{
-		TagName:                release.TagName,
-		TargetCommitish:        release.TargetCommitish,
-		Name:                   release.Name,
-		Body:                   release.Body,
-		Draft:                  release.Draft,
-		Prerelease:             release.Prerelease,
-		DiscussionCategoryName: release.DiscussionCategoryName,
+		TagName:         release.TagName,
+		TargetCommitish: release.TargetCommitish,
+		Name:            release.Name,
+		Body:            release.Body,
+		Draft:           release.Draft,
+		Prerelease:      release.Prerelease,
 	}
 
 	req, err := s.client.NewRequest("POST", u, releaseReq)
@@ -186,13 +183,12 @@ func (s *RepositoriesService) EditRelease(ctx context.Context, owner, repo strin
 	u := fmt.Sprintf("repos/%s/%s/releases/%d", owner, repo, id)
 
 	releaseReq := &repositoryReleaseRequest{
-		TagName:                release.TagName,
-		TargetCommitish:        release.TargetCommitish,
-		Name:                   release.Name,
-		Body:                   release.Body,
-		Draft:                  release.Draft,
-		Prerelease:             release.Prerelease,
-		DiscussionCategoryName: release.DiscussionCategoryName,
+		TagName:         release.TagName,
+		TargetCommitish: release.TargetCommitish,
+		Name:            release.Name,
+		Body:            release.Body,
+		Draft:           release.Draft,
+		Prerelease:      release.Prerelease,
 	}
 
 	req, err := s.client.NewRequest("PATCH", u, releaseReq)
diff --git a/vendor/github.com/google/go-github/v35/github/repos_stats.go b/vendor/github.com/google/go-github/v34/github/repos_stats.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_stats.go
rename to vendor/github.com/google/go-github/v34/github/repos_stats.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_statuses.go b/vendor/github.com/google/go-github/v34/github/repos_statuses.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_statuses.go
rename to vendor/github.com/google/go-github/v34/github/repos_statuses.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_traffic.go b/vendor/github.com/google/go-github/v34/github/repos_traffic.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/repos_traffic.go
rename to vendor/github.com/google/go-github/v34/github/repos_traffic.go
diff --git a/vendor/github.com/google/go-github/v35/github/search.go b/vendor/github.com/google/go-github/v34/github/search.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/search.go
rename to vendor/github.com/google/go-github/v34/github/search.go
diff --git a/vendor/github.com/google/go-github/v35/github/strings.go b/vendor/github.com/google/go-github/v34/github/strings.go
similarity index 96%
rename from vendor/github.com/google/go-github/v35/github/strings.go
rename to vendor/github.com/google/go-github/v34/github/strings.go
index 5611b96a..431e1cc6 100644
--- a/vendor/github.com/google/go-github/v35/github/strings.go
+++ b/vendor/github.com/google/go-github/v34/github/strings.go
@@ -72,9 +72,6 @@ func stringifyValue(w io.Writer, val reflect.Value) {
 			if fv.Kind() == reflect.Slice && fv.IsNil() {
 				continue
 			}
-			if fv.Kind() == reflect.Map && fv.IsNil() {
-				continue
-			}
 
 			if sep {
 				w.Write([]byte(", "))
diff --git a/vendor/github.com/google/go-github/v35/github/teams.go b/vendor/github.com/google/go-github/v34/github/teams.go
similarity index 98%
rename from vendor/github.com/google/go-github/v35/github/teams.go
rename to vendor/github.com/google/go-github/v34/github/teams.go
index 7a8a5d8a..592a11fd 100644
--- a/vendor/github.com/google/go-github/v35/github/teams.go
+++ b/vendor/github.com/google/go-github/v34/github/teams.go
@@ -32,10 +32,6 @@ type Team struct {
 	// Permission specifies the default permission for repositories owned by the team.
 	Permission *string `json:"permission,omitempty"`
 
-	// Permissions identifies the permissions that a team has on a given
-	// repository. This is only populated when calling Repositories.ListTeams.
-	Permissions map[string]bool `json:"permissions,omitempty"`
-
 	// Privacy identifies the level of privacy this team should have.
 	// Possible values are:
 	//     secret - only visible to organization owners and members of this team
@@ -71,8 +67,6 @@ type Invitation struct {
 	Inviter           *User      `json:"inviter,omitempty"`
 	TeamCount         *int       `json:"team_count,omitempty"`
 	InvitationTeamURL *string    `json:"invitation_team_url,omitempty"`
-	FailedAt          *Timestamp `json:"failed_at,omitempty"`
-	FailedReason      *string    `json:"failed_reason,omitempty"`
 }
 
 func (i Invitation) String() string {
diff --git a/vendor/github.com/google/go-github/v35/github/teams_discussion_comments.go b/vendor/github.com/google/go-github/v34/github/teams_discussion_comments.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/teams_discussion_comments.go
rename to vendor/github.com/google/go-github/v34/github/teams_discussion_comments.go
diff --git a/vendor/github.com/google/go-github/v35/github/teams_discussions.go b/vendor/github.com/google/go-github/v34/github/teams_discussions.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/teams_discussions.go
rename to vendor/github.com/google/go-github/v34/github/teams_discussions.go
diff --git a/vendor/github.com/google/go-github/v35/github/teams_members.go b/vendor/github.com/google/go-github/v34/github/teams_members.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/teams_members.go
rename to vendor/github.com/google/go-github/v34/github/teams_members.go
diff --git a/vendor/github.com/google/go-github/v35/github/timestamp.go b/vendor/github.com/google/go-github/v34/github/timestamp.go
similarity index 94%
rename from vendor/github.com/google/go-github/v35/github/timestamp.go
rename to vendor/github.com/google/go-github/v34/github/timestamp.go
index 1061a55e..90929d57 100644
--- a/vendor/github.com/google/go-github/v35/github/timestamp.go
+++ b/vendor/github.com/google/go-github/v34/github/timestamp.go
@@ -29,9 +29,6 @@ func (t *Timestamp) UnmarshalJSON(data []byte) (err error) {
 	i, err := strconv.ParseInt(str, 10, 64)
 	if err == nil {
 		t.Time = time.Unix(i, 0)
-		if t.Time.Year() > 3000 {
-			t.Time = time.Unix(0, i*1e6)
-		}
 	} else {
 		t.Time, err = time.Parse(`"`+time.RFC3339+`"`, str)
 	}
diff --git a/vendor/github.com/google/go-github/v35/github/users.go b/vendor/github.com/google/go-github/v34/github/users.go
similarity index 99%
rename from vendor/github.com/google/go-github/v35/github/users.go
rename to vendor/github.com/google/go-github/v34/github/users.go
index f45b1f67..38daece3 100644
--- a/vendor/github.com/google/go-github/v35/github/users.go
+++ b/vendor/github.com/google/go-github/v34/github/users.go
@@ -68,7 +68,7 @@ type User struct {
 
 	// Permissions identifies the permissions that a user has on a given
 	// repository. This is only populated when calling Repositories.ListCollaborators.
-	Permissions map[string]bool `json:"permissions,omitempty"`
+	Permissions *map[string]bool `json:"permissions,omitempty"`
 }
 
 func (u User) String() string {
diff --git a/vendor/github.com/google/go-github/v35/github/users_administration.go b/vendor/github.com/google/go-github/v34/github/users_administration.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_administration.go
rename to vendor/github.com/google/go-github/v34/github/users_administration.go
diff --git a/vendor/github.com/google/go-github/v35/github/users_blocking.go b/vendor/github.com/google/go-github/v34/github/users_blocking.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_blocking.go
rename to vendor/github.com/google/go-github/v34/github/users_blocking.go
diff --git a/vendor/github.com/google/go-github/v35/github/users_emails.go b/vendor/github.com/google/go-github/v34/github/users_emails.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_emails.go
rename to vendor/github.com/google/go-github/v34/github/users_emails.go
diff --git a/vendor/github.com/google/go-github/v35/github/users_followers.go b/vendor/github.com/google/go-github/v34/github/users_followers.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_followers.go
rename to vendor/github.com/google/go-github/v34/github/users_followers.go
diff --git a/vendor/github.com/google/go-github/v35/github/users_gpg_keys.go b/vendor/github.com/google/go-github/v34/github/users_gpg_keys.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_gpg_keys.go
rename to vendor/github.com/google/go-github/v34/github/users_gpg_keys.go
diff --git a/vendor/github.com/google/go-github/v35/github/users_keys.go b/vendor/github.com/google/go-github/v34/github/users_keys.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_keys.go
rename to vendor/github.com/google/go-github/v34/github/users_keys.go
diff --git a/vendor/github.com/google/go-github/v35/github/users_projects.go b/vendor/github.com/google/go-github/v34/github/users_projects.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/users_projects.go
rename to vendor/github.com/google/go-github/v34/github/users_projects.go
diff --git a/vendor/github.com/google/go-github/v35/github/with_appengine.go b/vendor/github.com/google/go-github/v34/github/with_appengine.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/with_appengine.go
rename to vendor/github.com/google/go-github/v34/github/with_appengine.go
diff --git a/vendor/github.com/google/go-github/v35/github/without_appengine.go b/vendor/github.com/google/go-github/v34/github/without_appengine.go
similarity index 100%
rename from vendor/github.com/google/go-github/v35/github/without_appengine.go
rename to vendor/github.com/google/go-github/v34/github/without_appengine.go
diff --git a/vendor/github.com/google/go-github/v35/github/repos_environments.go b/vendor/github.com/google/go-github/v35/github/repos_environments.go
deleted file mode 100644
index 25cb005e..00000000
--- a/vendor/github.com/google/go-github/v35/github/repos_environments.go
+++ /dev/null
@@ -1,191 +0,0 @@
-// Copyright 2021 The go-github AUTHORS. All rights reserved.
-//
-// Use of this source code is governed by a BSD-style
-// license that can be found in the LICENSE file.
-
-package github
-
-import (
-	"context"
-	"encoding/json"
-	"fmt"
-)
-
-// Environment represents a single environment in a repository.
-type Environment struct {
-	Owner                  *string         `json:"owner,omitempty"`
-	Repo                   *string         `json:"repo,omitempty"`
-	EnvironmentName        *string         `json:"environment_name,omitempty"`
-	WaitTimer              *int            `json:"wait_timer,omitempty"`
-	Reviewers              []*EnvReviewers `json:"reviewers,omitempty"`
-	DeploymentBranchPolicy *BranchPolicy   `json:"deployment_branch_policy,omitempty"`
-	// Return/response only values
-	ID              *int64            `json:"id,omitempty"`
-	NodeID          *string           `json:"node_id,omitempty"`
-	Name            *string           `json:"name,omitempty"`
-	URL             *string           `json:"url,omitempty"`
-	HTMLURL         *string           `json:"html_url,omitempty"`
-	CreatedAt       *Timestamp        `json:"created_at,omitempty"`
-	UpdatedAt       *Timestamp        `json:"updated_at,omitempty"`
-	ProtectionRules []*ProtectionRule `json:"protection_rules,omitempty"`
-}
-
-// EnvReviewers represents a single environment reviewer entry.
-type EnvReviewers struct {
-	Type *string `json:"type,omitempty"`
-	ID   *int64  `json:"id,omitempty"`
-}
-
-// BranchPolicy represents the options for whether a branch deployment policy is applied to this environment.
-type BranchPolicy struct {
-	ProtectedBranches    *bool `json:"protected_branches,omitempty"`
-	CustomBranchPolicies *bool `json:"custom_branch_policies,omitempty"`
-}
-
-// EnvResponse represents the slightly different format of response that comes back when you list an environment.
-type EnvResponse struct {
-	TotalCount   *int           `json:"total_count,omitempty"`
-	Environments []*Environment `json:"environments,omitempty"`
-}
-
-// ProtectionRule represents a single protection rule applied to the environment.
-type ProtectionRule struct {
-	ID        *int64              `json:"id,omitempty"`
-	NodeID    *string             `json:"node_id,omitempty"`
-	Type      *string             `json:"type,omitempty"`
-	WaitTimer *int                `json:"wait_timer,omitempty"`
-	Reviewers []*RequiredReviewer `json:"reviewers,omitempty"`
-}
-
-// RequiredReviewer represents a required reviewer.
-type RequiredReviewer struct {
-	Type     *string     `json:"type,omitempty"`
-	Reviewer interface{} `json:"reviewer,omitempty"`
-}
-
-// UnmarshalJSON implements the json.Unmarshaler interface.
-// This helps us handle the fact that RequiredReviewer can have either a User or Team type reviewer field.
-func (r *RequiredReviewer) UnmarshalJSON(data []byte) error {
-	type aliasReviewer RequiredReviewer
-	var reviewer aliasReviewer
-	if err := json.Unmarshal(data, &reviewer); err != nil {
-		return err
-	}
-
-	r.Type = reviewer.Type
-
-	switch *reviewer.Type {
-	case "User":
-		reviewer.Reviewer = &User{}
-		if err := json.Unmarshal(data, &reviewer); err != nil {
-			return err
-		}
-		r.Reviewer = reviewer.Reviewer
-	case "Team":
-		reviewer.Reviewer = &Team{}
-		if err := json.Unmarshal(data, &reviewer); err != nil {
-			return err
-		}
-		r.Reviewer = reviewer.Reviewer
-	default:
-		r.Type = nil
-		r.Reviewer = nil
-		return fmt.Errorf("reviewer.Type is %T, not a string of 'User' or 'Team', unable to unmarshal", reviewer.Type)
-	}
-
-	return nil
-}
-
-// ListEnvironments lists all environments for a repository.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-all-environments
-func (s *RepositoriesService) ListEnvironments(ctx context.Context, owner, repo string) (*EnvResponse, *Response, error) {
-	u := fmt.Sprintf("repos/%s/%s/environments", owner, repo)
-
-	req, err := s.client.NewRequest("GET", u, nil)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	var list *EnvResponse
-	resp, err := s.client.Do(ctx, req, &list)
-	if err != nil {
-		return nil, resp, err
-	}
-	return list, resp, nil
-}
-
-// GetEnvironment get a single environment for a repository.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/repos#get-an-environment
-func (s *RepositoriesService) GetEnvironment(ctx context.Context, owner, repo, name string) (*Environment, *Response, error) {
-	u := fmt.Sprintf("repos/%s/%s/environments/%s", owner, repo, name)
-
-	req, err := s.client.NewRequest("GET", u, nil)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	var env *Environment
-	resp, err := s.client.Do(ctx, req, &env)
-	if err != nil {
-		return nil, resp, err
-	}
-	return env, resp, nil
-}
-
-// MarshalJSON implements the json.Marshaler interface.
-// As the only way to clear a WaitTimer is to set it to 0, a missing WaitTimer object should default to 0, not null.
-func (c *CreateUpdateEnvironment) MarshalJSON() ([]byte, error) {
-	type Alias CreateUpdateEnvironment
-	if c.WaitTimer == nil {
-		c.WaitTimer = Int(0)
-	}
-	return json.Marshal(&struct {
-		*Alias
-	}{
-		Alias: (*Alias)(c),
-	})
-}
-
-// CreateUpdateEnvironment represents the fields required for the create/update operation
-// following the Create/Update release example.
-// See https://github.com/google/go-github/issues/992 for more information.
-// Removed omitempty here as the API expects null values for reviewers and deployment_branch_policy to clear them.
-type CreateUpdateEnvironment struct {
-	WaitTimer              *int            `json:"wait_timer"`
-	Reviewers              []*EnvReviewers `json:"reviewers"`
-	DeploymentBranchPolicy *BranchPolicy   `json:"deployment_branch_policy"`
-}
-
-// CreateUpdateEnvironment create or update a new environment for a repository.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/repos#create-or-update-an-environment
-func (s *RepositoriesService) CreateUpdateEnvironment(ctx context.Context, owner, repo, name string, environment *CreateUpdateEnvironment) (*Environment, *Response, error) {
-	u := fmt.Sprintf("repos/%s/%s/environments/%s", owner, repo, name)
-
-	req, err := s.client.NewRequest("PUT", u, environment)
-	if err != nil {
-		return nil, nil, err
-	}
-
-	e := new(Environment)
-	resp, err := s.client.Do(ctx, req, e)
-	if err != nil {
-		return nil, resp, err
-	}
-	return e, resp, nil
-}
-
-// DeleteEnvironment delete an environment from a repository.
-//
-// GitHub API docs: https://docs.github.com/en/rest/reference/repos#delete-an-environment
-func (s *RepositoriesService) DeleteEnvironment(ctx context.Context, owner, repo, name string) (*Response, error) {
-	u := fmt.Sprintf("repos/%s/%s/environments/%s", owner, repo, name)
-
-	req, err := s.client.NewRequest("DELETE", u, nil)
-	if err != nil {
-		return nil, err
-	}
-	return s.client.Do(ctx, req, nil)
-}
diff --git a/vendor/github.com/tektoncd/pipeline/pkg/names/generate.go b/vendor/github.com/tektoncd/pipeline/pkg/names/generate.go
new file mode 100644
index 00000000..493408c5
--- /dev/null
+++ b/vendor/github.com/tektoncd/pipeline/pkg/names/generate.go
@@ -0,0 +1,72 @@
+/*
+Copyright 2019 The Tekton Authors
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+package names
+
+import (
+	"fmt"
+	"regexp"
+
+	utilrand "k8s.io/apimachinery/pkg/util/rand"
+)
+
+// NameGenerator generates names for objects. Some backends may have more information
+// available to guide selection of new names and this interface hides those details.
+type NameGenerator interface {
+	// RestrictLengthWithRandomSuffix generates a valid name from the base name, adding a random suffix to the
+	// the base. If base is valid, the returned name must also be valid. The generator is
+	// responsible for knowing the maximum valid name length.
+	RestrictLengthWithRandomSuffix(base string) string
+
+	// RestrictLength generates a valid name from the name of a step specified in a Task,
+	// shortening it to the maximum valid name length if needed.
+	RestrictLength(base string) string
+}
+
+// simpleNameGenerator generates random names.
+type simpleNameGenerator struct{}
+
+// SimpleNameGenerator is a generator that returns the name plus a random suffix of five alphanumerics
+// when a name is requested. The string is guaranteed to not exceed the length of a standard Kubernetes
+// name (63 characters)
+var SimpleNameGenerator NameGenerator = simpleNameGenerator{}
+
+const (
+	// TODO: make this flexible for non-core resources with alternate naming rules.
+	maxNameLength          = 63
+	randomLength           = 5
+	maxGeneratedNameLength = maxNameLength - randomLength - 1
+)
+
+func (simpleNameGenerator) RestrictLengthWithRandomSuffix(base string) string {
+	if len(base) > maxGeneratedNameLength {
+		base = base[:maxGeneratedNameLength]
+	}
+	return fmt.Sprintf("%s-%s", base, utilrand.String(randomLength))
+}
+
+var alphaNumericRE = regexp.MustCompile(`^[a-zA-Z0-9]+$`)
+
+func (simpleNameGenerator) RestrictLength(base string) string {
+	if len(base) > maxNameLength {
+		base = base[:maxNameLength]
+	}
+
+	for !alphaNumericRE.MatchString(base[len(base)-1:]) {
+		base = base[:len(base)-1]
+	}
+	return base
+}
diff --git a/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go b/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go
new file mode 100644
index 00000000..82a473bb
--- /dev/null
+++ b/vendor/k8s.io/apimachinery/pkg/util/rand/rand.go
@@ -0,0 +1,127 @@
+/*
+Copyright 2015 The Kubernetes Authors.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+    http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Package rand provides utilities related to randomization.
+package rand
+
+import (
+	"math/rand"
+	"sync"
+	"time"
+)
+
+var rng = struct {
+	sync.Mutex
+	rand *rand.Rand
+}{
+	rand: rand.New(rand.NewSource(time.Now().UnixNano())),
+}
+
+// Int returns a non-negative pseudo-random int.
+func Int() int {
+	rng.Lock()
+	defer rng.Unlock()
+	return rng.rand.Int()
+}
+
+// Intn generates an integer in range [0,max).
+// By design this should panic if input is invalid, <= 0.
+func Intn(max int) int {
+	rng.Lock()
+	defer rng.Unlock()
+	return rng.rand.Intn(max)
+}
+
+// IntnRange generates an integer in range [min,max).
+// By design this should panic if input is invalid, <= 0.
+func IntnRange(min, max int) int {
+	rng.Lock()
+	defer rng.Unlock()
+	return rng.rand.Intn(max-min) + min
+}
+
+// IntnRange generates an int64 integer in range [min,max).
+// By design this should panic if input is invalid, <= 0.
+func Int63nRange(min, max int64) int64 {
+	rng.Lock()
+	defer rng.Unlock()
+	return rng.rand.Int63n(max-min) + min
+}
+
+// Seed seeds the rng with the provided seed.
+func Seed(seed int64) {
+	rng.Lock()
+	defer rng.Unlock()
+
+	rng.rand = rand.New(rand.NewSource(seed))
+}
+
+// Perm returns, as a slice of n ints, a pseudo-random permutation of the integers [0,n)
+// from the default Source.
+func Perm(n int) []int {
+	rng.Lock()
+	defer rng.Unlock()
+	return rng.rand.Perm(n)
+}
+
+const (
+	// We omit vowels from the set of available characters to reduce the chances
+	// of "bad words" being formed.
+	alphanums = "bcdfghjklmnpqrstvwxz2456789"
+	// No. of bits required to index into alphanums string.
+	alphanumsIdxBits = 5
+	// Mask used to extract last alphanumsIdxBits of an int.
+	alphanumsIdxMask = 1<<alphanumsIdxBits - 1
+	// No. of random letters we can extract from a single int63.
+	maxAlphanumsPerInt = 63 / alphanumsIdxBits
+)
+
+// String generates a random alphanumeric string, without vowels, which is n
+// characters long.  This will panic if n is less than zero.
+// How the random string is created:
+// - we generate random int63's
+// - from each int63, we are extracting multiple random letters by bit-shifting and masking
+// - if some index is out of range of alphanums we neglect it (unlikely to happen multiple times in a row)
+func String(n int) string {
+	b := make([]byte, n)
+	rng.Lock()
+	defer rng.Unlock()
+
+	randomInt63 := rng.rand.Int63()
+	remaining := maxAlphanumsPerInt
+	for i := 0; i < n; {
+		if remaining == 0 {
+			randomInt63, remaining = rng.rand.Int63(), maxAlphanumsPerInt
+		}
+		if idx := int(randomInt63 & alphanumsIdxMask); idx < len(alphanums) {
+			b[i] = alphanums[idx]
+			i++
+		}
+		randomInt63 >>= alphanumsIdxBits
+		remaining--
+	}
+	return string(b)
+}
+
+// SafeEncodeString encodes s using the same characters as rand.String. This reduces the chances of bad words and
+// ensures that strings generated from hash functions appear consistent throughout the API.
+func SafeEncodeString(s string) string {
+	r := make([]byte, len(s))
+	for i, b := range []rune(s) {
+		r[i] = alphanums[(int(b) % len(alphanums))]
+	}
+	return string(r)
+}
diff --git a/vendor/modules.txt b/vendor/modules.txt
index 6a40a445..cfa4b5fa 100644
--- a/vendor/modules.txt
+++ b/vendor/modules.txt
@@ -114,7 +114,7 @@ github.com/golang/protobuf/ptypes/any
 github.com/golang/protobuf/ptypes/duration
 github.com/golang/protobuf/ptypes/timestamp
 github.com/golang/protobuf/ptypes/wrappers
-# github.com/google/go-cmp v0.5.6
+# github.com/google/go-cmp v0.5.5
 ## explicit
 github.com/google/go-cmp/cmp
 github.com/google/go-cmp/cmp/cmpopts
@@ -126,9 +126,7 @@ github.com/google/go-cmp/cmp/internal/value
 github.com/google/go-containerregistry/pkg/name
 # github.com/google/go-github/v34 v34.0.0
 ## explicit
-# github.com/google/go-github/v35 v35.3.0
-## explicit
-github.com/google/go-github/v35/github
+github.com/google/go-github/v34/github
 # github.com/google/go-querystring v1.0.0
 github.com/google/go-querystring/query
 # github.com/google/gofuzz v1.2.0
@@ -238,6 +236,7 @@ github.com/tektoncd/pipeline/pkg/client/listers/pipeline/v1alpha1
 github.com/tektoncd/pipeline/pkg/client/listers/pipeline/v1beta1
 github.com/tektoncd/pipeline/pkg/contexts
 github.com/tektoncd/pipeline/pkg/list
+github.com/tektoncd/pipeline/pkg/names
 github.com/tektoncd/pipeline/pkg/reconciler/pipeline/dag
 github.com/tektoncd/pipeline/pkg/substitution
 # go.opencensus.io v0.23.0
@@ -571,6 +570,7 @@ k8s.io/apimachinery/pkg/util/json
 k8s.io/apimachinery/pkg/util/mergepatch
 k8s.io/apimachinery/pkg/util/naming
 k8s.io/apimachinery/pkg/util/net
+k8s.io/apimachinery/pkg/util/rand
 k8s.io/apimachinery/pkg/util/runtime
 k8s.io/apimachinery/pkg/util/sets
 k8s.io/apimachinery/pkg/util/strategicpatch


Test patch:
diff --git a/pkg/pipelineascode/acl_test.go b/pkg/pipelineascode/acl_test.go
index 5fc394a9..61747ddc 100644
--- a/pkg/pipelineascode/acl_test.go
+++ b/pkg/pipelineascode/acl_test.go
@@ -6,7 +6,7 @@ import (
 	"net/http"
 	"testing"
 
-	"github.com/google/go-github/v35/github"
+	"github.com/google/go-github/v34/github"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
 	ghtesthelper "github.com/openshift-pipelines/pipelines-as-code/pkg/test/github"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/webvcs"
diff --git a/pkg/pipelineascode/pipelineascode_test.go b/pkg/pipelineascode/pipelineascode_test.go
index 9f67e7c5..ba4bb822 100644
--- a/pkg/pipelineascode/pipelineascode_test.go
+++ b/pkg/pipelineascode/pipelineascode_test.go
@@ -14,7 +14,7 @@ import (
 	testDynamic "github.com/openshift-pipelines/pipelines-as-code/pkg/test/dynamic"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/test/repository"
 
-	"github.com/google/go-github/v35/github"
+	"github.com/google/go-github/v34/github"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
 	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
 	testclient "github.com/openshift-pipelines/pipelines-as-code/pkg/test/clients"
diff --git a/pkg/test/github/github.go b/pkg/test/github/github.go
index 1e4df1a4..b26e503a 100644
--- a/pkg/test/github/github.go
+++ b/pkg/test/github/github.go
@@ -7,7 +7,7 @@ import (
 	"net/url"
 	"os"
 
-	"github.com/google/go-github/v35/github"
+	"github.com/google/go-github/v34/github"
 )
 
 const (
diff --git a/pkg/webvcs/github_test.go b/pkg/webvcs/github_test.go
index 4d874f60..b29e882e 100644
--- a/pkg/webvcs/github_test.go
+++ b/pkg/webvcs/github_test.go
@@ -5,7 +5,6 @@ import (
 	"fmt"
 	"io/ioutil"
 	"net/http"
-	"path/filepath"
 	"reflect"
 	"strings"
 	"testing"
@@ -14,7 +13,7 @@ import (
 	rtesting "knative.dev/pkg/reconciler/testing"
 
 	"github.com/google/go-cmp/cmp"
-	"github.com/google/go-github/v35/github"
+	"github.com/google/go-github/v34/github"
 	"go.uber.org/zap"
 	zapobserver "go.uber.org/zap/zaptest/observer"
 	"gotest.tools/v3/assert"
@@ -508,112 +507,6 @@ func TestGithubVCS_CreateCheckRun(t *testing.T) {
 	assert.Equal(t, cr.GetID(), int64(555))
 }
 
-func TestCheckSenderOrgMembership(t *testing.T) {
-	tests := []struct {
-		name, apiReturn  string
-		allowed, wantErr bool
-		runinfo          *RunInfo
-	}{
-		{
-			name: "Check Sender Org Membership",
-			runinfo: &RunInfo{
-				Owner:  "organization",
-				Sender: "me",
-			},
-			apiReturn: `[{"login": "me"}]`,
-			allowed:   true,
-			wantErr:   false,
-		},
-		{
-			name: "Check Sender not in Org Membership",
-			runinfo: &RunInfo{
-				Owner:  "organization",
-				Sender: "me",
-			},
-			apiReturn: `[{"login": "not"}]`,
-			allowed:   false,
-		},
-		{
-			name: "Not found on organization",
-			runinfo: &RunInfo{
-				Owner:  "notfound",
-				Sender: "me",
-			},
-			allowed: false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			fakeclient, mux, _, teardown := ghtesthelper.SetupGH()
-			defer teardown()
-			ctx, _ := rtesting.SetupFakeContext(t)
-			gvcs := GithubVCS{
-				Client: fakeclient,
-			}
-			mux.HandleFunc(fmt.Sprintf("/orgs/%s/public_members", tt.runinfo.Owner), func(rw http.ResponseWriter, r *http.Request) {
-				fmt.Fprint(rw, tt.apiReturn)
-			})
-
-			allowed, err := gvcs.CheckSenderOrgMembership(ctx, tt.runinfo)
-			if tt.wantErr && err == nil {
-				t.Error("We didn't get an error when we wanted one")
-			}
-			if !tt.wantErr && err != nil {
-				t.Errorf("We got an error when we didn't want it: %s", err)
-			}
-			assert.Equal(t, tt.allowed, allowed)
-		})
-	}
-}
-
-func TestGetStringPullRequestComment(t *testing.T) {
-	regexp := `(^|\n)/retest(\r\n|$)`
-	tests := []struct {
-		name, apiReturn string
-		wantErr         bool
-		runinfo         *RunInfo
-		wantRet         bool
-	}{
-		{
-			name:      "Get String from comments",
-			runinfo:   &RunInfo{URL: "http://1"},
-			apiReturn: `[{"body": "/retest"}]`,
-			wantRet:   true,
-		},
-		{
-			name:      "Not matching string in comments",
-			runinfo:   &RunInfo{URL: "http://1"},
-			apiReturn: `[{"body": ""}]`,
-			wantRet:   false,
-		},
-	}
-	for _, tt := range tests {
-		t.Run(tt.name, func(t *testing.T) {
-			fakeclient, mux, _, teardown := ghtesthelper.SetupGH()
-			defer teardown()
-			ctx, _ := rtesting.SetupFakeContext(t)
-			gvcs := GithubVCS{
-				Client: fakeclient,
-			}
-			mux.HandleFunc(fmt.Sprintf("/repos/issues/%s/comments", filepath.Base(tt.runinfo.URL)), func(rw http.ResponseWriter, r *http.Request) {
-				fmt.Fprint(rw, tt.apiReturn)
-			})
-
-			ret, err := gvcs.GetStringPullRequestComment(ctx, tt.runinfo, regexp)
-			if tt.wantErr && err == nil {
-				t.Error("We didn't get an error when we wanted one")
-			}
-			if !tt.wantErr && err != nil {
-				t.Errorf("We got an error when we didn't want it: %s", err)
-			}
-
-			if tt.wantRet {
-				assert.Assert(t, ret != nil)
-			}
-		})
-	}
-}
-
 func TestRunInfoCheck(t *testing.T) {
 	type fields struct {
 		Owner         string
@@ -673,6 +566,21 @@ func TestRunInfoCheck(t *testing.T) {
 	}
 }
 
+func TestCreateStatus(t *testing.T) {
+	ctx, _ := rtesting.SetupFakeContext(t)
+	gcvs, teardown := setupFakesURLS()
+	checkrunid := int64(2026)
+	defer teardown()
+	runinfo := &RunInfo{
+		Owner:      "check",
+		Repository: "run",
+		CheckRunID: &checkrunid,
+	}
+	cr, err := gcvs.CreateStatus(ctx, runinfo, "completed", "success", "Yay", "https://foo/bar")
+	assert.NilError(t, err)
+	assert.Equal(t, cr.GetID(), int64(666))
+}
+
 func TestGithubVCS_CreateStatus(t *testing.T) {
 	checkrunid := int64(2026)
 	resultid := int64(666)
diff --git a/test/README.md b/test/README.md
new file mode 100644
index 00000000..8cfc9e90
--- /dev/null
+++ b/test/README.md
@@ -0,0 +1,39 @@
+# E2E Tests
+
+The E2E Tests make sure we have the repositories getting updated if we have a
+repo with PAC installed on it.
+
+It will checks if the repository have been updated at the end.
+
+Most E2E tests has this basic flow :
+
+- Create a temporary Namespace
+- Create a Repository CR into it
+- Create a Branch on a GitHUB repo
+- Create a commmit with files like pipelinerun inside that branch, the
+  pipelinerun with have the namespace annotation to force the repository match
+  on the namespace we have created and not catching other CR that may matching
+  it.
+- Wait that the Repository is updated.
+- Some other stuff are done directly on the eventlistenner sink, bypassing a bit
+  the GitHUB apis and generating the webhook ourselves.
+
+## Requirements
+
+You need to have those env variable set :
+
+- `TEST_GITHUB_API_URL` -- GitHub Api URL, needs to be set
+- `TEST_GITHUB_TOKEN` -- Github token used to talk to the api url
+- `TEST_GITHUB_REPO_OWNER` - The repo and owner (i.e: organization/repo)
+- `TEST_GITHUB_REPO_INSTALLATION_ID` - The installation id when you have
+  installed the repo on the app. (get it from the webhook event on the console)
+- `TEST_EL_URL` - The eventlistenner public url, ingress or openshfit's route
+- `TEST_EL_WEBHOOK_SECRET` - The webhook secret.
+
+## Running
+
+As long you have env variables set, you can just do a :
+
+`make test-e2e`
+
+and it will run the test-suite and cleans after itself,
diff --git a/test/init_test.go b/test/init_test.go
new file mode 100644
index 00000000..60949d2b
--- /dev/null
+++ b/test/init_test.go
@@ -0,0 +1,89 @@
+// +build e2e
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"math/rand"
+	"os"
+	"strings"
+	"testing"
+	"time"
+
+	"github.com/google/go-github/v34/github"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/webvcs"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+var (
+	defaultTimeout   = 10 * time.Minute
+	mainBranch       = "main"
+	pullRequestEvent = "pull_request"
+)
+
+type E2EOptions struct {
+	Repo, Owner string
+}
+
+func tearDown(ctx context.Context, t *testing.T, cs *cli.Clients, prNumber int, ref string, targetNS string, opts E2EOptions) {
+	cs.Log.Infof("Closing PR %d", prNumber)
+	if prNumber != -1 {
+		state := "closed"
+		_, _, err := cs.GithubClient.Client.PullRequests.Edit(ctx,
+			opts.Owner, opts.Repo, prNumber,
+			&github.PullRequest{State: &state})
+		if err != nil {
+			t.Fatal(err)
+		}
+	}
+
+	cs.Log.Infof("Deleting NS %s", targetNS)
+	err := cs.Kube.CoreV1().Namespaces().Delete(ctx, targetNS, metav1.DeleteOptions{})
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	cs.Log.Infof("Deleting Ref %s", ref)
+	_, err = cs.GithubClient.Client.Git.DeleteRef(ctx, opts.Owner, opts.Repo, ref)
+	if err != nil {
+		t.Fatal(err)
+	}
+}
+
+func setup() (*cli.Clients, E2EOptions, error) {
+	githubURL := os.Getenv("TEST_GITHUB_API_URL")
+	githubToken := os.Getenv("TEST_GITHUB_TOKEN")
+	githubRepoOwner := os.Getenv("TEST_GITHUB_REPO_OWNER")
+
+	for _, value := range []string{
+		"EL_URL", "GITHUB_API_URL", "GITHUB_TOKEN",
+		"GITHUB_REPO_OWNER", "EL_WEBHOOK_SECRET",
+	} {
+		if env := os.Getenv("TEST_" + value); env == "" {
+			return nil, E2EOptions{}, fmt.Errorf("\"TEST_%s\" env variable is required, cannot continue", value)
+		}
+	}
+
+	if githubURL == "" || githubToken == "" || githubRepoOwner == "" {
+		return nil, E2EOptions{}, fmt.Errorf("TEST_GITHUB_API_URL TEST_GITHUB_TOKEN TEST_GITHUB_REPO_OWNER need to be set")
+	}
+
+	splitted := strings.Split(githubRepoOwner, "/")
+	webvcs := webvcs.NewGithubVCS(githubToken, githubURL)
+
+	p := cli.PacParams{}
+	cs, err := p.Clients()
+	if err != nil {
+		return nil, E2EOptions{}, err
+	}
+	cs.GithubClient = webvcs
+	return cs, E2EOptions{Owner: splitted[0], Repo: splitted[1]}, nil
+}
+
+func TestMain(m *testing.M) {
+	rand.Seed(time.Now().UTC().UnixNano())
+	v := m.Run()
+	os.Exit(v)
+}
diff --git a/test/pkg/github/pr.go b/test/pkg/github/pr.go
new file mode 100644
index 00000000..eaa93346
--- /dev/null
+++ b/test/pkg/github/pr.go
@@ -0,0 +1,88 @@
+package github
+
+import (
+	"context"
+	"encoding/base64"
+
+	"github.com/google/go-github/v34/github"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
+)
+
+func PushFilesToRef(ctx context.Context, client *github.Client, commitMessage, baseBranch, targetRef, owner, repo string, files map[string]string) (string, error) {
+	maintree, _, err := client.Git.GetTree(ctx, owner, repo, baseBranch, false)
+	if err != nil {
+		return "", err
+	}
+	mainSha := maintree.GetSHA()
+	entries := []*github.TreeEntry{}
+	defaultMode := "100644"
+	for path, fcontent := range files {
+		content := base64.StdEncoding.EncodeToString([]byte(fcontent))
+		encoding := "base64"
+		blob, _, err := client.Git.CreateBlob(ctx, owner, repo, &github.Blob{
+			Content:  &content,
+			Encoding: &encoding,
+		})
+		if err != nil {
+			return "", err
+		}
+		sha := blob.GetSHA()
+
+		_path := path
+		entries = append(entries,
+			&github.TreeEntry{
+				Path: &_path,
+				Mode: &defaultMode,
+				SHA:  &sha,
+			})
+	}
+
+	tree, _, err := client.Git.CreateTree(ctx, owner, repo, mainSha, entries)
+	if err != nil {
+		return "", err
+	}
+
+	commitAuthor := "OpenShift Pipelines E2E test"
+	commitEmail := "e2e-pipelines@redhat.com"
+	commit, _, err := client.Git.CreateCommit(ctx, owner, repo, &github.Commit{
+		Author: &github.CommitAuthor{
+			Name:  &commitAuthor,
+			Email: &commitEmail,
+		},
+		Message: &commitMessage,
+		Tree:    tree,
+		Parents: []*github.Commit{{
+			SHA: &mainSha,
+		}},
+	})
+	if err != nil {
+		return "", err
+	}
+
+	ref := &github.Reference{
+		Ref: &targetRef,
+		Object: &github.GitObject{
+			SHA: commit.SHA,
+		},
+	}
+	_, _, err = client.Git.CreateRef(ctx, owner, repo, ref)
+	if err != nil {
+		return "", err
+	}
+
+	return commit.GetSHA(), nil
+}
+
+func PRCreate(ctx context.Context, cs *cli.Clients, owner, repo, targetRef, defaultBranch, title string) (int, error) {
+	pr, _, err := cs.GithubClient.Client.PullRequests.Create(ctx, owner, repo, &github.NewPullRequest{
+		Title: &title,
+		Head:  &targetRef,
+		Base:  &defaultBranch,
+		Body:  github.String("Add a new PR for testing"),
+	})
+	if err != nil {
+		return -1, err
+	}
+	cs.Log.Infof("Pull request created: %s", pr.GetHTMLURL())
+	return pr.GetNumber(), nil
+}
diff --git a/test/pkg/payload/send.go b/test/pkg/payload/send.go
new file mode 100644
index 00000000..efd0c0c8
--- /dev/null
+++ b/test/pkg/payload/send.go
@@ -0,0 +1,59 @@
+package payload
+
+import (
+	"bytes"
+	"context"
+	"crypto/hmac"
+	"os"
+
+	// nolint:gosec
+	"crypto/sha1"
+	"crypto/sha256"
+	"encoding/hex"
+	"encoding/json"
+	"fmt"
+	"io/ioutil"
+	"net/http"
+	"net/url"
+
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
+)
+
+func Send(ctx context.Context, cs *cli.Clients, elURL, elWebHookSecret, githubURL, installationID string, event interface{}, eventType string) error {
+	jeez, err := json.Marshal(event)
+	if err != nil {
+		return err
+	}
+	cs.Log.Infof("Sending a payload directly to the EL on %s: %s", os.Getenv("TEST_EL_URL"), string(jeez))
+
+	mac := hmac.New(sha1.New, []byte(elWebHookSecret))
+	mac.Write(jeez)
+	sha1secret := hex.EncodeToString(mac.Sum(nil))
+	mac = hmac.New(sha256.New, []byte(elWebHookSecret))
+	mac.Write(jeez)
+	sha256secret := hex.EncodeToString(mac.Sum(nil))
+
+	req, err := http.NewRequestWithContext(ctx, "POST", elURL, bytes.NewBuffer(jeez))
+	if err != nil {
+		return err
+	}
+	req.Header.Set("Content-Type", "application/json")
+	req.Header.Set("X-GitHub-Event", eventType)
+	req.Header.Set("X-Hub-Signature", fmt.Sprintf("sha1=%s", sha1secret))
+	req.Header.Set("X-Hub-Signature-256", fmt.Sprintf("sha256=%s", sha256secret))
+	req.Header.Set("X-GitHub-Hook-Installation-Target-Type", "integration")
+	req.Header.Set("X-GitHub-Hook-Installation-Target-ID", installationID)
+	u, err := url.Parse(githubURL)
+	if err != nil {
+		return err
+	}
+	req.Header.Set("X-GitHub-Enterprise-Host", u.Host)
+	client := &http.Client{}
+	resp, err := client.Do(req)
+	if err != nil {
+		return err
+	}
+	defer resp.Body.Close()
+	_, err = ioutil.ReadAll(resp.Body)
+	return err
+}
diff --git a/test/pkg/repository/create.go b/test/pkg/repository/create.go
new file mode 100644
index 00000000..b5e03d95
--- /dev/null
+++ b/test/pkg/repository/create.go
@@ -0,0 +1,25 @@
+package repository
+
+import (
+	"context"
+
+	pacv1alpha1 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/cli"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func CreateNSRepo(ctx context.Context, targetNS string, cs *cli.Clients,
+	repository *pacv1alpha1.Repository) error {
+	nsSpec := &corev1.Namespace{ObjectMeta: metav1.ObjectMeta{Name: targetNS}}
+	_, err := cs.Kube.CoreV1().Namespaces().Create(ctx, nsSpec, metav1.CreateOptions{})
+	if err != nil {
+		return err
+	}
+	repo, err := cs.PipelineAsCode.PipelinesascodeV1alpha1().Repositories(targetNS).Create(ctx, repository, metav1.CreateOptions{})
+	if err != nil {
+		return err
+	}
+	cs.Log.Infof("Repository created in %s", repo.GetNamespace())
+	return nil
+}
diff --git a/test/pkg/wait/wait.go b/test/pkg/wait/wait.go
new file mode 100644
index 00000000..8f4ec298
--- /dev/null
+++ b/test/pkg/wait/wait.go
@@ -0,0 +1,25 @@
+package wait
+
+import (
+	"context"
+	"time"
+
+	pacversioned "github.com/openshift-pipelines/pipelines-as-code/pkg/generated/clientset/versioned"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/kubeinteraction"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func UntilRepositoryUpdated(ctx context.Context,
+	pacintf pacversioned.Interface, repo, ns string,
+	minNumberStatus int, polltimeout time.Duration) error {
+	ctx, cancel := context.WithTimeout(ctx, polltimeout)
+	defer cancel()
+	return kubeinteraction.PollImmediateWithContext(ctx, func() (bool, error) {
+		pacintf.PipelinesascodeV1alpha1().Repositories(ns)
+		r, err := pacintf.PipelinesascodeV1alpha1().Repositories(ns).Get(ctx, repo, metav1.GetOptions{})
+		if err != nil {
+			return true, err
+		}
+		return len(r.Status) > minNumberStatus, nil
+	})
+}
diff --git a/test/pullrequest_oktotest_test.go b/test/pullrequest_oktotest_test.go
new file mode 100644
index 00000000..9d67d88a
--- /dev/null
+++ b/test/pullrequest_oktotest_test.go
@@ -0,0 +1,155 @@
+// +build e2e
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"os"
+	"strconv"
+	"testing"
+
+	"github.com/google/go-github/v34/github"
+	pacv1alpha1 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/webvcs"
+	tgithub "github.com/openshift-pipelines/pipelines-as-code/test/pkg/github"
+	"github.com/openshift-pipelines/pipelines-as-code/test/pkg/payload"
+	trepo "github.com/openshift-pipelines/pipelines-as-code/test/pkg/repository"
+	twait "github.com/openshift-pipelines/pipelines-as-code/test/pkg/wait"
+	"github.com/tektoncd/pipeline/pkg/names"
+	"gotest.tools/v3/assert"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func TestPullRequestOkToTest(t *testing.T) {
+	targetNS := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-ns")
+	ctx := context.Background()
+	cs, opts, err := setup()
+	assert.NilError(t, err)
+
+	entries := map[string]string{
+		".tekton/run.yaml": fmt.Sprintf(`---
+apiVersion: tekton.dev/v1beta1
+kind: PipelineRun
+metadata:
+  name: pipeline
+  annotations:
+    pipelinesascode.tekton.dev/target-namespace: "%s"
+    pipelinesascode.tekton.dev/on-target-branch: "[%s]"
+    pipelinesascode.tekton.dev/on-event: "[%s]"
+spec:
+  pipelineSpec:
+    tasks:
+      - name: task
+        taskSpec:
+          steps:
+            - name: task
+              image: gcr.io/google-containers/busybox
+              command: ["/bin/echo", "HELLOMOTO"]
+`, targetNS, mainBranch, pullRequestEvent),
+	}
+
+	repoinfo, resp, err := cs.GithubClient.Client.Repositories.Get(ctx, opts.Owner, opts.Repo)
+	assert.NilError(t, err)
+	if resp != nil && resp.Response.StatusCode == http.StatusNotFound {
+		t.Errorf("Repository %s not found in %s", opts.Owner, opts.Repo)
+	}
+
+	repository := &pacv1alpha1.Repository{
+		ObjectMeta: metav1.ObjectMeta{
+			Name: targetNS,
+		},
+		Spec: pacv1alpha1.RepositorySpec{
+			Namespace: targetNS,
+			URL:       repoinfo.GetHTMLURL(),
+			EventType: pullRequestEvent,
+			Branch:    mainBranch,
+		},
+	}
+
+	err = trepo.CreateNSRepo(ctx, targetNS, cs, repository)
+	assert.NilError(t, err)
+
+	targetRefName := fmt.Sprintf("refs/heads/%s",
+		names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test"))
+
+	sha, err := tgithub.PushFilesToRef(ctx, cs.GithubClient.Client,
+		"TestPullRequest - "+targetRefName, repoinfo.GetDefaultBranch(),
+		targetRefName,
+		opts.Owner,
+		opts.Repo,
+		entries)
+	assert.NilError(t, err)
+	cs.Log.Infof("Commit %s has been created and pushed to %s", sha, targetRefName)
+	title := "TestPullRequestOkToTest on " + targetRefName
+	number, err := tgithub.PRCreate(ctx, cs, opts.Owner, opts.Repo, targetRefName, repoinfo.GetDefaultBranch(), title)
+	assert.NilError(t, err)
+
+	defer tearDown(ctx, t, cs, number, targetRefName, targetNS, opts)
+
+	cs.Log.Infof("Waiting for Repository to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 0, defaultTimeout)
+	assert.NilError(t, err)
+
+	runinfo := webvcs.RunInfo{
+		BaseBranch:    repoinfo.GetDefaultBranch(),
+		DefaultBranch: repoinfo.GetDefaultBranch(),
+		HeadBranch:    targetRefName,
+		Owner:         opts.Owner,
+		Repository:    opts.Repo,
+		URL:           repoinfo.GetHTMLURL(),
+		SHA:           sha,
+		Sender:        opts.Owner,
+	}
+
+	installID, err := strconv.ParseInt(os.Getenv("TEST_GITHUB_REPO_INSTALLATION_ID"), 10, 64)
+	assert.NilError(t, err)
+	event := github.IssueCommentEvent{
+		Comment: &github.IssueComment{
+			Body: github.String(`/ok-to-test`),
+		},
+		Installation: &github.Installation{
+			ID: &installID,
+		},
+		Action: github.String("created"),
+		Issue: &github.Issue{
+			State: github.String("open"),
+			PullRequestLinks: &github.PullRequestLinks{
+				HTMLURL: github.String(fmt.Sprintf("%s/%s/pull/%d",
+					os.Getenv("TEST_GITHUB_API_URL"),
+					os.Getenv("TEST_GITHUB_REPO_OWNER"), number)),
+			},
+		},
+		Repo: &github.Repository{
+			DefaultBranch: &runinfo.DefaultBranch,
+			HTMLURL:       &runinfo.URL,
+			Name:          &runinfo.Repository,
+			Owner:         &github.User{Login: &runinfo.Owner},
+		},
+		Sender: &github.User{
+			Login: &runinfo.Sender,
+		},
+	}
+
+	err = payload.Send(ctx,
+		cs,
+		os.Getenv("TEST_EL_URL"),
+		os.Getenv("TEST_EL_WEBHOOK_SECRET"),
+		os.Getenv("TEST_GITHUB_API_URL"),
+		os.Getenv("TEST_GITHUB_REPO_INSTALLATION_ID"),
+		event,
+		"issue_comment",
+	)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Wait for the second repository update to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 1, defaultTimeout)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Check if we have the repository set as succeeded")
+	repo, err := cs.PipelineAsCode.PipelinesascodeV1alpha1().Repositories(targetNS).Get(ctx, targetNS, metav1.GetOptions{})
+	assert.NilError(t, err)
+	assert.Assert(t, repo.Status[len(repo.Status)-1].Conditions[0].Status == corev1.ConditionTrue)
+}
diff --git a/test/pullrequest_rerequest_test.go b/test/pullrequest_rerequest_test.go
new file mode 100644
index 00000000..cd72796f
--- /dev/null
+++ b/test/pullrequest_rerequest_test.go
@@ -0,0 +1,155 @@
+// +build e2e
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"os"
+	"strconv"
+	"testing"
+
+	"github.com/google/go-github/v34/github"
+	pacv1alpha1 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
+	"github.com/openshift-pipelines/pipelines-as-code/pkg/webvcs"
+	tgithub "github.com/openshift-pipelines/pipelines-as-code/test/pkg/github"
+	"github.com/openshift-pipelines/pipelines-as-code/test/pkg/payload"
+	trepo "github.com/openshift-pipelines/pipelines-as-code/test/pkg/repository"
+	twait "github.com/openshift-pipelines/pipelines-as-code/test/pkg/wait"
+	"github.com/tektoncd/pipeline/pkg/names"
+	"gotest.tools/v3/assert"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func TestPullRerequest(t *testing.T) {
+	targetNS := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-ns")
+	ctx := context.Background()
+	cs, opts, err := setup()
+	assert.NilError(t, err)
+
+	entries := map[string]string{
+		".tekton/run.yaml": fmt.Sprintf(`---
+apiVersion: tekton.dev/v1beta1
+kind: PipelineRun
+metadata:
+  name: pipeline
+  annotations:
+    pipelinesascode.tekton.dev/target-namespace: "%s"
+    pipelinesascode.tekton.dev/on-target-branch: "[%s]"
+    pipelinesascode.tekton.dev/on-event: "[%s]"
+spec:
+  pipelineSpec:
+    tasks:
+      - name: task
+        taskSpec:
+          steps:
+            - name: task
+              image: gcr.io/google-containers/busybox
+              command: ["/bin/echo", "HELLOMOTO"]
+`, targetNS, mainBranch, pullRequestEvent),
+	}
+
+	repoinfo, resp, err := cs.GithubClient.Client.Repositories.Get(ctx, opts.Owner, opts.Repo)
+	assert.NilError(t, err)
+	if resp != nil && resp.Response.StatusCode == http.StatusNotFound {
+		t.Errorf("Repository %s not found in %s", opts.Owner, opts.Repo)
+	}
+
+	repository := &pacv1alpha1.Repository{
+		ObjectMeta: metav1.ObjectMeta{
+			Name: targetNS,
+		},
+		Spec: pacv1alpha1.RepositorySpec{
+			Namespace: targetNS,
+			URL:       repoinfo.GetHTMLURL(),
+			EventType: pullRequestEvent,
+			Branch:    mainBranch,
+		},
+	}
+
+	err = trepo.CreateNSRepo(ctx, targetNS, cs, repository)
+	assert.NilError(t, err)
+
+	targetRefName := fmt.Sprintf("refs/heads/%s",
+		names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test"))
+
+	sha, err := tgithub.PushFilesToRef(ctx, cs.GithubClient.Client,
+		"TestPullRequest - "+targetRefName, repoinfo.GetDefaultBranch(),
+		targetRefName,
+		opts.Owner,
+		opts.Repo,
+		entries)
+	assert.NilError(t, err)
+	cs.Log.Infof("Commit %s has been created and pushed to %s", sha, targetRefName)
+	title := "TestPullRerequest on " + targetRefName
+	number, err := tgithub.PRCreate(ctx, cs, opts.Owner, opts.Repo, targetRefName, repoinfo.GetDefaultBranch(), title)
+	assert.NilError(t, err)
+
+	defer tearDown(ctx, t, cs, number, targetRefName, targetNS, opts)
+
+	cs.Log.Infof("Waiting for Repository to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 0, defaultTimeout)
+	assert.NilError(t, err)
+
+	runinfo := webvcs.RunInfo{
+		BaseBranch:    repoinfo.GetDefaultBranch(),
+		DefaultBranch: repoinfo.GetDefaultBranch(),
+		HeadBranch:    targetRefName,
+		Owner:         opts.Owner,
+		Repository:    opts.Repo,
+		URL:           repoinfo.GetHTMLURL(),
+		SHA:           sha,
+		Sender:        opts.Owner,
+	}
+
+	installID, err := strconv.ParseInt(os.Getenv("TEST_GITHUB_REPO_INSTALLATION_ID"), 10, 64)
+	assert.NilError(t, err)
+	event := github.CheckRunEvent{
+		Action: github.String("rerequested"),
+		Installation: &github.Installation{
+			ID: &installID,
+		},
+		CheckRun: &github.CheckRun{
+			CheckSuite: &github.CheckSuite{
+				HeadBranch: &runinfo.HeadBranch,
+				HeadSHA:    &runinfo.SHA,
+				PullRequests: []*github.PullRequest{
+					{
+						Number: github.Int(number),
+					},
+				},
+			},
+		},
+		Repo: &github.Repository{
+			DefaultBranch: &runinfo.DefaultBranch,
+			HTMLURL:       &runinfo.URL,
+			Name:          &runinfo.Repository,
+			Owner:         &github.User{Login: &runinfo.Owner},
+		},
+		Sender: &github.User{
+			Login: &runinfo.Sender,
+		},
+	}
+
+	err = payload.Send(ctx,
+		cs,
+		os.Getenv("TEST_EL_URL"),
+		os.Getenv("TEST_EL_WEBHOOK_SECRET"),
+		os.Getenv("TEST_GITHUB_API_URL"),
+		os.Getenv("TEST_GITHUB_REPO_INSTALLATION_ID"),
+		event,
+		"check_run",
+	)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Wait for the second repository update to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 1, defaultTimeout)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Check if we have the repository set as succeeded")
+	repo, err := cs.PipelineAsCode.PipelinesascodeV1alpha1().Repositories(targetNS).Get(ctx, targetNS, metav1.GetOptions{})
+	assert.NilError(t, err)
+	assert.Assert(t, repo.Status[len(repo.Status)-1].Conditions[0].Status == corev1.ConditionTrue)
+}
diff --git a/test/pullrequest_retest_test.go b/test/pullrequest_retest_test.go
new file mode 100644
index 00000000..55c29074
--- /dev/null
+++ b/test/pullrequest_retest_test.go
@@ -0,0 +1,103 @@
+// +build e2e
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"testing"
+
+	"github.com/google/go-github/v34/github"
+	pacv1alpha1 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
+	tgithub "github.com/openshift-pipelines/pipelines-as-code/test/pkg/github"
+	trepo "github.com/openshift-pipelines/pipelines-as-code/test/pkg/repository"
+	twait "github.com/openshift-pipelines/pipelines-as-code/test/pkg/wait"
+	"github.com/tektoncd/pipeline/pkg/names"
+	"gotest.tools/v3/assert"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func TestPullRequestRetest(t *testing.T) {
+	targetNS := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-ns")
+	ctx := context.Background()
+	cs, opts, err := setup()
+	assert.NilError(t, err)
+
+	entries := map[string]string{
+		".tekton/run.yaml": fmt.Sprintf(`---
+apiVersion: tekton.dev/v1beta1
+kind: PipelineRun
+metadata:
+  name: pipeline
+  annotations:
+    pipelinesascode.tekton.dev/target-namespace: "%s"
+    pipelinesascode.tekton.dev/on-target-branch: "[%s]"
+    pipelinesascode.tekton.dev/on-event: "[%s]"
+spec:
+  pipelineSpec:
+    tasks:
+      - name: task
+        taskSpec:
+          steps:
+            - name: task
+              image: gcr.io/google-containers/busybox
+              command: ["/bin/echo", "HELLOMOTO"]
+`, targetNS, mainBranch, pullRequestEvent),
+	}
+
+	repoinfo, resp, err := cs.GithubClient.Client.Repositories.Get(ctx, opts.Owner, opts.Repo)
+	assert.NilError(t, err)
+	if resp != nil && resp.Response.StatusCode == http.StatusNotFound {
+		t.Errorf("Repository %s not found in %s", opts.Owner, opts.Repo)
+	}
+
+	repository := &pacv1alpha1.Repository{
+		ObjectMeta: metav1.ObjectMeta{
+			Name: targetNS,
+		},
+		Spec: pacv1alpha1.RepositorySpec{
+			Namespace: targetNS,
+			URL:       repoinfo.GetHTMLURL(),
+			EventType: pullRequestEvent,
+			Branch:    mainBranch,
+		},
+	}
+
+	err = trepo.CreateNSRepo(ctx, targetNS, cs, repository)
+	assert.NilError(t, err)
+
+	targetRefName := fmt.Sprintf("refs/heads/%s",
+		names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test"))
+
+	sha, err := tgithub.PushFilesToRef(ctx, cs.GithubClient.Client, "TestRetest - "+targetRefName, repoinfo.GetDefaultBranch(), targetRefName, opts.Owner, opts.Repo, entries)
+	assert.NilError(t, err)
+	cs.Log.Infof("Commit %s has been created and pushed to %s", sha, targetRefName)
+	title := "TestPullRequestRetest on " + targetRefName
+
+	number, err := tgithub.PRCreate(ctx, cs, opts.Owner, opts.Repo, targetRefName, repoinfo.GetDefaultBranch(), title)
+	assert.NilError(t, err)
+
+	defer tearDown(ctx, t, cs, number, targetRefName, targetNS, opts)
+
+	cs.Log.Infof("Waiting for Repository to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 0, defaultTimeout)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Creating /retest in PullRequest")
+	_, _, err = cs.GithubClient.Client.Issues.CreateComment(ctx,
+		opts.Owner,
+		opts.Repo, number,
+		&github.IssueComment{Body: github.String("/retest")})
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Wait for the second repository update to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 1, defaultTimeout)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Check if we have the repository set as succeeded")
+	repo, err := cs.PipelineAsCode.PipelinesascodeV1alpha1().Repositories(targetNS).Get(ctx, targetNS, metav1.GetOptions{})
+	assert.NilError(t, err)
+	assert.Assert(t, repo.Status[len(repo.Status)-1].Conditions[0].Status == corev1.ConditionTrue)
+}
diff --git a/test/pullrequest_test.go b/test/pullrequest_test.go
new file mode 100644
index 00000000..9f9b5647
--- /dev/null
+++ b/test/pullrequest_test.go
@@ -0,0 +1,91 @@
+// +build e2e
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"testing"
+
+	pacv1alpha1 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
+	tgithub "github.com/openshift-pipelines/pipelines-as-code/test/pkg/github"
+	trepo "github.com/openshift-pipelines/pipelines-as-code/test/pkg/repository"
+	twait "github.com/openshift-pipelines/pipelines-as-code/test/pkg/wait"
+	"github.com/tektoncd/pipeline/pkg/names"
+	"gotest.tools/v3/assert"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func TestPullRequest(t *testing.T) {
+	targetNS := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-ns")
+	ctx := context.Background()
+	cs, opts, err := setup()
+	assert.NilError(t, err)
+
+	entries := map[string]string{
+		".tekton/run.yaml": fmt.Sprintf(`---
+apiVersion: tekton.dev/v1beta1
+kind: PipelineRun
+metadata:
+  name: pipeline
+  annotations:
+    pipelinesascode.tekton.dev/target-namespace: "%s"
+    pipelinesascode.tekton.dev/on-target-branch: "[%s]"
+    pipelinesascode.tekton.dev/on-event: "[%s]"
+spec:
+  pipelineSpec:
+    tasks:
+      - name: task
+        taskSpec:
+          steps:
+            - name: task
+              image: gcr.io/google-containers/busybox
+              command: ["/bin/echo", "HELLOMOTO"]
+`, targetNS, mainBranch, pullRequestEvent),
+	}
+
+	repoinfo, resp, err := cs.GithubClient.Client.Repositories.Get(ctx, opts.Owner, opts.Repo)
+	assert.NilError(t, err)
+	if resp != nil && resp.Response.StatusCode == http.StatusNotFound {
+		t.Errorf("Repository %s not found in %s", opts.Owner, opts.Repo)
+	}
+
+	repository := &pacv1alpha1.Repository{
+		ObjectMeta: metav1.ObjectMeta{
+			Name: targetNS,
+		},
+		Spec: pacv1alpha1.RepositorySpec{
+			Namespace: targetNS,
+			URL:       repoinfo.GetHTMLURL(),
+			EventType: pullRequestEvent,
+			Branch:    mainBranch,
+		},
+	}
+
+	err = trepo.CreateNSRepo(ctx, targetNS, cs, repository)
+	assert.NilError(t, err)
+
+	targetRefName := fmt.Sprintf("refs/heads/%s",
+		names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-test"))
+
+	sha, err := tgithub.PushFilesToRef(ctx, cs.GithubClient.Client, "TestPullRequest - "+targetRefName, repoinfo.GetDefaultBranch(), targetRefName, opts.Owner, opts.Repo, entries)
+	assert.NilError(t, err)
+	cs.Log.Infof("Commit %s has been created and pushed to %s", sha, targetRefName)
+
+	title := "TestPullRequest on " + targetRefName
+	number, err := tgithub.PRCreate(ctx, cs, opts.Owner, opts.Repo, targetRefName, repoinfo.GetDefaultBranch(), title)
+	assert.NilError(t, err)
+
+	defer tearDown(ctx, t, cs, number, targetRefName, targetNS, opts)
+
+	cs.Log.Infof("Waiting for Repository to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 0, defaultTimeout)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Check if we have the repository set as succeeded")
+	repo, err := cs.PipelineAsCode.PipelinesascodeV1alpha1().Repositories(targetNS).Get(ctx, targetNS, metav1.GetOptions{})
+	assert.NilError(t, err)
+	assert.Assert(t, repo.Status[len(repo.Status)-1].Conditions[0].Status == corev1.ConditionTrue)
+}
diff --git a/test/push_test.go b/test/push_test.go
new file mode 100644
index 00000000..46c9122a
--- /dev/null
+++ b/test/push_test.go
@@ -0,0 +1,87 @@
+// +build e2e
+
+package test
+
+import (
+	"context"
+	"fmt"
+	"net/http"
+	"testing"
+
+	pacv1alpha1 "github.com/openshift-pipelines/pipelines-as-code/pkg/apis/pipelinesascode/v1alpha1"
+	tgithub "github.com/openshift-pipelines/pipelines-as-code/test/pkg/github"
+	trepo "github.com/openshift-pipelines/pipelines-as-code/test/pkg/repository"
+	twait "github.com/openshift-pipelines/pipelines-as-code/test/pkg/wait"
+	"github.com/tektoncd/pipeline/pkg/names"
+	"gotest.tools/v3/assert"
+	corev1 "k8s.io/api/core/v1"
+	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
+)
+
+func TestPush(t *testing.T) {
+	targetNS := names.SimpleNameGenerator.RestrictLengthWithRandomSuffix("pac-e2e-push")
+	targetBranch := targetNS
+	targetEvent := "push"
+
+	ctx := context.Background()
+	cs, opts, err := setup()
+	assert.NilError(t, err)
+
+	repoinfo, resp, err := cs.GithubClient.Client.Repositories.Get(ctx, opts.Owner, opts.Repo)
+	assert.NilError(t, err)
+	if resp != nil && resp.Response.StatusCode == http.StatusNotFound {
+		t.Errorf("Repository %s not found in %s", opts.Owner, opts.Repo)
+	}
+
+	repository := &pacv1alpha1.Repository{
+		ObjectMeta: metav1.ObjectMeta{
+			Name: targetNS,
+		},
+		Spec: pacv1alpha1.RepositorySpec{
+			Namespace: targetNS,
+			URL:       repoinfo.GetHTMLURL(),
+			EventType: targetEvent,
+			Branch:    targetBranch,
+		},
+	}
+
+	err = trepo.CreateNSRepo(ctx, targetNS, cs, repository)
+	assert.NilError(t, err)
+
+	entries := map[string]string{
+		".tekton/run.yaml": fmt.Sprintf(`---
+apiVersion: tekton.dev/v1beta1
+kind: PipelineRun
+metadata:
+  name: pipeline
+  annotations:
+    pipelinesascode.tekton.dev/target-namespace: "%s"
+    pipelinesascode.tekton.dev/on-target-branch: "[%s]"
+    pipelinesascode.tekton.dev/on-event: "[%s]"
+spec:
+  pipelineSpec:
+    tasks:
+      - name: task
+        taskSpec:
+          steps:
+            - name: task
+              image: gcr.io/google-containers/busybox
+              command: ["/bin/echo", "HELLOMOTO"]
+`, targetNS, targetBranch, targetEvent),
+	}
+
+	targetRefName := fmt.Sprintf("refs/heads/%s", targetBranch)
+	sha, err := tgithub.PushFilesToRef(ctx, cs.GithubClient.Client, "TestPush - "+targetBranch, repoinfo.GetDefaultBranch(), targetRefName, opts.Owner, opts.Repo, entries)
+	cs.Log.Infof("Commit %s has been created and pushed to %s", sha, targetRefName)
+	assert.NilError(t, err)
+	defer tearDown(ctx, t, cs, -1, targetRefName, targetNS, opts)
+
+	cs.Log.Infof("Waiting for Repository to be updated")
+	err = twait.UntilRepositoryUpdated(ctx, cs.PipelineAsCode, targetNS, targetNS, 0, defaultTimeout)
+	assert.NilError(t, err)
+
+	cs.Log.Infof("Check if we have the repository set as succeeded")
+	repo, err := cs.PipelineAsCode.PipelinesascodeV1alpha1().Repositories(targetNS).Get(ctx, targetNS, metav1.GetOptions{})
+	assert.NilError(t, err)
+	assert.Assert(t, repo.Status[len(repo.Status)-1].Conditions[0].Status == corev1.ConditionTrue)
+}