Skip to content

Commit

Permalink
Merge pull request #4 from opensourceways/lyh_init
Browse files Browse the repository at this point in the history
添加 go module,readme,同时更新构建镜像源以修复镜像漏洞,更新lib包
  • Loading branch information
GeorgeCao-hw authored Dec 17, 2024
2 parents 9b0ef58 + e01ec85 commit 07bb6f7
Show file tree
Hide file tree
Showing 6 changed files with 368 additions and 2 deletions.
27 changes: 27 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
FROM openeuler/go:1.23.4-oe2403lts as BUILDER
RUN dnf -y install git gcc

ARG USER
ARG PASS
RUN echo "machine github.com login $USER password $PASS" > ~/.netrc

# build binary
WORKDIR /opt/source
COPY . .
RUN go env -w GO111MODULE=on && \
go env -w CGO_ENABLED=1 && \
go build -a -o robot-universal-review -buildmode=pie -ldflags "-s -linkmode 'external' -extldflags '-Wl,-z,now'" .

# copy binary config and utils
FROM openeuler/openeuler:24.03-lts
RUN dnf -y upgrade && \
dnf in -y shadow && \
groupadd -g 1000 robot && \
useradd -u 1000 -g robot -s /bin/bash -m robot

USER robot

COPY --chown=robot --from=BUILDER /opt/source/robot-universal-review /opt/app/robot-universal-review

ENTRYPOINT ["/opt/app/robot-universal-review"]

63 changes: 61 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,61 @@
# robot-universal-review
Open source community PR merge bots for different code hosting platforms
# robot-gitee-openeuler-review
[中文README](README_zh_CN.md)
### Overview

The bot provides Code Review-related functionality for the community. Provides `lgtm`, `approved` labels, PR merge command and tracking PR source code changes to automatically remove obsolete `lgtm`, `approved` labels and automatically merge PR when PR merge conditions are met.

### Features

- **Command**

The following command are provided:

| command | example | description | who can use |
| ----------------- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| /lgtm [cancel] | /lgtm<br/>/lgtm cancel | Add or remove the `lgtm` label for a Pull Request, this label will be used for Pull Request merge determination. | Collaborators of this repository.<br/>Pull Request authors can use the `/lgtm cancel` command, but cannot use the `/lgtm` command. |
| /approve [cancel] | /approve<br/>/approve cancel | Add or remove the `approved` label for a Pull Request, this label will be used for Pull Request merge determination. | Collaborators of this repository. |
| /check-pr | /check-pr | Check whether the current PR's tag meets the condition, if it does, it is merged into the PR. | Anyone can trigger such a command on a Pull Request. |

- **Specify the number of lgtm labels**

The [configuration item](#configuration) provides a setting for the number of PR `lgtm` tags. When this configuration item is greater than 1, the contents of the `lgtm` tags consist of `lgtm-user`. ps:the `user` is the login id of the user using /lgtm command in the gitee platform.

- **Automatic cleaning of lgtm labels**

We will remove the existing `lgtm` labels when a new commit is submitted for the PR.

- **Merge PR**

1. Auto-merge: automatically detects the conditions for PR merge, and automatically merges in when the merge conditions are met.
2. Manual check-trigger merge-in: Use the **/check-pr** command to trigger the robot to check the current merge-in condition of the PR, and give the corresponding prompt when the merge-in condition is not met, otherwise the PR is merged in.

### Configuration<a id="configuration"/>

example:

```yaml
#no additional description of the configuration items are not required
config_items:
- repos: #list of warehouses to be managed by robot (required)
- owner/repo
- owner1
excluded_repos: #robot manages the list of repositories to be excluded
- owner1/repo1
lgtm_counts_required: 1 #lgtm label threshold
labels_for_merge: #labels required for PR merging
- ci-pipline-success
missing_labels_for_merge: #labels that cannot exist when PR is merged in
- ci-pipline-failed
# specify it should check the devepler's permission besed on the owners file in sig directory when the developer comment /lgtm or /approve command.
check_permission_based_on_sig_owners: true
# is the directory of Sig. It must be set when CheckPermissionBasedOnSigOwners is true.
sigs_dir: sig
# merge_method is the method to merge PR.The default method of merge. valid options are squash and merge.
merge_method: merge
unable_checking_reviewer_for_pr: true #Whether to check the reviewer
```
57 changes: 57 additions & 0 deletions README_zh_CN.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
# robot-gitee-openeuler-review

### 概述

该机器人为社区提供了Code Review 相关功能。提供了`lgtm``approved`标签、PR合入指令以及跟踪PR源代码改变自动清除过时的`lgtm``approved`标签,并在满足PR合入的条件自动合入PR。

### 功能

- **命令**

提供如下指令:

| 命令 | 示例 | 描述 | 谁能使用 |
| ----------------- | ---------------------------- | ------------------------------------------------------------ | ------------------------------------------------------------ |
| /lgtm [cancel] | /lgtm<br/>/lgtm cancel | 为一个Pull Request添加或者删除`lgtm`标签,这个标签将用于Pull Request合入判断。 | 这个仓库的协作者。Pull Request作者能使用`/lgtm cancel`命令,但是不能使用`/lgtm`命令。 |
| /approve [cancel] | /approve<br/>/approve cancel | 为一个Pull Request添加或者删除`approved`标签,这个标签将用于Pull Request合入判断。 | 这个仓库的协作者。 |
| /check-pr | /check-pr | 检测当前PR的标签是否满足条件,如果满足即合入PR。 | 任何人都能在一个Pull Request上触发这种命令。 |

- **指定lgtm标签个数**

[配置项](#configuration)提供了PR `lgtm`标签的个数设置,当该配置项大于1时,`lgtm`标签的内容以`lgtm-user`组成。ps: user为使用/lgtm命令的用户在码云平台的login id。

- **自动清理lgtm标签**

当PR有新的commit提交时我们将会移除已存在的`lgtm`标签。

- **PR合入**

1. 自动合入:自动检测PR合入的条件,满足合入条件即自动合入。
2. 手动检查触发合入:使用**/check-pr**指令可以触发机器人检查PR当前的合入条件,不满足合入条件时给与相应提示,否则PR合入。


### 配置<a id="configuration"/>

例子:

```yaml
#无额外说明配置项为非必须项
config_items:
- repos: #robot需管理的仓库列表(必需)
- owner/repo
- owner1
excluded_repos: #robot 管理列表中需排除的仓库
- owner1/repo1
lgtm_counts_required: 1 #lgtm标签阈值
labels_for_merge: #PR合入需要的标签
- ci-pipline-success
missing_labels_for_merge: #PR合入时不能存在的标签
- ci-pipline-failed
# 指定在开发者评论/lgtm 或/approve 命令时根据sig 目录下的owners 文件检查开发者的权限。
check_permission_based_on_sig_owners: true
# Sig 的目录。当 CheckPermissionBasedOnSigOwners 为真时必须设置它。
sigs_dir: sig
merge_method: merge #PR合入时使用的方式,可选项:merge、squash.默认merge.
unable_checking_reviewer_for_pr: true #是否检查审核人
```
126 changes: 126 additions & 0 deletions actions.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,126 @@
package main

import (
"fmt"
"regexp"
"strings"

"github.com/opensourceways/robot-framework-lib/client"
"k8s.io/apimachinery/pkg/util/sets"
)

var regCheckPr = regexp.MustCompile(`(?mi)^/check-pr\s*$`)

func (bot *robot) clearLabel(evt *client.GenericEvent, org, repo, number string) error {

labels := bot.getPRLabelSet(org, repo, number)
v := getLGTMLabelsOnPR(labels)

if labels.Has(approvedLabel) {
v = append(v, approvedLabel)
}

if len(v) > 0 {

if ok := bot.cli.RemovePRLabels(org, repo, number, v); !ok {
return nil
}

var noteComment string
if bot.cli.CheckIfPRSourceCodeUpdateEvent(evt) {
noteComment = commentClearLabelCaseByReopenPR
}

if bot.cli.CheckIfPRSourceCodeUpdateEvent(evt) {
noteComment = commentClearLabelCaseByPRUpdate
}

bot.cli.CreatePRComment(
org, repo, number,
fmt.Sprintf(noteComment, strings.Join(v, ", ")),
)
}

return nil
}
func (bot *robot) checkCommenterPermission(org, repo, author, commenter string, fn func()) (pass bool) {
if author == commenter {
return true
}
pass, success := bot.cli.CheckPermission(org, repo, commenter)
bot.log.Infof("request success: %t, the %s has permission to the repo[%s/%s]: %t", success, commenter, org, repo, pass)

if success && !pass {
fn()
}
return pass && success
}

func (bot *robot) getPRLabelSet(org, repo, number string) sets.Set[string] {
res := sets.New[string]()

labels, ok := bot.cli.GetPullRequestLabels(org, repo, number)
if !ok {
return res
}

for _, v := range labels {
res.Insert(v)
}

if res.Has("") {
res.Delete("")
}

return res
}

func (bot *robot) genMergeMethod(org, repo, number string) string {
mergeMethod := "merge"

prLabels := bot.getPRLabelSet(org, repo, number)

for p := range prLabels {
if strings.HasPrefix(p, "merge/") {
if strings.Split(p, "/")[1] == "squash" {
return "squash"
}

return strings.Split(p, "/")[1]
}
}

return mergeMethod
}

func (bot *robot) handleCheckPR(configmap *repoConfig, comment, commenter, org, repo, number string) error {
if !regCheckPr.MatchString(comment) {
return nil
}
if err := bot.handleMerge(configmap, org, repo, number); err != nil {
claYesLabel := ""
for _, labelForMerge := range configmap.LabelsForMerge {
if strings.Contains(labelForMerge, "-cla/yes") {
claYesLabel = labelForMerge
break
}
}
comment := fmt.Sprintf("@%s, this pr is not mergeable and the reasons are below:\n%s\n\n***lgtm***: "+
"A label mandatory for merging a pull request. The repository collaborators can comment '/lgtm' to "+
"add the label. The creator of a pull request can comment '/lgtm cancel' to remove the label, but "+
"cannot run the '/lgtm' command to add the label.\n***approved***: A label mandatory for merging a "+
"pull request. The repository collaborators can comment '/approve' to add the label and comment "+
"'/approve cancel' to remove the label.\n***%s***: A label mandatory for merging a pull request. "+
"The author of each commit of a pull request must sign the Contributor License Agreement (CLA). "+
"Otherwise, the pull request will fail to be merged. After signing the CLA, the author can comment "+
"'/check-cla' to check the CLA status again.\n***wait_confirm***: A label for confirming pull request "+
"merging. A pull request with this label cannot be automatically merged. This label is added because "+
"members (including maintainers, committers, and repository administrators) are to be added to "+
"sig-info.yaml in the pull request. To remove the label, all members to be added must comment "+
"'/lgtm' in the pull request.",
commenter, err.Error(), claYesLabel)
bot.cli.CreatePRComment(org, repo, number, comment)
return err
}
return nil
}
19 changes: 19 additions & 0 deletions go.mod
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
module github.com/opensourceways/robot-universal-review

go 1.21

require (
github.com/opensourceways/robot-framework-lib v0.2.1
github.com/opensourceways/server-common-lib v1.0.0
github.com/sirupsen/logrus v1.9.3
k8s.io/apimachinery v0.29.4
)

require (
github.com/go-resty/resty/v2 v2.11.0 // indirect
github.com/opensourceways/go-gitcode v0.2.0 // indirect
golang.org/x/net v0.23.0 // indirect
golang.org/x/sys v0.18.0 // indirect
gopkg.in/yaml.v2 v2.4.0 // indirect
sigs.k8s.io/yaml v1.3.0 // indirect
)
78 changes: 78 additions & 0 deletions go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,78 @@
github.com/agiledragon/gomonkey/v2 v2.12.0 h1:ek0dYu9K1rSV+TgkW5LvNNPRWyDZVIxGMCFI6Pz9o38=
github.com/agiledragon/gomonkey/v2 v2.12.0/go.mod h1:ap1AmDzcVOAz1YpeJ3TCzIgstoaWLA6jbbgxfB4w2iY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/go-resty/resty/v2 v2.11.0 h1:i7jMfNOJYMp69lq7qozJP+bjgzfAzeOhuGlyDrqxT/8=
github.com/go-resty/resty/v2 v2.11.0/go.mod h1:iiP/OpA0CkcL3IGt1O0+/SIItFUbkkyw5BGXiVdTu+A=
github.com/opensourceways/go-gitcode v0.2.0 h1:+JJTHp4fnuQj5zfL3Y5nIxixTMbB/eGe+2/o/Xdz1K8=
github.com/opensourceways/go-gitcode v0.2.0/go.mod h1:2BDl00PrpmMeVmD4NxO99DZiRcqx5jszNlGwPs1i9TQ=
github.com/opensourceways/robot-framework-lib v0.2.1 h1:2mtwMwqzzSYZb7kEEUEiMqNYIp89vW3ude+wB5Rdoo0=
github.com/opensourceways/robot-framework-lib v0.2.1/go.mod h1:LT6nNkE9Qd+3T/ILg3LbX9j/ip9YF1Jocia4czEJZ+Y=
github.com/opensourceways/server-common-lib v1.0.0 h1:uZikXrFsibI3fmSqVVWPYLBFNOM9IO8Hsux5b5neJLI=
github.com/opensourceways/server-common-lib v1.0.0/go.mod h1:AVDRCS30/uJXO7WONPa1U+AQePXr488+7qZFC7EjJzE=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4=
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/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs=
golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg=
golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE=
golang.org/x/net v0.23.0 h1:7EYJ93RZ9vYSZAIb2x3lnuvqO5zneoD6IvWjuhfxjTs=
golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/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/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
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.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.18.0 h1:DBdB3niSjOA/O0blCZBqDefyWNYveAYMNF1Wum0DYQ4=
golang.org/x/sys v0.18.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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo=
golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8=
golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE=
golang.org/x/time v0.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4=
golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
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/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY=
gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ=
gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
k8s.io/apimachinery v0.29.4 h1:RaFdJiDmuKs/8cm1M6Dh1Kvyh59YQFDcFuFTSmXes6Q=
k8s.io/apimachinery v0.29.4/go.mod h1:i3FJVwhvSp/6n8Fl4K97PJEP8C+MM+aoDq4+ZJBf70Y=
sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo=
sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8=

0 comments on commit 07bb6f7

Please sign in to comment.