diff --git a/.circleci/config.yml b/.circleci/config.yml index bb78aef33..09af531b7 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -62,14 +62,6 @@ jobs: organization: "$DOCKER_ORG" login_variable: DOCKER_LOGIN password_variable: DOCKER_PASSWORD - - prometheus/publish_images: - container_image_name: funcbench - dockerfile_path: "funcbench/Dockerfile" - dockerbuild_context: "funcbench/" - registry: docker.io - organization: "$DOCKER_ORG" - login_variable: DOCKER_LOGIN - password_variable: DOCKER_PASSWORD - prometheus/publish_images: container_image_name: amgithubnotifier dockerfile_path: "tools/amGithubNotifier/Dockerfile" diff --git a/.gitignore b/.gitignore index ce0afe612..e6fc926e3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,7 +1,7 @@ +.idea/ /tools/amGithubNotifier/amGithubNotifier /tools/commentMonitor/commentMonitor /tools/fake-webserver/fake-webserver /tools/scaler/scaler -/funcbench/funcbench /infra/infra *-flags.txt diff --git a/.promu.yml b/.promu.yml index e40244f70..95b587e01 100644 --- a/.promu.yml +++ b/.promu.yml @@ -8,8 +8,6 @@ build: binaries: - name: infra path: ./infra - - name: funcbench - path: ./funcbench - name: tools/amGithubNotifier path: ./tools/amGithubNotifier - name: tools/commentMonitor diff --git a/README.md b/README.md index 7a1820354..a8f7b8ab7 100644 --- a/README.md +++ b/README.md @@ -10,12 +10,6 @@ This repository contains tools and configuration files for testing and benchmark - **Description**: For full details, see [prombench/README.md](prombench/README.md). -### [`/funcbench`](funcbench/) - -**Funcbench** is a project for running `go test -bench` on two different branches and comparing the results, among other functionalities. - -- **Description**: For full details, see [funcbench/README.md](funcbench/README.md). - ## Building Tools from Source To build the tools from source, ensure you have a working Go environment with modules enabled. Follow these steps: @@ -28,4 +22,4 @@ To build the tools from source, ensure you have a working Go environment with mo 2. **Build the project**: ```bash promu build - ``` \ No newline at end of file + ``` diff --git a/funcbench/Dockerfile b/funcbench/Dockerfile deleted file mode 100644 index 84200ab25..000000000 --- a/funcbench/Dockerfile +++ /dev/null @@ -1,15 +0,0 @@ -FROM prominfra/infra:master -LABEL maintainer="The Prometheus Authors " - -WORKDIR /funcbench -ENV INFRA_CMD infra - -# Copy Makefiles and manifests -# Need 'cd' since ghActions ignores WORKDIR -# Need 'eval' to prevent bash keywords be run as commands -COPY ./funcbench /bin/funcbench -COPY ./ ./ -RUN echo -e '#!/bin/sh\ncd /funcbench\neval "$@"' >/bin/docker_entrypoint -RUN chmod u+x /bin/docker_entrypoint - -ENTRYPOINT ["/bin/funcbench"] diff --git a/funcbench/Makefile b/funcbench/Makefile deleted file mode 100644 index 703ff1fd9..000000000 --- a/funcbench/Makefile +++ /dev/null @@ -1,47 +0,0 @@ -INFRA_CMD ?= ../infra/infra - -PROVIDER ?= gke -ifeq ($(PACKAGE_PATH),) -PACKAGE_PATH = ./... -endif - -.PHONY: deploy clean -deploy: cluster_create resource_apply -# GCP sometimes takes longer than 30 tries when trying to delete nodepools -# if k8s resources are not already cleared -clean: resource_delete cluster_delete - -cluster_create: - $(INFRA_CMD) $(PROVIDER) cluster create -a ${AUTH_FILE} \ - -v GKE_PROJECT_ID:${GKE_PROJECT_ID} -v ZONE:${ZONE} -v CLUSTER_NAME:funcbench-${PR_NUMBER} -v PR_NUMBER:${PR_NUMBER} \ - -v EKS_WORKER_ROLE_ARN:${EKS_WORKER_ROLE_ARN} -v EKS_CLUSTER_ROLE_ARN:${EKS_CLUSTER_ROLE_ARN} \ - -v EKS_SUBNET_IDS:${EKS_SUBNET_IDS} \ - -f manifests/cluster_$(PROVIDER).yaml - -cluster_delete: - $(INFRA_CMD) $(PROVIDER) cluster delete -a ${AUTH_FILE} \ - -v GKE_PROJECT_ID:${GKE_PROJECT_ID} -v ZONE:${ZONE} -v CLUSTER_NAME:funcbench-${PR_NUMBER} -v PR_NUMBER:${PR_NUMBER} \ - -v EKS_WORKER_ROLE_ARN:${EKS_WORKER_ROLE_ARN} -v EKS_CLUSTER_ROLE_ARN:${EKS_CLUSTER_ROLE_ARN} \ - -v EKS_SUBNET_IDS:${EKS_SUBNET_IDS} \ - -f manifests/cluster_$(PROVIDER).yaml - -resource_apply: - $(INFRA_CMD) $(PROVIDER) resource apply -a ${AUTH_FILE} \ - -v ZONE:${ZONE} -v GKE_PROJECT_ID:${GKE_PROJECT_ID} -v CLUSTER_NAME:funcbench-${PR_NUMBER} \ - -v PR_NUMBER:${PR_NUMBER} -v GITHUB_TOKEN:${GITHUB_TOKEN} \ - -v GITHUB_ORG:${GITHUB_ORG} -v GITHUB_REPO:${GITHUB_REPO} \ - -v BRANCH:${BRANCH} -v 'BENCH_FUNC_REGEX:${BENCH_FUNC_REGEX}' \ - -v PACKAGE_PATH:${PACKAGE_PATH} \ - -f manifests/benchmark - -# Removal of namespace should be at the end, after all other resources get removed. -resource_delete: - $(INFRA_CMD) $(PROVIDER) resource delete -a ${AUTH_FILE} \ - -v ZONE:${ZONE} -v GKE_PROJECT_ID:${GKE_PROJECT_ID} -v CLUSTER_NAME:funcbench-${PR_NUMBER} \ - -v PR_NUMBER:${PR_NUMBER} -v GITHUB_TOKEN:${GITHUB_TOKEN} \ - -v GITHUB_ORG:${GITHUB_ORG} -v GITHUB_REPO:${GITHUB_REPO} \ - -v BRANCH:${BRANCH} -v 'BENCH_FUNC_REGEX:${BENCH_FUNC_REGEX}' \ - -v PACKAGE_PATH:${PACKAGE_PATH} \ - -f manifests/benchmark/3_job.yaml \ - -f manifests/benchmark/2_secrets.yaml \ - -f manifests/benchmark/1_namespace.yaml diff --git a/funcbench/README.md b/funcbench/README.md deleted file mode 100644 index 99bc577e9..000000000 --- a/funcbench/README.md +++ /dev/null @@ -1,106 +0,0 @@ -# funcbench - -Benchmark and compare your Go code between commits or sub benchmarks. It automates the use of `go test -bench` to run the benchmarks and uses [benchstat](https://godoc.org/golang.org/x/perf/cmd/benchstat) to compare them. - -funcbench currently supports two modes, Local and GitHub. Running it in the Github mode also allows it to accept _a pull request number_ and _a branch/commit_ to compare against, which makes it suitable for automated tests. - -## Environment variables - -- `GITHUB_TOKEN`: Access token to post benchmarks results to respective PR. - -## Usage Examples - -> Clean git state is required. - -[embedmd]:# (funcbench-flags.txt) -```txt -usage: funcbench [] [] [] - -Benchmark and compare your Go code between sub benchmarks or commits. - - For BenchmarkFuncName, compare current with master: ./funcbench -v master - BenchmarkFuncName - - For BenchmarkFunc.*, compare current with master: ./funcbench -v master - BenchmarkFunc.* - - For all benchmarks, compare current with devel: ./funcbench -v devel .* or - ./funcbench -v devel - - For BenchmarkFunc.*, compare current with 6d280 commit: ./funcbench -v 6d280 - BenchmarkFunc.* - - For BenchmarkFunc.*, compare between sub-benchmarks of same benchmark on - current commit: ./funcbench -v . BenchmarkFunc.* - - For BenchmarkFuncName, compare pr#35 with master: ./funcbench --nocomment - --github-pr="35" master BenchmarkFuncName - -Flags: - -h, --help Show context-sensitive help (also try --help-long - and --help-man). - -v, --verbose Verbose mode. Errors includes trace and commands - output are logged. - --nocomment Disable posting of comment using the GitHub API. - --owner="prometheus" A Github owner or organisation name. - --repo="prometheus" This is the repository name. - --github-pr=GITHUB-PR GitHub PR number to pull changes from and to post - benchmark results. - --workspace="/tmp/funcbench" - Directory to clone GitHub PR. - --result-cache="funcbench-results" - Directory to store benchmark results. - -n, --user-test-name="default" - Name of the test to keep track of multiple - benchmarks - -t, --bench-time=1s Run enough iterations of each benchmark to take t, - specified as a time.Duration. The special syntax Nx - means to run the benchmark N times - -d, --timeout=2h Benchmark timeout specified in time.Duration - format, disabled if set to 0. If a test binary runs - longer than duration d, panic. - -l, --perflock Enable perflock (you must have perflock installed - to use this) - -Args: - Can be one of '.', tag name, branch name or commit - SHA of the branch to compare against. If set to '.', - branch/commit is the same as the current one; - funcbench will run once and try to compare between - 2 sub-benchmarks. Errors out if there are no - sub-benchmarks. - [] Function regex to use for benchmark.Supports RE2 - regexp and is fully anchored, by default will run all - benchmarks. - [] Package to run benchmark against. Eg. ./tsdb, defaults - to ./... - -``` - -### Building Docker Image -``` -docker build -t prominfra/funcbench:master . -``` - -## Triggering with GitHub comments - - -The benchmark can be triggered by creating a comment in a PR which specifies a branch to compare. The results are then posted back to the PR as a comment. The Github Actions workflow for funcbench [can be found here](https://github.com/prometheus/prometheus/blob/master/.github/workflows/funcbench.yml). - -The syntax is: `/funcbench `. - -- See [used regex for comment here.](https://github.com/prometheus/test-infra/blob/master/prombench/manifests/cluster-infra/7a_commentmonitor_configmap_noparse.yaml) -- The `` expects the `Benchmark` prefix. It is anchored and passed to `go test` command, so need to anchor it in the comment. - - -|Command|Explanation| -|---|--| -|`/funcbench master BenchmarkQuery.*`| Compare all the benchmarks matching `BenchmarkQuery.*` for master vs the PR| -|`/funcbench feature-branch` or `/funcbench tag-name .*`| Compare all the benchmarks on feature-branch/tag-name vs the PR| -|`/funcbench master BenchmarkQuery.* ./tsdb` | Compare all the benchmarks matching `BenchmarkQuery.*` for master vs the PR in package `./tsdb`| -|`/funcbench master Benchmark(?:Isolation.*\|QuerierSelect) ./tsdb` | Compare all benchmarks matching `Benchmark(?:Isolation.*\|QuerierSelect)` for master vs the PR| - - -> **Notes:** -> -> - Editing/Deleting a comment will not re-trigger the workflow of starting/stopping a benchmark. Only creating a comment starts a benchmark. -> - In case of funcbench, it automatically cleans up. So, no explicit stop command required. -> - Multiple comment lines are allowed: -> ``` -> /funcbench old_branch .* -> The old_branch performs poorly, I bet mine are much better. -> ``` diff --git a/funcbench/bench.go b/funcbench/bench.go deleted file mode 100644 index 1c74260cd..000000000 --- a/funcbench/bench.go +++ /dev/null @@ -1,147 +0,0 @@ -// Copyright 2020 The Prometheus 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 main - -import ( - "bytes" - "encoding/base64" - "errors" - "fmt" - "os" - "path/filepath" - "strings" - "time" - - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" - "golang.org/x/perf/benchstat" -) - -// TODO: Add unit test. -type Benchmarker struct { - logger Logger - - benchmarkArgs []string - benchFunc string - resultCacheDir string - scratchWorkspaceDir string - enablePerflock bool - - c *commander - repo *git.Repository -} - -func newBenchmarker(logger Logger, env Environment, c *commander, - benchTime, benchTimeout time.Duration, - resultCacheDir, packagePath string, enablePerflock bool) *Benchmarker { - return &Benchmarker{ - logger: logger, - benchFunc: env.BenchFunc(), - benchmarkArgs: []string{ - // TODO(bwplotka): Allow memprofiles. - // 'go test' flags: https://golang.org/cmd/go/#hdr-Testing_flags - "go test", - "-mod", "vendor", - "-run", `"^$"`, - "-bench", fmt.Sprintf(`"^%s$"`, env.BenchFunc()), - "-benchmem", - "-benchtime", benchTime.String(), - "-timeout", benchTimeout.String(), - packagePath, - }, - c: c, - repo: env.Repo(), - resultCacheDir: resultCacheDir, - scratchWorkspaceDir: "/tmp/funcbench-scratch", - enablePerflock: enablePerflock, - } -} - -func (b *Benchmarker) benchOutFileName(commit plumbing.Hash) (string, error) { - // Sanitize bench func. - bb := bytes.Buffer{} - e := base64.NewEncoder(base64.StdEncoding, &bb) - if _, err := e.Write([]byte(b.benchFunc)); err != nil { - return "", err - } - if err := e.Close(); err != nil { - return "", err - } - - return fmt.Sprintf("%s-%s.out", bb.String(), commit.String()), nil -} - -func (b *Benchmarker) exec(pkgRoot string, commit plumbing.Hash) (string, error) { - fileName, err := b.benchOutFileName(commit) - if err != nil { - return "", err - } - - if _, err := os.ReadFile(filepath.Join(b.resultCacheDir, fileName)); err == nil { - fmt.Println("Found previous results for ", fileName, b.benchFunc, "Reusing.") - return filepath.Join(b.resultCacheDir, fileName), nil - } - - // TODO Switch working directory before entering this function. - benchCmd := []string{"sh", "-c", strings.Join(append([]string{"cd", pkgRoot, "&&"}, b.benchmarkArgs...), " ")} - - b.logger.Println("Executing benchmark command for", commit.String(), "\n", benchCmd) - if b.enablePerflock { - benchCmd = append([]string{"perflock"}, benchCmd...) - } - out, err := b.c.exec(benchCmd...) - if err != nil { - return "", fmt.Errorf("benchmark ended with an error.: %w", err) - } - - fn := filepath.Join(b.resultCacheDir, fileName) - if b.resultCacheDir != "" { - if err := os.MkdirAll(b.resultCacheDir, os.ModePerm); err != nil { - return "", err - } - } - if err := os.WriteFile(fn, []byte(out), os.ModePerm); err != nil { - return "", err - } - return fn, nil -} - -func (b *Benchmarker) compareSubBenchmarks(string) ([]*benchstat.Table, error) { - // TODO(bwplotka): Implement. - return nil, errors.New("not implemented") -} - -func compareBenchmarks(files ...string) ([]*benchstat.Table, error) { - c := &benchstat.Collection{ - DeltaTest: benchstat.NoDeltaTest, - } - - for _, file := range files { - f, err := os.Open(file) - if err != nil { - return nil, err - } - defer f.Close() - - if err := c.AddFile(file, f); err != nil { - return nil, err - } - } - - tables := c.Tables() - if tables == nil { - return nil, errors.New("didn't match any existing benchmarks") - } - - return tables, nil -} diff --git a/funcbench/benchstat.go b/funcbench/benchstat.go deleted file mode 100644 index 2707768cb..000000000 --- a/funcbench/benchstat.go +++ /dev/null @@ -1,61 +0,0 @@ -// Copyright 2020 The Prometheus 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 main - -import ( - "bytes" - "strings" - "text/template" - - "golang.org/x/perf/benchstat" -) - -var renderTemplate = template.Must(template.New("").Funcs(renderFuncs).Parse(` -{{- range $i, $table := . }} -Benchmark|Old {{.Metric}}|New {{.Metric}}{{if .OldNewDelta}}|Delta{{end}} --|-|-{{if .OldNewDelta}}|-{{end}} - - {{- range $group := group $table.Rows }} - {{- range $row := . }} -{{ .Benchmark }}{{range .Metrics}}|{{.Format $row.Scaler}}{{end}}{{if $table.OldNewDelta}}|{{replace .Delta "-" "−" -1}} {{.Note}}{{ end }} - {{- end }} - {{- end }} -{{ end }}`)) - -var renderFuncs = template.FuncMap{ - "replace": strings.Replace, - "group": formGroup, -} - -func formGroup(rows []*benchstat.Row) (out [][]*benchstat.Row) { - var group string - var cur []*benchstat.Row - for _, r := range rows { - if r.Group != group { - group = r.Group - if len(cur) > 0 { - out = append(out, cur) - cur = nil - } - } - cur = append(cur, r) - } - if len(cur) > 0 { - out = append(out, cur) - } - return -} - -func formatMarkdown(buf *bytes.Buffer, tables []*benchstat.Table) error { - return renderTemplate.Execute(buf, tables) -} diff --git a/funcbench/benchstat_test.go b/funcbench/benchstat_test.go deleted file mode 100644 index 9ce9cc3eb..000000000 --- a/funcbench/benchstat_test.go +++ /dev/null @@ -1,99 +0,0 @@ -// Copyright 2020 The Prometheus 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 main - -import ( - "bytes" - "os" - "path/filepath" - "strings" - "testing" - - "golang.org/x/perf/benchstat" -) - -func TestFormatMarkdown(t *testing.T) { - expected := `Benchmark|Old time/op|New time/op|Delta --|-|-|- -Respond-4|1.69ms ± 0%|1.75ms ± 0%|~ (p=1.000 n=1+1) -RangeQuery/expr=abs(a_one),steps=1000-4|458µs ± 0%|456µs ± 0%|~ (p=1.000 n=1+1) -Parse/expfmt-text/promtestdata.nometa.txt-4|2.39µs ± 0%|2.37µs ± 0%|~ (p=1.000 n=1+1) - -Benchmark|Old alloc/op|New alloc/op|Delta --|-|-|- -Respond-4|241kB ± 0%|233kB ± 0%|~ (p=1.000 n=1+1) -RangeQuery/expr=abs(a_one),steps=1000-4|41.4kB ± 0%|41.4kB ± 0%|~ (p=1.000 n=1+1) -Parse/expfmt-text/promtestdata.nometa.txt-4|921B ± 0%|922B ± 0%|~ (p=1.000 n=1+1) - -Benchmark|Old allocs/op|New allocs/op|Delta --|-|-|- -Respond-4|10.0 ± 0%|9.0 ± 0%|~ (p=1.000 n=1+1) -RangeQuery/expr=abs(a_one),steps=1000-4|1.18k ± 0%|1.19k ± 0%|~ (p=1.000 n=1+1) -Parse/expfmt-text/promtestdata.nometa.txt-4|24.0 ± 0%|24.0 ± 0%|~ (all equal) - -Benchmark|Old speed|New speed|Delta --|-|-|- -Parse/expfmt-text/promtestdata.nometa.txt-4|13.2TB/s ± 0%|11.3TB/s ± 0%|~ (p=1.000 n=1+1)` - file1 := `BenchmarkRespond-4 710 1691189 ns/op 241368 B/op 10 allocs/op -BenchmarkRangeQuery/expr=abs(a_one),steps=1000-4 2310 457700 ns/op 41378 B/op 1182 allocs/op -BenchmarkParse/expfmt-text/promtestdata.nometa.txt-4 510378 2388 ns/op 13161439.49 MB/s 921 B/op 24 allocs/op` - file2 := `BenchmarkRespond-4 688 1751880 ns/op 232637 B/op 9 allocs/op -BenchmarkRangeQuery/expr=abs(a_one),steps=1000-4 2553 456152 ns/op 41442 B/op 1186 allocs/op -BenchmarkParse/expfmt-text/promtestdata.nometa.txt-4 434798 2374 ns/op 11280285.67 MB/s 922 B/op 24 allocs/op` - c := &benchstat.Collection{} - - c.AddConfig("file1", []byte(file1)) - c.AddConfig("file2", []byte(file2)) - - tables := c.Tables() - var buf bytes.Buffer - _ = formatMarkdown(&buf, tables) - out := buf.String() - if strings.Compare(expected, strings.TrimSpace(out)) != 0 { - t.Errorf("Expected:\n%s, but got:\n%s", expected, out) - } -} - -func TestResultIsEmpty(t *testing.T) { - file1 := ` -ok github.com/prometheus/prometheus/tsdb/fileutil 0.323s -PASS -BenchmarkIsolation/10-8 445276 2478 ns/op 0 B/op 0 allocs/op -` - file2 := ` -BenchmarkIsolation/100-8 39044 28747 ns/op 6 B/op 0 allocs/op -` - dir, err := os.MkdirTemp("", "test_empty_result") - if err != nil { - t.Error(err) - } - - files := map[string]string{ - "file1": file1, - "file2": file2, - } - - names := make([]string, 0) - for name, content := range files { - f := filepath.Join(dir, name) - if err := os.WriteFile(f, []byte(content), 0644); err != nil { - t.Error(err) - return - } - names = append(names, f) - } - - if _, err := compareBenchmarks(names...); err == nil || !strings.Contains(err.Error(), "match any") { - t.Error("Should return an error indicated that no matching benchmarks found.") - } -} diff --git a/funcbench/env.go b/funcbench/env.go deleted file mode 100644 index d2fcd13de..000000000 --- a/funcbench/env.go +++ /dev/null @@ -1,240 +0,0 @@ -// Copyright 2020 The Prometheus 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 main - -import ( - "bytes" - "context" - "errors" - "fmt" - "os" - "path/filepath" - "strings" - "time" - - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/config" - "github.com/go-git/go-git/v5/plumbing" - "github.com/google/go-github/v29/github" - "golang.org/x/oauth2" - "golang.org/x/perf/benchstat" -) - -type Environment interface { - BenchFunc() string - CompareTarget() string - SetHashStrings(compareTargetHash, repoHeadHashString string) - - PostErr(err string) error - PostResults(tables []*benchstat.Table, extraInfo ...string) error - - Repo() *git.Repository -} - -type environment struct { - logger Logger - - benchFunc string - compareTarget string - compareTargetHashString string - repoHeadHashString string -} - -func (e environment) BenchFunc() string { return e.benchFunc } -func (e environment) CompareTarget() string { return e.compareTarget } -func (e *environment) SetHashStrings(compareTargetHash, repoHeadHashString string) { - e.compareTargetHashString = compareTargetHash - e.repoHeadHashString = repoHeadHashString -} - -type Local struct { - environment - - repo *git.Repository -} - -func newLocalEnv(e environment) (Environment, error) { - r, err := git.PlainOpenWithOptions(".", &git.PlainOpenOptions{DetectDotGit: true}) - if err != nil { - return nil, err - } - e.logger.Println("[Local Mode]", "\nBenchmarking current version versus:", e.compareTarget, "\nBenchmark func regex:", e.benchFunc) - return &Local{environment: e, repo: r}, nil -} - -func (l *Local) PostErr(string) error { return nil } // Noop. We will see error anyway. - -func (l *Local) PostResults(tables []*benchstat.Table, extraInfo ...string) error { - legend := fmt.Sprintf("Old: %s\nNew: %s", - l.compareTargetHashString, - l.repoHeadHashString, - ) - fmt.Printf("Results:\n%s\n", legend) - - var buf bytes.Buffer - benchstat.FormatText(&buf, tables) - - os.Stdout.Write(buf.Bytes()) - - return nil -} - -func (l *Local) Repo() *git.Repository { return l.repo } - -// TODO: Add unit test(!). -type GitHub struct { - environment - - repo *git.Repository - client *gitHubClient - - ctx context.Context -} - -func newGitHubEnv(ctx context.Context, e environment, gc *gitHubClient, workspace string) (Environment, error) { - - var r *git.Repository - var err error - retryTime := 10 * time.Second - // Retry 10 times. - for i := 1; i <= 10; i++ { - if err := os.RemoveAll(filepath.Join(workspace, gc.repo)); err != nil { - return nil, err - } - e.logger.Println("Cloning ", gc.owner, ":", gc.repo, " is in progress. Checking in ", retryTime) - time.Sleep(retryTime) - r, err = git.PlainCloneContext(ctx, filepath.Join(workspace, gc.repo), false, &git.CloneOptions{ - URL: fmt.Sprintf("https://github.com/%s/%s.git", gc.owner, gc.repo), - Progress: os.Stdout, - }) - if err == nil { - break - } - } - if err != nil { - return nil, fmt.Errorf("clone git repository: %w", err) - } - - if err := os.Chdir(filepath.Join(workspace, gc.repo)); err != nil { - return nil, fmt.Errorf("changing to %s/%s dir: %w", workspace, gc.repo, err) - } - - g := &GitHub{ - environment: e, - repo: r, - client: gc, - ctx: ctx, - } - - if err := os.Setenv("CGO_ENABLED", "0"); err != nil { - return nil, err - } - - wt, err := g.repo.Worktree() - if err != nil { - return nil, err - } - - if err := r.FetchContext(ctx, &git.FetchOptions{ - RefSpecs: []config.RefSpec{ - config.RefSpec(fmt.Sprintf("+refs/pull/%d/head:refs/heads/pullrequest", gc.prNumber)), - }, - Progress: os.Stdout, - }); err != nil && !errors.Is(err, git.NoErrAlreadyUpToDate) { - return nil, fmt.Errorf("fetch to pull request branch: %w", err) - } - - if err = wt.Checkout(&git.CheckoutOptions{ - Branch: plumbing.NewBranchReferenceName("pullrequest"), - }); err != nil { - return nil, fmt.Errorf("switch to pull request branch: %w", err) - } - - e.logger.Println("[GitHub Mode]", gc.owner, ":", gc.repo, "\nBenchmarking PR -", gc.prNumber, "versus:", e.compareTarget, "\nBenchmark func regex:", e.benchFunc) - return g, nil -} - -func (g *GitHub) PostErr(txt string) error { - c := fmt.Sprintf( - "Old: `%v`\nNew: `PR-%v`\n%v", - g.compareTarget, - g.client.prNumber, - txt, - ) - - if err := g.client.postComment(c); err != nil { - return err - } - - return nil -} - -func (g *GitHub) PostResults(tables []*benchstat.Table, extraInfo ...string) error { - b := bytes.Buffer{} - if err := formatMarkdown(&b, tables); err != nil { - return err - } - - legend := fmt.Sprintf("Old: `%v`/`%v`\nNew: `PR-%v`/`%v`", - g.compareTarget, - g.compareTargetHashString, - g.client.prNumber, - g.repoHeadHashString, - ) - result := fmt.Sprintf( - "
Click to check benchmark result\n\n%s\n%s\n%s
", - legend, - strings.Join(extraInfo, "\n"), - b.String(), - ) - return g.client.postComment(result) -} - -func (g *GitHub) Repo() *git.Repository { return g.repo } - -type gitHubClient struct { - owner string - repo string - prNumber int - client *github.Client - nocomment bool - ctx context.Context -} - -func newGitHubClient(ctx context.Context, owner, repo string, prNumber int, nocomment bool) (*gitHubClient, error) { - ghToken, ok := os.LookupEnv("GITHUB_TOKEN") - if !ok && !nocomment { - return nil, fmt.Errorf("GITHUB_TOKEN missing") - } - ts := oauth2.StaticTokenSource(&oauth2.Token{AccessToken: ghToken}) - tc := oauth2.NewClient(ctx, ts) - c := gitHubClient{ - client: github.NewClient(tc), - owner: owner, - repo: repo, - prNumber: prNumber, - nocomment: nocomment, - ctx: ctx, - } - return &c, nil -} - -func (c *gitHubClient) postComment(comment string) error { - if c.nocomment { - return nil - } - - issueComment := &github.IssueComment{Body: github.String(comment)} - _, _, err := c.client.Issues.CreateComment(c.ctx, c.owner, c.repo, c.prNumber, issueComment) - return err -} diff --git a/funcbench/main.go b/funcbench/main.go deleted file mode 100644 index d89822684..000000000 --- a/funcbench/main.go +++ /dev/null @@ -1,361 +0,0 @@ -// Copyright 2019 The Prometheus 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 main - -import ( - "bytes" - "context" - "errors" - "fmt" - "io" - "log" - "os" - "os/exec" - "os/signal" - "path" - "path/filepath" - "strings" - "syscall" - "time" - - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" - "github.com/oklog/run" - "golang.org/x/perf/benchstat" - "gopkg.in/alecthomas/kingpin.v2" -) - -type Logger interface { - Println(v ...interface{}) -} - -type logger struct { - *log.Logger - - verbose bool -} - -func (l *logger) FatalError(err error) { - if l.verbose { - l.Fatalf("%+v", err) - } - l.Fatalf("%v", err) -} - -func main() { - cfg := struct { - userTestName string - verbose bool - nocomment bool - owner string - repo string - resultsDir string - workspaceDir string - ghPR int - benchTime time.Duration - benchTimeout time.Duration - compareTarget string - benchFuncRegex string - packagePath string - enablePerflock bool - }{} - - app := kingpin.New( - filepath.Base(os.Args[0]), - `Benchmark and compare your Go code between sub benchmarks or commits. - * For BenchmarkFuncName, compare current with master: ./funcbench -v master BenchmarkFuncName - * For BenchmarkFunc.*, compare current with master: ./funcbench -v master BenchmarkFunc.* - * For all benchmarks, compare current with devel: ./funcbench -v devel .* or ./funcbench -v devel - * For BenchmarkFunc.*, compare current with 6d280 commit: ./funcbench -v 6d280 BenchmarkFunc.* - * For BenchmarkFunc.*, compare between sub-benchmarks of same benchmark on current commit: ./funcbench -v . BenchmarkFunc.* - * For BenchmarkFuncName, compare pr#35 with master: ./funcbench --nocomment --github-pr="35" master BenchmarkFuncName`, - ) - // Options. - app.HelpFlag.Short('h') - app.Flag("verbose", "Verbose mode. Errors includes trace and commands output are logged."). - Short('v').BoolVar(&cfg.verbose) - app.Flag("nocomment", "Disable posting of comment using the GitHub API."). - BoolVar(&cfg.nocomment) - - app.Flag("owner", "A Github owner or organisation name."). - Default("prometheus").StringVar(&cfg.owner) - app.Flag("repo", "This is the repository name."). - Default("prometheus").StringVar(&cfg.repo) - app.Flag("github-pr", "GitHub PR number to pull changes from and to post benchmark results."). - IntVar(&cfg.ghPR) - app.Flag("workspace", "Directory to clone GitHub PR."). - Default("/tmp/funcbench"). - StringVar(&cfg.workspaceDir) - app.Flag("result-cache", "Directory to store benchmark results."). - Default("funcbench-results"). - StringVar(&cfg.resultsDir) - app.Flag("user-test-name", "Name of the test to keep track of multiple benchmarks"). - Default("default"). - Short('n'). - StringVar(&cfg.userTestName) - - app.Flag("bench-time", "Run enough iterations of each benchmark to take t, specified "+ - "as a time.Duration. The special syntax Nx means to run the benchmark N times"). - Short('t').Default("1s").DurationVar(&cfg.benchTime) - app.Flag("timeout", "Benchmark timeout specified in time.Duration format, "+ - "disabled if set to 0. If a test binary runs longer than duration d, panic."). - Short('d').Default("2h").DurationVar(&cfg.benchTimeout) - app.Flag("perflock", "Enable perflock (you must have perflock installed to use this)"). - Short('l'). - Default("false"). - BoolVar(&cfg.enablePerflock) - - app.Arg("target", "Can be one of '.', tag name, branch name or commit SHA of the branch "+ - "to compare against. If set to '.', branch/commit is the same as the current one; "+ - "funcbench will run once and try to compare between 2 sub-benchmarks. "+ - "Errors out if there are no sub-benchmarks."). - Required().StringVar(&cfg.compareTarget) - app.Arg("bench-func-regex", "Function regex to use for benchmark."+ - "Supports RE2 regexp and is fully anchored, by default will run all benchmarks."). - Default(".*"). - StringVar(&cfg.benchFuncRegex) // TODO (geekodour) : validate regex? - app.Arg("packagepath", "Package to run benchmark against. Eg. ./tsdb, defaults to ./..."). - Default("./..."). - StringVar(&cfg.packagePath) - - kingpin.MustParse(app.Parse(os.Args[1:])) - logger := &logger{ - // Show file line with each log. - Logger: log.New(os.Stdout, "funcbech", log.Ltime|log.Lshortfile), - verbose: cfg.verbose, - } - - var g run.Group - // Main routine. - { - ctx, cancel := context.WithCancel(context.Background()) - g.Add(func() error { - var ( - env Environment - err error - ) - - // Setup Environment. - e := environment{ - logger: logger, - benchFunc: cfg.benchFuncRegex, - compareTarget: cfg.compareTarget, - } - if cfg.ghPR == 0 { - // Local Mode. - env, err = newLocalEnv(e) - if err != nil { - return fmt.Errorf("environment create: %w", err) - } - } else { - // Github Mode. - ghClient, err := newGitHubClient(ctx, cfg.owner, cfg.repo, cfg.ghPR, cfg.nocomment) - if err != nil { - return fmt.Errorf("github client: %w", err) - } - - env, err = newGitHubEnv(ctx, e, ghClient, cfg.workspaceDir) - if err != nil { - if err := ghClient.postComment(fmt.Sprintf("%v. Could not setup environment, please check logs.", err)); err != nil { - return fmt.Errorf("could not post error: %w", err) - } - return fmt.Errorf("environment create: %w", err) - } - } - - // ( ◔_◔)ノ Start benchmarking! - benchmarker := newBenchmarker(logger, env, - &commander{verbose: cfg.verbose, ctx: ctx}, - cfg.benchTime, cfg.benchTimeout, - path.Join(cfg.resultsDir, cfg.userTestName), - cfg.packagePath, - cfg.enablePerflock, - ) - tables, err := startBenchmark(env, benchmarker) - if err != nil { - pErr := env.PostErr( - fmt.Sprintf( - "```\n%s\n```\nError:\n```\n%s\n```", - strings.Join(benchmarker.benchmarkArgs, " "), - err.Error(), - ), - ) - - if pErr != nil { - return fmt.Errorf("could not log error: %w", pErr) - } - return err - } - - // Post results. - // TODO (geekodour): probably post some kind of funcbench summary(?) - return env.PostResults( - tables, - fmt.Sprintf("```\n%s\n```", strings.Join(benchmarker.benchmarkArgs, " ")), - ) - - }, func(err error) { - cancel() - }) - } - // Listen for termination signals. - { - cancel := make(chan struct{}) - g.Add(func() error { - return interrupt(logger, cancel) - }, func(error) { - close(cancel) - }) - } - - if err := g.Run(); err != nil { - logger.FatalError(fmt.Errorf("running command failed: %w", err)) - } - logger.Println("exiting") -} - -// startBenchmark returns the comparision results. -// 1. If target is same as current ref, run sub-benchmarks and return instead (TODO). -// 2. Execute benchmark against packages in the current worktree. -// 3. Cleanup of worktree in case funcbench was run previously and checkout target worktree. -// 4. Execute benchmark against packages in the new(target) worktree. -// 5. Return compared results. -func startBenchmark(env Environment, bench *Benchmarker) ([]*benchstat.Table, error) { - - wt, _ := env.Repo().Worktree() - cmpWorkTreeDir := filepath.Join(bench.scratchWorkspaceDir) - - ref, err := env.Repo().Head() - if err != nil { - return nil, fmt.Errorf("get head: %w", err) - } - - // TODO move it into env? since GitHub env doesn't need this check. - if _, err := bench.c.exec("sh", "-c", "git update-index -q --ignore-submodules --refresh && git diff-files --quiet --ignore-submodules --"); err != nil { - return nil, fmt.Errorf("not clean worktree: %w", err) - } - - if env.CompareTarget() == "." { - bench.logger.Println("Assuming sub-benchmarks comparison.") - subResult, err := bench.exec(wt.Filesystem.Root(), ref.Hash()) - if err != nil { - return nil, fmt.Errorf("execute sub-benchmark: %w", err) - } - - cmps, err := bench.compareSubBenchmarks(subResult) - if err != nil { - return nil, fmt.Errorf("comparing sub benchmarks: %w", err) - } - return cmps, nil - } - - // Get info about target. - targetCommit := getTargetInfo(env.Repo(), env.CompareTarget()) - if targetCommit == plumbing.ZeroHash { - return nil, fmt.Errorf("cannot find target %s", env.CompareTarget()) - } - - bench.logger.Println("Target:", targetCommit.String(), "Current Ref:", ref.Hash().String()) - - if targetCommit == ref.Hash() { - return nil, fmt.Errorf("target: %s is the same as current ref %s (or is on the same commit); No changes would be expected; Aborting", targetCommit, ref.String()) - } - - bench.logger.Println("Assuming comparing with target (clean workdir will be checked.)") - - // Execute benchmark A. - newResult, err := bench.exec(wt.Filesystem.Root(), ref.Hash()) - if err != nil { - return nil, fmt.Errorf("execute benchmark for A: %v: %w", ref.Name().String(), err) - } - - // TODO move the following part before 'Execute benchmark B.' into a function Benchmarker.switchToWorkTree. - // Best effort cleanup and checkout new worktree. - if err := os.RemoveAll(cmpWorkTreeDir); err != nil { - return nil, fmt.Errorf("delete worktree at %s: %w", cmpWorkTreeDir, err) - } - - // TODO (geekodour): switch to worktree remove once we decide not to support git<2.17 - if _, err := bench.c.exec("git", "worktree", "prune"); err != nil { - return nil, fmt.Errorf("worktree prune: %w", err) - } - - bench.logger.Println("Checking out (in new workdir):", cmpWorkTreeDir, "commmit", targetCommit.String()) - if _, err := bench.c.exec("git", "worktree", "add", "-f", cmpWorkTreeDir, targetCommit.String()); err != nil { - return nil, fmt.Errorf("checkout %s in worktree %s: %w", targetCommit.String(), cmpWorkTreeDir, err) - } - - // Execute benchmark B. - oldResult, err := bench.exec(cmpWorkTreeDir, targetCommit) - if err != nil { - return nil, fmt.Errorf("execute benchmark for B: %v: %w", env.CompareTarget(), err) - } - - // Compare B vs A. - tables, err := compareBenchmarks(oldResult, newResult) - if err != nil { - return nil, fmt.Errorf("comparing benchmarks: %w", err) - } - - // Save hashes for info about benchmark. - env.SetHashStrings(targetCommit.String(), ref.Hash().String()) - - return tables, nil -} - -func interrupt(logger Logger, cancel <-chan struct{}) error { - c := make(chan os.Signal, 1) - signal.Notify(c, syscall.SIGINT, syscall.SIGTERM) - select { - case s := <-c: - logger.Println("caught signal", s, "Exiting.") - return nil - case <-cancel: - return errors.New("canceled") - } -} - -// getTargetInfo returns the hash of the target if found, -// otherwise returns plumbing.ZeroHash. -// NOTE: if both a branch and a tag have the same name, it always chooses the branch name. -func getTargetInfo(repo *git.Repository, target string) plumbing.Hash { - hash, err := repo.ResolveRevision(plumbing.Revision(target)) - if err != nil { - return plumbing.ZeroHash - } - return *hash -} - -type commander struct { - verbose bool - ctx context.Context -} - -func (c *commander) exec(command ...string) (string, error) { - cmd := exec.CommandContext(c.ctx, command[0], command[1:]...) - var b bytes.Buffer - cmd.Stdout = &b - cmd.Stderr = &b - - if c.verbose { - // All to stdout. - cmd.Stdout = io.MultiWriter(cmd.Stdout, os.Stdout) - cmd.Stderr = io.MultiWriter(cmd.Stdout, os.Stdout) - } - if err := cmd.Run(); err != nil { - out := b.String() - return "", fmt.Errorf("error: %w; Command out: %s", err, out) - } - - return b.String(), nil -} diff --git a/funcbench/main_test.go b/funcbench/main_test.go deleted file mode 100644 index 00a878c86..000000000 --- a/funcbench/main_test.go +++ /dev/null @@ -1,49 +0,0 @@ -// Copyright 2020 The Prometheus 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 main - -import ( - "testing" - - fixtures "github.com/go-git/go-git-fixtures/v4" - "github.com/go-git/go-git/v5" - "github.com/go-git/go-git/v5/plumbing" - "github.com/go-git/go-git/v5/plumbing/cache" - "github.com/go-git/go-git/v5/storage/filesystem" -) - -func TestGetTargetInfo(t *testing.T) { - f := fixtures.Basic().One() - sto := filesystem.NewStorage(f.DotGit(), cache.NewObjectLRUDefault()) - r, err := git.Open(sto, f.DotGit()) - if err != nil { - t.Errorf("error when open repository: %s", err) - } - - testCases := map[string]string{ - "notFound": plumbing.ZeroHash.String(), - "HEAD": "6ecf0ef2c2dffb796033e5a02219af86ec6584e5", - "master": "6ecf0ef2c2dffb796033e5a02219af86ec6584e5", - "branch": "e8d3ffab552895c19b9fcf7aa264d277cde33881", - "v1.0.0": "6ecf0ef2c2dffb796033e5a02219af86ec6584e5", - "918c48b83bd081e863dbe1b80f8998f058cd8294": "918c48b83bd081e863dbe1b80f8998f058cd8294", - } - - for target, hash := range testCases { - commit := getTargetInfo(r, target) - if commit.String() != hash { - t.Errorf("error when get target %s, expect %s, got %s", target, hash, commit) - } - } -} diff --git a/funcbench/manifests/benchmark/1_namespace.yaml b/funcbench/manifests/benchmark/1_namespace.yaml deleted file mode 100644 index a72b79b8b..000000000 --- a/funcbench/manifests/benchmark/1_namespace.yaml +++ /dev/null @@ -1,5 +0,0 @@ -#A new namespace is created to differentiate the instances of funcbench -apiVersion: v1 -kind: Namespace -metadata: - name: funcbench-{{ .PR_NUMBER }} diff --git a/funcbench/manifests/benchmark/2_secrets.yaml b/funcbench/manifests/benchmark/2_secrets.yaml deleted file mode 100644 index c8eb7b48e..000000000 --- a/funcbench/manifests/benchmark/2_secrets.yaml +++ /dev/null @@ -1,8 +0,0 @@ -apiVersion: v1 -kind: Secret -metadata: - name: github-token - namespace: funcbench-{{ .PR_NUMBER }} -type: Opaque -stringData: - token: "{{ .GITHUB_TOKEN }}" diff --git a/funcbench/manifests/benchmark/3_job.yaml b/funcbench/manifests/benchmark/3_job.yaml deleted file mode 100644 index 61b2b4fbc..000000000 --- a/funcbench/manifests/benchmark/3_job.yaml +++ /dev/null @@ -1,34 +0,0 @@ -apiVersion: batch/v1 -kind: Job -metadata: - name: funcbench-test-{{ .PR_NUMBER }} - namespace: funcbench-{{ .PR_NUMBER }} -spec: - # never re-create a new pod - backoffLimit: 0 - template: - spec: - restartPolicy: Never - containers: - - name: funcbench - image: docker.io/prominfra/funcbench:master - imagePullPolicy: Always - args: - - "--verbose" - - "--owner" - - "{{ .GITHUB_ORG }}" - - "--repo" - - "{{ .GITHUB_REPO }}" - - "--github-pr" - - "{{ .PR_NUMBER }}" - - "{{ .BRANCH }}" - - "{{ .BENCH_FUNC_REGEX }}" - - "{{ .PACKAGE_PATH }}" - env: - - name: GITHUB_TOKEN - valueFrom: - secretKeyRef: - name: github-token - key: token - nodeSelector: - node-name: funcbench-{{ .PR_NUMBER }} diff --git a/funcbench/manifests/cluster_eks.yaml b/funcbench/manifests/cluster_eks.yaml deleted file mode 100644 index 350ec3b7b..000000000 --- a/funcbench/manifests/cluster_eks.yaml +++ /dev/null @@ -1,26 +0,0 @@ -cluster: - name: {{ .CLUSTER_NAME }} - version: 1.16 - rolearn: {{ .ROLE_ARN }} - resourcesvpcconfig: - endpointpublicaccess: true - subnetids: - {{ range $subnetId := split .SUBNET_IDS .SEPARATOR }} - - {{ $subnetId }} - {{ end }} -nodegroups: - - nodegroupname: {{ .CLUSTER_NAME }} - noderole: {{ .NODE_ROLE }} - disksize: 100 - subnets: - {{ range $subnetId := split .SUBNET_IDS .SEPARATOR }} - - {{ $subnetId }} - {{ end }} - instancetypes: - - r6g.xlarge - scalingconfig: - desiredsize: 1 - maxsize: 1 - minsize: 1 - labels: - node-name: funcbench-{{ .PR_NUMBER }} diff --git a/funcbench/manifests/cluster_gke.yaml b/funcbench/manifests/cluster_gke.yaml deleted file mode 100644 index a50f14517..000000000 --- a/funcbench/manifests/cluster_gke.yaml +++ /dev/null @@ -1,14 +0,0 @@ -projectid: {{ .GKE_PROJECT_ID }} -zone: {{ .ZONE }} -cluster: - name: {{ .CLUSTER_NAME }} - initialclusterversion: 1.16 - nodepools: - - name: {{ .CLUSTER_NAME }} - initialnodecount: 1 - config: - machinetype: n1-highmem-4 - imagetype: COS - disksizegb: 100 - labels: - node-name: funcbench-{{ .PR_NUMBER }} \ No newline at end of file diff --git a/go.mod b/go.mod index 9eae03eb1..643c498a3 100644 --- a/go.mod +++ b/go.mod @@ -5,15 +5,11 @@ go 1.23 require ( cloud.google.com/go/container v1.40.0 github.com/aws/aws-sdk-go v1.55.5 - github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 - github.com/go-git/go-git/v5 v5.12.0 github.com/google/go-github/v29 v29.0.3 - github.com/oklog/run v1.1.0 github.com/prometheus/alertmanager v0.27.0 github.com/prometheus/client_golang v1.20.4 github.com/prometheus/common v0.60.0 golang.org/x/oauth2 v0.23.0 - golang.org/x/perf v0.0.0-20200318175901-9c9101da8316 google.golang.org/api v0.199.0 google.golang.org/grpc v1.67.1 gopkg.in/alecthomas/kingpin.v2 v2.2.6 @@ -31,10 +27,7 @@ require ( cloud.google.com/go/auth v0.9.5 // indirect cloud.google.com/go/auth/oauth2adapt v0.2.4 // indirect cloud.google.com/go/compute/metadata v0.5.2 // indirect - dario.cat/mergo v1.0.0 // indirect github.com/BurntSushi/toml v1.4.0 // indirect - github.com/Microsoft/go-winio v0.6.1 // indirect - github.com/ProtonMail/go-crypto v1.0.0 // indirect github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/alessio/shellescape v1.4.2 // indirect @@ -43,17 +36,12 @@ require ( github.com/beorn7/perks v1.0.1 // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect github.com/cespare/xxhash/v2 v2.3.0 // indirect - github.com/cloudflare/circl v1.3.7 // indirect github.com/coreos/go-systemd/v22 v22.5.0 // indirect - github.com/cyphar/filepath-securejoin v0.2.4 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect - github.com/emirpasic/gods v1.18.1 // indirect github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect - github.com/go-git/go-billy/v5 v5.5.0 // indirect github.com/go-kit/log v0.2.1 // indirect github.com/go-logfmt/logfmt v0.6.0 // indirect github.com/go-logr/logr v1.4.2 // indirect @@ -86,15 +74,11 @@ require ( github.com/hashicorp/memberlist v0.5.0 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect - github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // indirect github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/jpillora/backoff v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect - github.com/kevinburke/ssh_config v1.2.0 // indirect github.com/klauspost/compress v1.17.9 // indirect - github.com/kr/pretty v0.3.1 // indirect - github.com/kr/text v0.2.0 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-isatty v0.0.20 // indirect github.com/matttproud/golang_protobuf_extensions v1.0.4 // indirect @@ -103,26 +87,22 @@ require ( github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f // indirect + github.com/oklog/run v1.1.0 // indirect github.com/oklog/ulid v1.3.1 // indirect github.com/onsi/gomega v1.33.1 // indirect github.com/pelletier/go-toml v1.9.5 // indirect - github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pkg/errors v0.9.1 // indirect github.com/prometheus/client_model v0.6.1 // indirect github.com/prometheus/common/sigv4 v0.1.0 // indirect github.com/prometheus/exporter-toolkit v0.11.0 // indirect github.com/prometheus/procfs v0.15.1 // indirect - github.com/rogpeppe/go-internal v1.12.0 // indirect github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect - github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // indirect github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c // indirect github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 // indirect github.com/sirupsen/logrus v1.9.3 // indirect - github.com/skeema/knownhosts v1.2.2 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/xanzy/ssh-agent v0.3.3 // indirect go.opencensus.io v0.24.0 // indirect go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.54.0 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.54.0 // indirect @@ -141,9 +121,7 @@ require ( google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 // indirect google.golang.org/protobuf v1.34.2 // indirect - gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c // indirect gopkg.in/inf.v0 v0.9.1 // indirect - gopkg.in/warnings.v0 v0.1.2 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 // indirect diff --git a/go.sum b/go.sum index b797346d7..8ff0a0765 100644 --- a/go.sum +++ b/go.sum @@ -1,4 +1,3 @@ -cloud.google.com/go v0.0.0-20170206221025-ce650573d812/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= @@ -41,22 +40,12 @@ cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0Zeo cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -dario.cat/mergo v1.0.0 h1:AGCNq9Evsj31mOgNPcLyXc+4PNABt905YmuqPYYpBWk= -dario.cat/mergo v1.0.0/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.4.0 h1:kuoIxZQy2WRRk1pttg9asf+WVv6tWQuBNVmK8+nqPr0= github.com/BurntSushi/toml v1.4.0/go.mod h1:ukJfTF/6rtPPRCnwkur4qwRxa8vTRFBF0uk2lLoLwho= github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DataDog/datadog-go v3.2.0+incompatible/go.mod h1:LButxg5PwREeZtORoXG3tL4fMGNddJ+vMq1mwgfaqoQ= -github.com/GoogleCloudPlatform/cloudsql-proxy v0.0.0-20190129172621-c8b1d7a94ddf/go.mod h1:aJ4qN3TfrelA6NZ6AXsXRfmEVaYin3EDbSPJrKS8OXo= -github.com/Microsoft/go-winio v0.5.2/go.mod h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY= -github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= -github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= -github.com/ProtonMail/go-crypto v1.0.0 h1:LRuvITjQWX+WIfr930YHG2HNfjR1uOfyf5vE0kC2U78= -github.com/ProtonMail/go-crypto v1.0.0/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/aclements/go-gg v0.0.0-20170118225347-6dbb4e4fefb0/go.mod h1:55qNq4vcpkIuHowELi5C8e+1yUHtoLoOUR9QU5j7Tes= -github.com/aclements/go-moremath v0.0.0-20161014184102-0ff62e0875ff/go.mod h1:idZL3yvz4kzx1dsBOAC+oYv6L92P1oFEhUXUB1A/lwQ= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751 h1:JYp7IbQjafoB+tBA3gMyHYHrpOtNuDiK/uB5uXxq5wM= github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= @@ -67,13 +56,9 @@ github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 h1:s6gZFSlWYmbqAu github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/alessio/shellescape v1.4.2 h1:MHPfaU+ddJ0/bYWpgIeUnQUqKrlJ1S7BfEYPM4uEoM0= github.com/alessio/shellescape v1.4.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= -github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= github.com/armon/go-metrics v0.4.1 h1:hR91U9KYmb6bLBYLQjyM+3j+rcd/UhE+G78SFnF8gJA= github.com/armon/go-metrics v0.4.1/go.mod h1:E6amYzXo6aW1tqzoZGT755KkbgrJsSdpwZ+3JqfkOG4= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= -github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.55.5 h1:KKUZBfBoyqy5d3swXyiC7Q76ic40rYcbqH7qjh59kzU= github.com/aws/aws-sdk-go v1.55.5/go.mod h1:eRwEWoyTWFMVYVQzKMNHWP5/RV4xIUGMQfXQHfHkpNU= @@ -83,7 +68,6 @@ github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24 github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= @@ -96,26 +80,16 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMn github.com/circonus-labs/circonus-gometrics v2.3.1+incompatible/go.mod h1:nmEj6Dob7S7YxXgwXpfOuvO54S+tGdZdw9fuRZt25Ag= github.com/circonus-labs/circonusllhist v0.1.3/go.mod h1:kMXHVDlOchFAehlya5ePtbp5jckzBHf4XRpQvBOLI+I= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= -github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= -github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= -github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= -github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= -github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ= github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= @@ -126,16 +100,6 @@ github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2 github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gliderlabs/ssh v0.3.7 h1:iV3Bqi942d9huXnzEF2Mt+CY9gLu8DNM4Obd+8bODRE= -github.com/gliderlabs/ssh v0.3.7/go.mod h1:zpHEXBstFnQYtGnB8k8kQLol82umzn/2/snG7alWVD8= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= -github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= -github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= -github.com/go-git/go-billy/v5 v5.5.0/go.mod h1:hmexnoNsr2SJU1Ju67OaNz5ASJY3+sHgFRpCtpDCKow= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4= -github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= -github.com/go-git/go-git/v5 v5.12.0 h1:7Md+ndsjrzZxbddRDZjF14qK+NN56sy6wkqaVrjZtys= -github.com/go-git/go-git/v5 v5.12.0/go.mod h1:FTM9VKtnI2m65hNI/TenDDDnUf2Q9FHnXYjuz9i5OEY= github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= @@ -160,7 +124,6 @@ github.com/go-openapi/jsonreference v0.20.4 h1:bKlDxQxQJgwpUSgOENiMPzCTBVuc7vTdX github.com/go-openapi/jsonreference v0.20.4/go.mod h1:5pZJyJP2MnYCpoeoMAql78cCHauHj0V9Lhc506VOpw4= github.com/go-openapi/swag v0.22.9 h1:XX2DssF+mQKM2DHsbgZK74y/zj4mo9I99+89xUmuZCE= github.com/go-openapi/swag v0.22.9/go.mod h1:3/OXnFfnMAwBD099SwYRk7GD3xOrr1iL7d/XNLXVVwE= -github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= @@ -201,11 +164,6 @@ github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/gonum/blas v0.0.0-20181208220705-f22b278b28ac/go.mod h1:P32wAyui1PQ58Oce/KYkOqQv8cVw1zAapXOl+dRFGbc= -github.com/gonum/floats v0.0.0-20181209220543-c233463c7e82/go.mod h1:PxC8OnwL11+aosOB5+iEPoV3picfs8tUpkVd0pDo+Kg= -github.com/gonum/internal v0.0.0-20181124074243-f884aa714029/go.mod h1:Pu4dmpkhSyOzRwuXkOgAvijx4o+4YMUJJo9OvPYMkks= -github.com/gonum/lapack v0.0.0-20181123203213-e4cdc5a0bff9/go.mod h1:XA3DeT6rxh2EAE789SSiSJNqxPaC0aE9J8NTOI0Jo/A= -github.com/gonum/matrix v0.0.0-20181209220409-c518dec07be9/go.mod h1:0EXg4mc1CNP0HCqCz+K4ts155PXIlUywf0wqN+GfPZw= github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= @@ -255,7 +213,6 @@ github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/googleapis/enterprise-certificate-proxy v0.3.4 h1:XYIDZApgAnrN1c855gTgghdIA6Stxb52D5RnLI1SLyw= github.com/googleapis/enterprise-certificate-proxy v0.3.4/go.mod h1:YKe7cfqYXjKGpGvmSg28/fFvhNzinZQm8DGnaburhGA= -github.com/googleapis/gax-go v0.0.0-20161107002406-da06d194a00e/go.mod h1:SFVmujtThgffbyetf+mdk2eWhX2bMyUtNHzFKcPA9HY= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= github.com/googleapis/gax-go/v2 v2.13.0 h1:yitjD5f7jQHhyDsnhKEBU52NdvvdSeGzlAnDPT0hH1s= @@ -292,8 +249,6 @@ github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= -github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -312,8 +267,6 @@ github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1 github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= -github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.9 h1:6KIumPrER1LHsvBVuDa0r5xaG0Es51mhhB9BQB2qeMA= @@ -322,7 +275,6 @@ github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxv github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= @@ -335,7 +287,6 @@ github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0 github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-sqlite3 v0.0.0-20161215041557-2d44decb4941/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= @@ -367,9 +318,6 @@ github.com/pascaldekloe/goe v0.1.0 h1:cBOtyMzM9HTpWjXfbbunk26uA6nG3a8n06Wieeh0Mw github.com/pascaldekloe/goe v0.1.0/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= github.com/pelletier/go-toml v1.9.5 h1:4yBQzkHv+7BHq2PQUZF3Mx0IYxG7LsP222s7Agd3ve8= github.com/pelletier/go-toml v1.9.5/go.mod h1:u1nR/EPcESfeI/szUZKdtJ0xRNbUoANCkoOuaOx1Y+c= -github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= -github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= @@ -411,14 +359,11 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I= github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8= -github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4= github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c h1:aqg5Vm5dwtvL+YgDpBcK1ITf3o96N/K7/wsRXQnUTEs= github.com/shurcooL/httpfs v0.0.0-20230704072500-f1e31cf0ba5c/go.mod h1:owqhoLW1qZoYLZzLnBw+QkPP9WZnjlSWihhxAJC1+/M= github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92 h1:OfRzdxCzDhp+rsKWXuOO2I/quKMJ/+TQwVbIP/gltZg= @@ -426,11 +371,8 @@ github.com/shurcooL/vfsgen v0.0.0-20230704071429-0000e147ea92/go.mod h1:7/OT02F6 github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= -github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= -github.com/skeema/knownhosts v1.2.2 h1:Iug2P4fLmDw9f41PB6thxUkNUkJzB5i+1/exaj40L3A= -github.com/skeema/knownhosts v1.2.2/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= @@ -451,13 +393,10 @@ github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8 github.com/tv42/httpunix v0.0.0-20150427012821-b75d8614f926/go.mod h1:9ESjWnEqriFuLhtthL60Sar/7RFoluCcXsuvEwTV5KM= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= -github.com/xanzy/ssh-agent v0.3.3 h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM= -github.com/xanzy/ssh-agent v0.3.3/go.mod h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw= github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= @@ -486,10 +425,6 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= golang.org/x/crypto v0.27.0 h1:GXm2NjJrPaiv/h1tb2UH8QfgC/hOf/+z0p6PT8o1w7A= golang.org/x/crypto v0.27.0/go.mod h1:1Xngt8kV6Dvbssa53Ziq6Eqn0HqbZi5Z6R0ZpwQzt70= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -522,8 +457,6 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.17.0 h1:zY54UmvipHiNd+pm+m0x9KhZ9hl1/7QNMyxXbc6ICqA= golang.org/x/mod v0.17.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -557,16 +490,9 @@ golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81R golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.29.0 h1:5ORfpBpCs4HzDYoodCDBbwHzdR5UrLBZ3sOnUJmFoHo= golang.org/x/net v0.29.0/go.mod h1:gLkgy8jTGERgjzMic6DS9+SP0ajcu6Xu3Orq/SpETg0= -golang.org/x/oauth2 v0.0.0-20170207211851-4464e7848382/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= @@ -575,8 +501,6 @@ golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4Iltr golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.23.0 h1:PbgcYx2W7i4LvjJWEbf0ngHV6qJYr86PkAV3bXdLEbs= golang.org/x/oauth2 v0.23.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= -golang.org/x/perf v0.0.0-20200318175901-9c9101da8316 h1:4kYIkqY0RFzbXzKPeT7sNOlcJK5JY1HSnMBOUlzXlZU= -golang.org/x/perf v0.0.0-20200318175901-9c9101da8316/go.mod h1:FrqOtQDO3iMDVUtw5nNTDFpR1HUCGh00M3kj2wiSzLQ= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= @@ -587,8 +511,6 @@ golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.8.0 h1:3NFvSEYkUoMifnESzZl15y791HH1qU2xm6eCJU5ZPXQ= golang.org/x/sync v0.8.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -606,7 +528,6 @@ golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -630,22 +551,12 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.25.0 h1:r+8e+loiHxRqhXVl6ML1nO3l1+oFoWbnlu2Ehimmi34= golang.org/x/sys v0.25.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.24.0 h1:Mh5cbb+Zk2hqqXNO7S1iTjEphVL+jb8ZWaqh/g+JWkM= golang.org/x/term v0.24.0/go.mod h1:lOBK/LVxemqiMij05LGJ0tzNr8xlmwBRJ81PX6wVLH8= golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= @@ -654,10 +565,6 @@ golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.18.0 h1:XvMDiNzPAl0jr17s6W9lcaIhGUfUORdGCNsuLmPG224= golang.org/x/text v0.18.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= @@ -708,15 +615,12 @@ golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d h1:vU5i/LfpvrRCpgM/VPfJLg5KjxD3E+hfT1SH+d9zLwg= golang.org/x/tools v0.21.1-0.20240508182429-e35e4ccd0d2d/go.mod h1:aiJjzUbINMkxbQROHiO6hDPo2LHcIPhhQsa9DLh0yGk= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/api v0.0.0-20170206182103-3d017632ea10/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= @@ -774,7 +678,6 @@ google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1 h1: google.golang.org/genproto/googleapis/api v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:qpvKtACPCQhAdu3PyQgV4l3LMXZEtft7y8QcarRsp9I= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1 h1:pPJltXNxVzT4pK9yD8vR9X75DaWYYmLGMsEvBfFQZzQ= google.golang.org/genproto/googleapis/rpc v0.0.0-20240903143218-8af14fe29dc1/go.mod h1:UqMtugtsSgubUsoxbuAoiCXvqvErP7Gf0so0mK9tHxU= -google.golang.org/grpc v0.0.0-20170208002647-2a6bf6142e96/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= @@ -813,8 +716,6 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EV gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= -gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= diff --git a/prombench/manifests/cluster-infra/7a_commentmonitor_configmap_noparse.yaml b/prombench/manifests/cluster-infra/7a_commentmonitor_configmap_noparse.yaml index 8d6f95410..1af4ff9c4 100644 --- a/prombench/manifests/cluster-infra/7a_commentmonitor_configmap_noparse.yaml +++ b/prombench/manifests/cluster-infra/7a_commentmonitor_configmap_noparse.yaml @@ -9,10 +9,6 @@ data: help_template: | Incorrect prombench syntax, please find [correct syntax here](https://github.com/prometheus/test-infra/tree/master/prombench#trigger-tests-via-a-github-comment). verify_user: true - - prefix: /funcbench - help_template: | - Incorrect funcbench syntax, please find [correct syntax here](https://github.com/prometheus/test-infra/tree/master/funcbench#triggering-with-github-comments). - verify_user: false events: - event_type: prombench_start regex_string: (?mi)^/prombench\s*(?Pmaster|main|v[0-9]+\.[0-9]+\.[0-9]+\S*)\s*$ @@ -61,11 +57,3 @@ data: **Other Commands:** To stop benchmark: `/prombench cancel` To restart benchmark: `/prombench restart {{ index . "RELEASE" }}` - - - event_type: funcbench_start - regex_string: (?m)^/funcbench\s+(?P[\w\-\/\.]+)\s*(?P(?:Benchmark[^\s]+)?(?:\.\*)?)?\s*(?P\.(?:/[^\s]+)+)?\s*$ - label: funcbench - comment_template: | - ⏱️ Welcome to Funcbench Tool. ⏱️ - - Running benchmark `{{ index . "BENCH_FUNC_REGEX"}}` on **`PR-{{ index . "PR_NUMBER" }}`** vs **`{{ index . "BRANCH" }}`** diff --git a/scripts/genflagdocs.sh b/scripts/genflagdocs.sh index 4e2535e76..e45610e95 100755 --- a/scripts/genflagdocs.sh +++ b/scripts/genflagdocs.sh @@ -7,9 +7,9 @@ set -u EMBEDMD_BIN=${EMBEDMD_BIN:-embedmd} SED_BIN=${SED_BIN:-sed} -README_FILES="./tools/*/README.md ./funcbench/README.md ./infra/README.md" +README_FILES="./tools/*/README.md ./infra/README.md" -primary_tools=("infra" "funcbench") +primary_tools=("infra") helper_tools=("amGithubNotifier" "commentMonitor") function fetch_embedmd { diff --git a/tools/commentMonitor/README.md b/tools/commentMonitor/README.md index 877805deb..11fe74ad1 100644 --- a/tools/commentMonitor/README.md +++ b/tools/commentMonitor/README.md @@ -28,9 +28,6 @@ prefixes: - prefix: /prombench help_template: | Get prombench syntax help here. - - prefix: /funcbench - help_template: | - Get funcbench syntax help [here](https://canbealink). eventmaps: - event_type: prombench_stop diff --git a/tools/commentMonitor/main_test.go b/tools/commentMonitor/main_test.go index 8742c3fe3..c459b18aa 100644 --- a/tools/commentMonitor/main_test.go +++ b/tools/commentMonitor/main_test.go @@ -20,11 +20,7 @@ func TestExtractCommand(t *testing.T) { commentBody string command string }{ - {"\r\n/funcbench master\t", "/funcbench master"}, - {"\r\n/funcbench master\n", "/funcbench master"}, - {"\r\n/funcbench master\r\n", "/funcbench master"}, {"/prombench master\r\n", "/prombench master"}, - {"/funcbench master .*\t\r\nSomething", "/funcbench master .*"}, {"command without forwardslash", "command without forwardslash"}, } for _, tc := range testCases { @@ -37,7 +33,6 @@ func TestExtractCommand(t *testing.T) { func TestCheckCommandPrefix(t *testing.T) { cmClient := commentMonitorClient{ prefixes: []commandPrefix{ - {"/funcbench", "help", false}, {"/prombench", "help", false}, {"/somebench", "help", false}, }, @@ -46,7 +41,6 @@ func TestCheckCommandPrefix(t *testing.T) { command string valid bool }{ - {"/funcbench master", true}, {"/somebench master", true}, {"/querybench master", false}, {"prombench master", false},