diff --git a/external-plugins/botreview/review/BUILD.bazel b/external-plugins/botreview/review/BUILD.bazel
index b9e8fdfded..71d38dfc91 100644
--- a/external-plugins/botreview/review/BUILD.bazel
+++ b/external-plugins/botreview/review/BUILD.bazel
@@ -5,6 +5,7 @@ go_library(
srcs = [
"bump_kubevirtci.go",
"image_update.go",
+ "kubevirt_uploader.go",
"prow_autobump.go",
"result.go",
"review.go",
@@ -24,6 +25,7 @@ go_test(
srcs = [
"bump_kubevirtci_test.go",
"image_update_test.go",
+ "kubevirt_uploader_test.go",
"prow_autobump_test.go",
"result_test.go",
"review_test.go",
diff --git a/external-plugins/botreview/review/kubevirt_uploader.go b/external-plugins/botreview/review/kubevirt_uploader.go
new file mode 100644
index 0000000000..1236cab68a
--- /dev/null
+++ b/external-plugins/botreview/review/kubevirt_uploader.go
@@ -0,0 +1,94 @@
+/*
+ * This file is part of the KubeVirt project
+ *
+ * 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.
+ *
+ * Copyright the KubeVirt authors.
+ *
+ */
+
+package review
+
+import (
+ "fmt"
+ "github.com/sourcegraph/go-diff/diff"
+ "regexp"
+ "strings"
+)
+
+const (
+ kubevirtUploaderApproveComment = `:thumbsup: This looks like a simple kubevirt uploader bump.`
+ kubevirtUploaderDisapproveComment = `:thumbsdown: This doesn't look like a kubevirt uploader bump.`
+)
+
+var kubevirtUploaderMatcher *regexp.Regexp
+
+func init() {
+ kubevirtUploaderMatcher = regexp.MustCompile(`(?m)^\+\s+"https://storage.googleapis.com/builddeps/\S+$`)
+}
+
+type KubeVirtUploader struct {
+ relevantFileDiffs []*diff.FileDiff
+ unwantedFiles map[string]struct{}
+}
+
+func (t *KubeVirtUploader) IsRelevant() bool {
+ return len(t.relevantFileDiffs) > 0
+}
+
+func (t *KubeVirtUploader) AddIfRelevant(fileDiff *diff.FileDiff) {
+ fileName := strings.TrimPrefix(fileDiff.NewName, "b/")
+
+ if fileName == "WORKSPACE" {
+ t.relevantFileDiffs = append(t.relevantFileDiffs, fileDiff)
+ return
+ }
+
+ if t.unwantedFiles == nil {
+ t.unwantedFiles = make(map[string]struct{})
+ }
+ t.unwantedFiles[fileName] = struct{}{}
+}
+
+func (t *KubeVirtUploader) Review() BotReviewResult {
+ result := NewCanMergeReviewResult(kubevirtUploaderApproveComment, kubevirtUploaderDisapproveComment)
+
+ for _, fileDiff := range t.relevantFileDiffs {
+ fileName := strings.TrimPrefix(fileDiff.NewName, "b/")
+ switch fileName {
+ case "WORKSPACE":
+ for _, hunk := range fileDiff.Hunks {
+ if !matchesKubeVirtUploaderPattern(hunk) {
+ result.AddReviewFailure(fileDiff.NewName, hunk)
+ }
+ }
+ default:
+ // no checks since we can't do anything reasonable here
+ continue
+ }
+ }
+
+ for fileName := range t.unwantedFiles {
+ result.AddReviewFailure(fileName)
+ }
+
+ return result
+}
+
+func matchesKubeVirtUploaderPattern(hunk *diff.Hunk) bool {
+ return kubevirtUploaderMatcher.Match(hunk.Body)
+}
+
+func (t *KubeVirtUploader) String() string {
+ return fmt.Sprintf("relevantFileDiffs: %v", t.relevantFileDiffs)
+}
diff --git a/external-plugins/botreview/review/kubevirt_uploader_test.go b/external-plugins/botreview/review/kubevirt_uploader_test.go
new file mode 100644
index 0000000000..12f1d33d90
--- /dev/null
+++ b/external-plugins/botreview/review/kubevirt_uploader_test.go
@@ -0,0 +1,194 @@
+/*
+ * This file is part of the KubeVirt project
+ *
+ * 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.
+ *
+ * Copyright the KubeVirt authors.
+ *
+ */
+
+package review
+
+import (
+ "fmt"
+ "github.com/sourcegraph/go-diff/diff"
+ "os"
+ "reflect"
+ "testing"
+)
+
+func TestKubeVirtUploader_Review(t1 *testing.T) {
+ diffFilePaths := []string{
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch00",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch01",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch02",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch03",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch04",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch05",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch06",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch07",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch08",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch09",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch10",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch11",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch12",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch13",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch14",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch15",
+ "testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch16",
+ "testdata/kubevirt/ci-bump-remove-provider-local/bump-kci.patch00",
+ "testdata/kubevirt/ci-bump-remove-provider-local/bump-kci.patch01",
+ "testdata/kubevirt/ci-bump-remove-provider-local/bump-kci.patch02",
+ "testdata/kubevirt/ci-bump-remove-provider-local/bump-kci.patch03",
+ "testdata/kubevirt/ci-bump-remove-provider-local/bump-kci.patch04",
+ "testdata/kubevirt/ci-bump-remove-provider-local/bump-kci.patch05",
+ "testdata/kubevirt/uploader/uploader-autoupdate.patch00",
+ }
+ diffFilePathsToDiffs := map[string]*diff.FileDiff{}
+ for _, diffFile := range diffFilePaths {
+ bumpImagesDiffFile, err := os.ReadFile(diffFile)
+ if err != nil {
+ t1.Errorf("failed to read diff: %v", err)
+ }
+ bumpFileDiffs, err := diff.ParseFileDiff(bumpImagesDiffFile)
+ if err != nil {
+ t1.Errorf("failed to read diff: %v", err)
+ }
+ if bumpFileDiffs == nil {
+ panic(fmt.Sprintf("file diff %q empty", diffFile))
+ }
+ diffFilePathsToDiffs[diffFile] = bumpFileDiffs
+ }
+ type fields struct {
+ relevantFileDiffs []*diff.FileDiff
+ }
+ tests := []struct {
+ name string
+ fields fields
+ want BotReviewResult
+ }{
+ {
+ name: "simple kubevirt upload",
+ fields: fields{
+ relevantFileDiffs: []*diff.FileDiff{
+ diffFilePathsToDiffs["testdata/kubevirt/uploader/uploader-autoupdate.patch00"],
+ },
+ },
+ want: newReviewResultWithData(kubevirtUploaderApproveComment, kubevirtUploaderDisapproveComment, nil, ""),
+ },
+ {
+ name: "mixed kubevirt upload",
+ fields: fields{
+ relevantFileDiffs: []*diff.FileDiff{
+ diffFilePathsToDiffs["testdata/kubevirt/uploader/uploader-autoupdate.patch00"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch00"],
+ },
+ },
+ want: newReviewResultWithData(kubevirtUploaderApproveComment, kubevirtUploaderDisapproveComment, map[string][]*diff.Hunk{
+ "api/openapi-spec/swagger.json": nil,
+ }, ""),
+ },
+ {
+ name: "non kubevirt upload",
+ fields: fields{
+ relevantFileDiffs: []*diff.FileDiff{
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch00"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch01"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch02"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch03"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch04"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch05"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch06"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch07"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch08"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch09"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch10"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch11"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch12"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch13"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch14"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch15"],
+ diffFilePathsToDiffs["testdata/kubevirt/fix-containerdisks-migration/fix-containerdisks-migrations.patch16"],
+ },
+ },
+ want: newReviewResultWithData(kubevirtUploaderApproveComment, kubevirtUploaderDisapproveComment, map[string][]*diff.Hunk{
+ "pkg/virt-operator/resource/generate/components/daemonsets.go": nil,
+ "pkg/container-disk/container-disk_test.go": nil,
+ "pkg/virt-handler/container-disk/BUILD.bazel": nil,
+ "staging/src/kubevirt.io/api/core/v1/types_swagger_generated.go": nil,
+ "staging/src/kubevirt.io/client-go/api/openapi_generated.go": nil,
+ "staging/src/kubevirt.io/api/core/v1/types.go": nil,
+ "api/openapi-spec/swagger.json": nil,
+ "pkg/virt-handler/container-disk/mount.go": nil,
+ "pkg/virt-controller/services/template.go": nil,
+ "staging/src/kubevirt.io/api/core/v1/deepcopy_generated.go": nil,
+ "pkg/virt-operator/resource/generate/components/validations_generated.go": nil,
+ "pkg/virt-handler/vm.go": nil,
+ "pkg/virt-handler/container-disk/generated_mock_mount.go": nil,
+ "pkg/virt-handler/isolation/isolation.go": nil,
+ "pkg/virt-handler/container-disk/mount_test.go": nil,
+ "pkg/virt-handler/vm_test.go": nil,
+ "pkg/container-disk/container-disk.go": nil,
+ }, ""),
+ },
+ }
+ for _, tt := range tests {
+ t1.Run(tt.name, func(t1 *testing.T) {
+ t := &KubeVirtUploader{}
+ for index, fileDiff := range tt.fields.relevantFileDiffs {
+ if fileDiff == nil {
+ t1.Errorf("fileDiff[%d] nil", index)
+ }
+ t.AddIfRelevant(fileDiff)
+ }
+ if got := t.Review(); !reflect.DeepEqual(got, tt.want) {
+ t1.Errorf("Review() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
+
+func Test_matchesKubeVirtUploaderPattern(t *testing.T) {
+ type args struct {
+ hunk *diff.Hunk
+ }
+ tests := []struct {
+ name string
+ args args
+ want bool
+ }{
+ {
+ name: "builddeps 1",
+ args: args{
+ hunk: &diff.Hunk{
+ Body: []byte(` urls = [
+ "https://mirror.bazel.build/github.com/bazelbuild/rules_go/releases/download/v0.42.0/rules_go-v0.42.0.zip",
+ "https://github.com/bazelbuild/rules_go/releases/download/v0.42.0/rules_go-v0.42.0.zip",
++ "https://storage.googleapis.com/builddeps/91585017debb61982f7054c9688857a2ad1fd823fc3f9cb05048b0025c47d023",
+ ],
+ )
+
+`),
+ },
+ },
+ want: true,
+ },
+ }
+ for _, tt := range tests {
+ t.Run(tt.name, func(t *testing.T) {
+ if got := matchesKubeVirtUploaderPattern(tt.args.hunk); got != tt.want {
+ t.Errorf("matchesKubeVirtUploaderPattern() = %v, want %v", got, tt.want)
+ }
+ })
+ }
+}
diff --git a/external-plugins/botreview/review/result.go b/external-plugins/botreview/review/result.go
index a93cada3d2..641cbc72a4 100644
--- a/external-plugins/botreview/review/result.go
+++ b/external-plugins/botreview/review/result.go
@@ -77,14 +77,14 @@ func (r *BasicReviewResult) String() string {
return r.approveComment
} else {
comment := r.disapproveComment
+ comment += fmt.Sprintf("\n\n\n")
for fileName, hunks := range r.notMatchingHunks {
- comment += fmt.Sprintf("\n\n")
- comment += fmt.Sprintf("\n\n_%s_", fileName)
+ comment += fmt.Sprintf("\n_%s_", fileName)
for _, hunk := range hunks {
comment += fmt.Sprintf("\n\n~~~diff\n%s\n~~~", string(hunk.Body))
}
- comment += fmt.Sprintf("\n\n \n")
}
+ comment += fmt.Sprintf("\n\n \n")
return comment
}
}
diff --git a/external-plugins/botreview/review/review.go b/external-plugins/botreview/review/review.go
index 826d34a103..2b13d5e880 100644
--- a/external-plugins/botreview/review/review.go
+++ b/external-plugins/botreview/review/review.go
@@ -40,6 +40,7 @@ func newPossibleReviewTypes() []KindOfChange {
&ProwJobImageUpdate{},
&BumpKubevirtCI{},
&ProwAutobump{},
+ &KubeVirtUploader{},
}
}
diff --git a/external-plugins/botreview/review/review_test.go b/external-plugins/botreview/review/review_test.go
index fd17f9f8aa..b4dd87547a 100644
--- a/external-plugins/botreview/review/review_test.go
+++ b/external-plugins/botreview/review/review_test.go
@@ -313,6 +313,53 @@ nil
+This PR does not satisfy at least one automated review criteria.
+
+Holding this PR because:
+* should not get merged at all reason
+
+/hold
+
+**Note: botreview (kubevirt/project-infra#3100) is a Work In Progress!**
+`,
+ },
+ },
+ },
+ {
+ name: "one review without hunks, not approved",
+ fields: newFields(),
+ args: args{
+ githubClient: newGHReviewClient(),
+ botReviewResults: []BotReviewResult{
+ newReviewResultWithData(
+ "approved",
+ "disapproved",
+ map[string][]*diff.Hunk{
+ "test": nil,
+ "blah": nil,
+ },
+ "should not get merged at all reason",
+ ),
+ },
+ },
+ wantErr: false,
+ wantReviewComments: []*FakeComment{
+ {
+ Org: "",
+ Repo: "",
+ Number: 0,
+ Comment: `@pr-reviewer's review-bot says:
+
+disapproved
+
+
+
+_test_
+_blah_
+
+
+
+
This PR does not satisfy at least one automated review criteria.
Holding this PR because:
diff --git a/external-plugins/botreview/review/testdata/kubevirt/uploader/uploader-autoupdate.patch00 b/external-plugins/botreview/review/testdata/kubevirt/uploader/uploader-autoupdate.patch00
new file mode 100644
index 0000000000..e6d8232816
--- /dev/null
+++ b/external-plugins/botreview/review/testdata/kubevirt/uploader/uploader-autoupdate.patch00
@@ -0,0 +1,380 @@
+diff --git a/WORKSPACE b/WORKSPACE
+index 7e52cfbe2c..09386cf256 100644
+--- a/WORKSPACE
++++ b/WORKSPACE
+@@ -428,6 +428,7 @@ rpm(
+ sha256 = "a0a9b302d252d32c0da8100a0ad762852c22eeac4ccad0aaf72ad68a2bbd7a93",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/acl-2.3.1-4.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/a0a9b302d252d32c0da8100a0ad762852c22eeac4ccad0aaf72ad68a2bbd7a93",
+ ],
+ )
+
+@@ -436,6 +437,7 @@ rpm(
+ sha256 = "dd11bab2ea0abdfa310362eace871422a003340bf223135626500f8f5a985f6b",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/acl-2.3.1-4.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/dd11bab2ea0abdfa310362eace871422a003340bf223135626500f8f5a985f6b",
+ ],
+ )
+
+@@ -1380,6 +1382,7 @@ rpm(
+ sha256 = "bc553c8c569bfb2051f1395d981d7c9c6e259b57a41dced51f7fac20b63fc929",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/glibc-2.34-88.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/bc553c8c569bfb2051f1395d981d7c9c6e259b57a41dced51f7fac20b63fc929",
+ ],
+ )
+
+@@ -1388,6 +1391,7 @@ rpm(
+ sha256 = "6a590a3ac551dcd27ea5fc0097d19915e32af47ecddb52bcabbef12bbda97a54",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/glibc-2.34-88.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/6a590a3ac551dcd27ea5fc0097d19915e32af47ecddb52bcabbef12bbda97a54",
+ ],
+ )
+
+@@ -1396,6 +1400,7 @@ rpm(
+ sha256 = "c4814302b6884c0626afd04dc1fdb28cb3d7f92af307a91785ce37e5309e53a9",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/glibc-common-2.34-88.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/c4814302b6884c0626afd04dc1fdb28cb3d7f92af307a91785ce37e5309e53a9",
+ ],
+ )
+
+@@ -1404,6 +1409,7 @@ rpm(
+ sha256 = "f19cf4786a59ab7b7064d31230e7b59d8d47723061ee3f6eb8168bbece13938f",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/glibc-common-2.34-88.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/f19cf4786a59ab7b7064d31230e7b59d8d47723061ee3f6eb8168bbece13938f",
+ ],
+ )
+
+@@ -1412,6 +1418,7 @@ rpm(
+ sha256 = "6483807486e2c20f02202d39f32d1bac055e8d24135f0af213e123b72b9d8e59",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/aarch64/os/Packages/glibc-devel-2.34-88.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/6483807486e2c20f02202d39f32d1bac055e8d24135f0af213e123b72b9d8e59",
+ ],
+ )
+
+@@ -1420,6 +1427,7 @@ rpm(
+ sha256 = "7a4067c3a52eb334c520c53b2ec0d1beae2be57af0eec75ba7fcd728feb59e45",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/glibc-devel-2.34-88.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/7a4067c3a52eb334c520c53b2ec0d1beae2be57af0eec75ba7fcd728feb59e45",
+ ],
+ )
+
+@@ -1428,6 +1436,7 @@ rpm(
+ sha256 = "76cd179192536f23c0a112fc56e532c4a2c681956439cbda2a3f0a101edaa72b",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/glibc-headers-2.34-88.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/76cd179192536f23c0a112fc56e532c4a2c681956439cbda2a3f0a101edaa72b",
+ ],
+ )
+
+@@ -1436,6 +1445,7 @@ rpm(
+ sha256 = "dddcc43e175550a9759671d6fb7889f4cecdcb18ad83ea9a766a9247dd910990",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/glibc-minimal-langpack-2.34-88.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/dddcc43e175550a9759671d6fb7889f4cecdcb18ad83ea9a766a9247dd910990",
+ ],
+ )
+
+@@ -1444,6 +1454,7 @@ rpm(
+ sha256 = "f1224ca96983442834cb93c940859c668393a6132e93dee871b74b2fe703a748",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/glibc-minimal-langpack-2.34-88.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/f1224ca96983442834cb93c940859c668393a6132e93dee871b74b2fe703a748",
+ ],
+ )
+
+@@ -1452,6 +1463,7 @@ rpm(
+ sha256 = "4f68cb7013c8f0011aabea5a5fd7a934106a47620b68f3d684c32b86e65e3ddf",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/CRB/aarch64/os/Packages/glibc-static-2.34-88.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/4f68cb7013c8f0011aabea5a5fd7a934106a47620b68f3d684c32b86e65e3ddf",
+ ],
+ )
+
+@@ -1460,6 +1472,7 @@ rpm(
+ sha256 = "828c1702e243fb2828d826229a7d97cae3fc04c497166eb26b048bca4d993ccd",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/CRB/x86_64/os/Packages/glibc-static-2.34-88.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/828c1702e243fb2828d826229a7d97cae3fc04c497166eb26b048bca4d993ccd",
+ ],
+ )
+
+@@ -1495,6 +1508,7 @@ rpm(
+ sha256 = "eac46f3673c8a12d24eee7d123734c72afe9b6bff58fba8177c703d950aa05bb",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/gnutls-3.8.2-1.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/eac46f3673c8a12d24eee7d123734c72afe9b6bff58fba8177c703d950aa05bb",
+ ],
+ )
+
+@@ -1503,6 +1517,7 @@ rpm(
+ sha256 = "86d1cc7c87c5edf4f8321a8d6e4af70dbfe3f0399ff0b15235ac19fccfae3f2b",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/gnutls-3.8.2-1.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/86d1cc7c87c5edf4f8321a8d6e4af70dbfe3f0399ff0b15235ac19fccfae3f2b",
+ ],
+ )
+
+@@ -1511,6 +1526,7 @@ rpm(
+ sha256 = "f652a005815c700deb11fa2a887636082b0d9336a16c1022781b7c3a7536d0d1",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/aarch64/os/Packages/gnutls-dane-3.8.2-1.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/f652a005815c700deb11fa2a887636082b0d9336a16c1022781b7c3a7536d0d1",
+ ],
+ )
+
+@@ -1519,6 +1535,7 @@ rpm(
+ sha256 = "3394c59b4587e99912709f2da9a21d926c3dff2ea03c181c6bc8ab7ce52690c6",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/gnutls-dane-3.8.2-1.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/3394c59b4587e99912709f2da9a21d926c3dff2ea03c181c6bc8ab7ce52690c6",
+ ],
+ )
+
+@@ -1527,6 +1544,7 @@ rpm(
+ sha256 = "1f2d549c703fa1b9ec962761a1cd005559bc50b5c511e37cb3c75337d9b15d3d",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/aarch64/os/Packages/gnutls-utils-3.8.2-1.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/1f2d549c703fa1b9ec962761a1cd005559bc50b5c511e37cb3c75337d9b15d3d",
+ ],
+ )
+
+@@ -1535,6 +1553,7 @@ rpm(
+ sha256 = "1e18d57c938cf1030134c209a5d8252abee7358b0ea96db1e10a57f14ee3d040",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/gnutls-utils-3.8.2-1.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/1e18d57c938cf1030134c209a5d8252abee7358b0ea96db1e10a57f14ee3d040",
+ ],
+ )
+
+@@ -1768,6 +1787,7 @@ rpm(
+ sha256 = "e6e2fc336d80aa44fe72230bd0bc14df3e8c9062b6876c597170f6cd53b6a435",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/aarch64/os/Packages/kernel-headers-5.14.0-390.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/e6e2fc336d80aa44fe72230bd0bc14df3e8c9062b6876c597170f6cd53b6a435",
+ ],
+ )
+
+@@ -1776,6 +1796,7 @@ rpm(
+ sha256 = "13c602c556d2a26dd9bb80a17ae5f01a2640cd32fd273d4a62ed01ff247c8b82",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/AppStream/x86_64/os/Packages/kernel-headers-5.14.0-390.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/13c602c556d2a26dd9bb80a17ae5f01a2640cd32fd273d4a62ed01ff247c8b82",
+ ],
+ )
+
+@@ -1865,6 +1886,7 @@ rpm(
+ sha256 = "90e4392e312cd793eeba4cd68bd12836a882ac37356c784806d67a0cd1d48c25",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/libacl-2.3.1-4.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/90e4392e312cd793eeba4cd68bd12836a882ac37356c784806d67a0cd1d48c25",
+ ],
+ )
+
+@@ -1873,6 +1895,7 @@ rpm(
+ sha256 = "60a3affaa1c387fd6f72dd65aa7ad619a1830947823abb4b29e7b9fcb4c9d27c",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/libacl-2.3.1-4.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/60a3affaa1c387fd6f72dd65aa7ad619a1830947823abb4b29e7b9fcb4c9d27c",
+ ],
+ )
+
+@@ -2916,6 +2939,7 @@ rpm(
+ sha256 = "a5a3ceb11e0c361d33b339d8c1561101c7351c248ed6e31c72864e76464bdae9",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/libsss_idmap-2.9.3-2.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/a5a3ceb11e0c361d33b339d8c1561101c7351c248ed6e31c72864e76464bdae9",
+ ],
+ )
+
+@@ -2924,6 +2948,7 @@ rpm(
+ sha256 = "f1bf2658c6e669b7f921d8ef77a0fa042108fd2bf04890d9e251c085e351650d",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/libsss_idmap-2.9.3-2.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/f1bf2658c6e669b7f921d8ef77a0fa042108fd2bf04890d9e251c085e351650d",
+ ],
+ )
+
+@@ -2932,6 +2957,7 @@ rpm(
+ sha256 = "c1f45f999739c5e70bd69bd100143f504779b774a4bd1b1530a03ab3edfd2b17",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/libsss_nss_idmap-2.9.3-2.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/c1f45f999739c5e70bd69bd100143f504779b774a4bd1b1530a03ab3edfd2b17",
+ ],
+ )
+
+@@ -2940,6 +2966,7 @@ rpm(
+ sha256 = "38fdda92ea92479e64a3dc7d2f4e069b62fcc545ae0aa407773a595dbbeb0ff1",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/libsss_nss_idmap-2.9.3-2.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/38fdda92ea92479e64a3dc7d2f4e069b62fcc545ae0aa407773a595dbbeb0ff1",
+ ],
+ )
+
+@@ -3524,6 +3551,7 @@ rpm(
+ sha256 = "991294c5c3f1544172cbc0c3bf27540036e0d09f42c161ef8bdf231c97d9ced0",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/nettle-3.9.1-1.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/991294c5c3f1544172cbc0c3bf27540036e0d09f42c161ef8bdf231c97d9ced0",
+ ],
+ )
+
+@@ -3532,6 +3560,7 @@ rpm(
+ sha256 = "ffeeab0a6b0caaf457ad77a64bb1dfac6c1144343f1057de64a89b5ae4b58bf5",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/nettle-3.9.1-1.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/ffeeab0a6b0caaf457ad77a64bb1dfac6c1144343f1057de64a89b5ae4b58bf5",
+ ],
+ )
+
+@@ -3612,6 +3641,7 @@ rpm(
+ sha256 = "c7f9e7e2d37c5d8ae263e8789142ba6956337a12a139a9661efff6ebfd3758c4",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/numad-0.5-37.20150602git.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/c7f9e7e2d37c5d8ae263e8789142ba6956337a12a139a9661efff6ebfd3758c4",
+ ],
+ )
+
+@@ -3620,6 +3650,7 @@ rpm(
+ sha256 = "82e83efcc0528646c0cfdaa846e45e89b6e347b78664b5528bbfdf919d57bd46",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/numad-0.5-37.20150602git.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/82e83efcc0528646c0cfdaa846e45e89b6e347b78664b5528bbfdf919d57bd46",
+ ],
+ )
+
+@@ -3700,6 +3731,7 @@ rpm(
+ sha256 = "bdd4c7f279730c079b5f766a5c9f1297ee02120840bd12f084ab6f22e50c2203",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/p11-kit-0.25.3-2.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/bdd4c7f279730c079b5f766a5c9f1297ee02120840bd12f084ab6f22e50c2203",
+ ],
+ )
+
+@@ -3708,6 +3740,7 @@ rpm(
+ sha256 = "0839ee9854251e66f3109b6c685f1e6b3cce6d2a1415e9f71a03d71f03eeb708",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/p11-kit-0.25.3-2.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/0839ee9854251e66f3109b6c685f1e6b3cce6d2a1415e9f71a03d71f03eeb708",
+ ],
+ )
+
+@@ -3716,6 +3749,7 @@ rpm(
+ sha256 = "f49208d939702ade5ff36a42af67be05ca5c3125665c23275520880a07f5d16a",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/p11-kit-trust-0.25.3-2.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/f49208d939702ade5ff36a42af67be05ca5c3125665c23275520880a07f5d16a",
+ ],
+ )
+
+@@ -3724,6 +3758,7 @@ rpm(
+ sha256 = "177b963e62a19a2539138c1e5828a331bdf04c3675829a0dc88699765a4e0e63",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/p11-kit-trust-0.25.3-2.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/177b963e62a19a2539138c1e5828a331bdf04c3675829a0dc88699765a4e0e63",
+ ],
+ )
+
+@@ -3795,6 +3830,7 @@ rpm(
+ sha256 = "1189e1b5f7587cbfa3b17a457cd0ffa49014d98fdab271a6446ac252ab996753",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/pcre2-10.40-4.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/1189e1b5f7587cbfa3b17a457cd0ffa49014d98fdab271a6446ac252ab996753",
+ ],
+ )
+
+@@ -3803,6 +3839,7 @@ rpm(
+ sha256 = "c50497baeb5a3b381a09039f4f6483f359610096b3ecd235cc2b89b17cc713bf",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/pcre2-10.40-4.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/c50497baeb5a3b381a09039f4f6483f359610096b3ecd235cc2b89b17cc713bf",
+ ],
+ )
+
+@@ -3811,6 +3848,7 @@ rpm(
+ sha256 = "65b2b8673081f99db0f91777d18cd96cb86f1a4db7363f79bd6edaee893ea3ee",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/pcre2-syntax-10.40-4.el9.noarch.rpm",
++ "https://storage.googleapis.com/builddeps/65b2b8673081f99db0f91777d18cd96cb86f1a4db7363f79bd6edaee893ea3ee",
+ ],
+ )
+
+@@ -3819,6 +3857,7 @@ rpm(
+ sha256 = "65b2b8673081f99db0f91777d18cd96cb86f1a4db7363f79bd6edaee893ea3ee",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/pcre2-syntax-10.40-4.el9.noarch.rpm",
++ "https://storage.googleapis.com/builddeps/65b2b8673081f99db0f91777d18cd96cb86f1a4db7363f79bd6edaee893ea3ee",
+ ],
+ )
+
+@@ -4466,6 +4505,7 @@ rpm(
+ sha256 = "6da546a4d87940c00edd0655788f8ec912575ba875ca4bf4ca5b66fc63b7f8fe",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/rpm-4.16.1.3-26.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/6da546a4d87940c00edd0655788f8ec912575ba875ca4bf4ca5b66fc63b7f8fe",
+ ],
+ )
+
+@@ -4474,6 +4514,7 @@ rpm(
+ sha256 = "5b4dd36ab74e8516b75580f64df49c40a32e47ee069513eb120c9ea5c38fb6bc",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/rpm-4.16.1.3-26.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/5b4dd36ab74e8516b75580f64df49c40a32e47ee069513eb120c9ea5c38fb6bc",
+ ],
+ )
+
+@@ -4482,6 +4523,7 @@ rpm(
+ sha256 = "e3b35a5792160a0531ffaadda108359747e89df892cbf636dceb3f452d7733d3",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/rpm-libs-4.16.1.3-26.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/e3b35a5792160a0531ffaadda108359747e89df892cbf636dceb3f452d7733d3",
+ ],
+ )
+
+@@ -4490,6 +4532,7 @@ rpm(
+ sha256 = "73ac8b7bf54ff0fce758f4d0235ba06e66f7f65da89bd41d41d1f469547e4a84",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/rpm-libs-4.16.1.3-26.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/73ac8b7bf54ff0fce758f4d0235ba06e66f7f65da89bd41d41d1f469547e4a84",
+ ],
+ )
+
+@@ -4498,6 +4541,7 @@ rpm(
+ sha256 = "7c3f309f7d002e53a686d89b53ea3c92c9ab021b59f258b9614ce86e24ae83f7",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/rpm-plugin-selinux-4.16.1.3-26.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/7c3f309f7d002e53a686d89b53ea3c92c9ab021b59f258b9614ce86e24ae83f7",
+ ],
+ )
+
+@@ -4506,6 +4550,7 @@ rpm(
+ sha256 = "a9b0d3b9a6383fb5edb5f34dc2a64b0abe9ce02c63d80145b1f0b5a78daa76da",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/rpm-plugin-selinux-4.16.1.3-26.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/a9b0d3b9a6383fb5edb5f34dc2a64b0abe9ce02c63d80145b1f0b5a78daa76da",
+ ],
+ )
+
+@@ -4685,6 +4730,7 @@ rpm(
+ sha256 = "5577c15821003db50849de851f6d2acfad4506c461c1f9e42b31b5652f13012b",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/aarch64/os/Packages/sssd-client-2.9.3-2.el9.aarch64.rpm",
++ "https://storage.googleapis.com/builddeps/5577c15821003db50849de851f6d2acfad4506c461c1f9e42b31b5652f13012b",
+ ],
+ )
+
+@@ -4693,6 +4739,7 @@ rpm(
+ sha256 = "9001f9740bcdce56b4ad91248c6b0e427c683b0ab6baa2e5a79ac7b9943767f1",
+ urls = [
+ "http://mirror.stream.centos.org/9-stream/BaseOS/x86_64/os/Packages/sssd-client-2.9.3-2.el9.x86_64.rpm",
++ "https://storage.googleapis.com/builddeps/9001f9740bcdce56b4ad91248c6b0e427c683b0ab6baa2e5a79ac7b9943767f1",
+ ],
+ )
+