diff --git a/.github/workflows/update-kindnetd-version.yml b/.github/workflows/update-kindnetd-version.yml new file mode 100644 index 000000000000..24e9e3033e85 --- /dev/null +++ b/.github/workflows/update-kindnetd-version.yml @@ -0,0 +1,49 @@ +name: "update-kindnetd-version" +on: + workflow_dispatch: + schedule: + # every Monday at around 3 am pacific/10 am UTC + - cron: "0 10 * * 1" +env: + GOPROXY: https://proxy.golang.org + GO_VERSION: '1.21.1' +permissions: + contents: read +jobs: + bump-kindnetd-version: + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@3df4ab11eba7bda6032a0b82a6bb43b11571feac + - uses: actions/setup-go@93397bea11091df50f3d7e59dc26a7711a8bcfbe + with: + go-version: ${{env.GO_VERSION}} + cache-dependency-path: ./go.sum + - name: Bump kindnetd version + id: bumpKindnetd + run: | + echo "OLD_VERSION=$(DEP=kindnetd make get-dependency-version)" >> $GITHUB_OUTPUT + make update-kindnetd-version + echo "NEW_VERSION=$(DEP=kindnetd make get-dependency-version)" >> $GITHUB_OUTPUT + c=$(git status --porcelain) + echo "changes<> $GITHUB_OUTPUT + echo "$c" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + - name: Create PR + id: createPR + if: ${{ steps.bumpKindnetd.outputs.changes != '' }} + uses: peter-evans/create-pull-request@153407881ec5c347639a548ade7d8ad1d6740e38 + with: + token: ${{ secrets.MINIKUBE_BOT_PAT }} + commit-message: 'CNI: Update kindnetd from ${{ steps.bumpKindnetd.outputs.OLD_VERSION }} to ${{ steps.bumpKindnetd.outputs.NEW_VERSION }}' + committer: minikube-bot + author: minikube-bot + branch: auto_bump_kindnetd_version + push-to-fork: minikube-bot/minikube + base: master + delete-branch: true + title: 'CNI: Update kindnetd from ${{ steps.bumpKindnetd.outputs.OLD_VERSION }} to ${{ steps.bumpKindnetd.outputs.NEW_VERSION }}' + labels: ok-to-test + body: | + A new version of the kind/kindnetd image was released + + This PR was auto-generated by `make update-kindnetd-version` using [update-kindnetd-version.yml](https://github.com/kubernetes/minikube/tree/master/.github/workflows/update-kindnetd-version.yml) CI Workflow. diff --git a/Makefile b/Makefile index a126daefe4b2..af548c2cfedf 100644 --- a/Makefile +++ b/Makefile @@ -1165,6 +1165,11 @@ update-crictl-version: (cd hack/update/crictl_version && \ go run update_crictl_version.go) +.PHONY: update-kindnetd-version +update-kindnetd-version: + (cd hack/update/kindnetd_version && \ + go run update_kindnetd_version.go) + .PHONY: get-dependency-verison get-dependency-version: @(cd hack/update/get_version && \ diff --git a/hack/update/get_version/get_version.go b/hack/update/get_version/get_version.go index 9757ace00d50..d09a62dc40e3 100644 --- a/hack/update/get_version/get_version.go +++ b/hack/update/get_version/get_version.go @@ -50,6 +50,7 @@ var dependencies = map[string]dependency{ "hugo": {"netlify.toml", `HUGO_VERSION = "(.*)"`}, "ingress": {addonsFile, `ingress-nginx/controller:(.*)@`}, "inspektor-gadget": {addonsFile, `inspektor-gadget/inspektor-gadget:(.*)@`}, + "kindnetd": {"pkg/minikube/bootstrapper/images/images.go", `kindnetd:(.*)"`}, "metrics-server": {addonsFile, `metrics-server/metrics-server:(.*)@`}, "nerdctl": {"deploy/kicbase/Dockerfile", `NERDCTL_VERSION="(.*)"`}, "runc": {"deploy/iso/minikube-iso/package/runc-master/runc-master.mk", `RUNC_MASTER_VERSION = (.*)`}, diff --git a/hack/update/kindnetd_version/update_kindnetd_version.go b/hack/update/kindnetd_version/update_kindnetd_version.go new file mode 100644 index 000000000000..c84303564e7d --- /dev/null +++ b/hack/update/kindnetd_version/update_kindnetd_version.go @@ -0,0 +1,87 @@ +/* +Copyright 2023 The Kubernetes Authors All rights reserved. + +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 ( + "encoding/json" + "fmt" + "io" + "net/http" + + "k8s.io/klog/v2" + + "k8s.io/minikube/hack/update" +) + +const ( + dockerHubKindnetdTags = "https://hub.docker.com/v2/repositories/kindest/kindnetd/tags" +) + +var ( + schema = map[string]update.Item{ + "pkg/minikube/bootstrapper/images/images.go": { + Replace: map[string]string{ + `kindnetd:.*"`: `kindnetd:{{.LatestVersion}}"`, + }, + }, + } +) + +type Data struct { + LatestVersion string +} + +type Response struct { + Results []struct { + Name string `json:"name"` + } +} + +func getLatestVersion() (string, error) { + resp, err := http.Get(dockerHubKindnetdTags) + if err != nil { + return "", fmt.Errorf("failed to get tags: %v", err) + } + defer resp.Body.Close() + + body, err := io.ReadAll(resp.Body) + if err != nil { + return "", fmt.Errorf("failed to read HTTP response: %v", err) + } + + var content Response + err = json.Unmarshal(body, &content) + if err != nil { + return "", fmt.Errorf("failed to unmarshal response: %v", err) + } + + if len(content.Results) == 0 { + return "", fmt.Errorf("tag list is empty") + } + + return content.Results[0].Name, nil +} + +func main() { + latest, err := getLatestVersion() + if err != nil { + klog.Fatalf("failed to get latest version: %v", err) + } + data := Data{LatestVersion: latest} + + update.Apply(schema, data) +} diff --git a/hack/update/ubuntu_version/update_ubuntu_version.go b/hack/update/ubuntu_version/update_ubuntu_version.go index cedcd4e332d7..4d9bd3d5348d 100644 --- a/hack/update/ubuntu_version/update_ubuntu_version.go +++ b/hack/update/ubuntu_version/update_ubuntu_version.go @@ -14,19 +14,6 @@ See the License for the specific language governing permissions and limitations under the License. */ -/* -Copyright 2022 The Kubernetes Authors All rights reserved. -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 (